ZGlmZiAtLWdpdCBhLy5oZ3RhZ3MgYi8uaGd0YWdzCmluZGV4IDJjNGE2YzQuLjUxY2EwZDMgMTAwNjQ0Ci0tLSBhLy5oZ3RhZ3MKKysrIGIvLmhndGFncwpAQCAtMTQ2LDYgKzE0Niw3IEBACiBiNGNiZWNiYzA3ODFlODlhMzA5ZDAzYjYwYTFmNzVmODQ5OTI1MGU2IHYzLjQuMwogMDRmM2Y3MjU4OTZjNjk2MTIxMmMzYTEyZThhYzI1YmU2OTU4ZjRmYSB2My40LjRyYzEKIDczN2VmY2FkZjVhNjc4YjE4NGUwZmE0MzFhYWUxMTI3NmJmMDY2NDggdjMuNC40CiszNjMxYmI0YTI0OTAyOTJlYmY4MWQzZTk0N2FlMzZkYTE0NWRhNTY0IHYzLjQuNXJjMQogNWQ0YjZhNTdkNWZkNzU2NGJmNzNmM2RiMGU0NmZlNWVlYjAwYmNkOCB2My41LjBhMQogMDMzN2JkN2ViY2I2NTU5ZDY5Njc5YmM3MDI1MDU5YWQxY2U0ZjQzMiB2My41LjBhMgogODI2NTZlMjhiNWU1YzRhZTQ4ZDhkZDhiNWYwZDc5Njg5MDhhODJiNiB2My41LjBhMwpkaWZmIC0tZ2l0IGEvRG9jL01ha2VmaWxlIGIvRG9jL01ha2VmaWxlCmluZGV4IGE0MmU5OGIuLjg3ODY4NWQgMTAwNjQ0Ci0tLSBhL0RvYy9NYWtlZmlsZQorKysgYi9Eb2MvTWFrZWZpbGUKQEAgLTE2Niw3ICsxNjYsNyBAQAogCS1tYWtlIHN1c3BpY2lvdXMKIAogIyBmb3IgcXVpY2sgcmVidWlsZHMgKEhUTUwgb25seSkKLWF1dG9idWlsZC1odG1sOgorYXV0b2J1aWxkLWRldi1odG1sOgogCW1ha2UgaHRtbCBTUEhJTlhPUFRTPSctQSBkYWlseT0xIC1BIHZlcnNpb25zd2l0Y2hlcj0xJwogCiAjIGZvciBzdGFibGUgcmVsZWFzZXM6IG9ubHkgYnVpbGQgaWYgbm90IGluIHByZS1yZWxlYXNlIHN0YWdlIChhbHBoYSwgYmV0YSkKQEAgLTE3NywzICsxNzcsMTAgQEAKIAkJZXhpdCAxOzsgXAogCWVzYWMKIAlAbWFrZSBhdXRvYnVpbGQtZGV2CisKK2F1dG9idWlsZC1zdGFibGUtaHRtbDoKKwlAY2FzZSAkKERJU1RWRVJTSU9OKSBpbiAqW2FiXSopIFwKKwkJZWNobyAiTm90IGJ1aWxkaW5nOyAkKERJU1RWRVJTSU9OKSBpcyBub3QgYSByZWxlYXNlIHZlcnNpb24uIjsgXAorCQlleGl0IDE7OyBcCisJZXNhYworCUBtYWtlIGF1dG9idWlsZC1kZXYtaHRtbApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL21vZHVsZS5yc3QgYi9Eb2MvYy1hcGkvbW9kdWxlLnJzdAppbmRleCA5MDRiNGIxLi4zNGY4NDQzIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbW9kdWxlLnJzdAorKysgYi9Eb2MvYy1hcGkvbW9kdWxlLnJzdApAQCAtNTksMTAgKzU5LDEwIEBACiAgICAuLiBpbmRleDo6IHNpbmdsZTogX19kaWN0X18gKG1vZHVsZSBhdHRyaWJ1dGUpCiAKICAgIFJldHVybiB0aGUgZGljdGlvbmFyeSBvYmplY3QgdGhhdCBpbXBsZW1lbnRzICptb2R1bGUqJ3MgbmFtZXNwYWNlOyB0aGlzIG9iamVjdAotICAgaXMgdGhlIHNhbWUgYXMgdGhlIDphdHRyOmBfX2RpY3RfX2AgYXR0cmlidXRlIG9mIHRoZSBtb2R1bGUgb2JqZWN0LiAgVGhpcworICAgaXMgdGhlIHNhbWUgYXMgdGhlIDphdHRyOmB+b2JqZWN0Ll9fZGljdF9fYCBhdHRyaWJ1dGUgb2YgdGhlIG1vZHVsZSBvYmplY3QuICBUaGlzCiAgICBmdW5jdGlvbiBuZXZlciBmYWlscy4gIEl0IGlzIHJlY29tbWVuZGVkIGV4dGVuc2lvbnMgdXNlIG90aGVyCiAgICA6YzpmdW5jOmBQeU1vZHVsZV9cKmAgYW5kIDpjOmZ1bmM6YFB5T2JqZWN0X1wqYCBmdW5jdGlvbnMgcmF0aGVyIHRoYW4gZGlyZWN0bHkKLSAgIG1hbmlwdWxhdGUgYSBtb2R1bGUncyA6YXR0cjpgX19kaWN0X19gLgorICAgbWFuaXB1bGF0ZSBhIG1vZHVsZSdzIDphdHRyOmB+b2JqZWN0Ll9fZGljdF9fYC4KIAogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TW9kdWxlX0dldE5hbWVPYmplY3QoUHlPYmplY3QgKm1vZHVsZSkKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9zdHJ1Y3R1cmVzLnJzdCBiL0RvYy9jLWFwaS9zdHJ1Y3R1cmVzLnJzdAppbmRleCBlOWU4YWRkLi5jYzg0MzE0IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvc3RydWN0dXJlcy5yc3QKKysrIGIvRG9jL2MtYXBpL3N0cnVjdHVyZXMucnN0CkBAIC0xNTAsOSArMTUwLDggQEAKIFRoZSA6YXR0cjpgbWxfZmxhZ3NgIGZpZWxkIGlzIGEgYml0ZmllbGQgd2hpY2ggY2FuIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBmbGFncy4KIFRoZSBpbmRpdmlkdWFsIGZsYWdzIGluZGljYXRlIGVpdGhlciBhIGNhbGxpbmcgY29udmVudGlvbiBvciBhIGJpbmRpbmcKIGNvbnZlbnRpb24uICBPZiB0aGUgY2FsbGluZyBjb252ZW50aW9uIGZsYWdzLCBvbmx5IDpjb25zdDpgTUVUSF9WQVJBUkdTYCBhbmQKLTpjb25zdDpgTUVUSF9LRVlXT1JEU2AgY2FuIGJlIGNvbWJpbmVkIChidXQgbm90ZSB0aGF0IDpjb25zdDpgTUVUSF9LRVlXT1JEU2AKLWFsb25lIGlzIGVxdWl2YWxlbnQgdG8gYGBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTYGApLiBBbnkgb2YgdGhlIGNhbGxpbmcKLWNvbnZlbnRpb24gZmxhZ3MgY2FuIGJlIGNvbWJpbmVkIHdpdGggYSBiaW5kaW5nIGZsYWcuCis6Y29uc3Q6YE1FVEhfS0VZV09SRFNgIGNhbiBiZSBjb21iaW5lZC4gQW55IG9mIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gZmxhZ3MKK2NhbiBiZSBjb21iaW5lZCB3aXRoIGEgYmluZGluZyBmbGFnLgogCiAKIC4uIGRhdGE6OiBNRVRIX1ZBUkFSR1MKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS90eXBlb2JqLnJzdCBiL0RvYy9jLWFwaS90eXBlb2JqLnJzdAppbmRleCBhYzU4OWI4Li4yYzQ0OGEwIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvdHlwZW9iai5yc3QKKysrIGIvRG9jL2MtYXBpL3R5cGVvYmoucnN0CkBAIC0xMTEsMTAgKzExMSwxMCBAQAogICAgRm9yIHN0YXRpY2FsbHkgYWxsb2NhdGVkIHR5cGUgb2JqZWN0cywgdGhlIHRwX25hbWUgZmllbGQgc2hvdWxkIGNvbnRhaW4gYSBkb3QuCiAgICBFdmVyeXRoaW5nIGJlZm9yZSB0aGUgbGFzdCBkb3QgaXMgbWFkZSBhY2Nlc3NpYmxlIGFzIHRoZSA6YXR0cjpgX19tb2R1bGVfX2AKICAgIGF0dHJpYnV0ZSwgYW5kIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGxhc3QgZG90IGlzIG1hZGUgYWNjZXNzaWJsZSBhcyB0aGUKLSAgIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlLgorICAgOmF0dHI6YH5kZWZpbml0aW9uLl9fbmFtZV9fYCBhdHRyaWJ1dGUuCiAKICAgIElmIG5vIGRvdCBpcyBwcmVzZW50LCB0aGUgZW50aXJlIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9uYW1lYCBmaWVsZCBpcyBtYWRlIGFjY2Vzc2libGUgYXMgdGhlCi0gICA6YXR0cjpgX19uYW1lX19gIGF0dHJpYnV0ZSwgYW5kIHRoZSA6YXR0cjpgX19tb2R1bGVfX2AgYXR0cmlidXRlIGlzIHVuZGVmaW5lZAorICAgOmF0dHI6YH5kZWZpbml0aW9uLl9fbmFtZV9fYCBhdHRyaWJ1dGUsIGFuZCB0aGUgOmF0dHI6YF9fbW9kdWxlX19gIGF0dHJpYnV0ZSBpcyB1bmRlZmluZWQKICAgICh1bmxlc3MgZXhwbGljaXRseSBzZXQgaW4gdGhlIGRpY3Rpb25hcnksIGFzIGV4cGxhaW5lZCBhYm92ZSkuICBUaGlzIG1lYW5zIHlvdXIKICAgIHR5cGUgd2lsbCBiZSBpbXBvc3NpYmxlIHRvIHBpY2tsZS4KIApkaWZmIC0tZ2l0IGEvRG9jL2ZhcS9nZW5lcmFsLnJzdCBiL0RvYy9mYXEvZ2VuZXJhbC5yc3QKaW5kZXggNmI3NzNkZC4uM2Y5NjcwMCAxMDA2NDQKLS0tIGEvRG9jL2ZhcS9nZW5lcmFsLnJzdAorKysgYi9Eb2MvZmFxL2dlbmVyYWwucnN0CkBAIC00MzgsNyArNDM4LDcgQEAKICAgID4+PiBMCiAgICBbMV0KIAotV2l0aCB0aGUgaW50ZXJwcmV0ZXIsIGRvY3VtZW50YXRpb24gaXMgbmV2ZXIgZmFyIGZyb20gdGhlIHN0dWRlbnQgYXMgaGUncworV2l0aCB0aGUgaW50ZXJwcmV0ZXIsIGRvY3VtZW50YXRpb24gaXMgbmV2ZXIgZmFyIGZyb20gdGhlIHN0dWRlbnQgYXMgdGhleSBhcmUKIHByb2dyYW1taW5nLgogCiBUaGVyZSBhcmUgYWxzbyBnb29kIElERXMgZm9yIFB5dGhvbi4gIElETEUgaXMgYSBjcm9zcy1wbGF0Zm9ybSBJREUgZm9yIFB5dGhvbgpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL3JlZ2V4LnJzdCBiL0RvYy9ob3d0by9yZWdleC5yc3QKaW5kZXggZGUzZjQ2MS4uMzcxZWY1OSAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL3JlZ2V4LnJzdAorKysgYi9Eb2MvaG93dG8vcmVnZXgucnN0CkBAIC0zNzQsOSArMzc0LDcgQEAKIDpzb3VyY2U6YFRvb2xzL2RlbW8vcmVkZW1vLnB5YCwgYSBkZW1vbnN0cmF0aW9uIHByb2dyYW0gaW5jbHVkZWQgd2l0aCB0aGUKIFB5dGhvbiBkaXN0cmlidXRpb24uICBJdCBhbGxvd3MgeW91IHRvIGVudGVyIFJFcyBhbmQgc3RyaW5ncywgYW5kIGRpc3BsYXlzCiB3aGV0aGVyIHRoZSBSRSBtYXRjaGVzIG9yIGZhaWxzLiA6ZmlsZTpgcmVkZW1vLnB5YCBjYW4gYmUgcXVpdGUgdXNlZnVsIHdoZW4KLXRyeWluZyB0byBkZWJ1ZyBhIGNvbXBsaWNhdGVkIFJFLiAgUGhpbCBTY2h3YXJ0eidzIGBLb2RvcwotPGh0dHA6Ly9rb2Rvcy5zb3VyY2Vmb3JnZS5uZXQvPmBfIGlzIGFsc28gYW4gaW50ZXJhY3RpdmUgdG9vbCBmb3IgZGV2ZWxvcGluZyBhbmQKLXRlc3RpbmcgUkUgcGF0dGVybnMuCit0cnlpbmcgdG8gZGVidWcgYSBjb21wbGljYXRlZCBSRS4KIAogVGhpcyBIT1dUTyB1c2VzIHRoZSBzdGFuZGFyZCBQeXRob24gaW50ZXJwcmV0ZXIgZm9yIGl0cyBleGFtcGxlcy4gRmlyc3QsIHJ1biB0aGUKIFB5dGhvbiBpbnRlcnByZXRlciwgaW1wb3J0IHRoZSA6bW9kOmByZWAgbW9kdWxlLCBhbmQgY29tcGlsZSBhIFJFOjoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2J1aWx0aW5zLnJzdCBiL0RvYy9saWJyYXJ5L2J1aWx0aW5zLnJzdAppbmRleCA0YjU4OWE1Li44ZmIxZmVmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9idWlsdGlucy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYnVpbHRpbnMucnN0CkBAIC0zNyw2ICszNyw2IEBACiAKIEFzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgbW9zdCBtb2R1bGVzIGhhdmUgdGhlIG5hbWUgYGBfX2J1aWx0aW5zX19gYCBtYWRlCiBhdmFpbGFibGUgYXMgcGFydCBvZiB0aGVpciBnbG9iYWxzLiAgVGhlIHZhbHVlIG9mIGBgX19idWlsdGluc19fYGAgaXMgbm9ybWFsbHkKLWVpdGhlciB0aGlzIG1vZHVsZSBvciB0aGUgdmFsdWUgb2YgdGhpcyBtb2R1bGUncyA6YXR0cjpgX19kaWN0X19gIGF0dHJpYnV0ZS4KK2VpdGhlciB0aGlzIG1vZHVsZSBvciB0aGUgdmFsdWUgb2YgdGhpcyBtb2R1bGUncyA6YXR0cjpgfm9iamVjdC5fX2RpY3RfX2AgYXR0cmlidXRlLgogU2luY2UgdGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwsIGl0IG1heSBub3QgYmUgdXNlZCBieSBhbHRlcm5hdGUKIGltcGxlbWVudGF0aW9ucyBvZiBQeXRob24uCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jdXJzZXMuYXNjaWkucnN0IGIvRG9jL2xpYnJhcnkvY3Vyc2VzLmFzY2lpLnJzdAppbmRleCBmMzY2MWQ5Li5kYjNjODI3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jdXJzZXMuYXNjaWkucnN0CisrKyBiL0RvYy9saWJyYXJ5L2N1cnNlcy5hc2NpaS5yc3QKQEAgLTExNSwxMiArMTE1LDEyIEBACiAKIC4uIGZ1bmN0aW9uOjogaXNibGFuayhjKQogCi0gICBDaGVja3MgZm9yIGFuIEFTQ0lJIHdoaXRlc3BhY2UgY2hhcmFjdGVyLgorICAgQ2hlY2tzIGZvciBhbiBBU0NJSSB3aGl0ZXNwYWNlIGNoYXJhY3Rlcjsgc3BhY2Ugb3IgaG9yaXpvbnRhbCB0YWIuCiAKIAogLi4gZnVuY3Rpb246OiBpc2NudHJsKGMpCiAKLSAgIENoZWNrcyBmb3IgYW4gQVNDSUkgY29udHJvbCBjaGFyYWN0ZXIgKGluIHRoZSByYW5nZSAweDAwIHRvIDB4MWYpLgorICAgQ2hlY2tzIGZvciBhbiBBU0NJSSBjb250cm9sIGNoYXJhY3RlciAoaW4gdGhlIHJhbmdlIDB4MDAgdG8gMHgxZiBvciAweDdmKS4KIAogCiAuLiBmdW5jdGlvbjo6IGlzZGlnaXQoYykKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RibS5yc3QgYi9Eb2MvbGlicmFyeS9kYm0ucnN0CmluZGV4IDZmNjQxOTYuLjJhMWRiOTEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RibS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGJtLnJzdApAQCAtMTI4LDYgKzEyOCw5IEBACiAgICA6cGxhdGZvcm06IFVuaXgKICAgIDpzeW5vcHNpczogR05VJ3MgcmVpbnRlcnByZXRhdGlvbiBvZiBkYm0uCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2RibS9nbnUucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIGlzIHF1aXRlIHNpbWlsYXIgdG8gdGhlIDptb2Q6YGRibWAgbW9kdWxlLCBidXQgdXNlcyB0aGUgR05VIGxpYnJhcnkKIGBgZ2RibWBgIGluc3RlYWQgdG8gcHJvdmlkZSBzb21lIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eS4gIFBsZWFzZSBub3RlIHRoYXQgdGhlCkBAIC0yMzcsNiArMjQwLDkgQEAKICAgIDpwbGF0Zm9ybTogVW5peAogICAgOnN5bm9wc2lzOiBUaGUgc3RhbmRhcmQgImRhdGFiYXNlIiBpbnRlcmZhY2UsIGJhc2VkIG9uIG5kYm0uCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2RibS9uZGJtLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgZGJtLm5kYm1gIG1vZHVsZSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhlIFVuaXggIihuKWRibSIgbGlicmFyeS4KIERibSBvYmplY3RzIGJlaGF2ZSBsaWtlIG1hcHBpbmdzIChkaWN0aW9uYXJpZXMpLCBleGNlcHQgdGhhdCBrZXlzIGFuZCB2YWx1ZXMgYXJlCkBAIC0yOTksNiArMzA1LDggQEAKIC4uIG1vZHVsZTo6IGRibS5kdW1iCiAgICA6c3lub3BzaXM6IFBvcnRhYmxlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzaW1wbGUgREJNIGludGVyZmFjZS4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvZGJtL2R1bWIucHlgCisKIC4uIGluZGV4Ojogc2luZ2xlOiBkYXRhYmFzZXMKIAogLi4gbm90ZTo6CkBAIC0zMDgsNiArMzE2LDggQEAKICAgIG1vZHVsZSBpcyBub3Qgd3JpdHRlbiBmb3Igc3BlZWQgYW5kIGlzIG5vdCBuZWFybHkgYXMgaGVhdmlseSB1c2VkIGFzIHRoZSBvdGhlcgogICAgZGF0YWJhc2UgbW9kdWxlcy4KIAorLS0tLS0tLS0tLS0tLS0KKwogVGhlIDptb2Q6YGRibS5kdW1iYCBtb2R1bGUgcHJvdmlkZXMgYSBwZXJzaXN0ZW50IGRpY3Rpb25hcnktbGlrZSBpbnRlcmZhY2Ugd2hpY2gKIGlzIHdyaXR0ZW4gZW50aXJlbHkgaW4gUHl0aG9uLiAgVW5saWtlIG90aGVyIG1vZHVsZXMgc3VjaCBhcyA6bW9kOmBkYm0uZ251YCBubwogZXh0ZXJuYWwgbGlicmFyeSBpcyByZXF1aXJlZC4gIEFzIHdpdGggb3RoZXIgcGVyc2lzdGVudCBtYXBwaW5ncywgdGhlIGtleXMgYW5kCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbnVtLnJzdCBiL0RvYy9saWJyYXJ5L2VudW0ucnN0CmluZGV4IDYwNDY3YjQuLmEzZDVhZmMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VudW0ucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VudW0ucnN0CkBAIC00MzEsNyArNDMxLDcgQEAKICAgICB0aGUgc291cmNlLCBwaWNrbGluZyB3aWxsIGJlIGRpc2FibGVkLgogCiBUaGUgbmV3IHBpY2tsZSBwcm90b2NvbCA0IGFsc28sIGluIHNvbWUgY2lyY3Vtc3RhbmNlcywgcmVsaWVzIG9uCi06YXR0cjpgX19xdWFsbmFtZV9fYCBiZWluZyBzZXQgdG8gdGhlIGxvY2F0aW9uIHdoZXJlIHBpY2tsZSB3aWxsIGJlIGFibGUKKzphdHRyOmB+ZGVmaW5pdGlvbi5fX3F1YWxuYW1lX19gIGJlaW5nIHNldCB0byB0aGUgbG9jYXRpb24gd2hlcmUgcGlja2xlIHdpbGwgYmUgYWJsZQogdG8gZmluZCB0aGUgY2xhc3MuICBGb3IgZXhhbXBsZSwgaWYgdGhlIGNsYXNzIHdhcyBtYWRlIGF2YWlsYWJsZSBpbiBjbGFzcwogU29tZURhdGEgaW4gdGhlIGdsb2JhbCBzY29wZTo6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Z1bmN0aW9ucy5yc3QgYi9Eb2MvbGlicmFyeS9mdW5jdGlvbnMucnN0CmluZGV4IGMzNTYzZjMuLmVmYTViZDMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Z1bmN0aW9ucy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZnVuY3Rpb25zLnJzdApAQCAtMzA0LDcgKzMwNCw3IEBACiAgICA6ZnVuYzpgZGlyYCByZXBvcnRzIHRoZWlyIGF0dHJpYnV0ZXMuCiAKICAgIElmIHRoZSBvYmplY3QgZG9lcyBub3QgcHJvdmlkZSA6bWV0aDpgX19kaXJfX2AsIHRoZSBmdW5jdGlvbiB0cmllcyBpdHMgYmVzdCB0bwotICAgZ2F0aGVyIGluZm9ybWF0aW9uIGZyb20gdGhlIG9iamVjdCdzIDphdHRyOmBfX2RpY3RfX2AgYXR0cmlidXRlLCBpZiBkZWZpbmVkLCBhbmQKKyAgIGdhdGhlciBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvYmplY3QncyA6YXR0cjpgfm9iamVjdC5fX2RpY3RfX2AgYXR0cmlidXRlLCBpZiBkZWZpbmVkLCBhbmQKICAgIGZyb20gaXRzIHR5cGUgb2JqZWN0LiAgVGhlIHJlc3VsdGluZyBsaXN0IGlzIG5vdCBuZWNlc3NhcmlseSBjb21wbGV0ZSwgYW5kIG1heQogICAgYmUgaW5hY2N1cmF0ZSB3aGVuIHRoZSBvYmplY3QgaGFzIGEgY3VzdG9tIDpmdW5jOmBfX2dldGF0dHJfX2AuCiAKQEAgLTE0NDYsNyArMTQ0Niw3IEBACiAKICAgIFdpdGggdGhyZWUgYXJndW1lbnRzLCByZXR1cm4gYSBuZXcgdHlwZSBvYmplY3QuICBUaGlzIGlzIGVzc2VudGlhbGx5IGEKICAgIGR5bmFtaWMgZm9ybSBvZiB0aGUgOmtleXdvcmQ6YGNsYXNzYCBzdGF0ZW1lbnQuIFRoZSAqbmFtZSogc3RyaW5nIGlzIHRoZQotICAgY2xhc3MgbmFtZSBhbmQgYmVjb21lcyB0aGUgOmF0dHI6YH5jbGFzcy5fX25hbWVfX2AgYXR0cmlidXRlOyB0aGUgKmJhc2VzKgorICAgY2xhc3MgbmFtZSBhbmQgYmVjb21lcyB0aGUgOmF0dHI6YH5kZWZpbml0aW9uLl9fbmFtZV9fYCBhdHRyaWJ1dGU7IHRoZSAqYmFzZXMqCiAgICB0dXBsZSBpdGVtaXplcyB0aGUgYmFzZSBjbGFzc2VzIGFuZCBiZWNvbWVzIHRoZSA6YXR0cjpgfmNsYXNzLl9fYmFzZXNfX2AKICAgIGF0dHJpYnV0ZTsgYW5kIHRoZSAqZGljdCogZGljdGlvbmFyeSBpcyB0aGUgbmFtZXNwYWNlIGNvbnRhaW5pbmcgZGVmaW5pdGlvbnMKICAgIGZvciBjbGFzcyBib2R5IGFuZCBpcyBjb3BpZWQgdG8gYSBzdGFuZGFyZCBkaWN0aW9uYXJ5IHRvIGJlY29tZSB0aGUKQEAgLTE0NjQsMTIgKzE0NjQsMTIgQEAKIC4uIGZ1bmN0aW9uOjogdmFycyhbb2JqZWN0XSkKIAogICAgUmV0dXJuIHRoZSA6YXR0cjpgfm9iamVjdC5fX2RpY3RfX2AgYXR0cmlidXRlIGZvciBhIG1vZHVsZSwgY2xhc3MsIGluc3RhbmNlLAotICAgb3IgYW55IG90aGVyIG9iamVjdCB3aXRoIGEgOmF0dHI6YF9fZGljdF9fYCBhdHRyaWJ1dGUuCisgICBvciBhbnkgb3RoZXIgb2JqZWN0IHdpdGggYSA6YXR0cjpgfm9iamVjdC5fX2RpY3RfX2AgYXR0cmlidXRlLgogCi0gICBPYmplY3RzIHN1Y2ggYXMgbW9kdWxlcyBhbmQgaW5zdGFuY2VzIGhhdmUgYW4gdXBkYXRlYWJsZSA6YXR0cjpgX19kaWN0X19gCisgICBPYmplY3RzIHN1Y2ggYXMgbW9kdWxlcyBhbmQgaW5zdGFuY2VzIGhhdmUgYW4gdXBkYXRlYWJsZSA6YXR0cjpgfm9iamVjdC5fX2RpY3RfX2AKICAgIGF0dHJpYnV0ZTsgaG93ZXZlciwgb3RoZXIgb2JqZWN0cyBtYXkgaGF2ZSB3cml0ZSByZXN0cmljdGlvbnMgb24gdGhlaXIKLSAgIDphdHRyOmBfX2RpY3RfX2AgYXR0cmlidXRlcyAoZm9yIGV4YW1wbGUsIGNsYXNzZXMgdXNlIGEKLSAgIGRpY3Rwcm94eSB0byBwcmV2ZW50IGRpcmVjdCBkaWN0aW9uYXJ5IHVwZGF0ZXMpLgorICAgOmF0dHI6YH5vYmplY3QuX19kaWN0X19gIGF0dHJpYnV0ZXMgKGZvciBleGFtcGxlLCBjbGFzc2VzIHVzZSBhCisgICA6Y2xhc3M6YHR5cGVzLk1hcHBpbmdQcm94eVR5cGVgIHRvIHByZXZlbnQgZGlyZWN0IGRpY3Rpb25hcnkgdXBkYXRlcykuCiAKICAgIFdpdGhvdXQgYW4gYXJndW1lbnQsIDpmdW5jOmB2YXJzYCBhY3RzIGxpa2UgOmZ1bmM6YGxvY2Fsc2AuICBOb3RlLCB0aGUKICAgIGxvY2FscyBkaWN0aW9uYXJ5IGlzIG9ubHkgdXNlZnVsIGZvciByZWFkcyBzaW5jZSB1cGRhdGVzIHRvIHRoZSBsb2NhbHMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Z1bmN0b29scy5yc3QgYi9Eb2MvbGlicmFyeS9mdW5jdG9vbHMucnN0CmluZGV4IGFiZGQ2NmYuLjEyN2UzZmEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Z1bmN0b29scy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZnVuY3Rvb2xzLnJzdApAQCAtNDc0LDcgKzQ3NCw3IEBACiAKIDpjbGFzczpgcGFydGlhbGAgb2JqZWN0cyBhcmUgbGlrZSA6Y2xhc3M6YGZ1bmN0aW9uYCBvYmplY3RzIGluIHRoYXQgdGhleSBhcmUKIGNhbGxhYmxlLCB3ZWFrIHJlZmVyZW5jYWJsZSwgYW5kIGNhbiBoYXZlIGF0dHJpYnV0ZXMuICBUaGVyZSBhcmUgc29tZSBpbXBvcnRhbnQKLWRpZmZlcmVuY2VzLiAgRm9yIGluc3RhbmNlLCB0aGUgOmF0dHI6YF9fbmFtZV9fYCBhbmQgOmF0dHI6YF9fZG9jX19gIGF0dHJpYnV0ZXMKK2RpZmZlcmVuY2VzLiAgRm9yIGluc3RhbmNlLCB0aGUgOmF0dHI6YH5kZWZpbml0aW9uLl9fbmFtZV9fYCBhbmQgOmF0dHI6YF9fZG9jX19gIGF0dHJpYnV0ZXMKIGFyZSBub3QgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LiAgQWxzbywgOmNsYXNzOmBwYXJ0aWFsYCBvYmplY3RzIGRlZmluZWQgaW4KIGNsYXNzZXMgYmVoYXZlIGxpa2Ugc3RhdGljIG1ldGhvZHMgYW5kIGRvIG5vdCB0cmFuc2Zvcm0gaW50byBib3VuZCBtZXRob2RzCiBkdXJpbmcgaW5zdGFuY2UgYXR0cmlidXRlIGxvb2stdXAuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pbXBvcnRsaWIucnN0IGIvRG9jL2xpYnJhcnkvaW1wb3J0bGliLnJzdAppbmRleCAzMzAyNDQ2Li5mZjdjYzkxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbXBvcnRsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ltcG9ydGxpYi5yc3QKQEAgLTIxMSw2ICsyMTEsMTEgQEAKIC4uIG1vZHVsZTo6IGltcG9ydGxpYi5hYmMKICAgICA6c3lub3BzaXM6IEFic3RyYWN0IGJhc2UgY2xhc3NlcyByZWxhdGVkIHRvIGltcG9ydAogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9pbXBvcnRsaWIvYWJjLnB5YAorCistLS0tLS0tLS0tLS0tLQorCisKIFRoZSA6bW9kOmBpbXBvcnRsaWIuYWJjYCBtb2R1bGUgY29udGFpbnMgYWxsIG9mIHRoZSBjb3JlIGFic3RyYWN0IGJhc2UgY2xhc3NlcwogdXNlZCBieSA6a2V5d29yZDpgaW1wb3J0YC4gU29tZSBzdWJjbGFzc2VzIG9mIHRoZSBjb3JlIGFic3RyYWN0IGJhc2UgY2xhc3NlcwogYXJlIGFsc28gcHJvdmlkZWQgdG8gaGVscCBpbiBpbXBsZW1lbnRpbmcgdGhlIGNvcmUgQUJDcy4KQEAgLTcwMCw2ICs3MDUsMTAgQEAKIC4uIG1vZHVsZTo6IGltcG9ydGxpYi5tYWNoaW5lcnkKICAgICA6c3lub3BzaXM6IEltcG9ydGVycyBhbmQgcGF0aCBob29rcwogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9pbXBvcnRsaWIvbWFjaGluZXJ5LnB5YAorCistLS0tLS0tLS0tLS0tLQorCiBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgdmFyaW91cyBvYmplY3RzIHRoYXQgaGVscCA6a2V5d29yZDpgaW1wb3J0YAogZmluZCBhbmQgbG9hZCBtb2R1bGVzLgogCkBAIC0xMDgyLDYgKzEwOTEsMTEgQEAKIC4uIG1vZHVsZTo6IGltcG9ydGxpYi51dGlsCiAgICAgOnN5bm9wc2lzOiBVdGlsaXR5IGNvZGUgZm9yIGltcG9ydGVycwogCisKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2ltcG9ydGxpYi91dGlsLnB5YAorCistLS0tLS0tLS0tLS0tLQorCiBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgdmFyaW91cyBvYmplY3RzIHRoYXQgaGVscCBpbiB0aGUgY29uc3RydWN0aW9uIG9mCiBhbiA6dGVybTpgaW1wb3J0ZXJgLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pbnNwZWN0LnJzdCBiL0RvYy9saWJyYXJ5L2luc3BlY3QucnN0CmluZGV4IGIyOGQwZjkuLjhlN2VkMTkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2luc3BlY3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L2luc3BlY3QucnN0CkBAIC0zNzQsOCArMzc0LDkgQEAKICAgIGFyZSB0cnVlLgogCiAgICBUaGlzLCBmb3IgZXhhbXBsZSwgaXMgdHJ1ZSBvZiBgYGludC5fX2FkZF9fYGAuICBBbiBvYmplY3QgcGFzc2luZyB0aGlzIHRlc3QKLSAgIGhhcyBhIDphdHRyOmBfX2dldF9fYCBhdHRyaWJ1dGUgYnV0IG5vdCBhIDphdHRyOmBfX3NldF9fYCBhdHRyaWJ1dGUsIGJ1dAotICAgYmV5b25kIHRoYXQgdGhlIHNldCBvZiBhdHRyaWJ1dGVzIHZhcmllcy4gIDphdHRyOmBfX25hbWVfX2AgaXMgdXN1YWxseQorICAgaGFzIGEgOm1ldGg6YH5vYmplY3QuX19nZXRfX2AgbWV0aG9kIGJ1dCBub3QgYSA6bWV0aDpgfm9iamVjdC5fX3NldF9fYAorICAgbWV0aG9kLCBidXQgYmV5b25kIHRoYXQgdGhlIHNldCBvZiBhdHRyaWJ1dGVzIHZhcmllcy4gIEEKKyAgIDphdHRyOmB+ZGVmaW5pdGlvbi5fX25hbWVfX2AgYXR0cmlidXRlIGlzIHVzdWFsbHkKICAgIHNlbnNpYmxlLCBhbmQgOmF0dHI6YF9fZG9jX19gIG9mdGVuIGlzLgogCiAgICBNZXRob2RzIGltcGxlbWVudGVkIHZpYSBkZXNjcmlwdG9ycyB0aGF0IGFsc28gcGFzcyBvbmUgb2YgdGhlIG90aGVyIHRlc3RzCkBAIC0zODgsMTEgKzM4OSwxMSBAQAogCiAgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIGEgZGF0YSBkZXNjcmlwdG9yLgogCi0gICBEYXRhIGRlc2NyaXB0b3JzIGhhdmUgYm90aCBhIDphdHRyOmBfX2dldF9fYCBhbmQgYSA6YXR0cjpgX19zZXRfX2AgYXR0cmlidXRlLgorICAgRGF0YSBkZXNjcmlwdG9ycyBoYXZlIGJvdGggYSA6YXR0cjpgfm9iamVjdC5fX2dldF9fYCBhbmQgYSA6YXR0cjpgfm9iamVjdC5fX3NldF9fYCBtZXRob2QuCiAgICBFeGFtcGxlcyBhcmUgcHJvcGVydGllcyAoZGVmaW5lZCBpbiBQeXRob24pLCBnZXRzZXRzLCBhbmQgbWVtYmVycy4gIFRoZQogICAgbGF0dGVyIHR3byBhcmUgZGVmaW5lZCBpbiBDIGFuZCB0aGVyZSBhcmUgbW9yZSBzcGVjaWZpYyB0ZXN0cyBhdmFpbGFibGUgZm9yCiAgICB0aG9zZSB0eXBlcywgd2hpY2ggaXMgcm9idXN0IGFjcm9zcyBQeXRob24gaW1wbGVtZW50YXRpb25zLiAgVHlwaWNhbGx5LCBkYXRhCi0gICBkZXNjcmlwdG9ycyB3aWxsIGFsc28gaGF2ZSA6YXR0cjpgX19uYW1lX19gIGFuZCA6YXR0cjpgX19kb2NfX2AgYXR0cmlidXRlcworICAgZGVzY3JpcHRvcnMgd2lsbCBhbHNvIGhhdmUgOmF0dHI6YH5kZWZpbml0aW9uLl9fbmFtZV9fYCBhbmQgOmF0dHI6YF9fZG9jX19gIGF0dHJpYnV0ZXMKICAgIChwcm9wZXJ0aWVzLCBnZXRzZXRzLCBhbmQgbWVtYmVycyBoYXZlIGJvdGggb2YgdGhlc2UgYXR0cmlidXRlcyksIGJ1dCB0aGlzIGlzCiAgICBub3QgZ3VhcmFudGVlZC4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvanNvbi5yc3QgYi9Eb2MvbGlicmFyeS9qc29uLnJzdAppbmRleCAxNzRlNzM0Li4xZTM0Y2YzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9qc29uLnJzdAorKysgYi9Eb2MvbGlicmFyeS9qc29uLnJzdApAQCAtNjI5LDEzICs2MjksMTkgQEAKIDpjbGFzczpgZGVjaW1hbC5EZWNpbWFsYC4KIAogLi4gaGlnaGxpZ2h0OjogYmFzaAotLi4gbW9kdWxlOjoganNvbi50b29sCiAKIC4uIF9qc29uLWNvbW1hbmRsaW5lOgogCiBDb21tYW5kIExpbmUgSW50ZXJmYWNlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIG1vZHVsZTo6IGpzb24udG9vbAorICAgIDpzeW5vcHNpczogQSBjb21tYW5kIGxpbmUgdG8gdmFsaWRhdGUgYW5kIHByZXR0eS1wcmludCBKU09OLgorCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9qc29uL3Rvb2wucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKIFRoZSA6bW9kOmBqc29uLnRvb2xgIG1vZHVsZSBwcm92aWRlcyBhIHNpbXBsZSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIHRvIHZhbGlkYXRlCiBhbmQgcHJldHR5LXByaW50IEpTT04gb2JqZWN0cy4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnJzdCBiL0RvYy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5yc3QKaW5kZXggYzVjMDkyYy4uZDIwMDk4ZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0CkBAIC0xMDEwLDcgKzEwMTAsNyBAQAogICAgICAgdXNpbmcgOm1ldGg6YHJlY3ZgLgogCiAgICAgICBUaGUgb2JqZWN0IG11c3QgYmUgcGlja2xhYmxlLiAgVmVyeSBsYXJnZSBwaWNrbGVzIChhcHByb3hpbWF0ZWx5IDMyIE1CKywKLSAgICAgIHRob3VnaCBpdCBkZXBlbmRzIG9uIHRoZSBPUykgbWF5IHJhaXNlIGEgVmFsdWVFcnJvciBleGNlcHRpb24uCisgICAgICB0aG91Z2ggaXQgZGVwZW5kcyBvbiB0aGUgT1MpIG1heSByYWlzZSBhIDpleGM6YFZhbHVlRXJyb3JgIGV4Y2VwdGlvbi4KIAogICAgLi4gbWV0aG9kOjogcmVjdigpCiAKQEAgLTI3MjMsMTIgKzI3MjMsNyBAQAogCiBNb3JlIHBpY2tsYWJpbGl0eQogCi0gICAgRW5zdXJlIHRoYXQgYWxsIGFyZ3VtZW50cyB0byA6bWV0aDpgUHJvY2Vzcy5fX2luaXRfX2AgYXJlCi0gICAgcGlja2xhYmxlLiAgVGhpcyBtZWFucywgaW4gcGFydGljdWxhciwgdGhhdCBib3VuZCBvciB1bmJvdW5kCi0gICAgbWV0aG9kcyBjYW5ub3QgYmUgdXNlZCBkaXJlY3RseSBhcyB0aGUgYGB0YXJnZXRgYCAodW5sZXNzIHlvdSB1c2UKLSAgICB0aGUgKmZvcmsqIHN0YXJ0IG1ldGhvZCkgLS0tIGp1c3QgZGVmaW5lIGEgZnVuY3Rpb24gYW5kIHVzZSB0aGF0Ci0gICAgaW5zdGVhZC4KLQorICAgIEVuc3VyZSB0aGF0IGFsbCBhcmd1bWVudHMgdG8gOm1ldGg6YFByb2Nlc3MuX19pbml0X19gIGFyZSBwaWNrbGFibGUuCiAgICAgQWxzbywgaWYgeW91IHN1YmNsYXNzIDpjbGFzczpgfm11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzYCB0aGVuIG1ha2Ugc3VyZSB0aGF0CiAgICAgaW5zdGFuY2VzIHdpbGwgYmUgcGlja2xhYmxlIHdoZW4gdGhlIDptZXRoOmBQcm9jZXNzLnN0YXJ0CiAgICAgPG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLnN0YXJ0PmAgbWV0aG9kIGlzIGNhbGxlZC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L29zLnJzdCBiL0RvYy9saWJyYXJ5L29zLnJzdAppbmRleCA3NDNlZmI2Li5lNzNkOGVlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9vcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvb3MucnN0CkBAIC0xMTk1LDcgKzExOTUsMTEgQEAKIC4uIGZ1bmN0aW9uOjogd3JpdGV2KGZkLCBidWZmZXJzKQogCiAgICBXcml0ZSB0aGUgY29udGVudHMgb2YgKmJ1ZmZlcnMqIHRvIGZpbGUgZGVzY3JpcHRvciAqZmQqLiAqYnVmZmVycyogbXVzdCBiZSBhCi0gICBzZXF1ZW5jZSBvZiA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RzIDxieXRlcy1saWtlIG9iamVjdD5gLgorICAgc2VxdWVuY2Ugb2YgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0cyA8Ynl0ZXMtbGlrZSBvYmplY3Q+YC4gQnVmZmVycyBhcmUKKyAgIHByb2Nlc3NlZCBpbiBhcnJheSBvcmRlci4gRW50aXJlIGNvbnRlbnRzIG9mIGZpcnN0IGJ1ZmZlciBpcyB3cml0dGVuIGJlZm9yZQorICAgcHJvY2VlZGluZyB0byBzZWNvbmQsIGFuZCBzbyBvbi4gVGhlIG9wZXJhdGluZyBzeXN0ZW0gbWF5IHNldCBhIGxpbWl0CisgICAoc3lzY29uZigpIHZhbHVlIFNDX0lPVl9NQVgpIG9uIHRoZSBudW1iZXIgb2YgYnVmZmVycyB0aGF0IGNhbiBiZSB1c2VkLgorCiAgICA6ZnVuYzpgfm9zLndyaXRldmAgd3JpdGVzIHRoZSBjb250ZW50cyBvZiBlYWNoIG9iamVjdCB0byB0aGUgZmlsZSBkZXNjcmlwdG9yCiAgICBhbmQgcmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uCiAKQEAgLTIwNDksOSArMjA1Myw4IEBACiAKICAgIE5vdGUgdGhhdCB0aGVyZSBpcyBhIG5pY2UgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBzZXZlcmFsIGF0dHJpYnV0ZXMKICAgIGFuZCBtZXRob2RzIG9mIGBgRGlyRW50cnlgYCBhbmQgb2YgOmNsYXNzOmBwYXRobGliLlBhdGhgLiAgSW4KLSAgIHBhcnRpY3VsYXIsIHRoZSBgYG5hbWVgYCBhbmQgYGBwYXRoYGAgYXR0cmlidXRlcyBoYXZlIHRoZSBzYW1lCi0gICBtZWFuaW5nLCBhcyBkbyB0aGUgYGBpc19kaXIoKWBgLCBgYGlzX2ZpbGUoKWBgLCBgYGlzX3N5bWxpbmsoKWBgCi0gICBhbmQgYGBzdGF0KClgYCBtZXRob2RzLgorICAgcGFydGljdWxhciwgdGhlIGBgbmFtZWBgIGF0dHJpYnV0ZSBoYXMgdGhlIHNhbWUgbWVhbmluZywgYXMgZG8gdGhlCisgICBgYGlzX2RpcigpYGAsIGBgaXNfZmlsZSgpYGAsIGBgaXNfc3ltbGluaygpYGAgYW5kIGBgc3RhdCgpYGAgbWV0aG9kcy4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy41CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3JlLnJzdCBiL0RvYy9saWJyYXJ5L3JlLnJzdAppbmRleCAxOGQ1NTk2Li41NjliNTIyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9yZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcmUucnN0CkBAIC00NDMsNyArNDQzLDcgQEAKICAgIFRoZSBgYCdcdSdgYCBhbmQgYGAnXFUnYGAgZXNjYXBlIHNlcXVlbmNlcyBoYXZlIGJlZW4gYWRkZWQuCiAKIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuNSAzLjYKLSAgIFVua25vd24gZXNjYXBlcyBjb25zaXN0IG9mIGBgJ1wnYGAgYW5kIEFTQ0lJIGxldHRlciBub3cgcmFpc2UgYQorICAgVW5rbm93biBlc2NhcGVzIGNvbnNpc3Rpbmcgb2YgYGAnXCdgYCBhbmQgQVNDSUkgbGV0dGVyIG5vdyByYWlzZSBhCiAgICBkZXByZWNhdGlvbiB3YXJuaW5nIGFuZCB3aWxsIGJlIGZvcmJpZGRlbiBpbiBQeXRob24gMy42LgogCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3JlYWRsaW5lLnJzdCBiL0RvYy9saWJyYXJ5L3JlYWRsaW5lLnJzdAppbmRleCBlMTdlNjljLi40ZDNjMDk5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9yZWFkbGluZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcmVhZGxpbmUucnN0CkBAIC0xMDQsNyArMTA0LDkgQEAKIAogICAgQXBwZW5kIHRoZSBsYXN0ICpuZWxlbWVudHMqIGl0ZW1zIG9mIGhpc3RvcnkgdG8gYSBmaWxlLiAgVGhlIGRlZmF1bHQgZmlsZW5hbWUgaXMKICAgIDpmaWxlOmB+Ly5oaXN0b3J5YC4gIFRoZSBmaWxlIG11c3QgYWxyZWFkeSBleGlzdC4gIFRoaXMgY2FsbHMKLSAgIDpjOmZ1bmM6YGFwcGVuZF9oaXN0b3J5YCBpbiB0aGUgdW5kZXJseWluZyBsaWJyYXJ5LgorICAgOmM6ZnVuYzpgYXBwZW5kX2hpc3RvcnlgIGluIHRoZSB1bmRlcmx5aW5nIGxpYnJhcnkuICBUaGlzIGZ1bmN0aW9uCisgICBvbmx5IGV4aXN0cyBpZiBQeXRob24gd2FzIGNvbXBpbGVkIGZvciBhIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkKKyAgIHRoYXQgc3VwcG9ydHMgaXQuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNQogCkBAIC0xODUsNyArMTg3LDggQEAKICAgIGJlIHVzZWQgYXMgdGhlIG5ldyBob29rIGZ1bmN0aW9uOyBpZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCBhbnkKICAgIGZ1bmN0aW9uIGFscmVhZHkgaW5zdGFsbGVkIGlzIHJlbW92ZWQuICBUaGUgaG9vayBpcyBjYWxsZWQKICAgIHdpdGggbm8gYXJndW1lbnRzIGFmdGVyIHRoZSBmaXJzdCBwcm9tcHQgaGFzIGJlZW4gcHJpbnRlZCBhbmQganVzdCBiZWZvcmUKLSAgIHJlYWRsaW5lIHN0YXJ0cyByZWFkaW5nIGlucHV0IGNoYXJhY3RlcnMuCisgICByZWFkbGluZSBzdGFydHMgcmVhZGluZyBpbnB1dCBjaGFyYWN0ZXJzLiAgVGhpcyBmdW5jdGlvbiBvbmx5IGV4aXN0cworICAgaWYgUHl0aG9uIHdhcyBjb21waWxlZCBmb3IgYSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IHRoYXQgc3VwcG9ydHMgaXQuCiAKIAogQ29tcGxldGlvbgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QgYi9Eb2MvbGlicmFyeS9zcWxpdGUzLnJzdAppbmRleCAzYmJhOTM1Li42MDVkOGQzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zcWxpdGUzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zcWxpdGUzLnJzdApAQCAtMzA5LDI1ICszMDksMjYgQEAKICAgICAgIGNhbGwgOm1ldGg6YGNvbW1pdGAuIElmIHlvdSBqdXN0IGNsb3NlIHlvdXIgZGF0YWJhc2UgY29ubmVjdGlvbiB3aXRob3V0CiAgICAgICBjYWxsaW5nIDptZXRoOmBjb21taXRgIGZpcnN0LCB5b3VyIGNoYW5nZXMgd2lsbCBiZSBsb3N0IQogCi0gICAuLiBtZXRob2Q6OiBleGVjdXRlKHNxbCwgW3BhcmFtZXRlcnNdKQorICAgLi4gbWV0aG9kOjogZXhlY3V0ZShzcWxbLCBwYXJhbWV0ZXJzXSkKIAotICAgICAgVGhpcyBpcyBhIG5vbnN0YW5kYXJkIHNob3J0Y3V0IHRoYXQgY3JlYXRlcyBhbiBpbnRlcm1lZGlhdGUgY3Vyc29yIG9iamVjdCBieQotICAgICAgY2FsbGluZyB0aGUgY3Vyc29yIG1ldGhvZCwgdGhlbiBjYWxscyB0aGUgY3Vyc29yJ3MgOm1ldGg6YGV4ZWN1dGUKLSAgICAgIDxDdXJzb3IuZXhlY3V0ZT5gIG1ldGhvZCB3aXRoIHRoZSBwYXJhbWV0ZXJzIGdpdmVuLgorICAgICAgVGhpcyBpcyBhIG5vbnN0YW5kYXJkIHNob3J0Y3V0IHRoYXQgY3JlYXRlcyBhIGN1cnNvciBvYmplY3QgYnkgY2FsbGluZworICAgICAgdGhlIDptZXRoOmB+Q29ubmVjdGlvbi5jdXJzb3JgIG1ldGhvZCwgY2FsbHMgdGhlIGN1cnNvcidzCisgICAgICA6bWV0aDpgfkN1cnNvci5leGVjdXRlYCBtZXRob2Qgd2l0aCB0aGUgKnBhcmFtZXRlcnMqIGdpdmVuLCBhbmQgcmV0dXJucworICAgICAgdGhlIGN1cnNvci4KIAorICAgLi4gbWV0aG9kOjogZXhlY3V0ZW1hbnkoc3FsWywgcGFyYW1ldGVyc10pCiAKLSAgIC4uIG1ldGhvZDo6IGV4ZWN1dGVtYW55KHNxbCwgW3BhcmFtZXRlcnNdKQotCi0gICAgICBUaGlzIGlzIGEgbm9uc3RhbmRhcmQgc2hvcnRjdXQgdGhhdCBjcmVhdGVzIGFuIGludGVybWVkaWF0ZSBjdXJzb3Igb2JqZWN0IGJ5Ci0gICAgICBjYWxsaW5nIHRoZSBjdXJzb3IgbWV0aG9kLCB0aGVuIGNhbGxzIHRoZSBjdXJzb3IncyA6bWV0aDpgZXhlY3V0ZW1hbnkKLSAgICAgIDxDdXJzb3IuZXhlY3V0ZW1hbnk+YCBtZXRob2Qgd2l0aCB0aGUgcGFyYW1ldGVycyBnaXZlbi4KKyAgICAgIFRoaXMgaXMgYSBub25zdGFuZGFyZCBzaG9ydGN1dCB0aGF0IGNyZWF0ZXMgYSBjdXJzb3Igb2JqZWN0IGJ5CisgICAgICBjYWxsaW5nIHRoZSA6bWV0aDpgfkNvbm5lY3Rpb24uY3Vyc29yYCBtZXRob2QsIGNhbGxzIHRoZSBjdXJzb3IncworICAgICAgOm1ldGg6YH5DdXJzb3IuZXhlY3V0ZW1hbnlgIG1ldGhvZCB3aXRoIHRoZSAqcGFyYW1ldGVycyogZ2l2ZW4sIGFuZAorICAgICAgcmV0dXJucyB0aGUgY3Vyc29yLgogCiAgICAuLiBtZXRob2Q6OiBleGVjdXRlc2NyaXB0KHNxbF9zY3JpcHQpCiAKLSAgICAgIFRoaXMgaXMgYSBub25zdGFuZGFyZCBzaG9ydGN1dCB0aGF0IGNyZWF0ZXMgYW4gaW50ZXJtZWRpYXRlIGN1cnNvciBvYmplY3QgYnkKLSAgICAgIGNhbGxpbmcgdGhlIGN1cnNvciBtZXRob2QsIHRoZW4gY2FsbHMgdGhlIGN1cnNvcidzIDptZXRoOmBleGVjdXRlc2NyaXB0Ci0gICAgICA8Q3Vyc29yLmV4ZWN1dGVzY3JpcHQ+YCBtZXRob2Qgd2l0aCB0aGUgcGFyYW1ldGVycyBnaXZlbi4KLQorICAgICAgVGhpcyBpcyBhIG5vbnN0YW5kYXJkIHNob3J0Y3V0IHRoYXQgY3JlYXRlcyBhIGN1cnNvciBvYmplY3QgYnkKKyAgICAgIGNhbGxpbmcgdGhlIDptZXRoOmB+Q29ubmVjdGlvbi5jdXJzb3JgIG1ldGhvZCwgY2FsbHMgdGhlIGN1cnNvcidzCisgICAgICA6bWV0aDpgfkN1cnNvci5leGVjdXRlc2NyaXB0YCBtZXRob2Qgd2l0aCB0aGUgZ2l2ZW4gKnNxbF9zY3JpcHQqLCBhbmQKKyAgICAgIHJldHVybnMgdGhlIGN1cnNvci4KIAogICAgLi4gbWV0aG9kOjogY3JlYXRlX2Z1bmN0aW9uKG5hbWUsIG51bV9wYXJhbXMsIGZ1bmMpCiAKQEAgLTQ4OCwxMCArNDg5LDYgQEAKICAgICAgIDptb2Q6YHNxbGl0ZTNgIG1vZHVsZSB3aWxsIHJldHVybiBVbmljb2RlIG9iamVjdHMgZm9yIGBgVEVYVGBgLiBJZiB5b3Ugd2FudCB0bwogICAgICAgcmV0dXJuIGJ5dGVzdHJpbmdzIGluc3RlYWQsIHlvdSBjYW4gc2V0IGl0IHRvIDpjbGFzczpgYnl0ZXNgLgogCi0gICAgICBGb3IgZWZmaWNpZW5jeSByZWFzb25zLCB0aGVyZSdzIGFsc28gYSB3YXkgdG8gcmV0dXJuIDpjbGFzczpgc3RyYCBvYmplY3RzCi0gICAgICBvbmx5IGZvciBub24tQVNDSUkgZGF0YSwgYW5kIDpjbGFzczpgYnl0ZXNgIG90aGVyd2lzZS4gVG8gYWN0aXZhdGUgaXQsIHNldAotICAgICAgdGhpcyBhdHRyaWJ1dGUgdG8gOmNvbnN0OmBzcWxpdGUzLk9wdGltaXplZFVuaWNvZGVgLgotCiAgICAgICBZb3UgY2FuIGFsc28gc2V0IGl0IHRvIGFueSBvdGhlciBjYWxsYWJsZSB0aGF0IGFjY2VwdHMgYSBzaW5nbGUgYnl0ZXN0cmluZwogICAgICAgcGFyYW1ldGVyIGFuZCByZXR1cm5zIHRoZSByZXN1bHRpbmcgb2JqZWN0LgogCkBAIC01MzMsNyArNTMwLDcgQEAKIAogICAgQSA6Y2xhc3M6YEN1cnNvcmAgaW5zdGFuY2UgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhbmQgbWV0aG9kcy4KIAotICAgLi4gbWV0aG9kOjogZXhlY3V0ZShzcWwsIFtwYXJhbWV0ZXJzXSkKKyAgIC4uIG1ldGhvZDo6IGV4ZWN1dGUoc3FsWywgcGFyYW1ldGVyc10pCiAKICAgICAgIEV4ZWN1dGVzIGFuIFNRTCBzdGF0ZW1lbnQuIFRoZSBTUUwgc3RhdGVtZW50IG1heSBiZSBwYXJhbWV0ZXJpemVkIChpLiBlLgogICAgICAgcGxhY2Vob2xkZXJzIGluc3RlYWQgb2YgU1FMIGxpdGVyYWxzKS4gVGhlIDptb2Q6YHNxbGl0ZTNgIG1vZHVsZSBzdXBwb3J0cyB0d28KQEAgLTU0NSw3ICs1NDIsNyBAQAogICAgICAgLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi9pbmNsdWRlcy9zcWxpdGUzL2V4ZWN1dGVfMS5weQogCiAgICAgICA6bWV0aDpgZXhlY3V0ZWAgd2lsbCBvbmx5IGV4ZWN1dGUgYSBzaW5nbGUgU1FMIHN0YXRlbWVudC4gSWYgeW91IHRyeSB0byBleGVjdXRlCi0gICAgICBtb3JlIHRoYW4gb25lIHN0YXRlbWVudCB3aXRoIGl0LCBpdCB3aWxsIHJhaXNlIGEgV2FybmluZy4gVXNlCisgICAgICBtb3JlIHRoYW4gb25lIHN0YXRlbWVudCB3aXRoIGl0LCBpdCB3aWxsIHJhaXNlIGFuIGBgc3FsaXRlMy5XYXJuaW5nYGAuIFVzZQogICAgICAgOm1ldGg6YGV4ZWN1dGVzY3JpcHRgIGlmIHlvdSB3YW50IHRvIGV4ZWN1dGUgbXVsdGlwbGUgU1FMIHN0YXRlbWVudHMgd2l0aCBvbmUKICAgICAgIGNhbGwuCiAKQEAgLTU1Myw4ICs1NTAsOCBAQAogICAgLi4gbWV0aG9kOjogZXhlY3V0ZW1hbnkoc3FsLCBzZXFfb2ZfcGFyYW1ldGVycykKIAogICAgICAgRXhlY3V0ZXMgYW4gU1FMIGNvbW1hbmQgYWdhaW5zdCBhbGwgcGFyYW1ldGVyIHNlcXVlbmNlcyBvciBtYXBwaW5ncyBmb3VuZCBpbgotICAgICAgdGhlIHNlcXVlbmNlICpzcWwqLiAgVGhlIDptb2Q6YHNxbGl0ZTNgIG1vZHVsZSBhbHNvIGFsbG93cyB1c2luZyBhbgotICAgICAgOnRlcm06YGl0ZXJhdG9yYCB5aWVsZGluZyBwYXJhbWV0ZXJzIGluc3RlYWQgb2YgYSBzZXF1ZW5jZS4KKyAgICAgIHRoZSBzZXF1ZW5jZSAqc2VxX29mX3BhcmFtZXRlcnMqLiAgVGhlIDptb2Q6YHNxbGl0ZTNgIG1vZHVsZSBhbHNvIGFsbG93cworICAgICAgdXNpbmcgYW4gOnRlcm06YGl0ZXJhdG9yYCB5aWVsZGluZyBwYXJhbWV0ZXJzIGluc3RlYWQgb2YgYSBzZXF1ZW5jZS4KIAogICAgICAgLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi9pbmNsdWRlcy9zcWxpdGUzL2V4ZWN1dGVtYW55XzEucHkKIApAQCAtNTY5LDcgKzU2Niw3IEBACiAgICAgICBhdCBvbmNlLiBJdCBpc3N1ZXMgYSBgYENPTU1JVGBgIHN0YXRlbWVudCBmaXJzdCwgdGhlbiBleGVjdXRlcyB0aGUgU1FMIHNjcmlwdCBpdAogICAgICAgZ2V0cyBhcyBhIHBhcmFtZXRlci4KIAotICAgICAgKnNxbF9zY3JpcHQqIGNhbiBiZSBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YHN0cmAgb3IgOmNsYXNzOmBieXRlc2AuCisgICAgICAqc3FsX3NjcmlwdCogY2FuIGJlIGFuIGluc3RhbmNlIG9mIDpjbGFzczpgc3RyYC4KIAogICAgICAgRXhhbXBsZToKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RkdHlwZXMucnN0IGIvRG9jL2xpYnJhcnkvc3RkdHlwZXMucnN0CmluZGV4IGU4YTQ4OGUuLmRiMWMyZDAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N0ZHR5cGVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdGR0eXBlcy5yc3QKQEAgLTQzNjAsOSArNDM2MCwxMCBAQAogQSBzcGVjaWFsIGF0dHJpYnV0ZSBvZiBldmVyeSBtb2R1bGUgaXMgOmF0dHI6YH5vYmplY3QuX19kaWN0X19gLiBUaGlzIGlzIHRoZQogZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBtb2R1bGUncyBzeW1ib2wgdGFibGUuIE1vZGlmeWluZyB0aGlzIGRpY3Rpb25hcnkgd2lsbAogYWN0dWFsbHkgY2hhbmdlIHRoZSBtb2R1bGUncyBzeW1ib2wgdGFibGUsIGJ1dCBkaXJlY3QgYXNzaWdubWVudCB0byB0aGUKLTphdHRyOmBfX2RpY3RfX2AgYXR0cmlidXRlIGlzIG5vdCBwb3NzaWJsZSAoeW91IGNhbiB3cml0ZQorOmF0dHI6YH5vYmplY3QuX19kaWN0X19gIGF0dHJpYnV0ZSBpcyBub3QgcG9zc2libGUgKHlvdSBjYW4gd3JpdGUKIGBgbS5fX2RpY3RfX1snYSddID0gMWBgLCB3aGljaCBkZWZpbmVzIGBgbS5hYGAgdG8gYmUgYGAxYGAsIGJ1dCB5b3UgY2FuJ3Qgd3JpdGUKLWBgbS5fX2RpY3RfXyA9IHt9YGApLiAgTW9kaWZ5aW5nIDphdHRyOmBfX2RpY3RfX2AgZGlyZWN0bHkgaXMgbm90IHJlY29tbWVuZGVkLgorYGBtLl9fZGljdF9fID0ge31gYCkuICBNb2RpZnlpbmcgOmF0dHI6YH5vYmplY3QuX19kaWN0X19gIGRpcmVjdGx5IGlzCitub3QgcmVjb21tZW5kZWQuCiAKIE1vZHVsZXMgYnVpbHQgaW50byB0aGUgaW50ZXJwcmV0ZXIgYXJlIHdyaXR0ZW4gbGlrZSB0aGlzOiBgYDxtb2R1bGUgJ3N5cycKIChidWlsdC1pbik+YGAuICBJZiBsb2FkZWQgZnJvbSBhIGZpbGUsIHRoZXkgYXJlIHdyaXR0ZW4gYXMgYGA8bW9kdWxlICdvcycgZnJvbQpAQCAtNDU3NSwxNCArNDU3NiwxNiBAQAogICAgVGhlIHR1cGxlIG9mIGJhc2UgY2xhc3NlcyBvZiBhIGNsYXNzIG9iamVjdC4KIAogCi0uLiBhdHRyaWJ1dGU6OiBjbGFzcy5fX25hbWVfXworLi4gYXR0cmlidXRlOjogZGVmaW5pdGlvbi5fX25hbWVfXwogCi0gICBUaGUgbmFtZSBvZiB0aGUgY2xhc3Mgb3IgdHlwZS4KKyAgIFRoZSBuYW1lIG9mIHRoZSBjbGFzcywgZnVuY3Rpb24sIG1ldGhvZCwgZGVzY3JpcHRvciwgb3IKKyAgIGdlbmVyYXRvciBpbnN0YW5jZS4KIAogCi0uLiBhdHRyaWJ1dGU6OiBjbGFzcy5fX3F1YWxuYW1lX18KKy4uIGF0dHJpYnV0ZTo6IGRlZmluaXRpb24uX19xdWFsbmFtZV9fCiAKLSAgIFRoZSA6dGVybTpgcXVhbGlmaWVkIG5hbWVgIG9mIHRoZSBjbGFzcyBvciB0eXBlLgorICAgVGhlIDp0ZXJtOmBxdWFsaWZpZWQgbmFtZWAgb2YgdGhlIGNsYXNzLCBmdW5jdGlvbiwgbWV0aG9kLCBkZXNjcmlwdG9yLAorICAgb3IgZ2VuZXJhdG9yIGluc3RhbmNlLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGFyZmlsZS5yc3QgYi9Eb2MvbGlicmFyeS90YXJmaWxlLnJzdAppbmRleCAzMmQ2OWJmLi45MGE1ODUyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90YXJmaWxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS90YXJmaWxlLnJzdApAQCAtNjQsMTkgKzY0LDE5IEBACiAgICB8IGBgJ3gnYGAgb3IgICAgICAgfCBDcmVhdGUgYSB0YXJmaWxlIGV4Y2x1c2l2ZWx5IHdpdGhvdXQgICAgICAgIHwKICAgIHwgYGAneDonYGAgICAgICAgICB8IGNvbXByZXNzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgfCAgICAgICAgICAgICAgICAgIHwgUmFpc2UgYW4gOmV4YzpgRmlsZUV4aXN0c0Vycm9yYCBleGNlcHRpb24gICB8Ci0gICB8ICAgICAgICAgICAgICAgICAgfCBpZiBpdCBpcyBhbHJlYWR5IGV4aXN0cy4gICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICB8IGlmIGl0IGFscmVhZHkgZXhpc3RzLiAgICAgICAgICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8IGBgJ3g6Z3onYGAgICAgICAgfCBDcmVhdGUgYSB0YXJmaWxlIHdpdGggZ3ppcCBjb21wcmVzc2lvbi4gICAgIHwKICAgIHwgICAgICAgICAgICAgICAgICB8IFJhaXNlIGFuIDpleGM6YEZpbGVFeGlzdHNFcnJvcmAgZXhjZXB0aW9uICAgfAotICAgfCAgICAgICAgICAgICAgICAgIHwgaWYgaXQgaXMgYWxyZWFkeSBleGlzdHMuICAgICAgICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgfCBpZiBpdCBhbHJlYWR5IGV4aXN0cy4gICAgICAgICAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCBgYCd4OmJ6MidgYCAgICAgIHwgQ3JlYXRlIGEgdGFyZmlsZSB3aXRoIGJ6aXAyIGNvbXByZXNzaW9uLiAgICB8CiAgICB8ICAgICAgICAgICAgICAgICAgfCBSYWlzZSBhbiA6ZXhjOmBGaWxlRXhpc3RzRXJyb3JgIGV4Y2VwdGlvbiAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICB8IGlmIGl0IGlzIGFscmVhZHkgZXhpc3RzLiAgICAgICAgICAgICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgIHwgaWYgaXQgYWxyZWFkeSBleGlzdHMuICAgICAgICAgICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgYGAneDp4eidgYCAgICAgICB8IENyZWF0ZSBhIHRhcmZpbGUgd2l0aCBsem1hIGNvbXByZXNzaW9uLiAgICAgfAogICAgfCAgICAgICAgICAgICAgICAgIHwgUmFpc2UgYW4gOmV4YzpgRmlsZUV4aXN0c0Vycm9yYCBleGNlcHRpb24gICB8Ci0gICB8ICAgICAgICAgICAgICAgICAgfCBpZiBpdCBpcyBhbHJlYWR5IGV4aXN0cy4gICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICB8IGlmIGl0IGFscmVhZHkgZXhpc3RzLiAgICAgICAgICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8IGBgJ2EnIG9yICdhOidgYCAgfCBPcGVuIGZvciBhcHBlbmRpbmcgd2l0aCBubyBjb21wcmVzc2lvbi4gVGhlIHwKICAgIHwgICAgICAgICAgICAgICAgICB8IGZpbGUgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBleGlzdC4gICAgICAgfApAQCAtMTQ4LDggKzE0OCw4IEBACiAKIC4uIGNsYXNzOjogVGFyRmlsZQogCi0gICBDbGFzcyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB0YXIgYXJjaGl2ZXMuIERvIG5vdCB1c2UgdGhpcyBjbGFzcyBkaXJlY3RseSwKLSAgIGJldHRlciB1c2UgOmZ1bmM6YHRhcmZpbGUub3BlbmAgaW5zdGVhZC4gU2VlIDpyZWY6YHRhcmZpbGUtb2JqZWN0c2AuCisgICBDbGFzcyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB0YXIgYXJjaGl2ZXMuIERvIG5vdCB1c2UgdGhpcyBjbGFzcyBkaXJlY3RseToKKyAgIHVzZSA6ZnVuYzpgdGFyZmlsZS5vcGVuYCBpbnN0ZWFkLiBTZWUgOnJlZjpgdGFyZmlsZS1vYmplY3RzYC4KIAogCiAuLiBmdW5jdGlvbjo6IGlzX3RhcmZpbGUobmFtZSkKQEAgLTI3MSw3ICsyNzEsNyBAQAogCiAgICAqbW9kZSogaXMgZWl0aGVyIGBgJ3InYGAgdG8gcmVhZCBmcm9tIGFuIGV4aXN0aW5nIGFyY2hpdmUsIGBgJ2EnYGAgdG8gYXBwZW5kCiAgICBkYXRhIHRvIGFuIGV4aXN0aW5nIGZpbGUsIGBgJ3cnYGAgdG8gY3JlYXRlIGEgbmV3IGZpbGUgb3ZlcndyaXRpbmcgYW4gZXhpc3RpbmcKLSAgIG9uZSBvciBgYCd4J2BgIHRvIGNyZWF0ZSBhIG5ldyBmaWxlIG9ubHkgaWYgaXQncyBub3QgZXhpc3RzLgorICAgb25lLCBvciBgYCd4J2BgIHRvIGNyZWF0ZSBhIG5ldyBmaWxlIG9ubHkgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KIAogICAgSWYgKmZpbGVvYmoqIGlzIGdpdmVuLCBpdCBpcyB1c2VkIGZvciByZWFkaW5nIG9yIHdyaXRpbmcgZGF0YS4gSWYgaXQgY2FuIGJlCiAgICBkZXRlcm1pbmVkLCAqbW9kZSogaXMgb3ZlcnJpZGRlbiBieSAqZmlsZW9iaioncyBtb2RlLiAqZmlsZW9iaiogd2lsbCBiZSB1c2VkCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS96aXBmaWxlLnJzdCBiL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0CmluZGV4IGI0MjFlYTUuLmFiZTM4YzQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0CkBAIC0yNTAsNyArMjUwLDcgQEAKIC4uIG1ldGhvZDo6IFppcEZpbGUuZXh0cmFjdChtZW1iZXIsIHBhdGg9Tm9uZSwgcHdkPU5vbmUpCiAKICAgIEV4dHJhY3QgYSBtZW1iZXIgZnJvbSB0aGUgYXJjaGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeTsgKm1lbWJlcioKLSAgIG11c3QgYmUgaXRzIGZ1bGwgbmFtZSBvciBhIDpjbGFzczpgWmlwSW5mb2Agb2JqZWN0KS4gIEl0cyBmaWxlIGluZm9ybWF0aW9uIGlzCisgICBtdXN0IGJlIGl0cyBmdWxsIG5hbWUgb3IgYSA6Y2xhc3M6YFppcEluZm9gIG9iamVjdC4gIEl0cyBmaWxlIGluZm9ybWF0aW9uIGlzCiAgICBleHRyYWN0ZWQgYXMgYWNjdXJhdGVseSBhcyBwb3NzaWJsZS4gICpwYXRoKiBzcGVjaWZpZXMgYSBkaWZmZXJlbnQgZGlyZWN0b3J5CiAgICB0byBleHRyYWN0IHRvLiAgKm1lbWJlciogY2FuIGJlIGEgZmlsZW5hbWUgb3IgYSA6Y2xhc3M6YFppcEluZm9gIG9iamVjdC4KICAgICpwd2QqIGlzIHRoZSBwYXNzd29yZCB1c2VkIGZvciBlbmNyeXB0ZWQgZmlsZXMuCkBAIC0zNDMsOSArMzQzLDkgQEAKICAgICAgIElmIGBgYXJjbmFtZWBgIChvciBgYGZpbGVuYW1lYGAsIGlmIGBgYXJjbmFtZWBgIGlzICBub3QgZ2l2ZW4pIGNvbnRhaW5zIGEgbnVsbAogICAgICAgYnl0ZSwgdGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIGFyY2hpdmUgd2lsbCBiZSB0cnVuY2F0ZWQgYXQgdGhlIG51bGwgYnl0ZS4KIAotLi4gbWV0aG9kOjogWmlwRmlsZS53cml0ZXN0cih6aW5mb19vcl9hcmNuYW1lLCBieXRlc1ssIGNvbXByZXNzX3R5cGVdKQorLi4gbWV0aG9kOjogWmlwRmlsZS53cml0ZXN0cih6aW5mb19vcl9hcmNuYW1lLCBkYXRhWywgY29tcHJlc3NfdHlwZV0pCiAKLSAgIFdyaXRlIHRoZSBzdHJpbmcgKmJ5dGVzKiB0byB0aGUgYXJjaGl2ZTsgKnppbmZvX29yX2FyY25hbWUqIGlzIGVpdGhlciB0aGUgZmlsZQorICAgV3JpdGUgdGhlIHN0cmluZyAqZGF0YSogdG8gdGhlIGFyY2hpdmU7ICp6aW5mb19vcl9hcmNuYW1lKiBpcyBlaXRoZXIgdGhlIGZpbGUKICAgIG5hbWUgaXQgd2lsbCBiZSBnaXZlbiBpbiB0aGUgYXJjaGl2ZSwgb3IgYSA6Y2xhc3M6YFppcEluZm9gIGluc3RhbmNlLiAgSWYgaXQncwogICAgYW4gaW5zdGFuY2UsIGF0IGxlYXN0IHRoZSBmaWxlbmFtZSwgZGF0ZSwgYW5kIHRpbWUgbXVzdCBiZSBnaXZlbi4gIElmIGl0J3MgYQogICAgbmFtZSwgdGhlIGRhdGUgYW5kIHRpbWUgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUuCmRpZmYgLS1naXQgYS9Eb2MvcmVmZXJlbmNlL2RhdGFtb2RlbC5yc3QgYi9Eb2MvcmVmZXJlbmNlL2RhdGFtb2RlbC5yc3QKaW5kZXggNzFkNjk1Zi4uZjk3ZWIwOCAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9kYXRhbW9kZWwucnN0CisrKyBiL0RvYy9yZWZlcmVuY2UvZGF0YW1vZGVsLnJzdApAQCAtNDU0LDYgKzQ1NCwxOSBAQAogCiAgICAgICAuLiB0YWJ1bGFyY29sdW1uczo6IHxsfEx8bHwKIAorICAgICAgLi4gaW5kZXg6OgorICAgICAgICAgc2luZ2xlOiBfX2RvY19fIChmdW5jdGlvbiBhdHRyaWJ1dGUpCisgICAgICAgICBzaW5nbGU6IF9fbmFtZV9fIChmdW5jdGlvbiBhdHRyaWJ1dGUpCisgICAgICAgICBzaW5nbGU6IF9fbW9kdWxlX18gKGZ1bmN0aW9uIGF0dHJpYnV0ZSkKKyAgICAgICAgIHNpbmdsZTogX19kaWN0X18gKGZ1bmN0aW9uIGF0dHJpYnV0ZSkKKyAgICAgICAgIHNpbmdsZTogX19kZWZhdWx0c19fIChmdW5jdGlvbiBhdHRyaWJ1dGUpCisgICAgICAgICBzaW5nbGU6IF9fY2xvc3VyZV9fIChmdW5jdGlvbiBhdHRyaWJ1dGUpCisgICAgICAgICBzaW5nbGU6IF9fY29kZV9fIChmdW5jdGlvbiBhdHRyaWJ1dGUpCisgICAgICAgICBzaW5nbGU6IF9fZ2xvYmFsc19fIChmdW5jdGlvbiBhdHRyaWJ1dGUpCisgICAgICAgICBzaW5nbGU6IF9fYW5ub3RhdGlvbnNfXyAoZnVuY3Rpb24gYXR0cmlidXRlKQorICAgICAgICAgc2luZ2xlOiBfX2t3ZGVmYXVsdHNfXyAoZnVuY3Rpb24gYXR0cmlidXRlKQorICAgICAgICAgcGFpcjogZ2xvYmFsOyBuYW1lc3BhY2UKKwogICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSsKICAgICAgIHwgQXR0cmlidXRlICAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICB8CiAgICAgICArPT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09KwpAQCAtNDYyLDEwICs0NzUsMTEgQEAKICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCB1bmF2YWlsYWJsZTsgbm90IGluaGVyaXRlZCBieSB8ICAgICAgICAgICB8CiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3ViY2xhc3NlcyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfAogICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSsKLSAgICAgIHwgOmF0dHI6YF9fbmFtZV9fYCAgICAgICAgfCBUaGUgZnVuY3Rpb24ncyBuYW1lICAgICAgICAgICB8IFdyaXRhYmxlICB8CisgICAgICB8IDphdHRyOmB+ZGVmaW5pdGlvbi5cICAgIHwgVGhlIGZ1bmN0aW9uJ3MgbmFtZSAgICAgICAgICAgfCBXcml0YWJsZSAgfAorICAgICAgfCBfX25hbWVfX2AgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwKICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rCi0gICAgICB8IDphdHRyOmBfX3F1YWxuYW1lX19gICAgIHwgVGhlIGZ1bmN0aW9uJ3MgICAgICAgICAgICAgICAgfCBXcml0YWJsZSAgfAotICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IDp0ZXJtOmBxdWFsaWZpZWQgbmFtZWAgICAgICAgIHwgICAgICAgICAgIHwKKyAgICAgIHwgOmF0dHI6YH5kZWZpbml0aW9uLlwgICAgfCBUaGUgZnVuY3Rpb24ncyAgICAgICAgICAgICAgICB8IFdyaXRhYmxlICB8CisgICAgICB8IF9fcXVhbG5hbWVfX2AgICAgICAgICAgIHwgOnRlcm06YHF1YWxpZmllZCBuYW1lYCAgICAgICAgfCAgICAgICAgICAgfAogICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwKICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMgICAgICAgICB8ICAgICAgICAgICB8CiAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKwpAQCAtNDg5LDcgKzUwMyw3IEBACiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW9kdWxlIGluIHdoaWNoIHRoZSBmdW5jdGlvbiAgfCAgICAgICAgICAgfAogICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHdhcyBkZWZpbmVkLiAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwKICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rCi0gICAgICB8IDphdHRyOmBfX2RpY3RfX2AgICAgICAgIHwgVGhlIG5hbWVzcGFjZSBzdXBwb3J0aW5nICAgICAgfCBXcml0YWJsZSAgfAorICAgICAgfCA6YXR0cjpgfm9iamVjdC5fX2RpY3RfX2B8IFRoZSBuYW1lc3BhY2Ugc3VwcG9ydGluZyAgICAgIHwgV3JpdGFibGUgIHwKICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmJpdHJhcnkgZnVuY3Rpb24gICAgICAgICAgICB8ICAgICAgICAgICB8CiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXR0cmlidXRlcy4gICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfAogICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSsKQEAgLTUxOSwxOSArNTMzLDYgQEAKICAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBmdW5jdGlvbidzIGRlZmluaXRpb24gY2FuIGJlIHJldHJpZXZlZCBmcm9tIGl0cwogICAgICAgY29kZSBvYmplY3Q7IHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgaW50ZXJuYWwgdHlwZXMgYmVsb3cuCiAKLSAgICAgIC4uIGluZGV4OjoKLSAgICAgICAgIHNpbmdsZTogX19kb2NfXyAoZnVuY3Rpb24gYXR0cmlidXRlKQotICAgICAgICAgc2luZ2xlOiBfX25hbWVfXyAoZnVuY3Rpb24gYXR0cmlidXRlKQotICAgICAgICAgc2luZ2xlOiBfX21vZHVsZV9fIChmdW5jdGlvbiBhdHRyaWJ1dGUpCi0gICAgICAgICBzaW5nbGU6IF9fZGljdF9fIChmdW5jdGlvbiBhdHRyaWJ1dGUpCi0gICAgICAgICBzaW5nbGU6IF9fZGVmYXVsdHNfXyAoZnVuY3Rpb24gYXR0cmlidXRlKQotICAgICAgICAgc2luZ2xlOiBfX2Nsb3N1cmVfXyAoZnVuY3Rpb24gYXR0cmlidXRlKQotICAgICAgICAgc2luZ2xlOiBfX2NvZGVfXyAoZnVuY3Rpb24gYXR0cmlidXRlKQotICAgICAgICAgc2luZ2xlOiBfX2dsb2JhbHNfXyAoZnVuY3Rpb24gYXR0cmlidXRlKQotICAgICAgICAgc2luZ2xlOiBfX2Fubm90YXRpb25zX18gKGZ1bmN0aW9uIGF0dHJpYnV0ZSkKLSAgICAgICAgIHNpbmdsZTogX19rd2RlZmF1bHRzX18gKGZ1bmN0aW9uIGF0dHJpYnV0ZSkKLSAgICAgICAgIHBhaXI6IGdsb2JhbDsgbmFtZXNwYWNlCi0KICAgIEluc3RhbmNlIG1ldGhvZHMKICAgICAgIC4uIGluZGV4OjoKICAgICAgICAgIG9iamVjdDogbWV0aG9kCkBAIC01NTAsNyArNTUxLDcgQEAKIAogICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogOmF0dHI6YF9fc2VsZl9fYCBpcyB0aGUgY2xhc3MgaW5zdGFuY2Ugb2JqZWN0LAogICAgICAgOmF0dHI6YF9fZnVuY19fYCBpcyB0aGUgZnVuY3Rpb24gb2JqZWN0OyA6YXR0cjpgX19kb2NfX2AgaXMgdGhlIG1ldGhvZCdzCi0gICAgICBkb2N1bWVudGF0aW9uIChzYW1lIGFzIGBgX19mdW5jX18uX19kb2NfX2BgKTsgOmF0dHI6YF9fbmFtZV9fYCBpcyB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gKHNhbWUgYXMgYGBfX2Z1bmNfXy5fX2RvY19fYGApOyA6YXR0cjpgfmRlZmluaXRpb24uX19uYW1lX19gIGlzIHRoZQogICAgICAgbWV0aG9kIG5hbWUgKHNhbWUgYXMgYGBfX2Z1bmNfXy5fX25hbWVfX2BgKTsgOmF0dHI6YF9fbW9kdWxlX19gIGlzIHRoZQogICAgICAgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBtZXRob2Qgd2FzIGRlZmluZWQgaW4sIG9yIGBgTm9uZWBgIGlmIHVuYXZhaWxhYmxlLgogCkBAIC02MzcsNyArNjM4LDcgQEAKICAgICAgIHN0YW5kYXJkIGJ1aWx0LWluIG1vZHVsZSkuIFRoZSBudW1iZXIgYW5kIHR5cGUgb2YgdGhlIGFyZ3VtZW50cyBhcmUKICAgICAgIGRldGVybWluZWQgYnkgdGhlIEMgZnVuY3Rpb24uIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6CiAgICAgICA6YXR0cjpgX19kb2NfX2AgaXMgdGhlIGZ1bmN0aW9uJ3MgZG9jdW1lbnRhdGlvbiBzdHJpbmcsIG9yIGBgTm9uZWBgIGlmCi0gICAgICB1bmF2YWlsYWJsZTsgOmF0dHI6YF9fbmFtZV9fYCBpcyB0aGUgZnVuY3Rpb24ncyBuYW1lOyA6YXR0cjpgX19zZWxmX19gIGlzCisgICAgICB1bmF2YWlsYWJsZTsgOmF0dHI6YH5kZWZpbml0aW9uLl9fbmFtZV9fYCBpcyB0aGUgZnVuY3Rpb24ncyBuYW1lOyA6YXR0cjpgX19zZWxmX19gIGlzCiAgICAgICBzZXQgdG8gYGBOb25lYGAgKGJ1dCBzZWUgdGhlIG5leHQgaXRlbSk7IDphdHRyOmBfX21vZHVsZV9fYCBpcyB0aGUgbmFtZSBvZgogICAgICAgdGhlIG1vZHVsZSB0aGUgZnVuY3Rpb24gd2FzIGRlZmluZWQgaW4gb3IgYGBOb25lYGAgaWYgdW5hdmFpbGFibGUuCiAKQEAgLTY4Nyw3ICs2ODgsNyBAQAogCiAgICAuLiBpbmRleDo6IHNpbmdsZTogX19kaWN0X18gKG1vZHVsZSBhdHRyaWJ1dGUpCiAKLSAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZTogOmF0dHI6YF9fZGljdF9fYCBpcyB0aGUgbW9kdWxlJ3MgbmFtZXNwYWNlIGFzIGEKKyAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZTogOmF0dHI6YH5vYmplY3QuX19kaWN0X19gIGlzIHRoZSBtb2R1bGUncyBuYW1lc3BhY2UgYXMgYQogICAgZGljdGlvbmFyeSBvYmplY3QuCiAKICAgIC4uIGltcGwtZGV0YWlsOjoKQEAgLTc0Myw3ICs3NDQsNyBAQAogICAgbWV0aG9kIG9iamVjdCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgb2JqZWN0IHdyYXBwZWQgYnkgdGhlIHN0YXRpYyBtZXRob2QKICAgIG9iamVjdC4gU2VlIHNlY3Rpb24gOnJlZjpgZGVzY3JpcHRvcnNgIGZvciBhbm90aGVyIHdheSBpbiB3aGljaCBhdHRyaWJ1dGVzCiAgICByZXRyaWV2ZWQgZnJvbSBhIGNsYXNzIG1heSBkaWZmZXIgZnJvbSB0aG9zZSBhY3R1YWxseSBjb250YWluZWQgaW4gaXRzCi0gICA6YXR0cjpgX19kaWN0X19gLgorICAgOmF0dHI6YH5vYmplY3QuX19kaWN0X19gLgogCiAgICAuLiBpbmRleDo6IHRyaXBsZTogY2xhc3M7IGF0dHJpYnV0ZTsgYXNzaWdubWVudAogCkBAIC03NjEsOCArNzYyLDggQEAKICAgICAgIHNpbmdsZTogX19iYXNlc19fIChjbGFzcyBhdHRyaWJ1dGUpCiAgICAgICBzaW5nbGU6IF9fZG9jX18gKGNsYXNzIGF0dHJpYnV0ZSkKIAotICAgU3BlY2lhbCBhdHRyaWJ1dGVzOiA6YXR0cjpgX19uYW1lX19gIGlzIHRoZSBjbGFzcyBuYW1lOyA6YXR0cjpgX19tb2R1bGVfX2AgaXMKLSAgIHRoZSBtb2R1bGUgbmFtZSBpbiB3aGljaCB0aGUgY2xhc3Mgd2FzIGRlZmluZWQ7IDphdHRyOmBfX2RpY3RfX2AgaXMgdGhlCisgICBTcGVjaWFsIGF0dHJpYnV0ZXM6IDphdHRyOmB+ZGVmaW5pdGlvbi5fX25hbWVfX2AgaXMgdGhlIGNsYXNzIG5hbWU7IDphdHRyOmBfX21vZHVsZV9fYCBpcworICAgdGhlIG1vZHVsZSBuYW1lIGluIHdoaWNoIHRoZSBjbGFzcyB3YXMgZGVmaW5lZDsgOmF0dHI6YH5vYmplY3QuX19kaWN0X19gIGlzIHRoZQogICAgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBjbGFzcydzIG5hbWVzcGFjZTsgOmF0dHI6YH5jbGFzcy5fX2Jhc2VzX19gIGlzIGEKICAgIHR1cGxlIChwb3NzaWJseSBlbXB0eSBvciBhIHNpbmdsZXRvbikgY29udGFpbmluZyB0aGUgYmFzZSBjbGFzc2VzLCBpbiB0aGUKICAgIG9yZGVyIG9mIHRoZWlyIG9jY3VycmVuY2UgaW4gdGhlIGJhc2UgY2xhc3MgbGlzdDsgOmF0dHI6YF9fZG9jX19gIGlzIHRoZQpAQCAtNzg1LDcgKzc4Niw3IEBACiAgICBjbGFzcyBtZXRob2Qgb2JqZWN0cyBhcmUgYWxzbyB0cmFuc2Zvcm1lZDsgc2VlIGFib3ZlIHVuZGVyICJDbGFzc2VzIi4gIFNlZQogICAgc2VjdGlvbiA6cmVmOmBkZXNjcmlwdG9yc2AgZm9yIGFub3RoZXIgd2F5IGluIHdoaWNoIGF0dHJpYnV0ZXMgb2YgYSBjbGFzcwogICAgcmV0cmlldmVkIHZpYSBpdHMgaW5zdGFuY2VzIG1heSBkaWZmZXIgZnJvbSB0aGUgb2JqZWN0cyBhY3R1YWxseSBzdG9yZWQgaW4KLSAgIHRoZSBjbGFzcydzIDphdHRyOmBfX2RpY3RfX2AuICBJZiBubyBjbGFzcyBhdHRyaWJ1dGUgaXMgZm91bmQsIGFuZCB0aGUKKyAgIHRoZSBjbGFzcydzIDphdHRyOmB+b2JqZWN0Ll9fZGljdF9fYC4gIElmIG5vIGNsYXNzIGF0dHJpYnV0ZSBpcyBmb3VuZCwgYW5kIHRoZQogICAgb2JqZWN0J3MgY2xhc3MgaGFzIGEgOm1ldGg6YF9fZ2V0YXR0cl9fYCBtZXRob2QsIHRoYXQgaXMgY2FsbGVkIHRvIHNhdGlzZnkKICAgIHRoZSBsb29rdXAuCiAKQEAgLTE0NjYsNyArMTQ2Nyw3IEBACiBkZXNjcmlwdG9yIG11c3QgYmUgaW4gZWl0aGVyIHRoZSBvd25lcidzIGNsYXNzIGRpY3Rpb25hcnkgb3IgaW4gdGhlIGNsYXNzCiBkaWN0aW9uYXJ5IGZvciBvbmUgb2YgaXRzIHBhcmVudHMpLiAgSW4gdGhlIGV4YW1wbGVzIGJlbG93LCAidGhlIGF0dHJpYnV0ZSIKIHJlZmVycyB0byB0aGUgYXR0cmlidXRlIHdob3NlIG5hbWUgaXMgdGhlIGtleSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG93bmVyCi1jbGFzcycgOmF0dHI6YF9fZGljdF9fYC4KK2NsYXNzJyA6YXR0cjpgfm9iamVjdC5fX2RpY3RfX2AuCiAKIAogLi4gbWV0aG9kOjogb2JqZWN0Ll9fZ2V0X18oc2VsZiwgaW5zdGFuY2UsIG93bmVyKQpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL2V4dGVuc2lvbnMvc3VzcGljaW91cy5weSBiL0RvYy90b29scy9leHRlbnNpb25zL3N1c3BpY2lvdXMucHkKaW5kZXggZDNlZDg0OS4uMGE3MGU1NyAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL2V4dGVuc2lvbnMvc3VzcGljaW91cy5weQorKysgYi9Eb2MvdG9vbHMvZXh0ZW5zaW9ucy9zdXNwaWNpb3VzLnB5CkBAIC0yNzAsNSArMjcwLDUgQEAKICAgICAgICAgIyBpZ25vcmUgY29tbWVudHMgLS0gdG9vIG11Y2ggZmFsc2UgcG9zaXRpdmVzLgogICAgICAgICAjIChhbHRob3VnaCBkb2luZyB0aGlzIGNvdWxkIG1pc3Mgc29tZSBlcnJvcnM7CiAgICAgICAgICMgdGhlcmUgd2VyZSB0d28gc2VjdGlvbnMgImNvbW1lbnRlZC1vdXQiIGJ5IG1pc3Rha2UKLSAgICAgICAgIyBpbiB0aGUgUHl0aG9uIGRvY3MgdGhhdCB3b3VsZCBub3QgYmUgY2F0Y2hlZCkKKyAgICAgICAgIyBpbiB0aGUgUHl0aG9uIGRvY3MgdGhhdCB3b3VsZCBub3QgYmUgY2F1Z2h0KQogICAgICAgICByYWlzZSBub2Rlcy5Ta2lwTm9kZQpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2NsYXNzZXMucnN0IGIvRG9jL3R1dG9yaWFsL2NsYXNzZXMucnN0CmluZGV4IDI0ODlkNzUuLjAzYjc3ZTAgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9jbGFzc2VzLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvY2xhc3Nlcy5yc3QKQEAgLTk1MSw4ICs5NTEsOCBAQAogLi4gcnVicmljOjogRm9vdG5vdGVzCiAKIC4uIFsjXSBFeGNlcHQgZm9yIG9uZSB0aGluZy4gIE1vZHVsZSBvYmplY3RzIGhhdmUgYSBzZWNyZXQgcmVhZC1vbmx5IGF0dHJpYnV0ZSBjYWxsZWQKLSAgIDphdHRyOmBfX2RpY3RfX2Agd2hpY2ggcmV0dXJucyB0aGUgZGljdGlvbmFyeSB1c2VkIHRvIGltcGxlbWVudCB0aGUgbW9kdWxlJ3MKLSAgIG5hbWVzcGFjZTsgdGhlIG5hbWUgOmF0dHI6YF9fZGljdF9fYCBpcyBhbiBhdHRyaWJ1dGUgYnV0IG5vdCBhIGdsb2JhbCBuYW1lLgorICAgOmF0dHI6YH5vYmplY3QuX19kaWN0X19gIHdoaWNoIHJldHVybnMgdGhlIGRpY3Rpb25hcnkgdXNlZCB0byBpbXBsZW1lbnQgdGhlIG1vZHVsZSdzCisgICBuYW1lc3BhY2U7IHRoZSBuYW1lIDphdHRyOmB+b2JqZWN0Ll9fZGljdF9fYCBpcyBhbiBhdHRyaWJ1dGUgYnV0IG5vdCBhIGdsb2JhbCBuYW1lLgogICAgT2J2aW91c2x5LCB1c2luZyB0aGlzIHZpb2xhdGVzIHRoZSBhYnN0cmFjdGlvbiBvZiBuYW1lc3BhY2UgaW1wbGVtZW50YXRpb24sIGFuZAogICAgc2hvdWxkIGJlIHJlc3RyaWN0ZWQgdG8gdGhpbmdzIGxpa2UgcG9zdC1tb3J0ZW0gZGVidWdnZXJzLgogCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMi4wLnJzdCBiL0RvYy93aGF0c25ldy8yLjAucnN0CmluZGV4IDg3NDYyZjMuLjRkNDlhZjEgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy8yLjAucnN0CisrKyBiL0RvYy93aGF0c25ldy8yLjAucnN0CkBAIC01MDYsNyArNTA2LDcgQEAKIHlvdSdkIHVzZSB0aGUgOmZ1bmM6YGFwcGx5YCBidWlsdC1pbiBmdW5jdGlvbjogYGBhcHBseShmLCBhcmdzLCBrdylgYCBjYWxscyB0aGUKIGZ1bmN0aW9uIDpmdW5jOmBmYCB3aXRoIHRoZSBhcmd1bWVudCB0dXBsZSAqYXJncyogYW5kIHRoZSBrZXl3b3JkIGFyZ3VtZW50cyBpbgogdGhlIGRpY3Rpb25hcnkgKmt3Ki4gIDpmdW5jOmBhcHBseWAgIGlzIHRoZSBzYW1lIGluIDIuMCwgYnV0IHRoYW5rcyB0byBhIHBhdGNoCi1mcm9tIEdyZWcgRXdpbmcsIGBgZigqYXJncywgKiprdylgYCBhcyBhIHNob3J0ZXIgYW5kIGNsZWFyZXIgd2F5IHRvIGFjaGlldmUgdGhlCitmcm9tIEdyZWcgRXdpbmcsIGBgZigqYXJncywgKiprdylgYCBpcyBhIHNob3J0ZXIgYW5kIGNsZWFyZXIgd2F5IHRvIGFjaGlldmUgdGhlCiBzYW1lIGVmZmVjdC4gIFRoaXMgc3ludGF4IGlzIHN5bW1ldHJpY2FsIHdpdGggdGhlIHN5bnRheCBmb3IgZGVmaW5pbmcKIGZ1bmN0aW9uczo6CiAKZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8yLjEucnN0IGIvRG9jL3doYXRzbmV3LzIuMS5yc3QKaW5kZXggZTU1ZWFhYy4uMDYzNjZiOCAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3LzIuMS5yc3QKKysrIGIvRG9jL3doYXRzbmV3LzIuMS5yc3QKQEAgLTQ0Miw4ICs0NDIsOCBAQAogICAgZi5ncmFtbWFyID0gIkEgOjo9IEIgKEMgRCkqIgogCiBUaGUgZGljdGlvbmFyeSBjb250YWluaW5nIGF0dHJpYnV0ZXMgY2FuIGJlIGFjY2Vzc2VkIGFzIHRoZSBmdW5jdGlvbidzCi06YXR0cjpgX19kaWN0X19gLiBVbmxpa2UgdGhlIDphdHRyOmBfX2RpY3RfX2AgYXR0cmlidXRlIG9mIGNsYXNzIGluc3RhbmNlcywgaW4KLWZ1bmN0aW9ucyB5b3UgY2FuIGFjdHVhbGx5IGFzc2lnbiBhIG5ldyBkaWN0aW9uYXJ5IHRvIDphdHRyOmBfX2RpY3RfX2AsIHRob3VnaAorOmF0dHI6YH5vYmplY3QuX19kaWN0X19gLiBVbmxpa2UgdGhlIDphdHRyOmB+b2JqZWN0Ll9fZGljdF9fYCBhdHRyaWJ1dGUgb2YgY2xhc3MgaW5zdGFuY2VzLCBpbgorZnVuY3Rpb25zIHlvdSBjYW4gYWN0dWFsbHkgYXNzaWduIGEgbmV3IGRpY3Rpb25hcnkgdG8gOmF0dHI6YH5vYmplY3QuX19kaWN0X19gLCB0aG91Z2gKIHRoZSBuZXcgdmFsdWUgaXMgcmVzdHJpY3RlZCB0byBhIHJlZ3VsYXIgUHl0aG9uIGRpY3Rpb25hcnk7IHlvdSAqY2FuJ3QqIGJlCiB0cmlja3kgYW5kIHNldCBpdCB0byBhIDpjbGFzczpgVXNlckRpY3RgIGluc3RhbmNlLCBvciBhbnkgb3RoZXIgcmFuZG9tIG9iamVjdAogdGhhdCBiZWhhdmVzIGxpa2UgYSBtYXBwaW5nLgpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzIuMi5yc3QgYi9Eb2Mvd2hhdHNuZXcvMi4yLnJzdAppbmRleCA4ODVmZDYwLi40ZThkN2ZhIDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMi4yLnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMi4yLnJzdApAQCAtMTU3LDcgKzE1Nyw3IEBACiBjb252ZW50aW9ucywgc3VjaCBhcyBkZWZpbmluZyA6YXR0cjpgX19tZW1iZXJzX19gIGFuZCA6YXR0cjpgX19tZXRob2RzX19gCiBhdHRyaWJ1dGVzIHRoYXQgd2VyZSBsaXN0cyBvZiBuYW1lcywgYnV0IG9mdGVuIHRoZSBhdXRob3Igb2YgYW4gZXh0ZW5zaW9uIHR5cGUKIG9yIGEgY2xhc3Mgd291bGRuJ3QgYm90aGVyIHRvIGRlZmluZSB0aGVtLiAgWW91IGNvdWxkIGZhbGwgYmFjayBvbiBpbnNwZWN0aW5nCi10aGUgOmF0dHI6YF9fZGljdF9fYCBvZiBhbiBvYmplY3QsIGJ1dCB3aGVuIGNsYXNzIGluaGVyaXRhbmNlIG9yIGFuIGFyYml0cmFyeQordGhlIDphdHRyOmB+b2JqZWN0Ll9fZGljdF9fYCBvZiBhbiBvYmplY3QsIGJ1dCB3aGVuIGNsYXNzIGluaGVyaXRhbmNlIG9yIGFuIGFyYml0cmFyeQogOm1ldGg6YF9fZ2V0YXR0cl9fYCBob29rIHdlcmUgaW4gdXNlIHRoaXMgY291bGQgc3RpbGwgYmUgaW5hY2N1cmF0ZS4KIAogVGhlIG9uZSBiaWcgaWRlYSB1bmRlcmx5aW5nIHRoZSBuZXcgY2xhc3MgbW9kZWwgaXMgdGhhdCBhbiBBUEkgZm9yIGRlc2NyaWJpbmcKQEAgLTE2OSw3ICsxNjksNyBAQAogQXR0cmlidXRlIGRlc2NyaXB0b3JzIGFyZSBvYmplY3RzIHRoYXQgbGl2ZSBpbnNpZGUgY2xhc3Mgb2JqZWN0cywgYW5kIGhhdmUgYSBmZXcKIGF0dHJpYnV0ZXMgb2YgdGhlaXIgb3duOgogCi0qIDphdHRyOmBfX25hbWVfX2AgaXMgdGhlIGF0dHJpYnV0ZSdzIG5hbWUuCisqIDphdHRyOmB+ZGVmaW5pdGlvbi5fX25hbWVfX2AgaXMgdGhlIGF0dHJpYnV0ZSdzIG5hbWUuCiAKICogOmF0dHI6YF9fZG9jX19gIGlzIHRoZSBhdHRyaWJ1dGUncyBkb2NzdHJpbmcuCiAKQEAgLTMyOSw3ICszMjksNyBAQAogdG8gdHJhcCBhdHRyaWJ1dGUgcmVmZXJlbmNlcy4gIFdyaXRpbmcgYSA6bWV0aDpgX19nZXRhdHRyX19gIG1ldGhvZCBpcwogY29tcGxpY2F0ZWQgYmVjYXVzZSB0byBhdm9pZCByZWN1cnNpb24geW91IGNhbid0IHVzZSByZWd1bGFyIGF0dHJpYnV0ZSBhY2Nlc3NlcwogaW5zaWRlIHRoZW0sIGFuZCBpbnN0ZWFkIGhhdmUgdG8gbWVzcyBhcm91bmQgd2l0aCB0aGUgY29udGVudHMgb2YKLTphdHRyOmBfX2RpY3RfX2AuIDptZXRoOmBfX2dldGF0dHJfX2AgbWV0aG9kcyBhbHNvIGVuZCB1cCBiZWluZyBjYWxsZWQgYnkgUHl0aG9uCis6YXR0cjpgfm9iamVjdC5fX2RpY3RfX2AuIDptZXRoOmBfX2dldGF0dHJfX2AgbWV0aG9kcyBhbHNvIGVuZCB1cCBiZWluZyBjYWxsZWQgYnkgUHl0aG9uCiB3aGVuIGl0IGNoZWNrcyBmb3Igb3RoZXIgbWV0aG9kcyBzdWNoIGFzIDptZXRoOmBfX3JlcHJfX2Agb3IgOm1ldGg6YF9fY29lcmNlX19gLAogYW5kIHNvIGhhdmUgdG8gYmUgd3JpdHRlbiB3aXRoIHRoaXMgaW4gbWluZC4gRmluYWxseSwgY2FsbGluZyBhIGZ1bmN0aW9uIG9uCiBldmVyeSBhdHRyaWJ1dGUgYWNjZXNzIHJlc3VsdHMgaW4gYSBzaXphYmxlIHBlcmZvcm1hbmNlIGxvc3MuCkBAIC0zNTcsMTUgKzM1NywxNSBAQAogVGhhdCBpcyBjZXJ0YWlubHkgY2xlYXJlciBhbmQgZWFzaWVyIHRvIHdyaXRlIHRoYW4gYSBwYWlyIG9mCiA6bWV0aDpgX19nZXRhdHRyX19gLzptZXRoOmBfX3NldGF0dHJfX2AgbWV0aG9kcyB0aGF0IGNoZWNrIGZvciB0aGUgOmF0dHI6YHNpemVgCiBhdHRyaWJ1dGUgYW5kIGhhbmRsZSBpdCBzcGVjaWFsbHkgd2hpbGUgcmV0cmlldmluZyBhbGwgb3RoZXIgYXR0cmlidXRlcyBmcm9tIHRoZQotaW5zdGFuY2UncyA6YXR0cjpgX19kaWN0X19gLiAgQWNjZXNzZXMgdG8gOmF0dHI6YHNpemVgIGFyZSBhbHNvIHRoZSBvbmx5IG9uZXMKK2luc3RhbmNlJ3MgOmF0dHI6YH5vYmplY3QuX19kaWN0X19gLiAgQWNjZXNzZXMgdG8gOmF0dHI6YHNpemVgIGFyZSBhbHNvIHRoZSBvbmx5IG9uZXMKIHdoaWNoIGhhdmUgdG8gcGVyZm9ybSB0aGUgd29yayBvZiBjYWxsaW5nIGEgZnVuY3Rpb24sIHNvIHJlZmVyZW5jZXMgdG8gb3RoZXIKIGF0dHJpYnV0ZXMgcnVuIGF0IHRoZWlyIHVzdWFsIHNwZWVkLgogCiBGaW5hbGx5LCBpdCdzIHBvc3NpYmxlIHRvIGNvbnN0cmFpbiB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHRoYXQgY2FuIGJlCi1yZWZlcmVuY2VkIG9uIGFuIG9iamVjdCB1c2luZyB0aGUgbmV3IDphdHRyOmBfX3Nsb3RzX19gIGNsYXNzIGF0dHJpYnV0ZS4gUHl0aG9uCityZWZlcmVuY2VkIG9uIGFuIG9iamVjdCB1c2luZyB0aGUgbmV3IDphdHRyOmB+b2JqZWN0Ll9fc2xvdHNfX2AgY2xhc3MgYXR0cmlidXRlLiBQeXRob24KIG9iamVjdHMgYXJlIHVzdWFsbHkgdmVyeSBkeW5hbWljOyBhdCBhbnkgdGltZSBpdCdzIHBvc3NpYmxlIHRvIGRlZmluZSBhIG5ldwogYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlIGJ5IGp1c3QgZG9pbmcgYGBvYmoubmV3X2F0dHI9MWBgLiAgIEEgbmV3LXN0eWxlIGNsYXNzCi1jYW4gZGVmaW5lIGEgY2xhc3MgYXR0cmlidXRlIG5hbWVkIDphdHRyOmBfX3Nsb3RzX19gIHRvIGxpbWl0IHRoZSBsZWdhbAorY2FuIGRlZmluZSBhIGNsYXNzIGF0dHJpYnV0ZSBuYW1lZCA6YXR0cjpgfm9iamVjdC5fX3Nsb3RzX19gIHRvIGxpbWl0IHRoZSBsZWdhbAogYXR0cmlidXRlcyAgdG8gYSBwYXJ0aWN1bGFyIHNldCBvZiBuYW1lcy4gIEFuIGV4YW1wbGUgd2lsbCBtYWtlIHRoaXMgY2xlYXI6OgogCiAgICA+Pj4gY2xhc3MgQyhvYmplY3QpOgpAQCAtMzgzLDcgKzM4Myw3IEBACiAgICBBdHRyaWJ1dGVFcnJvcjogJ0MnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICduZXdhdHRyJwogCiBOb3RlIGhvdyB5b3UgZ2V0IGFuIDpleGM6YEF0dHJpYnV0ZUVycm9yYCBvbiB0aGUgYXR0ZW1wdCB0byBhc3NpZ24gdG8gYW4KLWF0dHJpYnV0ZSBub3QgbGlzdGVkIGluIDphdHRyOmBfX3Nsb3RzX19gLgorYXR0cmlidXRlIG5vdCBsaXN0ZWQgaW4gOmF0dHI6YH5vYmplY3QuX19zbG90c19fYC4KIAogCiAuLiBfc2VjdC1yZWxsaW5rczoKZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8yLjMucnN0IGIvRG9jL3doYXRzbmV3LzIuMy5yc3QKaW5kZXggYjhjZGNmMS4uZmU4MzY4ZSAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3LzIuMy5yc3QKKysrIGIvRG9jL3doYXRzbmV3LzIuMy5yc3QKQEAgLTExMTEsMTAgKzExMTEsMTAgQEAKICAgICAgPHR5cGUgJ19zb2NrZXQuc29ja2V0Jz4KIAogKiBPbmUgb2YgdGhlIG5vdGVkIGluY29tcGF0aWJpbGl0aWVzIGJldHdlZW4gb2xkLSBhbmQgbmV3LXN0eWxlIGNsYXNzZXMgaGFzIGJlZW4KLSAgcmVtb3ZlZDogeW91IGNhbiBub3cgYXNzaWduIHRvIHRoZSA6YXR0cjpgX19uYW1lX19gIGFuZCA6YXR0cjpgX19iYXNlc19fYAorICByZW1vdmVkOiB5b3UgY2FuIG5vdyBhc3NpZ24gdG8gdGhlIDphdHRyOmB+ZGVmaW5pdGlvbi5fX25hbWVfX2AgYW5kIDphdHRyOmB+Y2xhc3MuX19iYXNlc19fYAogICBhdHRyaWJ1dGVzIG9mIG5ldy1zdHlsZSBjbGFzc2VzLiAgVGhlcmUgYXJlIHNvbWUgcmVzdHJpY3Rpb25zIG9uIHdoYXQgY2FuIGJlCi0gIGFzc2lnbmVkIHRvIDphdHRyOmBfX2Jhc2VzX19gIGFsb25nIHRoZSBsaW5lcyBvZiB0aG9zZSByZWxhdGluZyB0byBhc3NpZ25pbmcgdG8KLSAgYW4gaW5zdGFuY2UncyA6YXR0cjpgX19jbGFzc19fYCBhdHRyaWJ1dGUuCisgIGFzc2lnbmVkIHRvIDphdHRyOmB+Y2xhc3MuX19iYXNlc19fYCBhbG9uZyB0aGUgbGluZXMgb2YgdGhvc2UgcmVsYXRpbmcgdG8gYXNzaWduaW5nIHRvCisgIGFuIGluc3RhbmNlJ3MgOmF0dHI6YH5pbnN0YW5jZS5fX2NsYXNzX19gIGF0dHJpYnV0ZS4KIAogLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC0xOTIwLDcgKzE5MjAsNyBAQAogCiAqIElmIHlvdSBkeW5hbWljYWxseSBhbGxvY2F0ZSB0eXBlIG9iamVjdHMgaW4geW91ciBleHRlbnNpb24sIHlvdSBzaG91bGQgYmUKICAgYXdhcmUgb2YgYSBjaGFuZ2UgaW4gdGhlIHJ1bGVzIHJlbGF0aW5nIHRvIHRoZSA6YXR0cjpgX19tb2R1bGVfX2AgYW5kCi0gIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlcy4gIEluIHN1bW1hcnksIHlvdSB3aWxsIHdhbnQgdG8gZW5zdXJlIHRoZSB0eXBlJ3MKKyAgOmF0dHI6YH5kZWZpbml0aW9uLl9fbmFtZV9fYCBhdHRyaWJ1dGVzLiAgSW4gc3VtbWFyeSwgeW91IHdpbGwgd2FudCB0byBlbnN1cmUgdGhlIHR5cGUncwogICBkaWN0aW9uYXJ5IGNvbnRhaW5zIGEgYGAnX19tb2R1bGVfXydgYCBrZXk7IG1ha2luZyB0aGUgbW9kdWxlIG5hbWUgdGhlIHBhcnQgb2YKICAgdGhlIHR5cGUgbmFtZSBsZWFkaW5nIHVwIHRvIHRoZSBmaW5hbCBwZXJpb2Qgd2lsbCBubyBsb25nZXIgaGF2ZSB0aGUgZGVzaXJlZAogICBlZmZlY3QuICBGb3IgbW9yZSBkZXRhaWwsIHJlYWQgdGhlIEFQSSByZWZlcmVuY2UgZG9jdW1lbnRhdGlvbiBvciB0aGUgIHNvdXJjZS4KZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8zLjAucnN0IGIvRG9jL3doYXRzbmV3LzMuMC5yc3QKaW5kZXggMDQ0ZDdiZS4uZjUzZTRmOCAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3LzMuMC5yc3QKKysrIGIvRG9jL3doYXRzbmV3LzMuMC5yc3QKQEAgLTc4Myw4ICs3ODMsOCBAQAogICA6YXR0cjpgZnVuY19jbG9zdXJlYCwgOmF0dHI6YGZ1bmNfY29kZWAsIDphdHRyOmBmdW5jX2RlZmF1bHRzYCwKICAgOmF0dHI6YGZ1bmNfZGljdGAsIDphdHRyOmBmdW5jX2RvY2AsIDphdHRyOmBmdW5jX2dsb2JhbHNgLAogICA6YXR0cjpgZnVuY19uYW1lYCB3ZXJlIHJlbmFtZWQgdG8gOmF0dHI6YF9fY2xvc3VyZV9fYCwKLSAgOmF0dHI6YF9fY29kZV9fYCwgOmF0dHI6YF9fZGVmYXVsdHNfX2AsIDphdHRyOmBfX2RpY3RfX2AsCi0gIDphdHRyOmBfX2RvY19fYCwgOmF0dHI6YF9fZ2xvYmFsc19fYCwgOmF0dHI6YF9fbmFtZV9fYCwKKyAgOmF0dHI6YF9fY29kZV9fYCwgOmF0dHI6YF9fZGVmYXVsdHNfX2AsIDphdHRyOmB+b2JqZWN0Ll9fZGljdF9fYCwKKyAgOmF0dHI6YF9fZG9jX19gLCA6YXR0cjpgX19nbG9iYWxzX19gLCA6YXR0cjpgfmRlZmluaXRpb24uX19uYW1lX19gLAogICByZXNwZWN0aXZlbHkuCiAKICogOm1ldGg6YF9fbm9uemVyb19fYCBpcyBub3cgOm1ldGg6YF9fYm9vbF9fYC4KZGlmZiAtLWdpdCBhL0xpYi9jb250ZXh0bGliLnB5IGIvTGliL2NvbnRleHRsaWIucHkKaW5kZXggNTM3Nzk4Ny4uZDQ0ZWRkNiAxMDA2NDQKLS0tIGEvTGliL2NvbnRleHRsaWIucHkKKysrIGIvTGliL2NvbnRleHRsaWIucHkKQEAgLTgyLDYgKzgyLDkgQEAKICAgICAgICAgICAgICAgICAjIHJhaXNlZCBpbnNpZGUgdGhlICJ3aXRoIiBzdGF0ZW1lbnQgZnJvbSBiZWluZyBzdXBwcmVzc2VkLgogICAgICAgICAgICAgICAgIHJldHVybiBleGMgaXMgbm90IHZhbHVlCiAgICAgICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAjIERvbid0IHJlLXJhaXNlIHRoZSBwYXNzZWQgaW4gZXhjZXB0aW9uLiAoaXNzdWUyNzExMikKKyAgICAgICAgICAgICAgICBpZiBleGMgaXMgdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgICAgICMgTGlrZXdpc2UsIGF2b2lkIHN1cHByZXNzaW5nIGlmIGEgU3RvcEl0ZXJhdGlvbiBleGNlcHRpb24KICAgICAgICAgICAgICAgICAjIHdhcyBwYXNzZWQgdG8gdGhyb3coKSBhbmQgbGF0ZXIgd3JhcHBlZCBpbnRvIGEgUnVudGltZUVycm9yCiAgICAgICAgICAgICAgICAgIyAoc2VlIFBFUCA0NzkpLgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZmluZC5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ZpbmQucHkKaW5kZXggZTZiYzE5ZC4uMjBjNTMzNyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZmluZC5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9maW5kLnB5CkBAIC0xLDUgKzEsNSBAQAogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgb3MKK2ltcG9ydCBvcywgb3MucGF0aAogaW1wb3J0IHN5cwogaW1wb3J0IHRlc3Quc3VwcG9ydAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKQEAgLTY0LDYgKzY0LDExIEBACiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdsaWJfZ2xlIG5vdCBhdmFpbGFibGUnKQogICAgICAgICBzZWxmLmdsZS5nbGVHZXRKb2luU3R5bGUKIAorICAgIGRlZiB0ZXN0X3NoZWxsX2luamVjdGlvbihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gZmluZF9saWJyYXJ5KCc7IGVjaG8gSGVsbG8gc2hlbGwgPiAnICsgdGVzdC5zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmxleGlzdHModGVzdC5zdXBwb3J0LlRFU1RGTikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdCkKKwogIyBPbiBwbGF0Zm9ybXMgd2hlcmUgdGhlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgc3VmZml4IGlzICcuc28nLAogIyBhdCBsZWFzdCBzb21lIGxpYnJhcmllcyBjYW4gYmUgbG9hZGVkIGFzIGF0dHJpYnV0ZXMgb2YgdGhlIGNkbGwKICMgb2JqZWN0LCBzaW5jZSBjdHlwZXMgbm93IHRyaWVzIGxvYWRpbmcgdGhlIGxpYiBhZ2FpbgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0dXJlcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cnVjdHVyZXMucHkKaW5kZXggODRkNDU2Yy4uZDk5OGMyNyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0dXJlcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJ1Y3R1cmVzLnB5CkBAIC0yMjcsMTAgKzIyNywxMCBAQAogCiAgICAgZGVmIHRlc3RfY29uZmxpY3RpbmdfaW5pdGlhbGl6ZXJzKHNlbGYpOgogICAgICAgICBjbGFzcyBQT0lOVChTdHJ1Y3R1cmUpOgotICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJ4IiwgY19pbnQpLCAoInkiLCBjX2ludCldCisgICAgICAgICAgICBfZmllbGRzXyA9IFsoInBoaSIsIGNfZmxvYXQpLCAoInJobyIsIGNfZmxvYXQpXQogICAgICAgICAjIGNvbmZsaWN0aW5nIHBvc2l0aW9uYWwgYW5kIGtleXdvcmQgYXJncwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIFBPSU5ULCAyLCAzLCB4PTQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgUE9JTlQsIDIsIDMsIHk9NCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJwaGkiLCBQT0lOVCwgMiwgMywgcGhpPTQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAicmhvIiwgUE9JTlQsIDIsIDMsIHJobz00KQogCiAgICAgICAgICMgdG9vIG1hbnkgaW5pdGlhbGl6ZXJzCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgUE9JTlQsIDIsIDMsIDQpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3V0aWwucHkgYi9MaWIvY3R5cGVzL3V0aWwucHkKaW5kZXggOGZmNGFmZi4uNzY4NGVhYiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy91dGlsLnB5CisrKyBiL0xpYi9jdHlwZXMvdXRpbC5weQpAQCAtMSw2ICsxLDcgQEAKLWltcG9ydCBzeXMsIG9zCi1pbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cwogCiAjIGZpbmRfbGlicmFyeShuYW1lKSByZXR1cm5zIHRoZSBwYXRobmFtZSBvZiBhIGxpYnJhcnksIG9yIE5vbmUuCiBpZiBvcy5uYW1lID09ICJudCI6CkBAIC05NCwyOCArOTUsNDYgQEAKICAgICBpbXBvcnQgcmUsIHRlbXBmaWxlCiAKICAgICBkZWYgX2ZpbmRMaWJfZ2NjKG5hbWUpOgotICAgICAgICBleHByID0gcidbXlwoXClcc10qbGliJXNcLlteXChcKVxzXSonICUgcmUuZXNjYXBlKG5hbWUpCi0gICAgICAgIGZkb3V0LCBjY291dCA9IHRlbXBmaWxlLm1rc3RlbXAoKQotICAgICAgICBvcy5jbG9zZShmZG91dCkKLSAgICAgICAgY21kID0gJ2lmIHR5cGUgZ2NjID4vZGV2L251bGwgMj4mMTsgdGhlbiBDQz1nY2M7IGVsaWYgdHlwZSBjYyA+L2Rldi9udWxsIDI+JjE7IHRoZW4gQ0M9Y2M7ZWxzZSBleGl0IDEwOyBmaTsnIFwKLSAgICAgICAgICAgICAgJ0xBTkc9QyBMQ19BTEw9QyAkQ0MgLVdsLC10IC1vICcgKyBjY291dCArICcgMj4mMSAtbCcgKyBuYW1lCisgICAgICAgICMgUnVuIEdDQydzIGxpbmtlciB3aXRoIHRoZSAtdCAoYWthIC0tdHJhY2UpIG9wdGlvbiBhbmQgZXhhbWluZSB0aGUKKyAgICAgICAgIyBsaWJyYXJ5IG5hbWUgaXQgcHJpbnRzIG91dC4gVGhlIEdDQyBjb21tYW5kIHdpbGwgZmFpbCBiZWNhdXNlIHdlCisgICAgICAgICMgaGF2ZW4ndCBzdXBwbGllZCBhIHByb3BlciBwcm9ncmFtIHdpdGggbWFpbigpLCBidXQgdGhhdCBkb2VzIG5vdAorICAgICAgICAjIG1hdHRlci4KKyAgICAgICAgZXhwciA9IG9zLmZzZW5jb2RlKHInW15cKFwpXHNdKmxpYiVzXC5bXlwoXClcc10qJyAlIHJlLmVzY2FwZShuYW1lKSkKKworICAgICAgICBjX2NvbXBpbGVyID0gc2h1dGlsLndoaWNoKCdnY2MnKQorICAgICAgICBpZiBub3QgY19jb21waWxlcjoKKyAgICAgICAgICAgIGNfY29tcGlsZXIgPSBzaHV0aWwud2hpY2goJ2NjJykKKyAgICAgICAgaWYgbm90IGNfY29tcGlsZXI6CisgICAgICAgICAgICAjIE5vIEMgY29tcGlsZXIgYXZhaWxhYmxlLCBnaXZlIHVwCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHRlbXAgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmID0gb3MucG9wZW4oY21kKQorICAgICAgICAgICAgYXJncyA9IFtjX2NvbXBpbGVyLCAnLVdsLC10JywgJy1vJywgdGVtcC5uYW1lLCAnLWwnICsgbmFtZV0KKworICAgICAgICAgICAgZW52ID0gZGljdChvcy5lbnZpcm9uKQorICAgICAgICAgICAgZW52WydMQ19BTEwnXSA9ICdDJworICAgICAgICAgICAgZW52WydMQU5HJ10gPSAnQycKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0cmFjZSA9IGYucmVhZCgpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIHJ2ID0gZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52KQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6ICAjIEUuZy4gYmFkIGV4ZWN1dGFibGUKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgd2l0aCBwcm9jOgorICAgICAgICAgICAgICAgIHRyYWNlID0gcHJvYy5zdGRvdXQucmVhZCgpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MudW5saW5rKGNjb3V0KQorICAgICAgICAgICAgICAgIHRlbXAuY2xvc2UoKQogICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICAgICAgICMgUmFpc2VkIGlmIHRoZSBmaWxlIHdhcyBhbHJlYWR5IHJlbW92ZWQsIHdoaWNoIGlzIHRoZSBub3JtYWwKKyAgICAgICAgICAgICAgICAjIGJlaGF2aW91ciBvZiBHQ0MgaWYgbGlua2luZyBmYWlscwogICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgaWYgcnYgPT0gMTA6Ci0gICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdnY2Mgb3IgY2MgY29tbWFuZCBub3QgZm91bmQnKQogICAgICAgICByZXMgPSByZS5zZWFyY2goZXhwciwgdHJhY2UpCiAgICAgICAgIGlmIG5vdCByZXM6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICByZXR1cm4gcmVzLmdyb3VwKDApCisgICAgICAgIHJldHVybiBvcy5mc2RlY29kZShyZXMuZ3JvdXAoMCkpCiAKIAogICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAic3Vub3M1IjoKQEAgLTEyMyw1NSArMTQyLDc1IEBACiAgICAgICAgIGRlZiBfZ2V0X3NvbmFtZShmKToKICAgICAgICAgICAgIGlmIG5vdCBmOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICBjbWQgPSAiL3Vzci9jY3MvYmluL2R1bXAgLUxwdiAyPi9kZXYvbnVsbCAiICsgZgotICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLmNsb3Npbmcob3MucG9wZW4oY21kKSkgYXMgZjoKLSAgICAgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKLSAgICAgICAgICAgIHJlcyA9IHJlLnNlYXJjaChyJ1xbLipcXVxzU09OQU1FXHMrKFteXHNdKyknLCBkYXRhKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oKCIvdXNyL2Njcy9iaW4vZHVtcCIsICItTHB2IiwgZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6ICAjIEUuZy4gY29tbWFuZCBub3QgZm91bmQKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgd2l0aCBwcm9jOgorICAgICAgICAgICAgICAgIGRhdGEgPSBwcm9jLnN0ZG91dC5yZWFkKCkKKyAgICAgICAgICAgIHJlcyA9IHJlLnNlYXJjaChicidcWy4qXF1cc1NPTkFNRVxzKyhbXlxzXSspJywgZGF0YSkKICAgICAgICAgICAgIGlmIG5vdCByZXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgIHJldHVybiByZXMuZ3JvdXAoMSkKKyAgICAgICAgICAgIHJldHVybiBvcy5mc2RlY29kZShyZXMuZ3JvdXAoMSkpCiAgICAgZWxzZToKICAgICAgICAgZGVmIF9nZXRfc29uYW1lKGYpOgogICAgICAgICAgICAgIyBhc3N1bWluZyBHTlUgYmludXRpbHMgLyBFTEYKICAgICAgICAgICAgIGlmIG5vdCBmOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICBjbWQgPSAnaWYgISB0eXBlIG9iamR1bXAgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIGV4aXQgMTA7IGZpOycgXAotICAgICAgICAgICAgICAgICAgIm9iamR1bXAgLXAgLWogLmR5bmFtaWMgMj4vZGV2L251bGwgIiArIGYKLSAgICAgICAgICAgIGYgPSBvcy5wb3BlbihjbWQpCisgICAgICAgICAgICBvYmpkdW1wID0gc2h1dGlsLndoaWNoKCdvYmpkdW1wJykKKyAgICAgICAgICAgIGlmIG5vdCBvYmpkdW1wOgorICAgICAgICAgICAgICAgICMgb2JqZHVtcCBpcyBub3QgYXZhaWxhYmxlLCBnaXZlIHVwCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGR1bXAgPSBmLnJlYWQoKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBydiA9IGYuY2xvc2UoKQotICAgICAgICAgICAgaWYgcnYgPT0gMTA6Ci0gICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignb2JqZHVtcCBjb21tYW5kIG5vdCBmb3VuZCcpCi0gICAgICAgICAgICByZXMgPSByZS5zZWFyY2gocidcc1NPTkFNRVxzKyhbXlxzXSspJywgZHVtcCkKKyAgICAgICAgICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3Blbigob2JqZHVtcCwgJy1wJywgJy1qJywgJy5keW5hbWljJywgZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6ICAjIEUuZy4gYmFkIGV4ZWN1dGFibGUKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgd2l0aCBwcm9jOgorICAgICAgICAgICAgICAgIGR1bXAgPSBwcm9jLnN0ZG91dC5yZWFkKCkKKyAgICAgICAgICAgIHJlcyA9IHJlLnNlYXJjaChicidcc1NPTkFNRVxzKyhbXlxzXSspJywgZHVtcCkKICAgICAgICAgICAgIGlmIG5vdCByZXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgIHJldHVybiByZXMuZ3JvdXAoMSkKKyAgICAgICAgICAgIHJldHVybiBvcy5mc2RlY29kZShyZXMuZ3JvdXAoMSkpCiAKICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgoImZyZWVic2QiLCAib3BlbmJzZCIsICJkcmFnb25mbHkiKSk6CiAKICAgICAgICAgZGVmIF9udW1fdmVyc2lvbihsaWJuYW1lKToKICAgICAgICAgICAgICMgImxpYnh5ei5zby5NQUpPUi5NSU5PUiIgPT4gWyBNQUpPUiwgTUlOT1IgXQotICAgICAgICAgICAgcGFydHMgPSBsaWJuYW1lLnNwbGl0KCIuIikKKyAgICAgICAgICAgIHBhcnRzID0gbGlibmFtZS5zcGxpdChiIi4iKQogICAgICAgICAgICAgbnVtcyA9IFtdCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgd2hpbGUgcGFydHM6CiAgICAgICAgICAgICAgICAgICAgIG51bXMuaW5zZXJ0KDAsIGludChwYXJ0cy5wb3AoKSkpCiAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICByZXR1cm4gbnVtcyBvciBbIHN5cy5tYXhzaXplIF0KKyAgICAgICAgICAgIHJldHVybiBudW1zIG9yIFtzeXMubWF4c2l6ZV0KIAogICAgICAgICBkZWYgZmluZF9saWJyYXJ5KG5hbWUpOgogICAgICAgICAgICAgZW5hbWUgPSByZS5lc2NhcGUobmFtZSkKICAgICAgICAgICAgIGV4cHIgPSByJzotbCVzXC5cUysgPT4gXFMqLyhsaWIlc1wuXFMrKScgJSAoZW5hbWUsIGVuYW1lKQotICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLmNsb3Npbmcob3MucG9wZW4oJy9zYmluL2xkY29uZmlnIC1yIDI+L2Rldi9udWxsJykpIGFzIGY6Ci0gICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICBleHByID0gb3MuZnNlbmNvZGUoZXhwcikKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKCgnL3NiaW4vbGRjb25maWcnLCAnLXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjogICMgRS5nLiBjb21tYW5kIG5vdCBmb3VuZAorICAgICAgICAgICAgICAgIGRhdGEgPSBiJycKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgd2l0aCBwcm9jOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gcHJvYy5zdGRvdXQucmVhZCgpCisKICAgICAgICAgICAgIHJlcyA9IHJlLmZpbmRhbGwoZXhwciwgZGF0YSkKICAgICAgICAgICAgIGlmIG5vdCByZXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIF9nZXRfc29uYW1lKF9maW5kTGliX2djYyhuYW1lKSkKICAgICAgICAgICAgIHJlcy5zb3J0KGtleT1fbnVtX3ZlcnNpb24pCi0gICAgICAgICAgICByZXR1cm4gcmVzWy0xXQorICAgICAgICAgICAgcmV0dXJuIG9zLmZzZGVjb2RlKHJlc1stMV0pCiAKICAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAic3Vub3M1IjoKIApAQCAtMTc5LDE3ICsyMTgsMjcgQEAKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygnL3Vzci9iaW4vY3JsZScpOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAKKyAgICAgICAgICAgIGVudiA9IGRpY3Qob3MuZW52aXJvbikKKyAgICAgICAgICAgIGVudlsnTENfQUxMJ10gPSAnQycKKwogICAgICAgICAgICAgaWYgaXM2NDoKLSAgICAgICAgICAgICAgICBjbWQgPSAnZW52IExDX0FMTD1DIC91c3IvYmluL2NybGUgLTY0IDI+L2Rldi9udWxsJworICAgICAgICAgICAgICAgIGFyZ3MgPSAoJy91c3IvYmluL2NybGUnLCAnLTY0JykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY21kID0gJ2VudiBMQ19BTEw9QyAvdXNyL2Jpbi9jcmxlIDI+L2Rldi9udWxsJworICAgICAgICAgICAgICAgIGFyZ3MgPSAoJy91c3IvYmluL2NybGUnLCkKIAogICAgICAgICAgICAgcGF0aHMgPSBOb25lCi0gICAgICAgICAgICB3aXRoIGNvbnRleHRsaWIuY2xvc2luZyhvcy5wb3BlbihjbWQpKSBhcyBmOgotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGYucmVhZGxpbmVzKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAgIyBFLmcuIGJhZCBleGVjdXRhYmxlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHdpdGggcHJvYzoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBwcm9jLnN0ZG91dDoKICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0RlZmF1bHQgTGlicmFyeSBQYXRoIChFTEYpOicpOgotICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBsaW5lLnNwbGl0KClbNF0KKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKGInRGVmYXVsdCBMaWJyYXJ5IFBhdGggKEVMRik6Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRocyA9IG9zLmZzZGVjb2RlKGxpbmUpLnNwbGl0KClbNF0KIAogICAgICAgICAgICAgaWYgbm90IHBhdGhzOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCmRpZmYgLS1naXQgYS9MaWIvY3Vyc2VzL2FzY2lpLnB5IGIvTGliL2N1cnNlcy9hc2NpaS5weQppbmRleCA4MDBmZDhiLi42YTQ2NmUwIDEwMDY0NAotLS0gYS9MaWIvY3Vyc2VzL2FzY2lpLnB5CisrKyBiL0xpYi9jdXJzZXMvYXNjaWkucHkKQEAgLTU0LDEzICs1NCwxMyBAQAogZGVmIGlzYWxudW0oYyk6IHJldHVybiBpc2FscGhhKGMpIG9yIGlzZGlnaXQoYykKIGRlZiBpc2FscGhhKGMpOiByZXR1cm4gaXN1cHBlcihjKSBvciBpc2xvd2VyKGMpCiBkZWYgaXNhc2NpaShjKTogcmV0dXJuIF9jdG9pKGMpIDw9IDEyNyAgICAgICAgICAjID8KLWRlZiBpc2JsYW5rKGMpOiByZXR1cm4gX2N0b2koYykgaW4gKDgsMzIpCi1kZWYgaXNjbnRybChjKTogcmV0dXJuIF9jdG9pKGMpIDw9IDMxCitkZWYgaXNibGFuayhjKTogcmV0dXJuIF9jdG9pKGMpIGluICg5LCAzMikKK2RlZiBpc2NudHJsKGMpOiByZXR1cm4gX2N0b2koYykgPD0gMzEgb3IgX2N0b2koYykgPT0gMTI3CiBkZWYgaXNkaWdpdChjKTogcmV0dXJuIF9jdG9pKGMpID49IDQ4IGFuZCBfY3RvaShjKSA8PSA1NwogZGVmIGlzZ3JhcGgoYyk6IHJldHVybiBfY3RvaShjKSA+PSAzMyBhbmQgX2N0b2koYykgPD0gMTI2CiBkZWYgaXNsb3dlcihjKTogcmV0dXJuIF9jdG9pKGMpID49IDk3IGFuZCBfY3RvaShjKSA8PSAxMjIKIGRlZiBpc3ByaW50KGMpOiByZXR1cm4gX2N0b2koYykgPj0gMzIgYW5kIF9jdG9pKGMpIDw9IDEyNgotZGVmIGlzcHVuY3QoYyk6IHJldHVybiBfY3RvaShjKSAhPSAzMiBhbmQgbm90IGlzYWxudW0oYykKK2RlZiBpc3B1bmN0KGMpOiByZXR1cm4gaXNncmFwaChjKSBhbmQgbm90IGlzYWxudW0oYykKIGRlZiBpc3NwYWNlKGMpOiByZXR1cm4gX2N0b2koYykgaW4gKDksIDEwLCAxMSwgMTIsIDEzLCAzMikKIGRlZiBpc3VwcGVyKGMpOiByZXR1cm4gX2N0b2koYykgPj0gNjUgYW5kIF9jdG9pKGMpIDw9IDkwCiBkZWYgaXN4ZGlnaXQoYyk6IHJldHVybiBpc2RpZ2l0KGMpIG9yIFwKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvX21zdmNjb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvX21zdmNjb21waWxlci5weQppbmRleCBkMGJhN2Q2Li5iMTIwMjczIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL19tc3ZjY29tcGlsZXIucHkKKysrIGIvTGliL2Rpc3R1dGlscy9fbXN2Y2NvbXBpbGVyLnB5CkBAIC04NiwxMSArODYsOSBAQAogCiAgICAgdHJ5OgogICAgICAgICBvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKLSAgICAgICAgICAgICcie30iIHt9ICYmIHNldCcuZm9ybWF0KHZjdmFyc2FsbCwgcGxhdF9zcGVjKSwKLSAgICAgICAgICAgIHNoZWxsPVRydWUsCisgICAgICAgICAgICAnY21kIC91IC9jICJ7fSIge30gJiYgc2V0Jy5mb3JtYXQodmN2YXJzYWxsLCBwbGF0X3NwZWMpLAogICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULAotICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUsCi0gICAgICAgICkKKyAgICAgICAgKS5kZWNvZGUoJ3V0Zi0xNmxlJywgZXJyb3JzPSdyZXBsYWNlJykKICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZXhjOgogICAgICAgICBsb2cuZXJyb3IoZXhjLm91dHB1dCkKICAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcigiRXJyb3IgZXhlY3V0aW5nIHt9IgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL3VwbG9hZC5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC91cGxvYWQucHkKaW5kZXggMGFmY2JmMi4uMWZkNTc0YSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL3VwbG9hZC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvdXBsb2FkLnB5CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgIGRhdGEgPSB7CiAgICAgICAgICAgICAjIGFjdGlvbgogICAgICAgICAgICAgJzphY3Rpb24nOiAnZmlsZV91cGxvYWQnLAotICAgICAgICAgICAgJ3Byb3Rjb2xfdmVyc2lvbic6ICcxJywKKyAgICAgICAgICAgICdwcm90b2NvbF92ZXJzaW9uJzogJzEnLAogCiAgICAgICAgICAgICAjIGlkZW50aWZ5IHJlbGVhc2UKICAgICAgICAgICAgICduYW1lJzogbWV0YS5nZXRfbmFtZSgpLApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvbmZpZy5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jb25maWcucHkKaW5kZXggNGRlODI1YS4uM2RkOTJkNiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvbmZpZy5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29uZmlnLnB5CkBAIC0xOCw2ICsxOCw3IEBACiBpbmRleC1zZXJ2ZXJzID0KICAgICBzZXJ2ZXIxCiAgICAgc2VydmVyMgorICAgIHNlcnZlcjMKIAogW3NlcnZlcjFdCiB1c2VybmFtZTptZQpAQCAtMjgsNiArMjksMTAgQEAKIHBhc3N3b3JkOiBzZWNyZXQKIHJlYWxtOmFjbWUKIHJlcG9zaXRvcnk6aHR0cDovL2Fub3RoZXIucHlwaS8KKworW3NlcnZlcjNdCit1c2VybmFtZTpjYmlnZ2xlcworcGFzc3dvcmQ6eWheJSNyZXN0LW9mLW15LXBhc3N3b3JkCiAiIiIKIAogUFlQSVJDX09MRCA9ICIiIlwKQEAgLTQ3LDE0ICs1MiwxNCBAQAogIiIiCiAKIAotY2xhc3MgUHlQSVJDQ29tbWFuZFRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCitjbGFzcyBCYXNlUHlQSVJDQ29tbWFuZFRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5FbnZpcm9uR3VhcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAiIiJQYXRjaGVzIHRoZSBlbnZpcm9ubWVudC4iIiIKLSAgICAgICAgc3VwZXIoUHlQSVJDQ29tbWFuZFRlc3RDYXNlLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHN1cGVyKEJhc2VQeVBJUkNDb21tYW5kVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKICAgICAgICAgc2VsZi50bXBfZGlyID0gc2VsZi5ta2R0ZW1wKCkKICAgICAgICAgb3MuZW52aXJvblsnSE9NRSddID0gc2VsZi50bXBfZGlyCiAgICAgICAgIHNlbGYucmMgPSBvcy5wYXRoLmpvaW4oc2VsZi50bXBfZGlyLCAnLnB5cGlyYycpCkBAIC03Myw3ICs3OCwxMCBAQAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgIiIiUmVtb3ZlcyB0aGUgcGF0Y2guIiIiCiAgICAgICAgIHNldF90aHJlc2hvbGQoc2VsZi5vbGRfdGhyZXNob2xkKQotICAgICAgICBzdXBlcihQeVBJUkNDb21tYW5kVGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKKyAgICAgICAgc3VwZXIoQmFzZVB5UElSQ0NvbW1hbmRUZXN0Q2FzZSwgc2VsZikudGVhckRvd24oKQorCisKK2NsYXNzIFB5UElSQ0NvbW1hbmRUZXN0Q2FzZShCYXNlUHlQSVJDQ29tbWFuZFRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3NlcnZlcl9yZWdpc3RyYXRpb24oc2VsZik6CiAgICAgICAgICMgVGhpcyB0ZXN0IG1ha2VzIHN1cmUgUHlQSVJDQ29tbWFuZCBrbm93cyBob3cgdG86CkBAIC0xMTMsNiArMTIxLDIwIEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBmLmNsb3NlKCkKIAorICAgIGRlZiB0ZXN0X2NvbmZpZ19pbnRlcnBvbGF0aW9uKHNlbGYpOgorICAgICAgICAjIHVzaW5nIHRoZSAlIGNoYXJhY3RlciBpbiAucHlwaXJjIHNob3VsZCBub3QgcmFpc2UgYW4gZXJyb3IgKCMyMDEyMCkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKHNlbGYucmMsIFBZUElSQykKKyAgICAgICAgY21kID0gc2VsZi5fY21kKHNlbGYuZGlzdCkKKyAgICAgICAgY21kLnJlcG9zaXRvcnkgPSAnc2VydmVyMycKKyAgICAgICAgY29uZmlnID0gY21kLl9yZWFkX3B5cGlyYygpCisKKyAgICAgICAgY29uZmlnID0gbGlzdChzb3J0ZWQoY29uZmlnLml0ZW1zKCkpKQorICAgICAgICB3YWl0ZWQgPSBbKCdwYXNzd29yZCcsICd5aF4lI3Jlc3Qtb2YtbXktcGFzc3dvcmQnKSwgKCdyZWFsbScsICdweXBpJyksCisgICAgICAgICAgICAgICAgICAoJ3JlcG9zaXRvcnknLCAnaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScpLAorICAgICAgICAgICAgICAgICAgKCdzZXJ2ZXInLCAnc2VydmVyMycpLCAoJ3VzZXJuYW1lJywgJ2NiaWdnbGVzJyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uZmlnLCB3YWl0ZWQpCisKKwogZGVmIHRlc3Rfc3VpdGUoKToKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKFB5UElSQ0NvbW1hbmRUZXN0Q2FzZSkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X21zdmNjb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9tc3ZjY29tcGlsZXIucHkKaW5kZXggYzRkOTExZi4uNGRjMjQ4OCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X21zdmNjb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfbXN2Y2NvbXBpbGVyLnB5CkBAIC04Myw2ICs4MywyNCBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbigKICAgICAgICAgICAgIHRlbXBkaXIsIG9zLnBhdGguYmFzZW5hbWUoZGxsKSkpKQogCisgICAgZGVmIHRlc3RfZ2V0X3ZjX2Vudl91bmljb2RlKHNlbGYpOgorICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLl9tc3ZjY29tcGlsZXIgYXMgX21zdmNjb21waWxlcgorCisgICAgICAgIHRlc3RfdmFyID0gJ+G5sOG4luG5pOG5quKUheG5vOG6qOG5nCcKKyAgICAgICAgdGVzdF92YWx1ZSA9ICfigoPigbTigoUnCisKKyAgICAgICAgIyBFbnN1cmUgd2UgZG9uJ3QgZWFybHkgZXhpdCBmcm9tIF9nZXRfdmNfZW52CisgICAgICAgIG9sZF9kaXN0dXRpbHNfdXNlX3NkayA9IG9zLmVudmlyb24ucG9wKCdESVNUVVRJTFNfVVNFX1NESycsIE5vbmUpCisgICAgICAgIG9zLmVudmlyb25bdGVzdF92YXJdID0gdGVzdF92YWx1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBlbnYgPSBfbXN2Y2NvbXBpbGVyLl9nZXRfdmNfZW52KCd4ODYnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXN0X3Zhci5sb3dlcigpLCBlbnYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RfdmFsdWUsIGVudlt0ZXN0X3Zhci5sb3dlcigpXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmVudmlyb24ucG9wKHRlc3RfdmFyKQorICAgICAgICAgICAgaWYgb2xkX2Rpc3R1dGlsc191c2Vfc2RrOgorICAgICAgICAgICAgICAgIG9zLmVudmlyb25bJ0RJU1RVVElMU19VU0VfU0RLJ10gPSBvbGRfZGlzdHV0aWxzX3VzZV9zZGsKKwogZGVmIHRlc3Rfc3VpdGUoKToKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKG1zdmNjb21waWxlclRlc3RDYXNlKQogCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfcmVnaXN0ZXIucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfcmVnaXN0ZXIucHkKaW5kZXggMDFhY2YyMy4uZTY4YjBhZiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3JlZ2lzdGVyLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9yZWdpc3Rlci5weQpAQCAtMTIsNyArMTIsNyBAQAogZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNTZXR1cEVycm9yCiBmcm9tIGRpc3R1dGlscy5sb2cgaW1wb3J0IElORk8KIAotZnJvbSBkaXN0dXRpbHMudGVzdHMudGVzdF9jb25maWcgaW1wb3J0IFB5UElSQ0NvbW1hbmRUZXN0Q2FzZQorZnJvbSBkaXN0dXRpbHMudGVzdHMudGVzdF9jb25maWcgaW1wb3J0IEJhc2VQeVBJUkNDb21tYW5kVGVzdENhc2UKIAogdHJ5OgogICAgIGltcG9ydCBkb2N1dGlscwpAQCAtNzIsNyArNzIsNyBAQAogICAgICAgICAgICAgfS5nZXQobmFtZS5sb3dlcigpLCBkZWZhdWx0KQogCiAKLWNsYXNzIFJlZ2lzdGVyVGVzdENhc2UoUHlQSVJDQ29tbWFuZFRlc3RDYXNlKToKK2NsYXNzIFJlZ2lzdGVyVGVzdENhc2UoQmFzZVB5UElSQ0NvbW1hbmRUZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHN1cGVyKFJlZ2lzdGVyVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zZGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zZGlzdC5weQppbmRleCA1YTA0ZTBkLi41NDQ0YjgxIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc2Rpc3QucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3NkaXN0LnB5CkBAIC0yMyw3ICsyMyw3IEBACiAKIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQuc2Rpc3QgaW1wb3J0IHNkaXN0LCBzaG93X2Zvcm1hdHMKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgotZnJvbSBkaXN0dXRpbHMudGVzdHMudGVzdF9jb25maWcgaW1wb3J0IFB5UElSQ0NvbW1hbmRUZXN0Q2FzZQorZnJvbSBkaXN0dXRpbHMudGVzdHMudGVzdF9jb25maWcgaW1wb3J0IEJhc2VQeVBJUkNDb21tYW5kVGVzdENhc2UKIGZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzT3B0aW9uRXJyb3IKIGZyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBmaW5kX2V4ZWN1dGFibGUKIGZyb20gZGlzdHV0aWxzLmxvZyBpbXBvcnQgV0FSTgpAQCAtNTIsNyArNTIsNyBAQAogc29tZWNvZGUlKHNlcClzZG9jLnR4dAogIiIiCiAKLWNsYXNzIFNEaXN0VGVzdENhc2UoUHlQSVJDQ29tbWFuZFRlc3RDYXNlKToKK2NsYXNzIFNEaXN0VGVzdENhc2UoQmFzZVB5UElSQ0NvbW1hbmRUZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgICMgUHlQSVJDQ29tbWFuZFRlc3RDYXNlIGNyZWF0ZXMgYSB0ZW1wIGRpciBhbHJlYWR5CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXBsb2FkLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VwbG9hZC5weQppbmRleCA5NjRhYWM3Li5lODM2Y2M0IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXBsb2FkLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91cGxvYWQucHkKQEAgLTEyLDcgKzEyLDcgQEAKIGZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzRXJyb3IKIGZyb20gZGlzdHV0aWxzLmxvZyBpbXBvcnQgRVJST1IsIElORk8KIAotZnJvbSBkaXN0dXRpbHMudGVzdHMudGVzdF9jb25maWcgaW1wb3J0IFBZUElSQywgUHlQSVJDQ29tbWFuZFRlc3RDYXNlCitmcm9tIGRpc3R1dGlscy50ZXN0cy50ZXN0X2NvbmZpZyBpbXBvcnQgUFlQSVJDLCBCYXNlUHlQSVJDQ29tbWFuZFRlc3RDYXNlCiAKIFBZUElSQ19MT05HX1BBU1NXT1JEID0gIiIiXAogW2Rpc3R1dGlsc10KQEAgLTY2LDcgKzY2LDcgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuY29kZQogCiAKLWNsYXNzIHVwbG9hZFRlc3RDYXNlKFB5UElSQ0NvbW1hbmRUZXN0Q2FzZSk6CitjbGFzcyB1cGxvYWRUZXN0Q2FzZShCYXNlUHlQSVJDQ29tbWFuZFRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc3VwZXIodXBsb2FkVGVzdENhc2UsIHNlbGYpLnNldFVwKCkKQEAgLTEzMCwxMyArMTMwLDE0IEBACiAKICAgICAgICAgIyB3aGF0IGRpZCB3ZSBzZW5kID8KICAgICAgICAgaGVhZGVycyA9IGRpY3Qoc2VsZi5sYXN0X29wZW4ucmVxLmhlYWRlcnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGVhZGVyc1snQ29udGVudC1sZW5ndGgnXSwgJzIxNjEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhlYWRlcnNbJ0NvbnRlbnQtbGVuZ3RoJ10sICcyMTYyJykKICAgICAgICAgY29udGVudF90eXBlID0gaGVhZGVyc1snQ29udGVudC10eXBlJ10KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbnRlbnRfdHlwZS5zdGFydHN3aXRoKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sYXN0X29wZW4ucmVxLmdldF9tZXRob2QoKSwgJ1BPU1QnKQogICAgICAgICBleHBlY3RlZF91cmwgPSAnaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxhc3Rfb3Blbi5yZXEuZ2V0X2Z1bGxfdXJsKCksIGV4cGVjdGVkX3VybCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIneHh4JyBpbiBzZWxmLmxhc3Rfb3Blbi5yZXEuZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ3Byb3RvY29sX3ZlcnNpb24nLCBzZWxmLmxhc3Rfb3Blbi5yZXEuZGF0YSkKIAogICAgICAgICAjIFRoZSBQeVBJIHJlc3BvbnNlIGJvZHkgd2FzIGVjaG9lZAogICAgICAgICByZXN1bHRzID0gc2VsZi5nZXRfbG9ncyhJTkZPKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvTkVXUy50eHQgYi9MaWIvaWRsZWxpYi9ORVdTLnR4dAppbmRleCAwMGQ1MDA1Li42ZWYyYWE1IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9ORVdTLnR4dAorKysgYi9MaWIvaWRsZWxpYi9ORVdTLnR4dApAQCAtMSw2ICsxLDE3IEBACitXaGF0J3MgTmV3IGluIElETEUgMy41LjM/Cis9PT09PT09PT09PT09PT09PT09PT09PT09CisqUmVsZWFzZSBkYXRlOiAyMDE3LTAxLTAxPyoKKworLSBJc3N1ZSAjMjczNjU6IEFsbG93IG5vbi1hc2NpaSBjaGFycyBpbiBJRExFIE5FV1MudHh0LCBmb3IgY29udHJpYnV0b3IgbmFtZXMuCisKKy0gSXNzdWUgIzI3MjQ1OiBJRExFOiBDbGVhbmx5IGRlbGV0ZSBjdXN0b20gdGhlbWVzIGFuZCBrZXkgYmluZGluZ3MuCisgIFByZXZpb3VzbHksIHdoZW4gSURMRSB3YXMgc3RhcnRlZCBmcm9tIGEgY29uc29sZSBvciBieSBpbXBvcnQsIGEgY2FzY2FkZQorICBvZiB3YXJuaW5ncyB3YXMgZW1pdHRlZC4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKwogV2hhdCdzIE5ldyBpbiBJRExFIDMuNS4yPwogPT09PT09PT09PT09PT09PT09PT09PT09PQotKlJlbGVhc2UgZGF0ZTogMjAxNi0wNi0zMD8qCisqUmVsZWFzZSBkYXRlOiAyMDE2LTA2LTI2KgogCiAtIElzc3VlICM1MTI0OiBQYXN0ZSB3aXRoIHRleHQgc2VsZWN0ZWQgbm93IHJlcGxhY2VzIHRoZSBzZWxlY3Rpb24gb24gWDExLgogICBUaGlzIG1hdGNoZXMgaG93IHBhc3RlIHdvcmtzIG9uIFdpbmRvd3MsIE1hYywgbW9zdCBtb2Rlcm4gTGludXggYXBwcywKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2Fib3V0RGlhbG9nLnB5IGIvTGliL2lkbGVsaWIvYWJvdXREaWFsb2cucHkKaW5kZXggMDQ1N2M0My4uYThmNzVkMiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvYWJvdXREaWFsb2cucHkKKysrIGIvTGliL2lkbGVsaWIvYWJvdXREaWFsb2cucHkKQEAgLTE0NSw1ICsxNDUsNyBAQAogICAgICAgICBzZWxmLmRlc3Ryb3koKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCB1bml0dGVzdAorICAgIHVuaXR0ZXN0Lm1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3RfaGVscGFib3V0JywgdmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCiAgICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuCiAgICAgcnVuKEFib3V0RGlhbG9nKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvY29uZmlnRGlhbG9nLnB5IGIvTGliL2lkbGVsaWIvY29uZmlnRGlhbG9nLnB5CmluZGV4IGI3MDIyNTMuLjVmNWJkMzYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2NvbmZpZ0RpYWxvZy5weQorKysgYi9MaWIvaWRsZWxpYi9jb25maWdEaWFsb2cucHkKQEAgLTc1MSw2ICs3NTEsNyBAQAogICAgICAgICBpZiBub3QgdGtNZXNzYWdlQm94LmFza3llc25vKAogICAgICAgICAgICAgICAgICdEZWxldGUgS2V5IFNldCcsICBkZWxtc2cgJSBrZXlTZXROYW1lLCBwYXJlbnQ9c2VsZik6CiAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5EZWFjdGl2YXRlQ3VycmVudENvbmZpZygpCiAgICAgICAgICNyZW1vdmUga2V5IHNldCBmcm9tIGNvbmZpZwogICAgICAgICBpZGxlQ29uZi51c2VyQ2ZnWydrZXlzJ10ucmVtb3ZlX3NlY3Rpb24oa2V5U2V0TmFtZSkKICAgICAgICAgaWYga2V5U2V0TmFtZSBpbiBzZWxmLmNoYW5nZWRJdGVtc1sna2V5cyddOgpAQCAtNzY5LDcgKzc3MCw4IEBACiAgICAgICAgIHNlbGYua2V5c0FyZUJ1aWx0aW4uc2V0KGlkbGVDb25mLmRlZmF1bHRDZmdbJ21haW4nXS5HZXQoJ0tleXMnLCAnZGVmYXVsdCcpKQogICAgICAgICBzZWxmLmJ1aWx0aW5LZXlzLnNldChpZGxlQ29uZi5kZWZhdWx0Q2ZnWydtYWluJ10uR2V0KCdLZXlzJywgJ25hbWUnKSkKICAgICAgICAgI3VzZXIgY2FuJ3QgYmFjayBvdXQgb2YgdGhlc2UgY2hhbmdlcywgdGhleSBtdXN0IGJlIGFwcGxpZWQgbm93Ci0gICAgICAgIHNlbGYuQXBwbHkoKQorICAgICAgICBzZWxmLlNhdmVBbGxDaGFuZ2VkQ29uZmlncygpCisgICAgICAgIHNlbGYuQWN0aXZhdGVDb25maWdDaGFuZ2VzKCkKICAgICAgICAgc2VsZi5TZXRLZXlzVHlwZSgpCiAKICAgICBkZWYgRGVsZXRlQ3VzdG9tVGhlbWUoc2VsZik6CkBAIC03NzgsNiArNzgwLDcgQEAKICAgICAgICAgaWYgbm90IHRrTWVzc2FnZUJveC5hc2t5ZXNubygKICAgICAgICAgICAgICAgICAnRGVsZXRlIFRoZW1lJywgIGRlbG1zZyAlIHRoZW1lTmFtZSwgcGFyZW50PXNlbGYpOgogICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuRGVhY3RpdmF0ZUN1cnJlbnRDb25maWcoKQogICAgICAgICAjcmVtb3ZlIHRoZW1lIGZyb20gY29uZmlnCiAgICAgICAgIGlkbGVDb25mLnVzZXJDZmdbJ2hpZ2hsaWdodCddLnJlbW92ZV9zZWN0aW9uKHRoZW1lTmFtZSkKICAgICAgICAgaWYgdGhlbWVOYW1lIGluIHNlbGYuY2hhbmdlZEl0ZW1zWydoaWdobGlnaHQnXToKQEAgLTc5Niw3ICs3OTksOCBAQAogICAgICAgICBzZWxmLnRoZW1lSXNCdWlsdGluLnNldChpZGxlQ29uZi5kZWZhdWx0Q2ZnWydtYWluJ10uR2V0KCdUaGVtZScsICdkZWZhdWx0JykpCiAgICAgICAgIHNlbGYuYnVpbHRpblRoZW1lLnNldChpZGxlQ29uZi5kZWZhdWx0Q2ZnWydtYWluJ10uR2V0KCdUaGVtZScsICduYW1lJykpCiAgICAgICAgICN1c2VyIGNhbid0IGJhY2sgb3V0IG9mIHRoZXNlIGNoYW5nZXMsIHRoZXkgbXVzdCBiZSBhcHBsaWVkIG5vdwotICAgICAgICBzZWxmLkFwcGx5KCkKKyAgICAgICAgc2VsZi5TYXZlQWxsQ2hhbmdlZENvbmZpZ3MoKQorICAgICAgICBzZWxmLkFjdGl2YXRlQ29uZmlnQ2hhbmdlcygpCiAgICAgICAgIHNlbGYuU2V0VGhlbWVUeXBlKCkKIAogICAgIGRlZiBHZXRDb2xvdXIoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9oZWxwX2Fib3V0LnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfaGVscF9hYm91dC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGEwMTI3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfaGVscF9hYm91dC5weQpAQCAtMCwwICsxLDUyIEBACisnJydUZXN0IGlkbGVsaWIuaGVscF9hYm91dC4KKworQ292ZXJhZ2U6CisnJycKK2Zyb20gaWRsZWxpYiBpbXBvcnQgYWJvdXREaWFsb2cgYXMgaGVscF9hYm91dAorZnJvbSBpZGxlbGliIGltcG9ydCB0ZXh0VmlldyBhcyB0ZXh0dmlldworZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5tb2NrX2lkbGUgaW1wb3J0IEZ1bmMKK2Zyb20gaWRsZWxpYi5pZGxlX3Rlc3QubW9ja190ayBpbXBvcnQgTWJveAoraW1wb3J0IHVuaXR0ZXN0CisKK0Fib3V0ID0gaGVscF9hYm91dC5BYm91dERpYWxvZworY2xhc3MgRHVtbXlfYWJvdXRfZGlhbG9nKCk6CisgICAgIyBEdW1teSBjbGFzcyBmb3IgdGVzdGluZyBmaWxlIGRpc3BsYXkgZnVuY3Rpb25zLgorICAgIGlkbGVfY3JlZGl0cyA9IEFib3V0LlNob3dJRExFQ3JlZGl0cworICAgIGlkbGVfcmVhZG1lID0gQWJvdXQuU2hvd0lETEVBYm91dAorICAgIGlkbGVfbmV3cyA9IEFib3V0LlNob3dJRExFTkVXUworICAgICMgQ2FsbGVkIGJ5IHRoZSBhYm92ZQorICAgIGRpc3BsYXlfZmlsZV90ZXh0ID0gQWJvdXQuZGlzcGxheV9maWxlX3RleHQKKworCitjbGFzcyBEaXNwbGF5RmlsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICJUZXN0IHRoYXQgLnR4dCBmaWxlcyBhcmUgZm91bmQgYW5kIHByb3Blcmx5IGRlY29kZWQuIgorICAgIGRpYWxvZyA9IER1bW15X2Fib3V0X2RpYWxvZygpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBjbHMub3JpZ19tYm94ID0gdGV4dHZpZXcudGtNZXNzYWdlQm94CisgICAgICAgIGNscy5vcmlnX3ZpZXcgPSB0ZXh0dmlldy52aWV3X3RleHQKKyAgICAgICAgY2xzLm1ib3ggPSBNYm94KCkKKyAgICAgICAgY2xzLnZpZXcgPSBGdW5jKCkKKyAgICAgICAgdGV4dHZpZXcudGtNZXNzYWdlQm94ID0gY2xzLm1ib3gKKyAgICAgICAgdGV4dHZpZXcudmlld190ZXh0ID0gY2xzLnZpZXcKKyAgICAgICAgY2xzLkFib3V0ID0gRHVtbXlfYWJvdXRfZGlhbG9nKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIHRleHR2aWV3LnRrTWVzc2FnZUJveCA9IGNscy5vcmlnX21ib3gKKyAgICAgICAgdGV4dHZpZXcudmlld190ZXh0ID0gY2xzLm9yaWdfdmlldworCisgICAgZGVmIHRlc3RfZmlsZV9pc3BsYXkoc2VsZik6CisgICAgICAgIGZvciBoYW5kbGVyIGluIChzZWxmLmRpYWxvZy5pZGxlX2NyZWRpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpYWxvZy5pZGxlX3JlYWRtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlhbG9nLmlkbGVfbmV3cyk6CisgICAgICAgICAgICBzZWxmLm1ib3guc2hvd2Vycm9yLm1lc3NhZ2UgPSAnJworICAgICAgICAgICAgc2VsZi52aWV3LmNhbGxlZCA9IEZhbHNlCisgICAgICAgICAgICBoYW5kbGVyKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5tYm94LnNob3dlcnJvci5tZXNzYWdlLCAnJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi52aWV3LmNhbGxlZCwgVHJ1ZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi90ZXh0Vmlldy5weSBiL0xpYi9pZGxlbGliL3RleHRWaWV3LnB5CmluZGV4IDAxYjJkOGYuLjEyYWMzMTkgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL3RleHRWaWV3LnB5CisrKyBiL0xpYi9pZGxlbGliL3RleHRWaWV3LnB5CkBAIC03Niw2ICs3NiwxMCBAQAogICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKHRpdGxlPSdGaWxlIExvYWQgRXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9J1VuYWJsZSB0byBsb2FkIGZpbGUgJXIgLicgJSBmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ9cGFyZW50KQorICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3IgYXMgZXJyOgorICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKHRpdGxlPSdVbmljb2RlIERlY29kZSBFcnJvcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1zdHIoZXJyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ9cGFyZW50KQogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiB2aWV3X3RleHQocGFyZW50LCB0aXRsZSwgY29udGVudHMsIG1vZGFsKQogCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL19ib290c3RyYXBfZXh0ZXJuYWwucHkgYi9MaWIvaW1wb3J0bGliL19ib290c3RyYXBfZXh0ZXJuYWwucHkKaW5kZXggOTc4ODgyOC4uMDhkZGIyYiAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwX2V4dGVybmFsLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcF9leHRlcm5hbC5weQpAQCAtMjIzLDYgKzIyMyw3IEBACiAjICAgICBQeXRob24gMy41YjEgIDMzMzAgKFBFUCA0NDg6IEFkZGl0aW9uYWwgVW5wYWNraW5nIEdlbmVyYWxpemF0aW9ucykKICMgICAgIFB5dGhvbiAzLjViMiAgMzM0MCAoZml4IGRpY3Rpb25hcnkgZGlzcGxheSBldmFsdWF0aW9uIG9yZGVyICMxMTIwNSkKICMgICAgIFB5dGhvbiAzLjViMiAgMzM1MCAoYWRkIEdFVF9ZSUVMRF9GUk9NX0lURVIgb3Bjb2RlICMyNDQwMCkKKyMgICAgIFB5dGhvbiAzLjUuMiAgMzM1MSAoZml4IEJVSUxEX01BUF9VTlBBQ0tfV0lUSF9DQUxMIG9wY29kZSAjMjcyODYpCiAjCiAjIE1BR0lDIG11c3QgY2hhbmdlIHdoZW5ldmVyIHRoZSBieXRlY29kZSBlbWl0dGVkIGJ5IHRoZSBjb21waWxlciBtYXkgbm8KICMgbG9uZ2VyIGJlIHVuZGVyc3Rvb2QgYnkgb2xkZXIgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBldmFsIGxvb3AgKHVzdWFsbHkKQEAgLTIzMSw3ICsyMzIsNyBAQAogIyBXaGVuZXZlciBNQUdJQ19OVU1CRVIgaXMgY2hhbmdlZCwgdGhlIHJhbmdlcyBpbiB0aGUgbWFnaWNfdmFsdWVzIGFycmF5CiAjIGluIFBDL2xhdW5jaGVyLmMgbXVzdCBhbHNvIGJlIHVwZGF0ZWQuCiAKLU1BR0lDX05VTUJFUiA9ICgzMzUwKS50b19ieXRlcygyLCAnbGl0dGxlJykgKyBiJ1xyXG4nCitNQUdJQ19OVU1CRVIgPSAoMzM1MSkudG9fYnl0ZXMoMiwgJ2xpdHRsZScpICsgYidcclxuJwogX1JBV19NQUdJQ19OVU1CRVIgPSBpbnQuZnJvbV9ieXRlcyhNQUdJQ19OVU1CRVIsICdsaXR0bGUnKSAgIyBGb3IgaW1wb3J0LmMKIAogX1BZQ0FDSEUgPSAnX19weWNhY2hlX18nCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL3V0aWwucHkgYi9MaWIvaW1wb3J0bGliL3V0aWwucHkKaW5kZXggNDUyNWIzZi4uZTFmYTA3YSAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi91dGlsLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvdXRpbC5weQpAQCAtMjQxLDcgKzI0MSw3IEBACiAgICAgICAgICAgICBpZiBpZChzZWxmKSAhPSBpZChzeXMubW9kdWxlc1tvcmlnaW5hbF9uYW1lXSk6CiAgICAgICAgICAgICAgICAgbXNnID0gKCdtb2R1bGUgb2JqZWN0IGZvciB7IXJ9IHN1YnN0aXR1dGVkIGluIHN5cy5tb2R1bGVzICcKICAgICAgICAgICAgICAgICAgICAgICAgJ2R1cmluZyBhIGxhenkgbG9hZCcpCi0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZy5mb3JtYXQob3JpZ2luYWxfbmFtZSkpCisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cuZm9ybWF0KG9yaWdpbmFsX25hbWUpKQogICAgICAgICAjIFVwZGF0ZSBhZnRlciBsb2FkaW5nIHNpbmNlIHRoYXQncyB3aGF0IHdvdWxkIGhhcHBlbiBpbiBhbiBlYWdlcgogICAgICAgICAjIGxvYWRpbmcgc2l0dWF0aW9uLgogICAgICAgICBzZWxmLl9fZGljdF9fLnVwZGF0ZShhdHRyc191cGRhdGVkKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9yZWZhY3Rvci5weSBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfcmVmYWN0b3IucHkKaW5kZXggZjMwYzFlOC4uODU2MzAwMSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9yZWZhY3Rvci5weQorKysgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3JlZmFjdG9yLnB5CkBAIC05LDYgKzksNyBAQAogaW1wb3J0IGNvZGVjcwogaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgaW8KK2ltcG9ydCByZQogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTIyNiw4ICsyMjcsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsbHlfd3JpdGU9RmFsc2UpCiAgICAgICAgICMgVGVzdGluZyB0aGF0IGl0IGxvZ2dlZCB0aGlzIG1lc3NhZ2Ugd2hlbiB3cml0ZT1GYWxzZSB3YXMgcGFzc2VkIGlzCiAgICAgICAgICMgc3VmZmljaWVudCB0byBzZWUgdGhhdCBpdCBkaWQgbm90IGJhaWwgZWFybHkgYWZ0ZXIgIk5vIGNoYW5nZXMiLgotICAgICAgICBtZXNzYWdlX3JlZ2V4ID0gciJOb3Qgd3JpdGluZyBjaGFuZ2VzIHRvIC4qJXMlcyIgJSAoCi0gICAgICAgICAgICAgICAgb3Muc2VwLCBvcy5wYXRoLmJhc2VuYW1lKHRlc3RfZmlsZSkpCisgICAgICAgIG1lc3NhZ2VfcmVnZXggPSByIk5vdCB3cml0aW5nIGNoYW5nZXMgdG8gLiolcyIgJSBcCisgICAgICAgICAgICAgICAgcmUuZXNjYXBlKG9zLnNlcCArIG9zLnBhdGguYmFzZW5hbWUodGVzdF9maWxlKSkKICAgICAgICAgZm9yIG1lc3NhZ2UgaW4gZGVidWdfbWVzc2FnZXM6CiAgICAgICAgICAgICBpZiAiTm90IHdyaXRpbmcgY2hhbmdlcyIgaW4gbWVzc2FnZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG1lc3NhZ2UsIG1lc3NhZ2VfcmVnZXgpCmRpZmYgLS1naXQgYS9MaWIvcHlkb2MucHkgYi9MaWIvcHlkb2MucHkKaW5kZXggM2NhMDhjOS4uMGQwZDBhYiAxMDA3NTUKLS0tIGEvTGliL3B5ZG9jLnB5CisrKyBiL0xpYi9weWRvYy5weQpAQCAtMjgsNyArMjgsNyBAQAogCiBNb2R1bGUgZG9jcyBmb3IgY29yZSBtb2R1bGVzIGFyZSBhc3N1bWVkIHRvIGJlIGluCiAKLSAgICBodHRwOi8vZG9jcy5weXRob24ub3JnL1guWS9saWJyYXJ5LworICAgIGh0dHBzOi8vZG9jcy5weXRob24ub3JnL1guWS9saWJyYXJ5LwogCiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgdGhlIFBZVEhPTkRPQ1MgZW52aXJvbm1lbnQgdmFyaWFibGUKIHRvIGEgZGlmZmVyZW50IFVSTCBvciB0byBhIGxvY2FsIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBMaWJyYXJ5CkBAIC0zOTUsNiArMzk1LDcgQEAKIAogICAgICAgICBkb2Nsb2MgPSBvcy5lbnZpcm9uLmdldCgiUFlUSE9ORE9DUyIsIHNlbGYuUFlUSE9ORE9DUykKIAorICAgICAgICBiYXNlZGlyID0gb3MucGF0aC5ub3JtY2FzZShiYXNlZGlyKQogICAgICAgICBpZiAoaXNpbnN0YW5jZShvYmplY3QsIHR5cGUob3MpKSBhbmQKICAgICAgICAgICAgIChvYmplY3QuX19uYW1lX18gaW4gKCdlcnJubycsICdleGNlcHRpb25zJywgJ2djJywgJ2ltcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyc2hhbCcsICdwb3NpeCcsICdzaWduYWwnLCAnc3lzJywKQEAgLTQwMiw3ICs0MDMsNyBAQAogICAgICAgICAgICAgIChmaWxlLnN0YXJ0c3dpdGgoYmFzZWRpcikgYW5kCiAgICAgICAgICAgICAgIG5vdCBmaWxlLnN0YXJ0c3dpdGgob3MucGF0aC5qb2luKGJhc2VkaXIsICdzaXRlLXBhY2thZ2VzJykpKSkgYW5kCiAgICAgICAgICAgICBvYmplY3QuX19uYW1lX18gbm90IGluICgneG1sLmV0cmVlJywgJ3Rlc3QucHlkb2NfbW9kJykpOgotICAgICAgICAgICAgaWYgZG9jbG9jLnN0YXJ0c3dpdGgoImh0dHA6Ly8iKToKKyAgICAgICAgICAgIGlmIGRvY2xvYy5zdGFydHN3aXRoKCgiaHR0cDovLyIsICJodHRwczovLyIpKToKICAgICAgICAgICAgICAgICBkb2Nsb2MgPSAiJXMvJXMiICUgKGRvY2xvYy5yc3RyaXAoIi8iKSwgb2JqZWN0Ll9fbmFtZV9fLmxvd2VyKCkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGRvY2xvYyA9IG9zLnBhdGguam9pbihkb2Nsb2MsIG9iamVjdC5fX25hbWVfXy5sb3dlcigpICsgIi5odG1sIikKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkgYi9MaWIvc3FsaXRlMy90ZXN0L2RiYXBpLnB5CmluZGV4IDA0NjQ5ZmMuLmVjNDJlYjcgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC9kYmFwaS5weQpAQCAtMTIyLDExICsxMjIsOCBAQAogCiAgICAgZGVmIENoZWNrRmFpbGVkT3BlbihzZWxmKToKICAgICAgICAgWU9VX0NBTk5PVF9PUEVOX1RISVMgPSAiL2Zvby9iYXIvYmxhLzIzNTM0L215ZGIuZGIiCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcik6CiAgICAgICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdChZT1VfQ0FOTk9UX09QRU5fVEhJUykKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIE9wZXJhdGlvbmFsRXJyb3IiKQogCiAgICAgZGVmIENoZWNrQ2xvc2Uoc2VsZik6CiAgICAgICAgIHNlbGYuY3guY2xvc2UoKQpAQCAtMTgwLDYgKzE3NywxMiBAQAogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcik6CiAgICAgICAgICAgICAgICAgY3guZXhlY3V0ZSgnaW5zZXJ0IGludG8gdGVzdChpZCkgdmFsdWVzKDEpJykKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3FsaXRlLnNxbGl0ZV92ZXJzaW9uX2luZm8gPj0gKDMsIDMsIDEpLAorICAgICAgICAgICAgICAgICAgICAgJ25lZWRzIHNxbGl0ZSB2ZXJzaW9ucyBvbGRlciB0aGFuIDMuMy4xJykKKyAgICBkZWYgQ2hlY2tTYW1lVGhyZWFkRXJyb3JPbk9sZFZlcnNpb24oc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk5vdFN1cHBvcnRlZEVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNxbGl0ZS5jb25uZWN0KCc6bWVtb3J5OicsIGNoZWNrX3NhbWVfdGhyZWFkPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAnc2hhcmVkIGNvbm5lY3Rpb25zIG5vdCBhdmFpbGFibGUnKQogCiBjbGFzcyBDdXJzb3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMTk2LDIyICsxOTksMTIgQEAKICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJkZWxldGUgZnJvbSB0ZXN0IikKIAogICAgIGRlZiBDaGVja0V4ZWN1dGVJbGxlZ2FsU3FsKHNlbGYpOgotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJzZWxlY3QgYXNkZiIpCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgicmFpc2VkIHdyb25nIGV4Y2VwdGlvbiIpCiAKICAgICBkZWYgQ2hlY2tFeGVjdXRlVG9vTXVjaFNxbChzZWxmKToKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5XYXJuaW5nKToKICAgICAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IDUrNDsgc2VsZWN0IDQrNSIpCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhIFdhcm5pbmciKQotICAgICAgICBleGNlcHQgc3FsaXRlLldhcm5pbmc6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5mYWlsKCJyYWlzZWQgd3JvbmcgZXhjZXB0aW9uIikKIAogICAgIGRlZiBDaGVja0V4ZWN1dGVUb29NdWNoU3FsMihzZWxmKToKICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJzZWxlY3QgNSs0OyAtLSBmb28gYmFyIikKQEAgLTIyNiwxMyArMjE5LDggQEAKICAgICAgICAgICAgICIiIikKIAogICAgIGRlZiBDaGVja0V4ZWN1dGVXcm9uZ1NxbEFyZyhzZWxmKToKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5jdS5leGVjdXRlKDQyKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYSBWYWx1ZUVycm9yIikKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5mYWlsKCJyYWlzZWQgd3JvbmcgZXhjZXB0aW9uLiIpCiAKICAgICBkZWYgQ2hlY2tFeGVjdXRlQXJnSW50KHNlbGYpOgogICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoaWQpIHZhbHVlcyAoPykiLCAoNDIsKSkKQEAgLTI1MCwyOSArMjM4LDI1IEBACiAgICAgICAgIHJvdyA9IHNlbGYuY3UuZmV0Y2hvbmUoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgIkh1XHgwMGdvIikKIAorICAgIGRlZiBDaGVja0V4ZWN1dGVOb25JdGVyYWJsZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChpZCkgdmFsdWVzICg/KSIsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAncGFyYW1ldGVycyBhcmUgb2YgdW5zdXBwb3J0ZWQgdHlwZScpCisKICAgICBkZWYgQ2hlY2tFeGVjdXRlV3JvbmdOb09mQXJnczEoc2VsZik6CiAgICAgICAgICMgdG9vIG1hbnkgcGFyYW1ldGVycwotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGlkKSB2YWx1ZXMgKD8pIiwgKDE3LCAiRWdvbiIpKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgUHJvZ3JhbW1pbmdFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBDaGVja0V4ZWN1dGVXcm9uZ05vT2ZBcmdzMihzZWxmKToKICAgICAgICAgIyB0b28gbGl0dGxlIHBhcmFtZXRlcnMKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yKToKICAgICAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChpZCkgdmFsdWVzICg/KSIpCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBQcm9ncmFtbWluZ0Vycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgotICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIENoZWNrRXhlY3V0ZVdyb25nTm9PZkFyZ3MzKHNlbGYpOgogICAgICAgICAjIG5vIHBhcmFtZXRlcnMsIHBhcmFtZXRlcnMgYXJlIG5lZWRlZAotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGlkKSB2YWx1ZXMgKD8pIikKLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFByb2dyYW1taW5nRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgQ2hlY2tFeGVjdXRlUGFyYW1MaXN0KHNlbGYpOgogICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QobmFtZSkgdmFsdWVzICgnZm9vJykiKQpAQCAtMzExLDI3ICsyOTUsMTggQEAKIAogICAgIGRlZiBDaGVja0V4ZWN1dGVEaWN0TWFwcGluZ1Rvb0xpdHRsZUFyZ3Moc2VsZik6CiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKCdmb28nKSIpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcik6CiAgICAgICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoInNlbGVjdCBuYW1lIGZyb20gdGVzdCB3aGVyZSBuYW1lPTpuYW1lIGFuZCBpZD06aWQiLCB7Im5hbWUiOiAiZm9vIn0pCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBQcm9ncmFtbWluZ0Vycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgotICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIENoZWNrRXhlY3V0ZURpY3RNYXBwaW5nTm9BcmdzKHNlbGYpOgogICAgICAgICBzZWxmLmN1LmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QobmFtZSkgdmFsdWVzICgnZm9vJykiKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJzZWxlY3QgbmFtZSBmcm9tIHRlc3Qgd2hlcmUgbmFtZT06bmFtZSIpCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBQcm9ncmFtbWluZ0Vycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgotICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIENoZWNrRXhlY3V0ZURpY3RNYXBwaW5nVW5uYW1lZChzZWxmKToKICAgICAgICAgc2VsZi5jdS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KG5hbWUpIHZhbHVlcyAoJ2ZvbycpIikKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yKToKICAgICAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgic2VsZWN0IG5hbWUgZnJvbSB0ZXN0IHdoZXJlIG5hbWU9PyIsIHsibmFtZSI6ICJmb28ifSkKLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFByb2dyYW1taW5nRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgQ2hlY2tDbG9zZShzZWxmKToKICAgICAgICAgc2VsZi5jdS5jbG9zZSgpCkBAIC0zNjAsOCArMzM1LDcgQEAKICAgICBkZWYgQ2hlY2tUb3RhbENoYW5nZXMoc2VsZik6CiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKCdmb28nKSIpCiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChuYW1lKSB2YWx1ZXMgKCdmb28nKSIpCi0gICAgICAgIGlmIHNlbGYuY3gudG90YWxfY2hhbmdlcyA8IDI6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoInRvdGFsIGNoYW5nZXMgcmVwb3J0ZWQgd3JvbmcgdmFsdWUiKQorICAgICAgICBzZWxmLmFzc2VydExlc3MoMiwgc2VsZi5jeC50b3RhbF9jaGFuZ2VzLCBtc2c9J3RvdGFsIGNoYW5nZXMgcmVwb3J0ZWQgd3JvbmcgdmFsdWUnKQogCiAgICAgIyBDaGVja3MgZm9yIGV4ZWN1dGVtYW55OgogICAgICMgU2VxdWVuY2VzIGFyZSByZXF1aXJlZCBieSB0aGUgREItQVBJLCBpdGVyYXRvcnMKQEAgLTM5MiwzMiArMzY2LDE2IEBACiAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZW1hbnkoImluc2VydCBpbnRvIHRlc3QoaW5jb21lKSB2YWx1ZXMgKD8pIiwgbXlnZW4oKSkKIAogICAgIGRlZiBDaGVja0V4ZWN1dGVNYW55V3JvbmdTcWxBcmcoc2VsZik6Ci0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIHNlbGYuY3UuZXhlY3V0ZW1hbnkoNDIsIFsoMywpXSkKLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGEgVmFsdWVFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgicmFpc2VkIHdyb25nIGV4Y2VwdGlvbi4iKQogCiAgICAgZGVmIENoZWNrRXhlY3V0ZU1hbnlTZWxlY3Qoc2VsZik6Ci0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcik6CiAgICAgICAgICAgICBzZWxmLmN1LmV4ZWN1dGVtYW55KCJzZWxlY3QgPyIsIFsoMywpXSkKLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoInJhaXNlZCB3cm9uZyBleGNlcHRpb24uIikKIAogICAgIGRlZiBDaGVja0V4ZWN1dGVNYW55Tm90SXRlcmFibGUoc2VsZik6Ci0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5jdS5leGVjdXRlbWFueSgiaW5zZXJ0IGludG8gdGVzdChpbmNvbWUpIHZhbHVlcyAoPykiLCA0MikKLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGEgVHlwZUVycm9yIikKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICBwcmludCgicmFpc2VkIiwgZS5fX2NsYXNzX18pCi0gICAgICAgICAgICBzZWxmLmZhaWwoInJhaXNlZCB3cm9uZyBleGNlcHRpb24uIikKIAogICAgIGRlZiBDaGVja0ZldGNoSXRlcihzZWxmKToKICAgICAgICAgIyBPcHRpb25hbCBEQi1BUEkgZXh0ZW5zaW9uLgpAQCAtNDk0LDIyICs0NTIsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmN1LmNvbm5lY3Rpb24sIHNlbGYuY3gpCiAKICAgICBkZWYgQ2hlY2tXcm9uZ0N1cnNvckNhbGxhYmxlKHNlbGYpOgotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgIGRlZiBmKCk6IHBhc3MKICAgICAgICAgICAgIGN1ciA9IHNlbGYuY3guY3Vyc29yKGYpCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhIFR5cGVFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYSBWYWx1ZUVycm9yIikKIAogICAgIGRlZiBDaGVja0N1cnNvcldyb25nQ2xhc3Moc2VsZik6CiAgICAgICAgIGNsYXNzIEZvbzogcGFzcwogICAgICAgICBmb28gPSBGb28oKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgIGN1ciA9IHNxbGl0ZS5DdXJzb3IoZm9vKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYSBWYWx1ZUVycm9yIikKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhpcyB0ZXN0IHJlcXVpcmVzIHRocmVhZGluZy4nKQogY2xhc3MgVGhyZWFkVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNzA4LDIyICs2NTksMjEgQEAKICAgICBkZWYgQ2hlY2tTY3JpcHRTeW50YXhFcnJvcihzZWxmKToKICAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKICAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCi0gICAgICAgIHJhaXNlZCA9IEZhbHNlCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcik6CiAgICAgICAgICAgICBjdXIuZXhlY3V0ZXNjcmlwdCgiY3JlYXRlIHRhYmxlIHRlc3QoeCk7IGFzZGY7IGNyZWF0ZSB0YWJsZSB0ZXN0Mih4KSIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlZCA9IFRydWUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYWlzZWQsIFRydWUsICJzaG91bGQgaGF2ZSByYWlzZWQgYW4gZXhjZXB0aW9uIikKIAogICAgIGRlZiBDaGVja1NjcmlwdEVycm9yTm9ybWFsKHNlbGYpOgogICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQogICAgICAgICBjdXIgPSBjb24uY3Vyc29yKCkKLSAgICAgICAgcmFpc2VkID0gRmFsc2UKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yKToKICAgICAgICAgICAgIGN1ci5leGVjdXRlc2NyaXB0KCJjcmVhdGUgdGFibGUgdGVzdChzYWRmc2FkZmRzYSk7IHNlbGVjdCBmb28gZnJvbSBodXJ6OyIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlZCA9IFRydWUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYWlzZWQsIFRydWUsICJzaG91bGQgaGF2ZSByYWlzZWQgYW4gZXhjZXB0aW9uIikKKworICAgIGRlZiBDaGVja0N1cnNvckV4ZWN1dGVzY3JpcHRBc0J5dGVzKHNlbGYpOgorICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQorICAgICAgICBjdXIgPSBjb24uY3Vyc29yKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGN1ci5leGVjdXRlc2NyaXB0KGIiY3JlYXRlIHRhYmxlIHRlc3QoZm9vKTsgaW5zZXJ0IGludG8gdGVzdChmb28pIHZhbHVlcyAoNSk7IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgJ3NjcmlwdCBhcmd1bWVudCBtdXN0IGJlIHVuaWNvZGUuJykKIAogICAgIGRlZiBDaGVja0Nvbm5lY3Rpb25FeGVjdXRlKHNlbGYpOgogICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQpAQCAtNzQ1LDY4ICs2OTUsMzcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDUsICJCYXNpYyB0ZXN0IG9mIENvbm5lY3Rpb24uZXhlY3V0ZXNjcmlwdCIpCiAKIGNsYXNzIENsb3NlZENvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgcGFzcwotCiAgICAgZGVmIENoZWNrQ2xvc2VkQ29uQ3Vyc29yKHNlbGYpOgogICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQogICAgICAgICBjb24uY2xvc2UoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpOgogICAgICAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCi0gICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCiAKICAgICBkZWYgQ2hlY2tDbG9zZWRDb25Db21taXQoc2VsZik6CiAgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCiAgICAgICAgIGNvbi5jbG9zZSgpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcik6CiAgICAgICAgICAgICBjb24uY29tbWl0KCkKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKIAogICAgIGRlZiBDaGVja0Nsb3NlZENvblJvbGxiYWNrKHNlbGYpOgogICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQogICAgICAgICBjb24uY2xvc2UoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpOgogICAgICAgICAgICAgY29uLnJvbGxiYWNrKCkKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKIAogICAgIGRlZiBDaGVja0Nsb3NlZEN1ckV4ZWN1dGUoc2VsZik6CiAgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCiAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQogICAgICAgICBjb24uY2xvc2UoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpOgogICAgICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCA0IikKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKIAogICAgIGRlZiBDaGVja0Nsb3NlZENyZWF0ZUZ1bmN0aW9uKHNlbGYpOgogICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQogICAgICAgICBjb24uY2xvc2UoKQogICAgICAgICBkZWYgZih4KTogcmV0dXJuIDE3Ci0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcik6CiAgICAgICAgICAgICBjb24uY3JlYXRlX2Z1bmN0aW9uKCJmb28iLCAxLCBmKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3IiKQogCiAgICAgZGVmIENoZWNrQ2xvc2VkQ3JlYXRlQWdncmVnYXRlKHNlbGYpOgogICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQpAQCAtODE4LDU3ICs3MzcsMzEgQEAKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBkZWYgZmluYWxpemUoc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDE3Ci0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcik6CiAgICAgICAgICAgICBjb24uY3JlYXRlX2FnZ3JlZ2F0ZSgiZm9vIiwgMSwgQWdnKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3IiKQogCiAgICAgZGVmIENoZWNrQ2xvc2VkU2V0QXV0aG9yaXplcihzZWxmKToKICAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKICAgICAgICAgY29uLmNsb3NlKCkKICAgICAgICAgZGVmIGF1dGhvcml6ZXIoKmFyZ3MpOgogICAgICAgICAgICAgcmV0dXJuIHNxbGl0ZS5ERU5ZCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcik6CiAgICAgICAgICAgICBjb24uc2V0X2F1dGhvcml6ZXIoYXV0aG9yaXplcikKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKIAogICAgIGRlZiBDaGVja0Nsb3NlZFNldFByb2dyZXNzQ2FsbGJhY2soc2VsZik6CiAgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCiAgICAgICAgIGNvbi5jbG9zZSgpCiAgICAgICAgIGRlZiBwcm9ncmVzcygpOiBwYXNzCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcik6CiAgICAgICAgICAgICBjb24uc2V0X3Byb2dyZXNzX2hhbmRsZXIocHJvZ3Jlc3MsIDEwMCkKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKIAogICAgIGRlZiBDaGVja0Nsb3NlZENhbGwoc2VsZik6CiAgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCiAgICAgICAgIGNvbi5jbG9zZSgpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcik6CiAgICAgICAgICAgICBjb24oKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3IiKQogCiBjbGFzcyBDbG9zZWRDdXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHBhc3MKLQogICAgIGRlZiBDaGVja0Nsb3NlZChzZWxmKToKICAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKICAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCkBAIC04ODIsMTUgKzc3NSw5IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHBhcmFtcyA9IFtdCiAKLSAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpOgogICAgICAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoY3VyLCBtZXRob2RfbmFtZSkKLQogICAgICAgICAgICAgICAgIG1ldGhvZCgqcGFyYW1zKQotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvcjogbWV0aG9kICIgKyBtZXRob2RfbmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yOiAiICsgbWV0aG9kX25hbWUpCiAKIGRlZiBzdWl0ZSgpOgogICAgIG1vZHVsZV9zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShNb2R1bGVUZXN0cywgIkNoZWNrIikKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvaG9va3MucHkgYi9MaWIvc3FsaXRlMy90ZXN0L2hvb2tzLnB5CmluZGV4IGVkZTBiZWMuLmNhZmZmOTMgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvaG9va3MucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC9ob29rcy5weQpAQCAtMjUsMjcgKzI1LDE2IEBACiBpbXBvcnQgc3FsaXRlMyBhcyBzcWxpdGUKIAogY2xhc3MgQ29sbGF0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBwYXNzCi0KICAgICBkZWYgQ2hlY2tDcmVhdGVDb2xsYXRpb25Ob3RDYWxsYWJsZShzZWxmKToKICAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CiAgICAgICAgICAgICBjb24uY3JlYXRlX2NvbGxhdGlvbigiWCIsIDQyKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYSBUeXBlRXJyb3IiKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgInBhcmFtZXRlciBtdXN0IGJlIGNhbGxhYmxlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgJ3BhcmFtZXRlciBtdXN0IGJlIGNhbGxhYmxlJykKIAogICAgIGRlZiBDaGVja0NyZWF0ZUNvbGxhdGlvbk5vdEFzY2lpKHNlbGYpOgogICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLlByb2dyYW1taW5nRXJyb3IpOgogICAgICAgICAgICAgY29uLmNyZWF0ZV9jb2xsYXRpb24oImNvbGzkIiwgbGFtYmRhIHgsIHk6ICh4ID4geSkgLSAoeCA8IHkpKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICBwYXNzCiAKICAgICBAdW5pdHRlc3Quc2tpcElmKHNxbGl0ZS5zcWxpdGVfdmVyc2lvbl9pbmZvIDwgKDMsIDIsIDEpLAogICAgICAgICAgICAgICAgICAgICAgJ29sZCBTUUxpdGUgdmVyc2lvbnMgY3Jhc2ggb24gdGhpcyB0ZXN0JykKQEAgLTY2LDE1ICs1NSwxMyBAQAogICAgICAgICAgICAgKSBvcmRlciBieSB4IGNvbGxhdGUgbXljb2xsCiAgICAgICAgICAgICAiIiIKICAgICAgICAgcmVzdWx0ID0gY29uLmV4ZWN1dGUoc3FsKS5mZXRjaGFsbCgpCi0gICAgICAgIGlmIHJlc3VsdFswXVswXSAhPSAiYyIgb3IgcmVzdWx0WzFdWzBdICE9ICJiIiBvciByZXN1bHRbMl1bMF0gIT0gImEiOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJ0aGUgZXhwZWN0ZWQgb3JkZXIgd2FzIG5vdCByZXR1cm5lZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBbKCdjJywpLCAoJ2InLCksICgnYScsKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSd0aGUgZXhwZWN0ZWQgb3JkZXIgd2FzIG5vdCByZXR1cm5lZCcpCiAKICAgICAgICAgY29uLmNyZWF0ZV9jb2xsYXRpb24oIm15Y29sbCIsIE5vbmUpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcikgYXMgY206CiAgICAgICAgICAgICByZXN1bHQgPSBjb24uZXhlY3V0ZShzcWwpLmZldGNoYWxsKCkKLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIE9wZXJhdGlvbmFsRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLmxvd2VyKCksICJubyBzdWNoIGNvbGxhdGlvbiBzZXF1ZW5jZTogbXljb2xsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgJ25vIHN1Y2ggY29sbGF0aW9uIHNlcXVlbmNlOiBteWNvbGwnKQogCiAgICAgZGVmIENoZWNrQ29sbGF0aW9uUmV0dXJuc0xhcmdlSW50ZWdlcihzZWxmKToKICAgICAgICAgZGVmIG15Y29sbCh4LCB5KToKQEAgLTEwNiw4ICs5Myw4IEBACiAgICAgICAgIHJlc3VsdCA9IGNvbi5leGVjdXRlKCIiIgogICAgICAgICAgICAgc2VsZWN0IHggZnJvbSAoc2VsZWN0ICdhJyBhcyB4IHVuaW9uIHNlbGVjdCAnYicgYXMgeCkgb3JkZXIgYnkgeCBjb2xsYXRlIG15Y29sbAogICAgICAgICAgICAgIiIiKS5mZXRjaGFsbCgpCi0gICAgICAgIGlmIHJlc3VsdFswXVswXSAhPSAnYicgb3IgcmVzdWx0WzFdWzBdICE9ICdhJzoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgid3JvbmcgY29sbGF0aW9uIGZ1bmN0aW9uIGlzIHVzZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFswXVswXSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFsxXVswXSwgJ2EnKQogCiAgICAgZGVmIENoZWNrRGVyZWdpc3RlckNvbGxhdGlvbihzZWxmKToKICAgICAgICAgIiIiCkBAIC0xMTcsMTIgKzEwNCw5IEBACiAgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCiAgICAgICAgIGNvbi5jcmVhdGVfY29sbGF0aW9uKCJteWNvbGwiLCBsYW1iZGEgeCwgeTogKHggPiB5KSAtICh4IDwgeSkpCiAgICAgICAgIGNvbi5jcmVhdGVfY29sbGF0aW9uKCJteWNvbGwiLCBOb25lKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgY29uLmV4ZWN1dGUoInNlbGVjdCAnYScgYXMgeCB1bmlvbiBzZWxlY3QgJ2InIGFzIHggb3JkZXIgYnkgeCBjb2xsYXRlIG15Y29sbCIpCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBub3QgZS5hcmdzWzBdLnN0YXJ0c3dpdGgoIm5vIHN1Y2ggY29sbGF0aW9uIHNlcXVlbmNlIik6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ3cm9uZyBPcGVyYXRpb25hbEVycm9yIHJhaXNlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICdubyBzdWNoIGNvbGxhdGlvbiBzZXF1ZW5jZTogbXljb2xsJykKIAogY2xhc3MgUHJvZ3Jlc3NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIENoZWNrUHJvZ3Jlc3NIYW5kbGVyVXNlZChzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvcmVncmVzc2lvbi5weSBiL0xpYi9zcWxpdGUzL3Rlc3QvcmVncmVzc2lvbi5weQppbmRleCAxMWFkYjMwLi40NDk3NGIwIDEwMDY0NAotLS0gYS9MaWIvc3FsaXRlMy90ZXN0L3JlZ3Jlc3Npb24ucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC9yZWdyZXNzaW9uLnB5CkBAIC04NCw5ICs4NCw4IEBACiAgICAgICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IDEgeCB1bmlvbiBzZWxlY3QgIiArIHN0cihpKSkKICAgICAgICAgY29uLmNsb3NlKCkKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3FsaXRlLnNxbGl0ZV92ZXJzaW9uX2luZm8gPCAoMywgMiwgMiksICduZWVkcyBzcWxpdGUgMy4yLjIgb3IgbmV3ZXInKQogICAgIGRlZiBDaGVja09uQ29uZmxpY3RSb2xsYmFjayhzZWxmKToKLSAgICAgICAgaWYgc3FsaXRlLnNxbGl0ZV92ZXJzaW9uX2luZm8gPCAoMywgMiwgMik6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKICAgICAgICAgY29uLmV4ZWN1dGUoImNyZWF0ZSB0YWJsZSBmb28oeCwgdW5pcXVlKHgpIG9uIGNvbmZsaWN0IHJvbGxiYWNrKSIpCiAgICAgICAgIGNvbi5leGVjdXRlKCJpbnNlcnQgaW50byBmb28oeCkgdmFsdWVzICgxKSIpCkBAIC0xMzQsMTcgKzEzMywxMSBAQAogICAgIGRlZiBDaGVja0Vycm9yTXNnRGVjb2RlRXJyb3Ioc2VsZik6CiAgICAgICAgICMgV2hlbiBwb3J0aW5nIHRoZSBtb2R1bGUgdG8gUHl0aG9uIDMuMCwgdGhlIGVycm9yIG1lc3NhZ2UgYWJvdXQKICAgICAgICAgIyBkZWNvZGluZyBlcnJvcnMgZGlzYXBwZWFyZWQuIFRoaXMgdmVyaWZpZXMgdGhleSdyZSBiYWNrIGFnYWluLgotICAgICAgICBmYWlsdXJlID0gTm9uZQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgc2VsZi5jb24uZXhlY3V0ZSgic2VsZWN0ICd4eHgnIHx8ID8gfHwgJ3l5eScgY29sbmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChieXRlcyhieXRlYXJyYXkoWzI1MF0pKSwpKS5mZXRjaG9uZSgpCi0gICAgICAgICAgICBmYWlsdXJlID0gInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIHdpdGggZGV0YWlsZWQgZGVzY3JpcHRpb24iCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvciBhcyBlOgotICAgICAgICAgICAgbXNnID0gZS5hcmdzWzBdCi0gICAgICAgICAgICBpZiBub3QgbXNnLnN0YXJ0c3dpdGgoIkNvdWxkIG5vdCBkZWNvZGUgdG8gVVRGLTggY29sdW1uICdjb2xuYW1lJyB3aXRoIHRleHQgJ3h4eCIpOgotICAgICAgICAgICAgICAgIGZhaWx1cmUgPSAiT3BlcmF0aW9uYWxFcnJvciBkaWQgbm90IGhhdmUgZXhwZWN0ZWQgZGVzY3JpcHRpb24gdGV4dCIKLSAgICAgICAgaWYgZmFpbHVyZToKLSAgICAgICAgICAgIHNlbGYuZmFpbChmYWlsdXJlKQorICAgICAgICBtc2cgPSAiQ291bGQgbm90IGRlY29kZSB0byBVVEYtOCBjb2x1bW4gJ2NvbG5hbWUnIHdpdGggdGV4dCAneHh4IgorICAgICAgICBzZWxmLmFzc2VydEluKG1zZywgc3RyKGNtLmV4Y2VwdGlvbikpCiAKICAgICBkZWYgQ2hlY2tSZWdpc3RlckFkYXB0ZXIoc2VsZik6CiAgICAgICAgICIiIgpAQCAtMTcwLDE0ICsxNjMsOCBAQAogCiAgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCiAgICAgICAgIGN1ciA9IEN1cnNvcihjb24pCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcik6CiAgICAgICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IDQrNSIpLmZldGNoYWxsKCkKLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFByb2dyYW1taW5nRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFByb2dyYW1taW5nRXJyb3IiKQotCiAKICAgICBkZWYgQ2hlY2tTdHJTdWJjbGFzcyhzZWxmKToKICAgICAgICAgIiIiCkBAIC0xOTYsMTMgKzE4Myw4IEBACiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGNvbiA9IENvbm5lY3Rpb24oIjptZW1vcnk6IikKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yKToKICAgICAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgUHJvZ3JhbW1pbmdFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgUHJvZ3JhbW1pbmdFcnJvciIpCiAKICAgICBkZWYgQ2hlY2tDdXJzb3JSZWdpc3RyYXRpb24oc2VsZik6CiAgICAgICAgICIiIgpAQCAtMjIzLDEzICsyMDUsOCBAQAogICAgICAgICBjdXIuZXhlY3V0ZW1hbnkoImluc2VydCBpbnRvIGZvbyh4KSB2YWx1ZXMgKD8pIiwgWygzLCksICg0LCksICg1LCldKQogICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IHggZnJvbSBmb28iKQogICAgICAgICBjb24ucm9sbGJhY2soKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLkludGVyZmFjZUVycm9yKToKICAgICAgICAgICAgIGN1ci5mZXRjaGFsbCgpCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBJbnRlcmZhY2VFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuSW50ZXJmYWNlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIEludGVyZmFjZUVycm9yIikKIAogICAgIGRlZiBDaGVja0F1dG9Db21taXQoc2VsZik6CiAgICAgICAgICIiIgpkaWZmIC0tZ2l0IGEvTGliL3NxbGl0ZTMvdGVzdC90cmFuc2FjdGlvbnMucHkgYi9MaWIvc3FsaXRlMy90ZXN0L3RyYW5zYWN0aW9ucy5weQppbmRleCBmZWI0ZmExLi5hMjUzNjBhIDEwMDY0NAotLS0gYS9MaWIvc3FsaXRlMy90ZXN0L3RyYW5zYWN0aW9ucy5weQorKysgYi9MaWIvc3FsaXRlMy90ZXN0L3RyYW5zYWN0aW9ucy5weQpAQCAtMTExLDM5ICsxMTEsMjUgQEAKICAgICAgICAgcmVzID0gc2VsZi5jdXIyLmZldGNoYWxsKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzKSwgMSkKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3FsaXRlLnNxbGl0ZV92ZXJzaW9uX2luZm8gPCAoMywgMiwgMiksCisgICAgICAgICAgICAgICAgICAgICAndGVzdCBoYW5ncyBvbiBzcWxpdGUgdmVyc2lvbnMgb2xkZXIgdGhhbiAzLjIuMicpCiAgICAgZGVmIENoZWNrUmFpc2VUaW1lb3V0KHNlbGYpOgotICAgICAgICBpZiBzcWxpdGUuc3FsaXRlX3ZlcnNpb25faW5mbyA8ICgzLCAyLCAyKToKLSAgICAgICAgICAgICMgVGhpcyB3aWxsIGZhaWwgKGhhbmcpIG9uIGVhcmxpZXIgdmVyc2lvbnMgb2Ygc3FsaXRlLgotICAgICAgICAgICAgIyBEZXRlcm1pbmUgZXhhY3QgdmVyc2lvbiBpdCB3YXMgZml4ZWQuIDMuMi4xIGhhbmdzLgotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJjcmVhdGUgdGFibGUgdGVzdChpKSIpCiAgICAgICAgIHNlbGYuY3VyMS5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGkpIHZhbHVlcyAoNSkiKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5jdXIyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoaSkgdmFsdWVzICg1KSIpCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3FsaXRlLnNxbGl0ZV92ZXJzaW9uX2luZm8gPCAoMywgMiwgMiksCisgICAgICAgICAgICAgICAgICAgICAndGVzdCBoYW5ncyBvbiBzcWxpdGUgdmVyc2lvbnMgb2xkZXIgdGhhbiAzLjIuMicpCiAgICAgZGVmIENoZWNrTG9ja2luZyhzZWxmKToKICAgICAgICAgIiIiCiAgICAgICAgIFRoaXMgdGVzdHMgdGhlIGltcHJvdmVkIGNvbmN1cnJlbmN5IHdpdGggcHlzcWxpdGUgMi4zLjQuIFlvdSBuZWVkZWQKICAgICAgICAgdG8gcm9sbCBiYWNrIGNvbjIgYmVmb3JlIHlvdSBjb3VsZCBjb21taXQgY29uMS4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIHNxbGl0ZS5zcWxpdGVfdmVyc2lvbl9pbmZvIDwgKDMsIDIsIDIpOgotICAgICAgICAgICAgIyBUaGlzIHdpbGwgZmFpbCAoaGFuZykgb24gZWFybGllciB2ZXJzaW9ucyBvZiBzcWxpdGUuCi0gICAgICAgICAgICAjIERldGVybWluZSBleGFjdCB2ZXJzaW9uIGl0IHdhcyBmaXhlZC4gMy4yLjEgaGFuZ3MuCi0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5jdXIxLmV4ZWN1dGUoImNyZWF0ZSB0YWJsZSB0ZXN0KGkpIikKICAgICAgICAgc2VsZi5jdXIxLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QoaSkgdmFsdWVzICg1KSIpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcik6CiAgICAgICAgICAgICBzZWxmLmN1cjIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChpKSB2YWx1ZXMgKDUpIikKLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIE9wZXJhdGlvbmFsRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIE9wZXJhdGlvbmFsRXJyb3IiKQogICAgICAgICAjIE5PIHNlbGYuY29uMi5yb2xsYmFjaygpIEhFUkUhISEKICAgICAgICAgc2VsZi5jb24xLmNvbW1pdCgpCiAKQEAgLTE1OSwxMyArMTQ1LDggQEAKICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCAxIHVuaW9uIHNlbGVjdCAyIHVuaW9uIHNlbGVjdCAzIikKIAogICAgICAgICBjb24ucm9sbGJhY2soKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLkludGVyZmFjZUVycm9yKToKICAgICAgICAgICAgIGN1ci5mZXRjaGFsbCgpCi0gICAgICAgICAgICBzZWxmLmZhaWwoIkludGVyZmFjZUVycm9yIHNob3VsZCBoYXZlIGJlZW4gcmFpc2VkIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5JbnRlcmZhY2VFcnJvciBhcyBlOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkludGVyZmFjZUVycm9yIHNob3VsZCBoYXZlIGJlZW4gcmFpc2VkIikKIAogY2xhc3MgU3BlY2lhbENvbW1hbmRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3NxbGl0ZTMvdGVzdC90eXBlcy5weSBiL0xpYi9zcWxpdGUzL3Rlc3QvdHlwZXMucHkKaW5kZXggYWRhZDU3MS4uNjY2N2JjOCAxMDA2NDQKLS0tIGEvTGliL3NxbGl0ZTMvdGVzdC90eXBlcy5weQorKysgYi9MaWIvc3FsaXRlMy90ZXN0L3R5cGVzLnB5CkBAIC0xODUsMjQgKzE4NSwxNCBAQAogICAgIGRlZiBDaGVja1Vuc3VwcG9ydGVkU2VxKHNlbGYpOgogICAgICAgICBjbGFzcyBCYXI6IHBhc3MKICAgICAgICAgdmFsID0gQmFyKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5JbnRlcmZhY2VFcnJvcik6CiAgICAgICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KGYpIHZhbHVlcyAoPykiLCAodmFsLCkpCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBJbnRlcmZhY2VFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuSW50ZXJmYWNlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIEludGVyZmFjZUVycm9yIikKIAogICAgIGRlZiBDaGVja1Vuc3VwcG9ydGVkRGljdChzZWxmKToKICAgICAgICAgY2xhc3MgQmFyOiBwYXNzCiAgICAgICAgIHZhbCA9IEJhcigpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuSW50ZXJmYWNlRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChmKSB2YWx1ZXMgKDp2YWwpIiwgeyJ2YWwiOiB2YWx9KQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gSW50ZXJmYWNlRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLkludGVyZmFjZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBJbnRlcmZhY2VFcnJvciIpCiAKICAgICBkZWYgQ2hlY2tCbG9iKHNlbGYpOgogICAgICAgICAjIGRlZmF1bHQKQEAgLTM1MCwxMSArMzQwLDkgQEAKICAgICAgICAgdHMyID0gc2VsZi5jdXIuZmV0Y2hvbmUoKVswXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRzLCB0czIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNxbGl0ZS5zcWxpdGVfdmVyc2lvbl9pbmZvIDwgKDMsIDEpLAorICAgICAgICAgICAgICAgICAgICAgJ3RoZSBkYXRlIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIG9uIDMuMSBvciBsYXRlcicpCiAgICAgZGVmIENoZWNrU3FsVGltZXN0YW1wKHNlbGYpOgotICAgICAgICAjIFRoZSBkYXRlIGZ1bmN0aW9ucyBhcmUgb25seSBhdmFpbGFibGUgaW4gU1FMaXRlIHZlcnNpb24gMy4xIG9yIGxhdGVyCi0gICAgICAgIGlmIHNxbGl0ZS5zcWxpdGVfdmVyc2lvbl9pbmZvIDwgKDMsIDEpOgotICAgICAgICAgICAgcmV0dXJuCi0KICAgICAgICAgIyBTUUxpdGUncyBjdXJyZW50X3RpbWVzdGFtcCB1c2VzIFVUQyB0aW1lLCB3aGlsZSBkYXRldGltZS5kYXRldGltZS5ub3coKSB1c2VzIGxvY2FsIHRpbWUuCiAgICAgICAgIG5vdyA9IGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIHRlc3QodHMpIHZhbHVlcyAoY3VycmVudF90aW1lc3RhbXApIikKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvdXNlcmZ1bmN0aW9ucy5weSBiL0xpYi9zcWxpdGUzL3Rlc3QvdXNlcmZ1bmN0aW9ucy5weQppbmRleCA4YTRiYmFiLi40MDc1MDQ1IDEwMDY0NAotLS0gYS9MaWIvc3FsaXRlMy90ZXN0L3VzZXJmdW5jdGlvbnMucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC91c2VyZnVuY3Rpb25zLnB5CkBAIC0xNjIsMTEgKzE2Miw4IEBACiAgICAgICAgIHNlbGYuY29uLmNsb3NlKCkKIAogICAgIGRlZiBDaGVja0Z1bmNFcnJvck9uQ3JlYXRlKHNlbGYpOgotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5jb24uY3JlYXRlX2Z1bmN0aW9uKCJibGEiLCAtMTAwLCBsYW1iZGEgeDogMip4KQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gT3BlcmF0aW9uYWxFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBDaGVja0Z1bmNSZWZDb3VudChzZWxmKToKICAgICAgICAgZGVmIGdldGZ1bmMoKToKQEAgLTIzMSwxMiArMjI4LDEwIEBACiAKICAgICBkZWYgQ2hlY2tGdW5jRXhjZXB0aW9uKHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCByYWlzZWV4Y2VwdGlvbigpIikKICAgICAgICAgICAgIGN1ci5mZXRjaG9uZSgpCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBPcGVyYXRpb25hbEVycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgJ3VzZXItZGVmaW5lZCBmdW5jdGlvbiByYWlzZWQgZXhjZXB0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgJ3VzZXItZGVmaW5lZCBmdW5jdGlvbiByYWlzZWQgZXhjZXB0aW9uJykKIAogICAgIGRlZiBDaGVja1BhcmFtU3RyaW5nKHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQpAQCAtMzEyLDU1ICszMDcsNDIgQEAKICAgICAgICAgcGFzcwogCiAgICAgZGVmIENoZWNrQWdnckVycm9yT25DcmVhdGUoc2VsZik6Ci0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcik6CiAgICAgICAgICAgICBzZWxmLmNvbi5jcmVhdGVfZnVuY3Rpb24oImJsYSIsIC0xMDAsIEFnZ3JTdW0pCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yOgotICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIENoZWNrQWdnck5vU3RlcChzZWxmKToKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKSBhcyBjbToKICAgICAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3Qgbm9zdGVwKHQpIGZyb20gdGVzdCIpCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBBdHRyaWJ1dGVFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sICInQWdnck5vU3RlcCcgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ3N0ZXAnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgIidBZ2dyTm9TdGVwJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnc3RlcCciKQogCiAgICAgZGVmIENoZWNrQWdnck5vRmluYWxpemUoc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcikgYXMgY206CiAgICAgICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IG5vZmluYWxpemUodCkgZnJvbSB0ZXN0IikKICAgICAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgInVzZXItZGVmaW5lZCBhZ2dyZWdhdGUncyAnZmluYWxpemUnIG1ldGhvZCByYWlzZWQgZXJyb3IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAidXNlci1kZWZpbmVkIGFnZ3JlZ2F0ZSdzICdmaW5hbGl6ZScgbWV0aG9kIHJhaXNlZCBlcnJvciIpCiAKICAgICBkZWYgQ2hlY2tBZ2dyRXhjZXB0aW9uSW5Jbml0KHNlbGYpOgogICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCBleGNJbml0KHQpIGZyb20gdGVzdCIpCiAgICAgICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQotICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gT3BlcmF0aW9uYWxFcnJvciIpCi0gICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sICJ1c2VyLWRlZmluZWQgYWdncmVnYXRlJ3MgJ19faW5pdF9fJyBtZXRob2QgcmFpc2VkIGVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgInVzZXItZGVmaW5lZCBhZ2dyZWdhdGUncyAnX19pbml0X18nIG1ldGhvZCByYWlzZWQgZXJyb3IiKQogCiAgICAgZGVmIENoZWNrQWdnckV4Y2VwdGlvbkluU3RlcChzZWxmKToKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yKSBhcyBjbToKICAgICAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgZXhjU3RlcCh0KSBmcm9tIHRlc3QiKQogICAgICAgICAgICAgdmFsID0gY3VyLmZldGNob25lKClbMF0KLSAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIGFuIE9wZXJhdGlvbmFsRXJyb3IiKQotICAgICAgICBleGNlcHQgc3FsaXRlLk9wZXJhdGlvbmFsRXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCAidXNlci1kZWZpbmVkIGFnZ3JlZ2F0ZSdzICdzdGVwJyBtZXRob2QgcmFpc2VkIGVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgInVzZXItZGVmaW5lZCBhZ2dyZWdhdGUncyAnc3RlcCcgbWV0aG9kIHJhaXNlZCBlcnJvciIpCiAKICAgICBkZWYgQ2hlY2tBZ2dyRXhjZXB0aW9uSW5GaW5hbGl6ZShzZWxmKToKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yKSBhcyBjbToKICAgICAgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgZXhjRmluYWxpemUodCkgZnJvbSB0ZXN0IikKICAgICAgICAgICAgIHZhbCA9IGN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBhbiBPcGVyYXRpb25hbEVycm9yIikKLSAgICAgICAgZXhjZXB0IHNxbGl0ZS5PcGVyYXRpb25hbEVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgInVzZXItZGVmaW5lZCBhZ2dyZWdhdGUncyAnZmluYWxpemUnIG1ldGhvZCByYWlzZWQgZXJyb3IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAidXNlci1kZWZpbmVkIGFnZ3JlZ2F0ZSdzICdmaW5hbGl6ZScgbWV0aG9kIHJhaXNlZCBlcnJvciIpCiAKICAgICBkZWYgQ2hlY2tBZ2dyQ2hlY2tQYXJhbVN0cihzZWxmKToKICAgICAgICAgY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKQEAgLTQzMywyMiArNDE1LDE0IEBACiAgICAgICAgIHBhc3MKIAogICAgIGRlZiB0ZXN0X3RhYmxlX2FjY2VzcyhzZWxmKToKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5EYXRhYmFzZUVycm9yKSBhcyBjbToKICAgICAgICAgICAgIHNlbGYuY29uLmV4ZWN1dGUoInNlbGVjdCAqIGZyb20gdDIiKQotICAgICAgICBleGNlcHQgc3FsaXRlLkRhdGFiYXNlRXJyb3IgYXMgZToKLSAgICAgICAgICAgIGlmIG5vdCBlLmFyZ3NbMF0uZW5kc3dpdGgoInByb2hpYml0ZWQiKToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIndyb25nIGV4Y2VwdGlvbiB0ZXh0OiAlcyIgJSBlLmFyZ3NbMF0pCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gZXhjZXB0aW9uIGR1ZSB0byBtaXNzaW5nIHByaXZpbGVnZXMiKQorICAgICAgICBzZWxmLmFzc2VydEluKCdwcm9oaWJpdGVkJywgc3RyKGNtLmV4Y2VwdGlvbikpCiAKICAgICBkZWYgdGVzdF9jb2x1bW5fYWNjZXNzKHNlbGYpOgotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3FsaXRlLkRhdGFiYXNlRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgc2VsZi5jb24uZXhlY3V0ZSgic2VsZWN0IGMyIGZyb20gdDEiKQotICAgICAgICBleGNlcHQgc3FsaXRlLkRhdGFiYXNlRXJyb3IgYXMgZToKLSAgICAgICAgICAgIGlmIG5vdCBlLmFyZ3NbMF0uZW5kc3dpdGgoInByb2hpYml0ZWQiKToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIndyb25nIGV4Y2VwdGlvbiB0ZXh0OiAlcyIgJSBlLmFyZ3NbMF0pCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgaGF2ZSByYWlzZWQgYW4gZXhjZXB0aW9uIGR1ZSB0byBtaXNzaW5nIHByaXZpbGVnZXMiKQorICAgICAgICBzZWxmLmFzc2VydEluKCdwcm9oaWJpdGVkJywgc3RyKGNtLmV4Y2VwdGlvbikpCiAKIGNsYXNzIEF1dGhvcml6ZXJSYWlzZUV4Y2VwdGlvblRlc3RzKEF1dGhvcml6ZXJUZXN0cyk6CiAgICAgQHN0YXRpY21ldGhvZApkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3VwcG9ydC9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3N1cHBvcnQvX19pbml0X18ucHkKaW5kZXggZTEyNGZhYi4uYzllMzZmYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc3VwcG9ydC9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC9zdXBwb3J0L19faW5pdF9fLnB5CkBAIC0xMzQ5LDcgKzEzNDksOCBAQAogICAgICAgICAgICAgIDUwMCA8PSBlcnIuY29kZSA8PSA1OTkpIG9yCiAgICAgICAgICAgICAoaXNpbnN0YW5jZShlcnIsIHVybGxpYi5lcnJvci5VUkxFcnJvcikgYW5kCiAgICAgICAgICAgICAgICAgICgoIkNvbm5lY3Rpb25SZWZ1c2VkRXJyb3IiIGluIGVyci5yZWFzb24pIG9yCi0gICAgICAgICAgICAgICAgICAoIlRpbWVvdXRFcnJvciIgaW4gZXJyLnJlYXNvbikpKSBvcgorICAgICAgICAgICAgICAgICAgKCJUaW1lb3V0RXJyb3IiIGluIGVyci5yZWFzb24pIG9yCisgICAgICAgICAgICAgICAgICAoIkVPRkVycm9yIiBpbiBlcnIucmVhc29uKSkpIG9yCiAgICAgICAgICAgICBuIGluIGNhcHR1cmVkX2Vycm5vcyk6CiAgICAgICAgICAgICBpZiBub3QgdmVyYm9zZToKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKGRlbmllZC5hcmdzWzBdICsgIlxuIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3N1cHBvcnQvc2NyaXB0X2hlbHBlci5weSBiL0xpYi90ZXN0L3N1cHBvcnQvc2NyaXB0X2hlbHBlci5weQppbmRleCA5YzJlOWViLi5jNDVkMDEwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zdXBwb3J0L3NjcmlwdF9oZWxwZXIucHkKKysrIGIvTGliL3Rlc3Qvc3VwcG9ydC9zY3JpcHRfaGVscGVyLnB5CkBAIC03Myw2ICs3MywxMCBAQAogICAgICMgTmVlZCB0byBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZW52aXJvbm1lbnQsIGZvciBpbi1wbGFjZSB0ZXN0aW5nIG9mCiAgICAgIyBzaGFyZWQgbGlicmFyeSBidWlsZHMuCiAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAjIHNldCBURVJNPScnIHVubGVzcyB0aGUgVEVSTSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBwYXNzZWQgZXhwbGljaXRseQorICAgICMgc2VlIGlzc3VlcyAjMTEzOTAgYW5kICMxODMwMAorICAgIGlmICdURVJNJyBub3QgaW4gZW52X3ZhcnM6CisgICAgICAgIGVudlsnVEVSTSddID0gJycKICAgICAjIEJ1dCBhIHNwZWNpYWwgZmxhZyB0aGF0IGNhbiBiZSBzZXQgdG8gb3ZlcnJpZGUgLS0gaW4gdGhpcyBjYXNlLCB0aGUKICAgICAjIGNhbGxlciBpcyByZXNwb25zaWJsZSB0byBwYXNzIHRoZSBmdWxsIGVudmlyb25tZW50LgogICAgIGlmIGVudl92YXJzLnBvcCgnX19jbGVhbmVudicsIE5vbmUpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfYmFzZV9ldmVudHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9iYXNlX2V2ZW50cy5weQppbmRleCAwODA3ZGZiLi4yMDZlYmM2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9iYXNlX2V2ZW50cy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9iYXNlX2V2ZW50cy5weQpAQCAtMTE4NSwxNCArMTE4NSwxNCBAQAogICAgICAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApICAjIGFsbG93IHRyYW5zcG9ydCB0byBjbG9zZQogCiAgICAgICAgIHNvY2suZmFtaWx5ID0gc29ja2V0LkFGX0lORVQ2Ci0gICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oYXN5bmNpby5Qcm90b2NvbCwgJzo6MicsIDgwKQorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKGFzeW5jaW8uUHJvdG9jb2wsICc6OjEnLCA4MCkKICAgICAgICAgdCwgcCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBXaXRob3V0IGluZXRfcHRvbiB3ZSB1c2UgZ2V0YWRkcmluZm8sIHdoaWNoIHRyYW5zZm9ybXMgKCc6OjInLCA4MCkKLSAgICAgICAgICAgICMgdG8gKCc6OjAuMC4wLjInLCA4MCwgMCwgMCkuIFRoZSBsYXN0IDBzIGFyZSBmbG93IGluZm8sIHNjb3BlIGlkLgorICAgICAgICAgICAgIyBXaXRob3V0IGluZXRfcHRvbiB3ZSB1c2UgZ2V0YWRkcmluZm8sIHdoaWNoIHRyYW5zZm9ybXMgKCc6OjEnLCA4MCkKKyAgICAgICAgICAgICMgdG8gKCc6OjEnLCA4MCwgMCwgMCkuIFRoZSBsYXN0IDBzIGFyZSBmbG93IGluZm8sIHNjb3BlIGlkLgogICAgICAgICAgICAgW2FkZHJlc3NdID0gc29jay5jb25uZWN0LmNhbGxfYXJnc1swXQogICAgICAgICAgICAgaG9zdCwgcG9ydCA9IGFkZHJlc3NbOjJdCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGhvc3QsIHInOjooMFwuKSoyJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoaG9zdCwgcic6OigwXC4pKjEnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3J0LCA4MCkKICAgICAgICAgICAgIF8sIGt3YXJncyA9IG1fc29ja2V0LnNvY2tldC5jYWxsX2FyZ3MKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa3dhcmdzWydmYW1pbHknXSwgbV9zb2NrZXQuQUZfSU5FVDYpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbXBpbGUucHkgYi9MaWIvdGVzdC90ZXN0X2NvbXBpbGUucHkKaW5kZXggZTBmZGVlMy4uODI0ZTg0MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb21waWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29tcGlsZS5weQpAQCAtNDcyLDYgKzQ3MiwxMyBAQAogICAgICAgICBkID0ge2YoKTogZigpLCBmKCk6IGYoKX0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCB7MTogMiwgMzogNH0pCiAKKyAgICBkZWYgdGVzdF9jb21waWxlX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBmb3IgZmlsZW5hbWUgaW4gKCdmaWxlLnB5JywgYidmaWxlLnB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICBieXRlYXJyYXkoYidmaWxlLnB5JyksIG1lbW9yeXZpZXcoYidmaWxlLnB5JykpOgorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUoJ3Bhc3MnLCBmaWxlbmFtZSwgJ2V4ZWMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLmNvX2ZpbGVuYW1lLCAnZmlsZS5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGlsZSwgJ3Bhc3MnLCBsaXN0KGInZmlsZS5weScpLCAnZXhlYycpCisKICAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9zYW1lX2ZpbGVuYW1lX3VzZWQoc2VsZik6CiAgICAgICAgIHMgPSAiIiJkZWYgZigpOiBwYXNzXG5kZWYgZygpOiBwYXNzIiIiCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbnRleHRsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2NvbnRleHRsaWIucHkKaW5kZXggMzBhNjM3Ny4uNTE2NDAzZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29udGV4dGxpYi5weQpAQCAtNzYyLDYgKzc2Miw0MCBAQAogICAgICAgICBzdGFjay5wdXNoKGNtKQogICAgICAgICBzZWxmLmFzc2VydElzKHN0YWNrLl9leGl0X2NhbGxiYWNrc1stMV0sIGNtKQogCisgICAgZGVmIHRlc3RfZG9udF9yZXJhaXNlX1J1bnRpbWVFcnJvcihzZWxmKToKKyAgICAgICAgIyBodHRwczovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTI3MTIyCisgICAgICAgIGNsYXNzIFVuaXF1ZUV4Y2VwdGlvbihFeGNlcHRpb24pOiBwYXNzCisgICAgICAgIGNsYXNzIFVuaXF1ZVJ1bnRpbWVFcnJvcihSdW50aW1lRXJyb3IpOiBwYXNzCisKKyAgICAgICAgQGNvbnRleHRtYW5hZ2VyCisgICAgICAgIGRlZiBzZWNvbmQoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCAxCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICByYWlzZSBVbmlxdWVFeGNlcHRpb24oIm5ldyBleGNlcHRpb24iKSBmcm9tIGV4YworCisgICAgICAgIEBjb250ZXh0bWFuYWdlcgorICAgICAgICBkZWYgZmlyc3QoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCAxCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICByYWlzZSBleGMKKworICAgICAgICAjIFRoZSBVbmlxdWVSdW50aW1lRXJyb3Igc2hvdWxkIGJlIGNhdWdodCBieSBzZWNvbmQoKSdzIGV4Y2VwdGlvbgorICAgICAgICAjIGhhbmRsZXIgd2hpY2ggY2hhaW4gcmFpc2VkIGEgbmV3IFVuaXF1ZUV4Y2VwdGlvbi4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhVbmlxdWVFeGNlcHRpb24pIGFzIGVycl9jdHg6CisgICAgICAgICAgICB3aXRoIEV4aXRTdGFjaygpIGFzIGVzX2N0eDoKKyAgICAgICAgICAgICAgICBlc19jdHguZW50ZXJfY29udGV4dChzZWNvbmQoKSkKKyAgICAgICAgICAgICAgICBlc19jdHguZW50ZXJfY29udGV4dChmaXJzdCgpKQorICAgICAgICAgICAgICAgIHJhaXNlIFVuaXF1ZVJ1bnRpbWVFcnJvcigicGxlYXNlIG5vIGluZmluaXRlIGxvb3AuIikKKworICAgICAgICBleGMgPSBlcnJfY3R4LmV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXhjLCBVbmlxdWVFeGNlcHRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShleGMuX19jb250ZXh0X18sIFVuaXF1ZVJ1bnRpbWVFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZXhjLl9fY29udGV4dF9fLl9fY29udGV4dF9fKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShleGMuX19jb250ZXh0X18uX19jYXVzZV9fKQorICAgICAgICBzZWxmLmFzc2VydElzKGV4Yy5fX2NhdXNlX18sIGV4Yy5fX2NvbnRleHRfXykKKwogCiBjbGFzcyBUZXN0UmVkaXJlY3RTdHJlYW06CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29yb3V0aW5lcy5weSBiL0xpYi90ZXN0L3Rlc3RfY29yb3V0aW5lcy5weQppbmRleCA0ZjcyNWFlLi5kMGNlZmIwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Nvcm91dGluZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb3JvdXRpbmVzLnB5CkBAIC0xNDIzLDcgKzE0MjMsNyBAQAogCiAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiZXJyb3IiKQotICAgICAgICAgICAgIyBUZXN0IHRoYXQgX19haXRlcl9fIHRoYXQgcmV0dXJucyBhbiBhc3luY3Jvbm91cyBpdGVyYXRvcgorICAgICAgICAgICAgIyBUZXN0IHRoYXQgX19haXRlcl9fIHRoYXQgcmV0dXJucyBhbiBhc3luY2hyb25vdXMgaXRlcmF0b3IKICAgICAgICAgICAgICMgZGlyZWN0bHkgZG9lcyBub3QgdGhyb3cgYW55IHdhcm5pbmdzLgogICAgICAgICAgICAgcnVuX2FzeW5jKG1haW4oKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJLCAxMTEwMTEpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2N1cnNlcy5weSBiL0xpYi90ZXN0L3Rlc3RfY3Vyc2VzLnB5CmluZGV4IDg0MTFjZGIuLjg5N2Q3MzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY3Vyc2VzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3Vyc2VzLnB5CkBAIC0xMCw2ICsxMCw3IEBACiAjCiAKIGltcG9ydCBvcworaW1wb3J0IHN0cmluZwogaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTM5OSw2ICs0MDAsNTUgQEAKIAogY2xhc3MgVGVzdEFzY2lpKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiB0ZXN0X2NvbnRyb2xuYW1lcyhzZWxmKToKKyAgICAgICAgZm9yIG5hbWUgaW4gY3Vyc2VzLmFzY2lpLmNvbnRyb2xuYW1lczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGN1cnNlcy5hc2NpaSwgbmFtZSksIG5hbWUpCisKKyAgICBkZWYgdGVzdF9jdHlwZXMoc2VsZik6CisgICAgICAgIGRlZiBjaGVjayhmdW5jLCBleHBlY3RlZCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChjaD1jLCBmdW5jPWZ1bmMpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYyhpKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKGMpLCBleHBlY3RlZCkKKworICAgICAgICBmb3IgaSBpbiByYW5nZSgyNTYpOgorICAgICAgICAgICAgYyA9IGNocihpKQorICAgICAgICAgICAgYiA9IGJ5dGVzKFtpXSkKKyAgICAgICAgICAgIGNoZWNrKGN1cnNlcy5hc2NpaS5pc2FsbnVtLCBiLmlzYWxudW0oKSkKKyAgICAgICAgICAgIGNoZWNrKGN1cnNlcy5hc2NpaS5pc2FscGhhLCBiLmlzYWxwaGEoKSkKKyAgICAgICAgICAgIGNoZWNrKGN1cnNlcy5hc2NpaS5pc2RpZ2l0LCBiLmlzZGlnaXQoKSkKKyAgICAgICAgICAgIGNoZWNrKGN1cnNlcy5hc2NpaS5pc2xvd2VyLCBiLmlzbG93ZXIoKSkKKyAgICAgICAgICAgIGNoZWNrKGN1cnNlcy5hc2NpaS5pc3NwYWNlLCBiLmlzc3BhY2UoKSkKKyAgICAgICAgICAgIGNoZWNrKGN1cnNlcy5hc2NpaS5pc3VwcGVyLCBiLmlzdXBwZXIoKSkKKworICAgICAgICAgICAgY2hlY2soY3Vyc2VzLmFzY2lpLmlzYXNjaWksIGkgPCAxMjgpCisgICAgICAgICAgICBjaGVjayhjdXJzZXMuYXNjaWkuaXNtZXRhLCBpID49IDEyOCkKKyAgICAgICAgICAgIGNoZWNrKGN1cnNlcy5hc2NpaS5pc2N0cmwsIGkgPCAzMikKKyAgICAgICAgICAgIGNoZWNrKGN1cnNlcy5hc2NpaS5pc2NudHJsLCBpIDwgMzIgb3IgaSA9PSAxMjcpCisgICAgICAgICAgICBjaGVjayhjdXJzZXMuYXNjaWkuaXNibGFuaywgYyBpbiAnIFx0JykKKyAgICAgICAgICAgIGNoZWNrKGN1cnNlcy5hc2NpaS5pc2dyYXBoLCAzMiA8IGkgPD0gMTI2KQorICAgICAgICAgICAgY2hlY2soY3Vyc2VzLmFzY2lpLmlzcHJpbnQsIDMyIDw9IGkgPD0gMTI2KQorICAgICAgICAgICAgY2hlY2soY3Vyc2VzLmFzY2lpLmlzcHVuY3QsIGMgaW4gc3RyaW5nLnB1bmN0dWF0aW9uKQorICAgICAgICAgICAgY2hlY2soY3Vyc2VzLmFzY2lpLmlzeGRpZ2l0LCBjIGluIHN0cmluZy5oZXhkaWdpdHMpCisKKyAgICBkZWYgdGVzdF9hc2NpaShzZWxmKToKKyAgICAgICAgYXNjaWkgPSBjdXJzZXMuYXNjaWkuYXNjaWkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc2NpaSgnXHhjMScpLCAnQScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNjaWkoJ0EnKSwgJ0EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzY2lpKG9yZCgnXHhjMScpKSwgb3JkKCdBJykpCisKKyAgICBkZWYgdGVzdF9jdHJsKHNlbGYpOgorICAgICAgICBjdHJsID0gY3Vyc2VzLmFzY2lpLmN0cmwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHJsKCdKJyksICdcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3RybCgnXG4nKSwgJ1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHJsKCdAJyksICdcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3RybChvcmQoJ0onKSksIG9yZCgnXG4nKSkKKworICAgIGRlZiB0ZXN0X2FsdChzZWxmKToKKyAgICAgICAgYWx0ID0gY3Vyc2VzLmFzY2lpLmFsdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsdCgnXG4nKSwgJ1x4OGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsdCgnQScpLCAnXHhjMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWx0KG9yZCgnQScpKSwgMHhjMSkKKwogICAgIGRlZiB0ZXN0X3VuY3RybChzZWxmKToKICAgICAgICAgdW5jdHJsID0gY3Vyc2VzLmFzY2lpLnVuY3RybAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuY3RybCgnYScpLCAnYScpCkBAIC00MDgsOSArNDU4LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5jdHJsKCdceDdmJyksICdePycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5jdHJsKCdcbicpLCAnXkonKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuY3RybCgnXDAnKSwgJ15AJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmN0cmwob3JkKCdBJykpLCAnQScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5jdHJsKG9yZCgnXG4nKSksICdeSicpCiAgICAgICAgICMgTWV0YS1iaXQgY2hhcmFjdGVycwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVuY3RybCgnXHg4YScpLCAnIV5KJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmN0cmwoJ1x4YzEnKSwgJyFBJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmN0cmwob3JkKCdceDhhJykpLCAnIV5KJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bmN0cmwob3JkKCdceGMxJykpLCAnIUEnKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RlY2ltYWwucHkgYi9MaWIvdGVzdC90ZXN0X2RlY2ltYWwucHkKaW5kZXggYzBkMjFiMS4uY2RlNWQ3OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGVjaW1hbC5weQpAQCAtMjQ5MSw3ICsyNDkxLDggQEAKICAgICAgICAgRGVjaW1hbCA9IHNlbGYuZGVjaW1hbC5EZWNpbWFsCiAKICAgICAgICAgY2xhc3MgTXlEZWNpbWFsKERlY2ltYWwpOgotICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIF8pOgorICAgICAgICAgICAgICAgIHNlbGYueCA9ICd5JwogCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKE15RGVjaW1hbCwgRGVjaW1hbCkpCiAKQEAgLTI0OTksNiArMjUwMCw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyKSwgTXlEZWNpbWFsKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihyKSwKICAgICAgICAgICAgICAgICAnMC4xMDAwMDAwMDAwMDAwMDAwMDU1NTExMTUxMjMxMjU3ODI3MDIxMTgxNTgzNDA0NTQxMDE1NjI1JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLngsICd5JykKKwogICAgICAgICBiaWdpbnQgPSAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE15RGVjaW1hbC5mcm9tX2Zsb2F0KGJpZ2ludCksIE15RGVjaW1hbChiaWdpbnQpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoTXlEZWNpbWFsLmZyb21fZmxvYXQoZmxvYXQoJ25hbicpKS5pc19xbmFuKCkpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QucHkgYi9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QucHkKaW5kZXggMjk0MjZhMy4uMzMxNjNiOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weQpAQCAtMjcxOSwxMiArMjcxOSw2IEBACiAgICAgPj4+IGRlZiBub3JtYWxpemUocyk6CiAgICAgLi4uICAgICByZXR1cm4gJ1xuJy5qb2luKHMuZGVjb2RlKCkuc3BsaXRsaW5lcygpKQogCi1Ob3RlOiB3ZSBhbHNvIHBhc3MgVEVSTT0nJyB0byBhbGwgdGhlIGFzc2VydF9weXRob24gY2FsbHMgdG8gYXZvaWQgYSBidWcKLWluIHRoZSByZWFkbGluZSBsaWJyYXJ5IHRoYXQgaXMgdHJpZ2dlcmVkIGluIHRoZXNlIHRlc3RzIGJlY2F1c2Ugd2UgYXJlCi1ydW5uaW5nIHRoZW0gaW4gYSBuZXcgcHl0aG9uIHByb2Nlc3MuICBTZWU6Ci0KLSAgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1yZWFkbGluZS8yMDEzLTA2L21zZzAwMDAwLmh0bWwKLQogV2l0aCB0aG9zZSBwcmVsaW1pbmFyaWVzIG91dCBvZiB0aGUgd2F5LCB3ZSdsbCBzdGFydCB3aXRoIGEgZmlsZSB3aXRoIHR3bwogc2ltcGxlIHRlc3RzIGFuZCBubyBlcnJvcnMuICBXZSdsbCBydW4gYm90aCB0aGUgdW5hZG9ybmVkIGRvY3Rlc3QgY29tbWFuZCwgYW5kCiB0aGUgdmVyYm9zZSB2ZXJzaW9uLCBhbmQgdGhlbiBjaGVjayB0aGUgb3V0cHV0OgpAQCAtMjc0MSw5ICsyNzM1LDkgQEAKICAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnXG4nKQogICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCdBbmQgdGhhdCBpcyBpdC5cbicpCiAgICAgLi4uICAgICByYzEsIG91dDEsIGVycjEgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soCi0gICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgZm4sIFRFUk09JycpCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgZm4pCiAgICAgLi4uICAgICByYzIsIG91dDIsIGVycjIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soCi0gICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy12JywgZm4sIFRFUk09JycpCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy12JywgZm4pCiAKIFdpdGggbm8gYXJndW1lbnRzIGFuZCBwYXNzaW5nIHRlc3RzLCB3ZSBzaG91bGQgZ2V0IG5vIG91dHB1dDoKIApAQCAtMjgwNiwxNyArMjgwMCwxNyBAQAogICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICBcIlwiXCJcbicpCiAgICAgLi4uICAgICBpbXBvcnQgc2h1dGlsCiAgICAgLi4uICAgICByYzEsIG91dDEsIGVycjEgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZSgKLSAgICAuLi4gICAgICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCBmbiwgZm4yLCBURVJNPScnKQorICAgIC4uLiAgICAgICAgICAgICAnLW0nLCAnZG9jdGVzdCcsIGZuLCBmbjIpCiAgICAgLi4uICAgICByYzIsIG91dDIsIGVycjIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soCi0gICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy1vJywgJ0VMTElQU0lTJywgZm4sIFRFUk09JycpCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy1vJywgJ0VMTElQU0lTJywgZm4pCiAgICAgLi4uICAgICByYzMsIG91dDMsIGVycjMgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soCiAgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy1vJywgJ0VMTElQU0lTJywKLSAgICAuLi4gICAgICAgICAgICAgJy1vJywgJ05PUk1BTElaRV9XSElURVNQQUNFJywgZm4sIGZuMiwgVEVSTT0nJykKKyAgICAuLi4gICAgICAgICAgICAgJy1vJywgJ05PUk1BTElaRV9XSElURVNQQUNFJywgZm4sIGZuMikKICAgICAuLi4gICAgIHJjNCwgb3V0NCwgZXJyNCA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKAotICAgIC4uLiAgICAgICAgICAgICAnLW0nLCAnZG9jdGVzdCcsICctZicsIGZuLCBmbjIsIFRFUk09JycpCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy1mJywgZm4sIGZuMikKICAgICAuLi4gICAgIHJjNSwgb3V0NSwgZXJyNSA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygKICAgICAuLi4gICAgICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnLXYnLCAnLW8nLCAnRUxMSVBTSVMnLAotICAgIC4uLiAgICAgICAgICAgICAnLW8nLCAnTk9STUFMSVpFX1dISVRFU1BBQ0UnLCBmbiwgZm4yLCBURVJNPScnKQorICAgIC4uLiAgICAgICAgICAgICAnLW8nLCAnTk9STUFMSVpFX1dISVRFU1BBQ0UnLCBmbiwgZm4yKQogCiBPdXIgZmlyc3QgdGVzdCBydW4gd2lsbCBzaG93IHRoZSBlcnJvcnMgZnJvbSB0aGUgZmlyc3QgZmlsZSAoZG9jdGVzdCBzdG9wcyBpZiBhCiBmaWxlIGhhcyBlcnJvcnMpLiAgTm90ZSB0aGF0IGRvY3Rlc3QgdGVzdC1ydW4gZXJyb3Igb3V0cHV0IGFwcGVhcnMgb24gc3Rkb3V0LApAQCAtMjkyMiw3ICsyOTE2LDcgQEAKIEludmFsaWQgZmlsZSBuYW1lOgogCiAgICAgPj4+IHJjLCBvdXQsIGVyciA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKAotICAgIC4uLiAgICAgICAgICctbScsICdkb2N0ZXN0JywgJ25vc3VjaGZpbGUnLCBURVJNPScnKQorICAgIC4uLiAgICAgICAgICctbScsICdkb2N0ZXN0JywgJ25vc3VjaGZpbGUnKQogICAgID4+PiByYywgb3V0CiAgICAgKDEsIGInJykKICAgICA+Pj4gcHJpbnQobm9ybWFsaXplKGVycikpICAgICAgICAgICAgICAgICAgICAjIGRvY3Rlc3Q6ICtFTExJUFNJUwpAQCAtMjkzMyw3ICsyOTI3LDcgQEAKIEludmFsaWQgZG9jdGVzdCBvcHRpb246CiAKICAgICA+Pj4gcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoCi0gICAgLi4uICAgICAgICAgJy1tJywgJ2RvY3Rlc3QnLCAnLW8nLCAnbm9zdWNob3B0aW9uJywgVEVSTT0nJykKKyAgICAuLi4gICAgICAgICAnLW0nLCAnZG9jdGVzdCcsICctbycsICdub3N1Y2hvcHRpb24nKQogICAgID4+PiByYywgb3V0CiAgICAgKDIsIGInJykKICAgICA+Pj4gcHJpbnQobm9ybWFsaXplKGVycikpICAgICAgICAgICAgICAgICAgICAjIGRvY3Rlc3Q6ICtFTExJUFNJUwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9leHRjYWxsLnB5IGIvTGliL3Rlc3QvdGVzdF9leHRjYWxsLnB5CmluZGV4IGQ1MjZiNWYuLjVlZWEzNzkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZXh0Y2FsbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2V4dGNhbGwucHkKQEAgLTU3LDYgKzU3LDEwIEBACiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgICAuLi4KICAgICBUeXBlRXJyb3I6IGYoKSBnb3QgbXVsdGlwbGUgdmFsdWVzIGZvciBrZXl3b3JkIGFyZ3VtZW50ICdhJworICAgID4+PiBmKDEsIDIsIGE9MywgKip7J2EnOiA0fSwgKip7J2EnOiA1fSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgIC4uLgorICAgIFR5cGVFcnJvcjogZigpIGdvdCBtdWx0aXBsZSB2YWx1ZXMgZm9yIGtleXdvcmQgYXJndW1lbnQgJ2EnCiAgICAgPj4+IGYoMSwgMiwgMywgKls0LCA1XSwgKip7J2EnOjYsICdiJzo3fSkKICAgICAoMSwgMiwgMywgNCwgNSkgeydhJzogNiwgJ2InOiA3fQogICAgID4+PiBmKDEsIDIsIDMsIHg9NCwgeT01LCAqKDYsIDcpLCAqKnsnYSc6OCwgJ2InOiA5fSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnVuY3Rvb2xzLnB5IGIvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKaW5kZXggOWFiZTk4NC4uYWI1MWEzNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKQEAgLTIxNyw2ICsyMTcsMzMgQEAKICAgICAgICAgICAgICAgICAgICAgICBbJ3t9KHshcn0sIHt9LCB7fSknLmZvcm1hdChuYW1lLCBjYXB0dXJlLCBhcmdzX3JlcHIsIGt3YXJnc19yZXByKQogICAgICAgICAgICAgICAgICAgICAgICBmb3Iga3dhcmdzX3JlcHIgaW4ga3dhcmdzX3JlcHJzXSkKIAorICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9yZXByKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnBhcnRpYWwgaXMgY19mdW5jdG9vbHMucGFydGlhbDoKKyAgICAgICAgICAgIG5hbWUgPSAnZnVuY3Rvb2xzLnBhcnRpYWwnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYW1lID0gc2VsZi5wYXJ0aWFsLl9fbmFtZV9fCisKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChjYXB0dXJlKQorICAgICAgICBmLl9fc2V0c3RhdGVfXygoZiwgKCksIHt9LCB7fSkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmKSwgJyVzKCVzKC4uLikpJyAlIChuYW1lLCBuYW1lKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuX19zZXRzdGF0ZV9fKChjYXB0dXJlLCAoKSwge30sIHt9KSkKKworICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUpCisgICAgICAgIGYuX19zZXRzdGF0ZV9fKChjYXB0dXJlLCAoZiwpLCB7fSwge30pKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZiksICclcyglciwgJXMoLi4uKSknICUgKG5hbWUsIGNhcHR1cmUsIG5hbWUpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZi5fX3NldHN0YXRlX18oKGNhcHR1cmUsICgpLCB7fSwge30pKQorCisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSkKKyAgICAgICAgZi5fX3NldHN0YXRlX18oKGNhcHR1cmUsICgpLCB7J2EnOiBmfSwge30pKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZiksICclcyglciwgYT0lcyguLi4pKScgJSAobmFtZSwgY2FwdHVyZSwgbmFtZSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLl9fc2V0c3RhdGVfXygoY2FwdHVyZSwgKCksIHt9LCB7fSkpCisKICAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6CiAgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwoc2lnbmF0dXJlLCBbJ2FzZGYnXSwgYmFyPVtUcnVlXSkKICAgICAgICAgZi5hdHRyID0gW10KQEAgLTI5Nyw2ICszMjQsNDAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCAoKDEsIDIpLCB7fSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShyWzBdKSwgdHVwbGUpCiAKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfcGlja2xlKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUpCisgICAgICAgIGYuX19zZXRzdGF0ZV9fKChmLCAoKSwge30sIHt9KSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSZWN1cnNpb25FcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhmLCBwcm90bykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuX19zZXRzdGF0ZV9fKChjYXB0dXJlLCAoKSwge30sIHt9KSkKKworICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUpCisgICAgICAgIGYuX19zZXRzdGF0ZV9fKChjYXB0dXJlLCAoZiwpLCB7fSwge30pKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgICAgICBmX2NvcHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGYsIHByb3RvKSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZl9jb3B5LmFyZ3NbMF0sIGZfY29weSkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBmX2NvcHkuX19zZXRzdGF0ZV9fKChjYXB0dXJlLCAoKSwge30sIHt9KSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGYuX19zZXRzdGF0ZV9fKChjYXB0dXJlLCAoKSwge30sIHt9KSkKKworICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUpCisgICAgICAgIGYuX19zZXRzdGF0ZV9fKChjYXB0dXJlLCAoKSwgeydhJzogZn0sIHt9KSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICAgICAgZl9jb3B5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhmLCBwcm90bykpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGZfY29weS5rZXl3b3Jkc1snYSddLCBmX2NvcHkpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgZl9jb3B5Ll9fc2V0c3RhdGVfXygoY2FwdHVyZSwgKCksIHt9LCB7fSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLl9fc2V0c3RhdGVfXygoY2FwdHVyZSwgKCksIHt9LCB7fSkpCisKICAgICAjIElzc3VlIDYwODM6IFJlZmVyZW5jZSBjb3VudGluZyBidWcKICAgICBkZWYgdGVzdF9zZXRzdGF0ZV9yZWZjb3VudChzZWxmKToKICAgICAgICAgY2xhc3MgQmFkU2VxdWVuY2U6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2xhenkucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2xhenkucHkKaW5kZXggNzc0YjdhNC4uY2MzODNjMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9sYXp5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfbGF6eS5weQpAQCAtMSw2ICsxLDggQEAKIGltcG9ydCBpbXBvcnRsaWIKIGZyb20gaW1wb3J0bGliIGltcG9ydCBhYmMKIGZyb20gaW1wb3J0bGliIGltcG9ydCB1dGlsCitpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgdGVzdF91dGlsCkBAIC0xMjIsMTIgKzEyNCwyMCBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19uYW1lX18nKSkKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9zdWJzdGl0dXRpb25fZXJyb3Ioc2VsZik6Ci0gICAgICAgIHNvdXJjZV9jb2RlID0gJ2ltcG9ydCBzeXM7IHN5cy5tb2R1bGVzW19fbmFtZV9fXSA9IDQyJwotICAgICAgICBtb2R1bGUgPSBzZWxmLm5ld19tb2R1bGUoc291cmNlX2NvZGUpCiAgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUoVGVzdGluZ0ltcG9ydGVyLm1vZHVsZV9uYW1lKToKLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBmcmVzaF9tb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKFRlc3RpbmdJbXBvcnRlci5tb2R1bGVfbmFtZSkKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW1Rlc3RpbmdJbXBvcnRlci5tb2R1bGVfbmFtZV0gPSBmcmVzaF9tb2R1bGUKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubmV3X21vZHVsZSgpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgInN1YnN0aXR1dGVkIik6CiAgICAgICAgICAgICAgICAgbW9kdWxlLl9fbmFtZV9fCiAKKyAgICBkZWYgdGVzdF9tb2R1bGVfYWxyZWFkeV9pbl9zeXMoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUoVGVzdGluZ0ltcG9ydGVyLm1vZHVsZV9uYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubmV3X21vZHVsZSgpCisgICAgICAgICAgICBzeXMubW9kdWxlc1tUZXN0aW5nSW1wb3J0ZXIubW9kdWxlX25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICAjIEZvcmNlIHRoZSBsb2FkOyBqdXN0IGNhcmUgdGhhdCBubyBleGNlcHRpb24gaXMgcmFpc2VkLgorICAgICAgICAgICAgbW9kdWxlLl9fbmFtZV9fCisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGFyc2VyLnB5IGIvTGliL3Rlc3QvdGVzdF9wYXJzZXIucHkKaW5kZXggM2QzMDFiNC4uYWI2NTc3ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wYXJzZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wYXJzZXIucHkKQEAgLTYyNyw2ICs2MjcsMjIgQEAKICAgICAgICAgY29kZTIgPSBwYXJzZXIuY29tcGlsZXN0KHN0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoY29kZTIpLCAtMykKIAorICAgIGRlZiB0ZXN0X2NvbXBpbGVfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHN0ID0gcGFyc2VyLmV4cHIoJ2EgKyA1JykKKyAgICAgICAgY29kZSA9IHBhcnNlci5jb21waWxlc3Qoc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZS5jb19maWxlbmFtZSwgJzxzeW50YXgtdHJlZT4nKQorICAgICAgICBjb2RlID0gc3QuY29tcGlsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZS5jb19maWxlbmFtZSwgJzxzeW50YXgtdHJlZT4nKQorICAgICAgICBmb3IgZmlsZW5hbWUgaW4gKCdmaWxlLnB5JywgYidmaWxlLnB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICBieXRlYXJyYXkoYidmaWxlLnB5JyksIG1lbW9yeXZpZXcoYidmaWxlLnB5JykpOgorICAgICAgICAgICAgY29kZSA9IHBhcnNlci5jb21waWxlc3Qoc3QsIGZpbGVuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLmNvX2ZpbGVuYW1lLCAnZmlsZS5weScpCisgICAgICAgICAgICBjb2RlID0gc3QuY29tcGlsZShmaWxlbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZS5jb19maWxlbmFtZSwgJ2ZpbGUucHknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBhcnNlci5jb21waWxlc3QsIHN0LCBsaXN0KGInZmlsZS5weScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN0LmNvbXBpbGUsIGxpc3QoYidmaWxlLnB5JykpCisKKwogY2xhc3MgUGFyc2VyU3RhY2tMaW1pdFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJ0cnkgdG8gcHVzaCB0aGUgcGFyc2VyIHRvL292ZXIgaXRzIGxpbWl0cy4KICAgICBzZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE4ODEgZm9yIGEgZGlzY3Vzc2lvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9weWRvYy5weSBiL0xpYi90ZXN0L3Rlc3RfcHlkb2MucHkKaW5kZXggNTlhYTcxNS4uYWVlOTc5YiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9weWRvYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B5ZG9jLnB5CkBAIC0zNTYsNyArMzU2LDcgQEAKIGRlZiBnZXRfcHlkb2NfbGluayhtb2R1bGUpOgogICAgICJSZXR1cm5zIGEgZG9jdW1lbnRhdGlvbiB3ZWIgbGluayBvZiBhIG1vZHVsZSIKICAgICBkaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lCi0gICAgYmFzZWRpciA9IG9zLnBhdGguam9pbihkaXJuYW1lKGRpcm5hbWUoX19maWxlX18pKSkKKyAgICBiYXNlZGlyID0gZGlybmFtZShkaXJuYW1lKF9fZmlsZV9fKSkKICAgICBkb2MgPSBweWRvYy5UZXh0RG9jKCkKICAgICBsb2MgPSBkb2MuZ2V0ZG9jbG9jKG1vZHVsZSwgYmFzZWRpcj1iYXNlZGlyKQogICAgIHJldHVybiBsb2MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmVhZGxpbmUucHkgYi9MaWIvdGVzdC90ZXN0X3JlYWRsaW5lLnB5CmluZGV4IDM1MzMwYWIuLjhjMmFkODUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmVhZGxpbmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yZWFkbGluZS5weQpAQCAtMSwxNSArMSwyNSBAQAogIiIiCiBWZXJ5IG1pbmltYWwgdW5pdHRlc3RzIGZvciBwYXJ0cyBvZiB0aGUgcmVhZGxpbmUgbW9kdWxlLgogIiIiCitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IEV4aXRTdGFjaworZnJvbSBlcnJubyBpbXBvcnQgRUlPCiBpbXBvcnQgb3MKK2ltcG9ydCBzZWxlY3RvcnMKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGltcG9ydF9tb2R1bGUsIHVubGluaworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGltcG9ydF9tb2R1bGUsIHVubGluaywgVEVTVEZOCiBmcm9tIHRlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCiAKICMgU2tpcCB0ZXN0cyBpZiB0aGVyZSBpcyBubyByZWFkbGluZSBtb2R1bGUKIHJlYWRsaW5lID0gaW1wb3J0X21vZHVsZSgncmVhZGxpbmUnKQogCitpc19lZGl0bGluZSA9IHJlYWRsaW5lLl9fZG9jX18gYW5kICJsaWJlZGl0IiBpbiByZWFkbGluZS5fX2RvY19fCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocmVhZGxpbmUsICJjbGVhcl9oaXN0b3J5IiksCisgICAgICAgICAgICAgICAgICAgICAiVGhlIGhpc3RvcnkgdXBkYXRlIHRlc3QgY2Fubm90IGJlIHJ1biBiZWNhdXNlIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAiY2xlYXJfaGlzdG9yeSBtZXRob2QgaXMgbm90IGF2YWlsYWJsZS4iKQogY2xhc3MgVGVzdEhpc3RvcnlNYW5pcHVsYXRpb24gKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiIKICAgICBUaGVzZSB0ZXN0cyB3ZXJlIGFkZGVkIHRvIGNoZWNrIHRoYXQgdGhlIGxpYmVkaXQgZW11bGF0aW9uIG9uIE9TWCBhbmQgdGhlCkBAIC0xNyw5ICsyNyw2IEBACiAgICAgd2h5IHRoZSB0ZXN0cyBjb3ZlciBvbmx5IGEgc21hbGwgc3Vic2V0IG9mIHRoZSBpbnRlcmZhY2UuCiAgICAgIiIiCiAKLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHJlYWRsaW5lLCAiY2xlYXJfaGlzdG9yeSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgaGlzdG9yeSB1cGRhdGUgdGVzdCBjYW5ub3QgYmUgcnVuIGJlY2F1c2UgdGhlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiY2xlYXJfaGlzdG9yeSBtZXRob2QgaXMgbm90IGF2YWlsYWJsZS4iKQogICAgIGRlZiB0ZXN0SGlzdG9yeVVwZGF0ZXMoc2VsZik6CiAgICAgICAgIHJlYWRsaW5lLmNsZWFyX2hpc3RvcnkoKQogCkBAIC04MiwxMSArODksMjkgQEAKICAgICAgICAgIyB3cml0ZV9oaXN0b3J5X2ZpbGUgY2FuIGNyZWF0ZSB0aGUgdGFyZ2V0CiAgICAgICAgIHJlYWRsaW5lLndyaXRlX2hpc3RvcnlfZmlsZShoZmlsZW5hbWUpCiAKKyAgICBkZWYgdGVzdF9ub25hc2NpaV9oaXN0b3J5KHNlbGYpOgorICAgICAgICByZWFkbGluZS5jbGVhcl9oaXN0b3J5KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVhZGxpbmUuYWRkX2hpc3RvcnkoImVudHLDqWUgMSIpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiTG9jYWxlIGNhbm5vdCBlbmNvZGUgdGVzdCBkYXRhOiAiICsgZm9ybWF0KGVycikpCisgICAgICAgIHJlYWRsaW5lLmFkZF9oaXN0b3J5KCJlbnRyw6llIDIiKQorICAgICAgICByZWFkbGluZS5yZXBsYWNlX2hpc3RvcnlfaXRlbSgxLCAiZW50csOpZSAyMiIpCisgICAgICAgIHJlYWRsaW5lLndyaXRlX2hpc3RvcnlfZmlsZShURVNURk4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5yZW1vdmUsIFRFU1RGTikKKyAgICAgICAgcmVhZGxpbmUuY2xlYXJfaGlzdG9yeSgpCisgICAgICAgIHJlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxlKFRFU1RGTikKKyAgICAgICAgaWYgaXNfZWRpdGxpbmU6CisgICAgICAgICAgICAjIEFuIGFkZF9oaXN0b3J5KCkgY2FsbCBzZWVtcyB0byBiZSByZXF1aXJlZCBmb3IgZ2V0X2hpc3RvcnlfCisgICAgICAgICAgICAjIGl0ZW0oKSB0byByZWdpc3RlciBpdGVtcyBmcm9tIHRoZSBmaWxlCisgICAgICAgICAgICByZWFkbGluZS5hZGRfaGlzdG9yeSgiZHVtbXkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRsaW5lLmdldF9oaXN0b3J5X2l0ZW0oMSksICJlbnRyw6llIDEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRsaW5lLmdldF9oaXN0b3J5X2l0ZW0oMiksICJlbnRyw6llIDIyIikKKwogCiBjbGFzcyBUZXN0UmVhZGxpbmUodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgQHVuaXR0ZXN0LnNraXBJZihyZWFkbGluZS5fUkVBRExJTkVfVkVSU0lPTiA8IDB4MDYwMAotICAgICAgICAgICAgICAgICAgICAgYW5kICJsaWJlZGl0IiBub3QgaW4gcmVhZGxpbmUuX19kb2NfXywKKyAgICBAdW5pdHRlc3Quc2tpcElmKHJlYWRsaW5lLl9SRUFETElORV9WRVJTSU9OIDwgMHgwNjAwIGFuZCBub3QgaXNfZWRpdGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAibm90IHN1cHBvcnRlZCBpbiB0aGlzIGxpYnJhcnkgdmVyc2lvbiIpCiAgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTk4ODQ6IEVuc3VyZSB0aGF0IHRoZSBBTlNJIHNlcXVlbmNlICJcMDMzWzEwMzRoIiBpcyBub3QKQEAgLTk2LDYgKzEyMSwxMzAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVJNPSd4dGVybS0yNTZjb2xvcicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBiJycpCiAKKyAgICBkZWYgdGVzdF9ub25hc2NpaShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVhZGxpbmUuYWRkX2hpc3RvcnkoIlx4RUJceEVGIikKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJMb2NhbGUgY2Fubm90IGVuY29kZSB0ZXN0IGRhdGE6ICIgKyBmb3JtYXQoZXJyKSkKKworICAgICAgICBzY3JpcHQgPSByIiIiaW1wb3J0IHJlYWRsaW5lCisKK2lzX2VkaXRsaW5lID0gcmVhZGxpbmUuX19kb2NfXyBhbmQgImxpYmVkaXQiIGluIHJlYWRsaW5lLl9fZG9jX18KK2luc2VydGVkID0gIltceEVGbnNlcnRlZF0iCittYWNybyA9ICJ8dFx4RUJbYWZ0ZXJdIgorc2V0X3ByZV9pbnB1dF9ob29rID0gZ2V0YXR0cihyZWFkbGluZSwgInNldF9wcmVfaW5wdXRfaG9vayIsIE5vbmUpCitpZiBpc19lZGl0bGluZSBvciBub3Qgc2V0X3ByZV9pbnB1dF9ob29rOgorICAgICMgVGhlIGluc2VydF9saW5lKCkgY2FsbCB2aWEgcHJlX2lucHV0X2hvb2soKSBkb2VzIG5vdGhpbmcgd2l0aCBFZGl0bGluZSwKKyAgICAjIHNvIGluY2x1ZGUgdGhlIGV4dHJhIHRleHQgdGhhdCB3b3VsZCBoYXZlIGJlZW4gaW5zZXJ0ZWQgaGVyZQorICAgIG1hY3JvID0gaW5zZXJ0ZWQgKyBtYWNybworCitpZiBpc19lZGl0bGluZToKKyAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZChyJ2JpbmQgXkIgZWQtcHJldi1jaGFyJykKKyAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZChyJ2JpbmQgIlx0IiBybF9jb21wbGV0ZScpCisgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQocidiaW5kIC1zIF5BICJ7fSInLmZvcm1hdChtYWNybykpCitlbHNlOgorICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKHInQ29udHJvbC1iOiBiYWNrd2FyZC1jaGFyJykKKyAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZChyJyJcdCI6IGNvbXBsZXRlJykKKyAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZChyJ3NldCBkaXNhYmxlLWNvbXBsZXRpb24gb2ZmJykKKyAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZChyJ3NldCBzaG93LWFsbC1pZi1hbWJpZ3VvdXMgb2ZmJykKKyAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZChyJ3NldCBzaG93LWFsbC1pZi11bm1vZGlmaWVkIG9mZicpCisgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQocidDb250cm9sLWE6ICJ7fSInLmZvcm1hdChtYWNybykpCisKK2RlZiBwcmVfaW5wdXRfaG9vaygpOgorICAgIHJlYWRsaW5lLmluc2VydF90ZXh0KGluc2VydGVkKQorICAgIHJlYWRsaW5lLnJlZGlzcGxheSgpCitpZiBzZXRfcHJlX2lucHV0X2hvb2s6CisgICAgc2V0X3ByZV9pbnB1dF9ob29rKHByZV9pbnB1dF9ob29rKQorCitkZWYgY29tcGxldGVyKHRleHQsIHN0YXRlKToKKyAgICBpZiB0ZXh0ID09ICJ0XHhFQiI6CisgICAgICAgIGlmIHN0YXRlID09IDA6CisgICAgICAgICAgICBwcmludCgidGV4dCIsIGFzY2lpKHRleHQpKQorICAgICAgICAgICAgcHJpbnQoImxpbmUiLCBhc2NpaShyZWFkbGluZS5nZXRfbGluZV9idWZmZXIoKSkpCisgICAgICAgICAgICBwcmludCgiaW5kZXhlcyIsIHJlYWRsaW5lLmdldF9iZWdpZHgoKSwgcmVhZGxpbmUuZ2V0X2VuZGlkeCgpKQorICAgICAgICAgICAgcmV0dXJuICJ0XHhFQm50IgorICAgICAgICBpZiBzdGF0ZSA9PSAxOgorICAgICAgICAgICAgcmV0dXJuICJ0XHhFQnh0IgorICAgIGlmIHRleHQgPT0gInRceEVCeCIgYW5kIHN0YXRlID09IDA6CisgICAgICAgIHJldHVybiAidFx4RUJ4dCIKKyAgICByZXR1cm4gTm9uZQorcmVhZGxpbmUuc2V0X2NvbXBsZXRlcihjb21wbGV0ZXIpCisKK2RlZiBkaXNwbGF5KHN1YnN0aXR1dGlvbiwgbWF0Y2hlcywgbG9uZ2VzdF9tYXRjaF9sZW5ndGgpOgorICAgIHByaW50KCJzdWJzdGl0dXRpb24iLCBhc2NpaShzdWJzdGl0dXRpb24pKQorICAgIHByaW50KCJtYXRjaGVzIiwgYXNjaWkobWF0Y2hlcykpCityZWFkbGluZS5zZXRfY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayhkaXNwbGF5KQorCitwcmludCgicmVzdWx0IiwgYXNjaWkoaW5wdXQoKSkpCitwcmludCgiaGlzdG9yeSIsIGFzY2lpKHJlYWRsaW5lLmdldF9oaXN0b3J5X2l0ZW0oMSkpKQorIiIiCisKKyAgICAgICAgaW5wdXQgPSBiIlx4MDEiICAjIEN0cmwtQSwgZXhwYW5kcyB0byAifHRceEVCW2FmdGVyXSIKKyAgICAgICAgaW5wdXQgKz0gYiJceDAyIiAqIGxlbigiW2FmdGVyXSIpICAjIE1vdmUgY3Vyc29yIGJhY2sKKyAgICAgICAgaW5wdXQgKz0gYiJcdFx0IiAgIyBEaXNwbGF5IHBvc3NpYmxlIGNvbXBsZXRpb25zCisgICAgICAgIGlucHV0ICs9IGIieFx0IiAgIyBDb21wbGV0ZSAidFx4RUJ4IiAtPiAidFx4RUJ4dCIKKyAgICAgICAgaW5wdXQgKz0gYiJcciIKKyAgICAgICAgb3V0cHV0ID0gcnVuX3B0eShzY3JpcHQsIGlucHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKGIidGV4dCAndFxceGViJ1xyXG4iLCBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJsaW5lICdbXFx4ZWZuc2VydGVkXXx0XFx4ZWJbYWZ0ZXJdJ1xyXG4iLCBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJpbmRleGVzIDExIDEzXHJcbiIsIG91dHB1dCkKKyAgICAgICAgaWYgbm90IGlzX2VkaXRsaW5lIGFuZCBoYXNhdHRyKHJlYWRsaW5lLCAic2V0X3ByZV9pbnB1dF9ob29rIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGIic3Vic3RpdHV0aW9uICd0XFx4ZWInXHJcbiIsIG91dHB1dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJtYXRjaGVzIFsndFxceGVibnQnLCAndFxceGVieHQnXVxyXG4iLCBvdXRwdXQpCisgICAgICAgIGV4cGVjdGVkID0gYnIiJ1tceGVmbnNlcnRlZF18dFx4ZWJ4dFthZnRlcl0nIgorICAgICAgICBzZWxmLmFzc2VydEluKGIicmVzdWx0ICIgKyBleHBlY3RlZCArIGIiXHJcbiIsIG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiImhpc3RvcnkgIiArIGV4cGVjdGVkICsgYiJcclxuIiwgb3V0cHV0KQorCisKK2RlZiBydW5fcHR5KHNjcmlwdCwgaW5wdXQ9YiJkdW1teSBpbnB1dFxyIik6CisgICAgcHR5ID0gaW1wb3J0X21vZHVsZSgncHR5JykKKyAgICBvdXRwdXQgPSBieXRlYXJyYXkoKQorICAgIFttYXN0ZXIsIHNsYXZlXSA9IHB0eS5vcGVucHR5KCkKKyAgICBhcmdzID0gKHN5cy5leGVjdXRhYmxlLCAnLWMnLCBzY3JpcHQpCisgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncywgc3RkaW49c2xhdmUsIHN0ZG91dD1zbGF2ZSwgc3RkZXJyPXNsYXZlKQorICAgIG9zLmNsb3NlKHNsYXZlKQorICAgIHdpdGggRXhpdFN0YWNrKCkgYXMgY2xlYW51cDoKKyAgICAgICAgY2xlYW51cC5lbnRlcl9jb250ZXh0KHByb2MpCisgICAgICAgIGRlZiB0ZXJtaW5hdGUocHJvYyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcHJvYy50ZXJtaW5hdGUoKQorICAgICAgICAgICAgZXhjZXB0IFByb2Nlc3NMb29rdXBFcnJvcjoKKyAgICAgICAgICAgICAgICAjIFdvcmthcm91bmQgZm9yIE9wZW4vTmV0IEJTRCBidWcgKElzc3VlIDE2NzYyKQorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xlYW51cC5jYWxsYmFjayh0ZXJtaW5hdGUsIHByb2MpCisgICAgICAgIGNsZWFudXAuY2FsbGJhY2sob3MuY2xvc2UsIG1hc3RlcikKKyAgICAgICAgIyBBdm9pZCB1c2luZyBEZWZhdWx0U2VsZWN0b3IgYW5kIFBvbGxTZWxlY3Rvci4gS3F1ZXVlKCkgZG9lcyBub3QKKyAgICAgICAgIyB3b3JrIHdpdGggcHNldWRvLXRlcm1pbmFscyBvbiBPUyBYIDwgMTAuOSAoSXNzdWUgMjAzNjUpIGFuZCBPcGVuCisgICAgICAgICMgQlNEIChJc3N1ZSAyMDY2NykuIFBvbGwoKSBkb2VzIG5vdCB3b3JrIHdpdGggT1MgWCAxMC42IG9yIDEwLjQKKyAgICAgICAgIyBlaXRoZXIgKElzc3VlIDIwNDcyKS4gSG9wZWZ1bGx5IHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgbG93IGVub3VnaAorICAgICAgICAjIHRvIHVzZSB3aXRoIHNlbGVjdCgpLgorICAgICAgICBzZWwgPSBjbGVhbnVwLmVudGVyX2NvbnRleHQoc2VsZWN0b3JzLlNlbGVjdFNlbGVjdG9yKCkpCisgICAgICAgIHNlbC5yZWdpc3RlcihtYXN0ZXIsIHNlbGVjdG9ycy5FVkVOVF9SRUFEIHwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgICAgICBvcy5zZXRfYmxvY2tpbmcobWFzdGVyLCBGYWxzZSkKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGZvciBbXywgZXZlbnRzXSBpbiBzZWwuc2VsZWN0KCk6CisgICAgICAgICAgICAgICAgaWYgZXZlbnRzICYgc2VsZWN0b3JzLkVWRU5UX1JFQUQ6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gb3MucmVhZChtYXN0ZXIsIDB4MTAwMDApCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgTGludXggcmFpc2VzIEVJTyB3aGVuIHNsYXZlIGlzIGNsb3NlZCAoSXNzdWUgNTM4MCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVyci5lcnJubyAhPSBFSU86CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gYiIiCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjaHVuazoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmV4dGVuZChjaHVuaykKKyAgICAgICAgICAgICAgICBpZiBldmVudHMgJiBzZWxlY3RvcnMuRVZFTlRfV1JJVEU6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXRbb3Mud3JpdGUobWFzdGVyLCBpbnB1dCk6XQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEFwcGFyZW50bHkgRUlPIG1lYW5zIHRoZSBzbGF2ZSB3YXMgY2xvc2VkCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnIuZXJybm8gIT0gRUlPOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IGIiIiAgIyBTdG9wIHdyaXRpbmcKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlucHV0OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsLm1vZGlmeShtYXN0ZXIsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N5bXRhYmxlLnB5IGIvTGliL3Rlc3QvdGVzdF9zeW10YWJsZS5weQppbmRleCBlNWU3YjgzLi5jNWQ3ZmFjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5bXRhYmxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3ltdGFibGUucHkKQEAgLTE1Nyw2ICsxNTcsMTIgQEAKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIFN5bnRheEVycm9yIGZvciAlciIgJSAoYnJva2VuY29kZSwpKQogICAgICAgICBjaGVja2ZpbGVuYW1lKCJkZWYgZih4KTogZm9vKSgiKSAgIyBwYXJzZS10aW1lCiAgICAgICAgIGNoZWNrZmlsZW5hbWUoImRlZiBmKHgpOiBnbG9iYWwgeCIpICAjIHN5bXRhYmxlLWJ1aWxkLXRpbWUKKyAgICAgICAgc3ltdGFibGUuc3ltdGFibGUoInBhc3MiLCBiInNwYW0iLCAiZXhlYyIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHN5bXRhYmxlLnN5bXRhYmxlKCJwYXNzIiwgYnl0ZWFycmF5KGIic3BhbSIpLCAiZXhlYyIpCisgICAgICAgIHN5bXRhYmxlLnN5bXRhYmxlKCJwYXNzIiwgbWVtb3J5dmlldyhiInNwYW0iKSwgImV4ZWMiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzeW10YWJsZS5zeW10YWJsZSgicGFzcyIsIGxpc3QoYiJzcGFtIiksICJleGVjIikKIAogICAgIGRlZiB0ZXN0X2V2YWwoc2VsZik6CiAgICAgICAgIHN5bWJvbHMgPSBzeW10YWJsZS5zeW10YWJsZSgiNDIiLCAiPyIsICJldmFsIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdW5wYWNrX2V4LnB5IGIvTGliL3Rlc3QvdGVzdF91bnBhY2tfZXgucHkKaW5kZXggZDI3ZWVmMC4uNzQzNDZiNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91bnBhY2tfZXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91bnBhY2tfZXgucHkKQEAgLTI0OCw2ICsyNDgsMTEgQEAKICAgICAgIC4uLgogICAgIFR5cGVFcnJvcjogZigpIGdvdCBtdWx0aXBsZSB2YWx1ZXMgZm9yIGtleXdvcmQgYXJndW1lbnQgJ3gnCiAKKyAgICA+Pj4gZih4PTUsICoqeyd4JzogM30sICoqeyd4JzogMn0pCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiBmKCkgZ290IG11bHRpcGxlIHZhbHVlcyBmb3Iga2V5d29yZCBhcmd1bWVudCAneCcKKwogICAgID4+PiBmKCoqezE6IDN9LCAqKnsxOiA1fSkKICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAuLi4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5IGIvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKaW5kZXggNDRlMzE0Mi4uYmMxZGQxNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKQEAgLTE4LDcgKzE4LDcgQEAKIAogZnJvbSBpdGVydG9vbHMgaW1wb3J0IHByb2R1Y3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgZmluZGZpbGUsIGltcG9ydF9mcmVzaF9tb2R1bGUsIGdjX2NvbGxlY3QKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIGZpbmRmaWxlLCBpbXBvcnRfZnJlc2hfbW9kdWxlLCBnY19jb2xsZWN0LCBzd2FwX2F0dHIKIAogIyBweUVUIGlzIHRoZSBwdXJlLVB5dGhvbiBpbXBsZW1lbnRhdGlvbi4KICMKQEAgLTE4NjAsNiArMTg2MCwxMiBAQAogICAgICAgICBlLmV4dGVuZChbRVQuRWxlbWVudCgnYmFyJyldKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlLnJlbW92ZSwgWCgnYmF6JykpCiAKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfcmVwcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjU0NTUKKyAgICAgICAgZSA9IEVULkVsZW1lbnQoJ2ZvbycpCisgICAgICAgIHdpdGggc3dhcF9hdHRyKGUsICd0YWcnLCBlKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgICAgICByZXByKGUpICAjIFNob3VsZCBub3QgY3Jhc2gKIAogY2xhc3MgTXV0YXRpbmdFbGVtZW50UGF0aChzdHIpOgogICAgIGRlZiBfX25ld19fKGNscywgZWxlbSwgKmFyZ3MpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydC5weQppbmRleCAwZGE1OTA2Li44ZTVlMTJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydC5weQpAQCAtNjAwLDYgKzYwMCwxOSBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MucmVtb3ZlKGZpbGVuYW1lKQogCisgICAgZGVmIHRlc3RCeXRlc1BhdGgoc2VsZik6CisgICAgICAgIGZpbGVuYW1lID0gc3VwcG9ydC5URVNURk4gKyAiLnppcCIKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBmaWxlbmFtZSkKKyAgICAgICAgd2l0aCBaaXBGaWxlKGZpbGVuYW1lLCAidyIpIGFzIHo6CisgICAgICAgICAgICB6aW5mbyA9IFppcEluZm8oVEVTVE1PRCArICIucHkiLCB0aW1lLmxvY2FsdGltZShOT1cpKQorICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IHNlbGYuY29tcHJlc3Npb24KKyAgICAgICAgICAgIHoud3JpdGVzdHIoemluZm8sIHRlc3Rfc3JjKQorCisgICAgICAgIHppcGltcG9ydC56aXBpbXBvcnRlcihmaWxlbmFtZSkKKyAgICAgICAgemlwaW1wb3J0LnppcGltcG9ydGVyKG9zLmZzZW5jb2RlKGZpbGVuYW1lKSkKKyAgICAgICAgemlwaW1wb3J0LnppcGltcG9ydGVyKGJ5dGVhcnJheShvcy5mc2VuY29kZShmaWxlbmFtZSkpKQorICAgICAgICB6aXBpbXBvcnQuemlwaW1wb3J0ZXIobWVtb3J5dmlldyhvcy5mc2VuY29kZShmaWxlbmFtZSkpKQorCiAKIEBzdXBwb3J0LnJlcXVpcmVzX3psaWIKIGNsYXNzIENvbXByZXNzZWRaaXBJbXBvcnRUZXN0Q2FzZShVbmNvbXByZXNzZWRaaXBJbXBvcnRUZXN0Q2FzZSk6CkBAIC02MjAsNiArNjMzLDggQEAKICAgICBkZWYgdGVzdEJhZEFyZ3Moc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgemlwaW1wb3J0LnppcGltcG9ydGVyLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHppcGltcG9ydC56aXBpbXBvcnRlciwgVEVTVE1PRCwga3dkPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgemlwaW1wb3J0LnppcGltcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KG9zLmZzZW5jb2RlKFRFU1RNT0QpKSkKIAogICAgIGRlZiB0ZXN0RmlsZW5hbWVUb29Mb25nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFppcEZhaWx1cmUoJ0EnICogMzMwMDApCmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci9fX2luaXRfXy5weSBiL0xpYi90a2ludGVyL19faW5pdF9fLnB5CmluZGV4IGFhNjQ2ZGMuLjU1YmZiN2YgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL19faW5pdF9fLnB5CisrKyBiL0xpYi90a2ludGVyL19faW5pdF9fLnB5CkBAIC0yNzEsNyArMjcxLDcgQEAKIAogICAgICAgICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGNhbGxiYWNrLgogICAgICAgICAiIiIKLSAgICAgICAgZiA9IENhbGxXcmFwcGVyKGNhbGxiYWNrLCBOb25lLCBzZWxmKS5fX2NhbGxfXworICAgICAgICBmID0gQ2FsbFdyYXBwZXIoY2FsbGJhY2ssIE5vbmUsIHNlbGYuX3Jvb3QpLl9fY2FsbF9fCiAgICAgICAgIGNibmFtZSA9IHJlcHIoaWQoZikpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNhbGxiYWNrID0gY2FsbGJhY2suX19mdW5jX18KQEAgLTI5NSwxNCArMjk1LDE5IEBACiAgICAgICAgIENCTkFNRSBpcyB0aGUgbmFtZSBvZiB0aGUgY2FsbGJhY2sgcmV0dXJuZWQgZnJvbSB0cmFjZV92YXJpYWJsZSBvciB0cmFjZS4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3RrLmNhbGwoInRyYWNlIiwgInZkZWxldGUiLCBzZWxmLl9uYW1lLCBtb2RlLCBjYm5hbWUpCi0gICAgICAgIHNlbGYuX3RrLmRlbGV0ZWNvbW1hbmQoY2JuYW1lKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl90Y2xDb21tYW5kcy5yZW1vdmUoY2JuYW1lKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2JuYW1lID0gc2VsZi5fdGsuc3BsaXRsaXN0KGNibmFtZSlbMF0KKyAgICAgICAgZm9yIG0sIGNhIGluIHNlbGYudHJhY2VfdmluZm8oKToKKyAgICAgICAgICAgIGlmIHNlbGYuX3RrLnNwbGl0bGlzdChjYSlbMF0gPT0gY2JuYW1lOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl90ay5kZWxldGVjb21tYW5kKGNibmFtZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl90Y2xDb21tYW5kcy5yZW1vdmUoY2JuYW1lKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcwogICAgIGRlZiB0cmFjZV92aW5mbyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGFsbCB0cmFjZSBjYWxsYmFjayBpbmZvcm1hdGlvbi4iIiIKLSAgICAgICAgcmV0dXJuIFtzZWxmLl90ay5zcGxpdCh4KSBmb3IgeCBpbiBzZWxmLl90ay5zcGxpdGxpc3QoCisgICAgICAgIHJldHVybiBbc2VsZi5fdGsuc3BsaXRsaXN0KHgpIGZvciB4IGluIHNlbGYuX3RrLnNwbGl0bGlzdCgKICAgICAgICAgICAgIHNlbGYuX3RrLmNhbGwoInRyYWNlIiwgInZpbmZvIiwgc2VsZi5fbmFtZSkpXQogICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgICAiIiJDb21wYXJpc29uIGZvciBlcXVhbGl0eSAoPT0pLgpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF92YXJpYWJsZXMucHkgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3ZhcmlhYmxlcy5weQppbmRleCBhYmRjZTk2Li4xZjc0NDUzIDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3ZhcmlhYmxlcy5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3ZhcmlhYmxlcy5weQpAQCAtMSw1ICsxLDUgQEAKIGltcG9ydCB1bml0dGVzdAotCitpbXBvcnQgZ2MKIGZyb20gdGtpbnRlciBpbXBvcnQgKFZhcmlhYmxlLCBTdHJpbmdWYXIsIEludFZhciwgRG91YmxlVmFyLCBCb29sZWFuVmFyLCBUY2wsCiAgICAgICAgICAgICAgICAgICAgICBUY2xFcnJvcikKIApAQCAtODcsNiArODcsNTUgQEAKICAgICAgICAgdi5zZXQoInZhbHVlIikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYuc2lkZV9lZmZlY3QpCiAKKyAgICBkZWYgdGVzdF90cmFjZShzZWxmKToKKyAgICAgICAgdiA9IFZhcmlhYmxlKHNlbGYucm9vdCkKKyAgICAgICAgdm5hbWUgPSBzdHIodikKKyAgICAgICAgdHJhY2UgPSBbXQorICAgICAgICBkZWYgcmVhZF90cmFjZXIoKmFyZ3MpOgorICAgICAgICAgICAgdHJhY2UuYXBwZW5kKCgncmVhZCcsKSArIGFyZ3MpCisgICAgICAgIGRlZiB3cml0ZV90cmFjZXIoKmFyZ3MpOgorICAgICAgICAgICAgdHJhY2UuYXBwZW5kKCgnd3JpdGUnLCkgKyBhcmdzKQorICAgICAgICBjYjEgPSB2LnRyYWNlX3ZhcmlhYmxlKCdyJywgcmVhZF90cmFjZXIpCisgICAgICAgIGNiMiA9IHYudHJhY2VfdmFyaWFibGUoJ3d1Jywgd3JpdGVfdHJhY2VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZCh2LnRyYWNlX3ZpbmZvKCkpLCBbKCdyJywgY2IxKSwgKCd3dScsIGNiMildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlLCBbXSkKKworICAgICAgICB2LnNldCgnc3BhbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2UsIFsoJ3dyaXRlJywgdm5hbWUsICcnLCAndycpXSkKKworICAgICAgICB0cmFjZSA9IFtdCisgICAgICAgIHYuZ2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZSwgWygncmVhZCcsIHZuYW1lLCAnJywgJ3InKV0pCisKKyAgICAgICAgdHJhY2UgPSBbXQorICAgICAgICBpbmZvID0gc29ydGVkKHYudHJhY2VfdmluZm8oKSkKKyAgICAgICAgdi50cmFjZV92ZGVsZXRlKCd3JywgY2IxKSAgIyBXcm9uZyBtb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHYudHJhY2VfdmluZm8oKSksIGluZm8pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IpOgorICAgICAgICAgICAgdi50cmFjZV92ZGVsZXRlKCdyJywgJ3NwYW0nKSAgIyBXcm9uZyBjb21tYW5kIG5hbWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQodi50cmFjZV92aW5mbygpKSwgaW5mbykKKyAgICAgICAgdi50cmFjZV92ZGVsZXRlKCdyJywgKGNiMSwgNDMpKSAjIFdyb25nIGFyZ3VtZW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZCh2LnRyYWNlX3ZpbmZvKCkpLCBpbmZvKQorICAgICAgICB2LmdldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2UsIFsoJ3JlYWQnLCB2bmFtZSwgJycsICdyJyldKQorCisgICAgICAgIHRyYWNlID0gW10KKyAgICAgICAgdi50cmFjZV92ZGVsZXRlKCdyJywgY2IxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYudHJhY2VfdmluZm8oKSwgWygnd3UnLCBjYjIpXSkKKyAgICAgICAgdi5nZXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlLCBbXSkKKworICAgICAgICB0cmFjZSA9IFtdCisgICAgICAgIGRlbCB3cml0ZV90cmFjZXIKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHYuc2V0KCdlZ2dzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZSwgWygnd3JpdGUnLCB2bmFtZSwgJycsICd3JyldKQorCisgICAgICAgIHRyYWNlID0gW10KKyAgICAgICAgZGVsIHYKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2UsIFsoJ3dyaXRlJywgdm5hbWUsICcnLCAndScpXSkKKwogCiBjbGFzcyBUZXN0U3RyaW5nVmFyKFRlc3RCYXNlKToKIApkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X3dpZGdldHMucHkgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3Rfd2lkZ2V0cy5weQppbmRleCBjMDMxMzUxLi44YmQyMmQwIDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3Rfd2lkZ2V0cy5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3Rfd2lkZ2V0cy5weQpAQCAtMTQ4Niw2ICsxNDg2LDU3IEBACiAgICAgICAgICAgICB2YWx1ZSkKIAogCisgICAgZGVmIHRlc3Rfc2VsZWN0aW9uKHNlbGYpOgorICAgICAgICAjIGl0ZW0gJ25vbmUnIGRvZXNuJ3QgZXhpc3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5zZWxlY3Rpb25fc2V0LCAnbm9uZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYudHYuc2VsZWN0aW9uX2FkZCwgJ25vbmUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBzZWxmLnR2LnNlbGVjdGlvbl9yZW1vdmUsICdub25lJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5zZWxlY3Rpb25fdG9nZ2xlLCAnbm9uZScpCisKKyAgICAgICAgaXRlbTEgPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcpCisgICAgICAgIGl0ZW0yID0gc2VsZi50di5pbnNlcnQoJycsICdlbmQnKQorICAgICAgICBjMSA9IHNlbGYudHYuaW5zZXJ0KGl0ZW0xLCAnZW5kJykKKyAgICAgICAgYzIgPSBzZWxmLnR2Lmluc2VydChpdGVtMSwgJ2VuZCcpCisgICAgICAgIGMzID0gc2VsZi50di5pbnNlcnQoaXRlbTEsICdlbmQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuc2VsZWN0aW9uKCksICgpKQorCisgICAgICAgIHNlbGYudHYuc2VsZWN0aW9uX3NldCgoYzEsIGl0ZW0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LnNlbGVjdGlvbigpLCAoYzEsIGl0ZW0yKSkKKyAgICAgICAgc2VsZi50di5zZWxlY3Rpb25fc2V0KGMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuc2VsZWN0aW9uKCksIChjMiwpKQorCisgICAgICAgIHNlbGYudHYuc2VsZWN0aW9uX2FkZCgoYzEsIGl0ZW0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LnNlbGVjdGlvbigpLCAoYzEsIGMyLCBpdGVtMikpCisgICAgICAgIHNlbGYudHYuc2VsZWN0aW9uX2FkZChpdGVtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LnNlbGVjdGlvbigpLCAoaXRlbTEsIGMxLCBjMiwgaXRlbTIpKQorCisgICAgICAgIHNlbGYudHYuc2VsZWN0aW9uX3JlbW92ZSgoaXRlbTEsIGMzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LnNlbGVjdGlvbigpLCAoYzEsIGMyLCBpdGVtMikpCisgICAgICAgIHNlbGYudHYuc2VsZWN0aW9uX3JlbW92ZShjMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LnNlbGVjdGlvbigpLCAoYzEsIGl0ZW0yKSkKKworICAgICAgICBzZWxmLnR2LnNlbGVjdGlvbl90b2dnbGUoKGMxLCBjMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5zZWxlY3Rpb24oKSwgKGMzLCBpdGVtMikpCisgICAgICAgIHNlbGYudHYuc2VsZWN0aW9uX3RvZ2dsZShpdGVtMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LnNlbGVjdGlvbigpLCAoYzMsKSkKKworICAgICAgICBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcsIGlkPSd3aXRoIHNwYWNlcycpCisgICAgICAgIHNlbGYudHYuc2VsZWN0aW9uX3NldCgnd2l0aCBzcGFjZXMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuc2VsZWN0aW9uKCksICgnd2l0aCBzcGFjZXMnLCkpCisKKyAgICAgICAgc2VsZi50di5pbnNlcnQoJycsICdlbmQnLCBpZD0ne2JyYWNlJykKKyAgICAgICAgc2VsZi50di5zZWxlY3Rpb25fc2V0KCd7YnJhY2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuc2VsZWN0aW9uKCksICgne2JyYWNlJywpKQorCisgICAgICAgIHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJywgaWQ9J3VuaWNvZGVcdTIwYWMnKQorICAgICAgICBzZWxmLnR2LnNlbGVjdGlvbl9zZXQoJ3VuaWNvZGVcdTIwYWMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYuc2VsZWN0aW9uKCksICgndW5pY29kZVx1MjBhYycsKSkKKworICAgICAgICBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcsIGlkPWInYnl0ZXNceGUyXHg4Mlx4YWMnKQorICAgICAgICBzZWxmLnR2LnNlbGVjdGlvbl9zZXQoYidieXRlc1x4ZTJceDgyXHhhYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di5zZWxlY3Rpb24oKSwgKCdieXRlc1x4ZTJceDgyXHhhYycsKSkKKworCiAgICAgZGVmIHRlc3Rfc2V0KHNlbGYpOgogICAgICAgICBzZWxmLnR2Wydjb2x1bW5zJ10gPSBbJ0EnLCAnQiddCiAgICAgICAgIGl0ZW0gPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcsIHZhbHVlcz1bJ2EnLCAnYiddKQpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdHRrLnB5IGIvTGliL3RraW50ZXIvdHRrLnB5CmluZGV4IDhmOTM2OWIuLjBlNTc1OWQgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3R0ay5weQorKysgYi9MaWIvdGtpbnRlci90dGsucHkKQEAgLTEzOTIsNyArMTM5Miw5IEBACiAKICAgICBkZWYgc2VsZWN0aW9uKHNlbGYsIHNlbG9wPU5vbmUsIGl0ZW1zPU5vbmUpOgogICAgICAgICAiIiJJZiBzZWxvcCBpcyBub3Qgc3BlY2lmaWVkLCByZXR1cm5zIHNlbGVjdGVkIGl0ZW1zLiIiIgotICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICJzZWxlY3Rpb24iLCBzZWxvcCwgaXRlbXMpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoaXRlbXMsIChzdHIsIGJ5dGVzKSk6CisgICAgICAgICAgICBpdGVtcyA9IChpdGVtcywpCisgICAgICAgIHJldHVybiBzZWxmLnRrLnNwbGl0bGlzdChzZWxmLnRrLmNhbGwoc2VsZi5fdywgInNlbGVjdGlvbiIsIHNlbG9wLCBpdGVtcykpCiAKIAogICAgIGRlZiBzZWxlY3Rpb25fc2V0KHNlbGYsIGl0ZW1zKToKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGUucHkgYi9MaWIvdHVydGxlLnB5CmluZGV4IGNiZDRmNDcuLjU3Y2YzZDkgMTAwNjQ0Ci0tLSBhL0xpYi90dXJ0bGUucHkKKysrIGIvTGliL3R1cnRsZS5weQpAQCAtMTc5LDcgKzE3OSw3IEBACiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBrZXksIHZhbHVlID0gbGluZS5zcGxpdCgiPSIpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICBwcmludCgiQmFkIGxpbmUgaW4gY29uZmlnLWZpbGUgJXM6XG4lcyIgJSAoZmlsZW5hbWUsbGluZSkpCiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBrZXkgPSBrZXkuc3RyaXAoKQpAQCAtMTkyLDcgKzE5Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZmxvYXQodmFsdWUpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnQodmFsdWUpCi0gICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzICMgdmFsdWUgbmVlZCBub3QgYmUgY29udmVydGVkCiAgICAgICAgIGNmZ2RpY3Rba2V5XSA9IHZhbHVlCiAgICAgcmV0dXJuIGNmZ2RpY3QKQEAgLTIyMCw3ICsyMjAsNyBAQAogICAgIHRyeToKICAgICAgICAgaGVhZCwgdGFpbCA9IHNwbGl0KF9fZmlsZV9fKQogICAgICAgICBjZmdfZmlsZTIgPSBqb2luKGhlYWQsIGRlZmF1bHRfY2ZnKQotICAgIGV4Y2VwdDoKKyAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICBjZmdfZmlsZTIgPSAiIgogICAgIGlmIGlzZmlsZShjZmdfZmlsZTIpOgogICAgICAgICBjZmdkaWN0MiA9IGNvbmZpZ19kaWN0KGNmZ19maWxlMikKQEAgLTIyOSw3ICsyMjksNyBAQAogCiB0cnk6CiAgICAgcmVhZGNvbmZpZyhfQ0ZHKQotZXhjZXB0OgorZXhjZXB0IEV4Y2VwdGlvbjoKICAgICBwcmludCAoIk5vIGNvbmZpZ2ZpbGUgcmVhZCwgcmVhc29uIHVua25vd24iKQogCiAKQEAgLTY1Myw3ICs2NTMsNyBAQAogICAgICAgICAgICAgICAgICAgICB4LCB5ID0gKHNlbGYuY3YuY2FudmFzeChldmVudC54KS9zZWxmLnhzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1zZWxmLmN2LmNhbnZhc3koZXZlbnQueSkvc2VsZi55c2NhbGUpCiAgICAgICAgICAgICAgICAgICAgIGZ1bih4LCB5KQotICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBzZWxmLmN2LnRhZ19iaW5kKGl0ZW0sICI8QnV0dG9uJXMtTW90aW9uPiIgJSBudW0sIGV2ZW50ZnVuLCBhZGQpCiAKQEAgLTExNTgsNyArMTE1OCw3IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgVHVydGxlR3JhcGhpY3NFcnJvcigiYmFkIGNvbG9yIHN0cmluZzogJXMiICUgc3RyKGNvbG9yKSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgciwgZywgYiA9IGNvbG9yCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgcmFpc2UgVHVydGxlR3JhcGhpY3NFcnJvcigiYmFkIGNvbG9yIGFyZ3VtZW50czogJXMiICUgc3RyKGNvbG9yKSkKICAgICAgICAgaWYgc2VsZi5fY29sb3Jtb2RlID09IDEuMDoKICAgICAgICAgICAgIHIsIGcsIGIgPSBbcm91bmQoMjU1LjAqeCkgZm9yIHggaW4gKHIsIGcsIGIpXQpAQCAtMjcwMiw3ICsyNzAyLDcgQEAKICAgICAgICAgICAgIHJldHVybiBhcmdzCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHIsIGcsIGIgPSBhcmdzCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgcmFpc2UgVHVydGxlR3JhcGhpY3NFcnJvcigiYmFkIGNvbG9yIGFyZ3VtZW50czogJXMiICUgc3RyKGFyZ3MpKQogICAgICAgICBpZiBzZWxmLnNjcmVlbi5fY29sb3Jtb2RlID09IDEuMDoKICAgICAgICAgICAgIHIsIGcsIGIgPSBbcm91bmQoMjU1LjAqeCkgZm9yIHggaW4gKHIsIGcsIGIpXQpAQCAtMzg2NSw3ICszODY1LDcgQEAKICAgICAgICAgdHJ5OgogIyAgICAgICAgICAgIGV2YWwoa2V5KS5pbV9mdW5jLl9fZG9jX18gPSBkb2NzZGljdFtrZXldCiAgICAgICAgICAgICBldmFsKGtleSkuX19kb2NfXyA9IGRvY3NkaWN0W2tleV0KLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgcHJpbnQoIkJhZCBkb2NzdHJpbmctZW50cnk6ICVzIiAlIGtleSkKIAogX0xBTkdVQUdFID0gX0NGR1sibGFuZ3VhZ2UiXQpAQCAtMzg3NSw3ICszODc1LDcgQEAKICAgICAgICAgcmVhZF9kb2NzdHJpbmdzKF9MQU5HVUFHRSkKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBwcmludCgiQ2Fubm90IGZpbmQgZG9jc2RpY3QgZm9yIiwgX0xBTkdVQUdFKQotZXhjZXB0OgorZXhjZXB0IEV4Y2VwdGlvbjoKICAgICBwcmludCAoIlVua25vd24gRXJyb3Igd2hlbiB0cnlpbmcgdG8gaW1wb3J0ICVzLWRvY3N0cmluZy1kaWN0aW9uYXJ5IiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTEFOR1VBR0UpCiAKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9tb2NrLnB5IGIvTGliL3VuaXR0ZXN0L21vY2sucHkKaW5kZXggODZhNWEzZC4uMWFkZmNmOSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L21vY2sucHkKKysrIGIvTGliL3VuaXR0ZXN0L21vY2sucHkKQEAgLTE2OTQsNiArMTY5NCw3IEBACiAgICAgJ19fcmVkdWNlX18nLCAnX19yZWR1Y2VfZXhfXycsICdfX2dldGluaXRhcmdzX18nLCAnX19nZXRuZXdhcmdzX18nLAogICAgICdfX2dldHN0YXRlX18nLCAnX19zZXRzdGF0ZV9fJywgJ19fZ2V0Zm9ybWF0X18nLCAnX19zZXRmb3JtYXRfXycsCiAgICAgJ19fcmVwcl9fJywgJ19fZGlyX18nLCAnX19zdWJjbGFzc2VzX18nLCAnX19mb3JtYXRfXycsCisgICAgJ19fZ2V0bmV3YXJnc19leF9fJywKIH0KIAogCmRpZmYgLS1naXQgYS9NYWMvSURMRS9JRExFLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvaWRsZW1haW4ucHkgYi9NYWMvSURMRS9JRExFLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvaWRsZW1haW4ucHkKaW5kZXggOGI4YmViOS4uOTg2NzYwZCAxMDA2NDQKLS0tIGEvTWFjL0lETEUvSURMRS5hcHAvQ29udGVudHMvUmVzb3VyY2VzL2lkbGVtYWluLnB5CisrKyBiL01hYy9JRExFL0lETEUuYXBwL0NvbnRlbnRzL1Jlc291cmNlcy9pZGxlbWFpbi5weQpAQCAtNjgsOCArNjgsNiBAQAogICAgICAgICBicmVhawogCiAjIE5vdyBpdCBpcyBzYWZlIHRvIGltcG9ydCBpZGxlbGliLgotZnJvbSBpZGxlbGliIGltcG9ydCBtYWNvc3hTdXBwb3J0Ci1tYWNvc3hTdXBwb3J0Ll9hcHBidW5kbGUgPSBUcnVlCiBmcm9tIGlkbGVsaWIuUHlTaGVsbCBpbXBvcnQgbWFpbgogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBtYWluKCkKZGlmZiAtLWdpdCBhL01pc2MvQUNLUyBiL01pc2MvQUNLUwppbmRleCA2MzJjODVjLi4yN2JkNjkxIDEwMDY0NAotLS0gYS9NaXNjL0FDS1MKKysrIGIvTWlzYy9BQ0tTCkBAIC0xNjU1LDYgKzE2NTUsNyBAQAogQ2hlbmcgWmhhbmcKIEthaSBaaHUKIFRhcmVrIFppYWTDqQorSmVsbGUgWmlqbHN0cmEKIEdlbm5hZGl5IFpsb2JpbgogRG91ZyBab25na2VyCiBQZXRlciDDhXN0cmFuZApkaWZmIC0tZ2l0IGEvTWlzYy9ORVdTIGIvTWlzYy9ORVdTCmluZGV4IGM2ZGVlNWMuLjIzNTY5ODQgMTAwNjQ0Ci0tLSBhL01pc2MvTkVXUworKysgYi9NaXNjL05FV1MKQEAgLTIsOCArMiw4IEBACiBQeXRob24gTmV3cwogKysrKysrKysrKysKIAotV2hhdCdzIE5ldyBpbiBQeXRob24gMy41LjNyYzE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNS4zIHJlbGVhc2UgY2FuZGlkYXRlIDE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBSZWxlYXNlIGRhdGU6IFRCQQogCkBAIC0xMyw2ICsxMyw2NSBAQAogTGlicmFyeQogLS0tLS0tLQogCistIElzc3VlICMyMjExNTogRml4ZWQgdHJhY2luZyBUa2ludGVyIHZhcmlhYmxlczogdHJhY2VfdmRlbGV0ZSgpIHdpdGggd3JvbmcKKyAgbW9kZSBubyBsb25nZXIgYnJlYWsgdHJhY2luZywgdHJhY2VfdmluZm8oKSBub3cgYWx3YXlzIHJldHVybnMgYSBsaXN0IG9mCisgIHBhaXJzIG9mIHN0cmluZ3MsIHRyYWNpbmcgaW4gdGhlICJ1IiBtb2RlIG5vdyB3b3Jrcy4KKworLSBGaXggYSBzY29waW5nIGlzc3VlIGluIGltcG9ydGxpYi51dGlsLkxhenlMb2FkZXIgd2hpY2ggdHJpZ2dlcmVkIGFuCisgIFVuYm91bmRMb2NhbEVycm9yIHdoZW4gbGF6eS1sb2FkaW5nIGEgbW9kdWxlIHRoYXQgd2FzIGFscmVhZHkgcHV0IGludG8KKyAgc3lzLm1vZHVsZXMuCisKKy0gSXNzdWUgIzI3MDc5OiBGaXhlZCBjdXJzZXMuYXNjaWkgZnVuY3Rpb25zIGlzYmxhbmsoKSwgaXNjbnRybCgpIGFuZCBpc3B1bmN0KCkuCisKKy0gSXNzdWUgIzI2NzU0OiBTb21lIGZ1bmN0aW9ucyAoY29tcGlsZSgpIGV0YykgYWNjZXB0ZWQgYSBmaWxlbmFtZSBhcmd1bWVudAorICBlbmNvZGVkIGFzIGFuIGl0ZXJhYmxlIG9mIGludGVnZXJzLiBOb3cgb25seSBzdHJpbmdzIGFuZCBieXRlLWxpa2Ugb2JqZWN0cworICBhcmUgYWNjZXB0ZWQuCisKKy0gSXNzdWUgIzI3MDQ4OiBQcmV2ZW50cyBkaXN0dXRpbHMgZmFpbGluZyBvbiBXaW5kb3dzIHdoZW4gZW52aXJvbm1lbnQKKyAgdmFyaWFibGVzIGNvbnRhaW4gbm9uLUFTQ0lJIGNoYXJhY3RlcnMKKworLSBJc3N1ZSAjMjczMzA6IEZpeGVkIHBvc3NpYmxlIGxlYWtzIGluIHRoZSBjdHlwZXMgbW9kdWxlLgorCistIElzc3VlICMyNzIzODogR290IHJpZCBvZiBiYXJlIGV4Y2VwdHMgaW4gdGhlIHR1cnRsZSBtb2R1bGUuICBPcmlnaW5hbCBwYXRjaAorICBieSBKZWxsZSBaaWpsc3RyYS4KKworLSBJc3N1ZSAjMjcxMjI6IFdoZW4gYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCB3aXRoaW4gdGhlIGNvbnRleHQgYmVpbmcgbWFuYWdlZAorICBieSBhIGNvbnRleHRsaWIuRXhpdFN0YWNrKCkgYW5kIG9uZSBvZiB0aGUgZXhpdCBzdGFjayBnZW5lcmF0b3JzCisgIGNhdGNoZXMgYW5kIHJhaXNlcyBpdCBpbiBhIGNoYWluLCBkbyBub3QgcmUtcmFpc2UgdGhlIG9yaWdpbmFsIGV4Y2VwdGlvbgorICB3aGVuIGV4aXRpbmcsIGxldCB0aGUgbmV3IGNoYWluZWQgb25lIHRocm91Z2guICBUaGlzIGF2b2lkcyB0aGUgUEVQIDQ3OQorICBidWcgZGVzY3JpYmVkIGluIGlzc3VlMjU3ODIuCisKKy0gSXNzdWUgIzI3Mjc4OiBGaXggb3MudXJhbmRvbSgpIGltcGxlbWVudGF0aW9uIHVzaW5nIGdldHJhbmRvbSgpIG9uIExpbnV4LgorICBUcnVuY2F0ZSBzaXplIHRvIElOVF9NQVggYW5kIGxvb3AgdW50aWwgd2UgY29sbGVjdGVkIGVub3VnaCByYW5kb20gYnl0ZXMsCisgIGluc3RlYWQgb2YgY2FzdGluZyBhIGRpcmVjdGx5IFB5X3NzaXplX3QgdG8gaW50LgorCistIElzc3VlICMyNjM4NjogRml4ZWQgdHRrLlRyZWVWaWV3IHNlbGVjdGlvbiBvcGVyYXRpb25zIHdpdGggaXRlbSBpZCdzCisgIGNvbnRhaW5pbmcgc3BhY2VzLgorCistIElzc3VlICMyMjYzNjogQXZvaWQgc2hlbGwgaW5qZWN0aW9uIHByb2JsZW1zIHdpdGgKKyAgY3R5cGVzLnV0aWwuZmluZF9saWJyYXJ5KCkuCisKKy0gSXNzdWUgIzE2MTgyOiBGaXggdmFyaW91cyBmdW5jdGlvbnMgaW4gdGhlICJyZWFkbGluZSIgbW9kdWxlIHRvIHVzZSB0aGUKKyAgbG9jYWxlIGVuY29kaW5nLCBhbmQgZml4IGdldF9iZWdpZHgoKSBhbmQgZ2V0X2VuZGlkeCgpIHRvIHJldHVybiBjb2RlIHBvaW50CisgIGluZGV4ZXMuCisKKy0gSXNzdWUgIzI2OTMwOiBVcGRhdGUgV2luZG93cyBidWlsZHMgdG8gdXNlIE9wZW5TU0wgMS4wLjJoLgorCitJRExFCistLS0tCisKKy0gSXNzdWUgIzI3MzY1OiBBbGxvdyBub24tYXNjaWkgY2hhcnMgaW4gSURMRSBORVdTLnR4dCwgZm9yIGNvbnRyaWJ1dG9yIG5hbWVzLgorCistIElzc3VlICMyNzI0NTogSURMRTogQ2xlYW5seSBkZWxldGUgY3VzdG9tIHRoZW1lcyBhbmQga2V5IGJpbmRpbmdzLgorICBQcmV2aW91c2x5LCB3aGVuIElETEUgd2FzIHN0YXJ0ZWQgZnJvbSBhIGNvbnNvbGUgb3IgYnkgaW1wb3J0LCBhIGNhc2NhZGUKKyAgb2Ygd2FybmluZ3Mgd2FzIGVtaXR0ZWQuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCitDIEFQSQorLS0tLS0KKworLSBJc3N1ZSAjMjY3NTQ6IFB5VW5pY29kZV9GU0RlY29kZXIoKSBhY2NlcHRlZCBhIGZpbGVuYW1lIGFyZ3VtZW50IGVuY29kZWQgYXMKKyAgYW4gaXRlcmFibGUgb2YgaW50ZWdlcnMuIE5vdyBvbmx5IHN0cmluZ3MgYW5kIGJ5dGVzLWxpa2Ugb2JqZWN0cyBhcmUgYWNjZXB0ZWQuCisKIAogV2hhdCdzIE5ldyBpbiBQeXRob24gMy41LjI/CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzLmMgYi9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlcy5jCmluZGV4IDJlMDEzMjMuLmE3YTgxMDUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXMuYwpAQCAtMTEyNCw3ICsxMTI0LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBDaGFyQXJyYXlfZ2V0X3ZhbHVlKENEYXRhT2JqZWN0ICpzZWxmKQogewotICAgIGludCBpOworICAgIFB5X3NzaXplX3QgaTsKICAgICBjaGFyICpwdHIgPSBzZWxmLT5iX3B0cjsKICAgICBmb3IgKGkgPSAwOyBpIDwgc2VsZi0+Yl9zaXplOyArK2kpCiAgICAgICAgIGlmICgqcHRyKysgPT0gJ1wwJykKQEAgLTExODAsOSArMTE4MCw5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogV0NoYXJBcnJheV9nZXRfdmFsdWUoQ0RhdGFPYmplY3QgKnNlbGYpCiB7Ci0gICAgdW5zaWduZWQgaW50IGk7CisgICAgUHlfc3NpemVfdCBpOwogICAgIHdjaGFyX3QgKnB0ciA9ICh3Y2hhcl90ICopc2VsZi0+Yl9wdHI7Ci0gICAgZm9yIChpID0gMDsgaSA8IHNlbGYtPmJfc2l6ZS9zaXplb2Yod2NoYXJfdCk7ICsraSkKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2VsZi0+Yl9zaXplLyhQeV9zc2l6ZV90KXNpemVvZih3Y2hhcl90KTsgKytpKQogICAgICAgICBpZiAoKnB0cisrID09ICh3Y2hhcl90KTApCiAgICAgICAgICAgICBicmVhazsKICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcigod2NoYXJfdCAqKXNlbGYtPmJfcHRyLCBpKTsKQEAgLTEyMTEsNyArMTIxMSw3IEBACiAgICAgd3N0ciA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKHZhbHVlLCAmbGVuKTsKICAgICBpZiAod3N0ciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKCh1bnNpZ25lZClsZW4gPiBzZWxmLT5iX3NpemUvc2l6ZW9mKHdjaGFyX3QpKSB7CisgICAgaWYgKChzaXplX3QpbGVuID4gc2VsZi0+Yl9zaXplL3NpemVvZih3Y2hhcl90KSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcgdG9vIGxvbmciKTsKICAgICAgICAgcmVzdWx0ID0gLTE7CkBAIC0xMjUyLDggKzEyNTIsMTAgQEAKICAgICAgICAgZGVzY3IgPSBQeURlc2NyX05ld01ldGhvZCh0eXBlLCBtZXRoKTsKICAgICAgICAgaWYgKGRlc2NyID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LG1ldGgtPm1sX25hbWUsIGRlc2NyKSA8IDApCisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCBtZXRoLT5tbF9uYW1lLCBkZXNjcikgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGVzY3IpOwogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRihkZXNjcik7CiAgICAgfQogICAgIHJldHVybiAwOwpAQCAtMTI2OCw4ICsxMjcwLDEwIEBACiAgICAgICAgIGRlc2NyID0gUHlEZXNjcl9OZXdNZW1iZXIodHlwZSwgbWVtYik7CiAgICAgICAgIGlmIChkZXNjciA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgbWVtYi0+bmFtZSwgZGVzY3IpIDwgMCkKKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsIG1lbWItPm5hbWUsIGRlc2NyKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkZXNjcik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKGRlc2NyKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC0xMjg1LDggKzEyODksMTAgQEAKICAgICAgICAgZGVzY3IgPSBQeURlc2NyX05ld0dldFNldCh0eXBlLCBnc3ApOwogICAgICAgICBpZiAoZGVzY3IgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsIGdzcC0+bmFtZSwgZGVzY3IpIDwgMCkKKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsIGdzcC0+bmFtZSwgZGVzY3IpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGRlc2NyKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYoZGVzY3IpOwogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTE3NzgsNiArMTc4NCw3IEBACiAKICAgICBuZXduYW1lID0gUHlVbmljb2RlX0NvbmNhdChuYW1lLCBzdWZmaXgpOwogICAgIGlmIChuZXduYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHN3YXBwZWRfYXJncyk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtMTc5Nyw4ICsxODA0LDEwIEBACiAKICAgICBzdGdkaWN0ID0gKFN0Z0RpY3RPYmplY3QgKilQeU9iamVjdF9DYWxsT2JqZWN0KAogICAgICAgICAoUHlPYmplY3QgKikmUHlDU3RnRGljdF9UeXBlLCBOVUxMKTsKLSAgICBpZiAoIXN0Z2RpY3QpIC8qIFhYWCBsZWFrcyByZXN1bHQhICovCisgICAgaWYgKCFzdGdkaWN0KSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBzdGdkaWN0LT5mZmlfdHlwZV9wb2ludGVyID0gKmZtdC0+cGZmaV90eXBlOwogICAgIHN0Z2RpY3QtPmFsaWduID0gZm10LT5wZmZpX3R5cGUtPmFsaWdubWVudDsKQEAgLTE5NzgsOCArMTk4NywxMCBAQAogICAgICAgICAgICAgUHlPYmplY3QgKm1ldGg7CiAgICAgICAgICAgICBpbnQgeDsKICAgICAgICAgICAgIG1ldGggPSBQeURlc2NyX05ld0NsYXNzTWV0aG9kKHJlc3VsdCwgbWwpOwotICAgICAgICAgICAgaWYgKCFtZXRoKQorICAgICAgICAgICAgaWYgKCFtZXRoKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICB4ID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcocmVzdWx0LT50cF9kaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1sLT5tbF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGgpOwpAQCAtMjE1OSw4ICsyMTcwLDEwIEBACiAKICAgICBuQXJncyA9IFB5VHVwbGVfR0VUX1NJWkUob2IpOwogICAgIGNvbnZlcnRlcnMgPSBQeVR1cGxlX05ldyhuQXJncyk7Ci0gICAgaWYgKCFjb252ZXJ0ZXJzKQorICAgIGlmICghY29udmVydGVycykgeworICAgICAgICBQeV9ERUNSRUYob2IpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICAvKiBJIGhhdmUgdG8gY2hlY2sgaWYgdGhpcyBpcyBjb3JyZWN0LiBVc2luZyBjX2NoYXIsIHdoaWNoIGhhcyBhIHNpemUKICAgICAgICBvZiAxLCB3aWxsIGJlIGFzc3VtZWQgdG8gYmUgcHVzaGVkIGFzIG9ubHkgb25lIGJ5dGUhCkBAIC00MDUyLDE0ICs0MDY1LDkgQEAKICAgICAgICAgfQogICAgICAgICB2YWwgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIGkgKyBpbmRleCk7CiAgICAgICAgIGlmIChrd2RzICYmIFB5RGljdF9HZXRJdGVtKGt3ZHMsIG5hbWUpKSB7Ci0gICAgICAgICAgICBjaGFyICpmaWVsZCA9IFB5Qnl0ZXNfQXNTdHJpbmcobmFtZSk7Ci0gICAgICAgICAgICBpZiAoZmllbGQgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAgICAgZmllbGQgPSAiPz8/IjsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImR1cGxpY2F0ZSB2YWx1ZXMgZm9yIGZpZWxkICclcyciLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZHVwbGljYXRlIHZhbHVlcyBmb3IgZmllbGQgJVIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOwogICAgICAgICAgICAgUHlfREVDUkVGKHBhaXIpOwogICAgICAgICAgICAgUHlfREVDUkVGKG5hbWUpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2NhbGxwcm9jLmMgYi9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYwppbmRleCAwM2E5MTFmLi4zMGUzYTk2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYwpAQCAtMTU3LDggKzE1NywxMCBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIG1lbXNldChzcGFjZSwgMCwgc2l6ZW9mKGludCkgKiAyKTsKICAgICAgICAgZXJyb2JqID0gUHlDYXBzdWxlX05ldyhzcGFjZSwgQ1RZUEVTX0NBUFNVTEVfTkFNRV9QWU1FTSwgcHltZW1fZGVzdHJ1Y3Rvcik7Ci0gICAgICAgIGlmIChlcnJvYmogPT0gTlVMTCkKKyAgICAgICAgaWYgKGVycm9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeU1lbV9GcmVlKHNwYWNlKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIGlmICgtMSA9PSBQeURpY3RfU2V0SXRlbShkaWN0LCBlcnJvcl9vYmplY3RfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9iaikpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihlcnJvYmopOwpAQCAtMTY4MSw2ICsxNjgzLDEwIEBACiAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIGtleSA9IFB5TG9uZ19Gcm9tVm9pZFB0cihyZXN1bHQpOworICAgICAgICBpZiAoa2V5ID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKFB5VHlwZV9DaGVjayhjbHMpKSB7CiAgICAgICAgIHR5cCA9IChQeVR5cGVPYmplY3QgKiljbHM7CiAgICAgICAgIGJ1ZiA9IFB5TWVtX01hbGxvYyhzdHJsZW4odHlwLT50cF9uYW1lKSArIDMgKyAxKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9jZmllbGQuYyBiL01vZHVsZXMvX2N0eXBlcy9jZmllbGQuYwppbmRleCA4Y2I2ZDY2Li5kNjY2YmU1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvY2ZpZWxkLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2NmaWVsZC5jCkBAIC0xMjQ2LDggKzEyNDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgInVuaWNvZGUgc3RyaW5nIGV4cGVjdGVkIGluc3RlYWQgb2YgJXMgaW5zdGFuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUtPm9iX3R5cGUtPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9IGVsc2UKLSAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKKyAgICB9CiAKICAgICB3c3RyID0gUHlVbmljb2RlX0FzVW5pY29kZUFuZFNpemUodmFsdWUsICZzaXplKTsKICAgICBpZiAod3N0ciA9PSBOVUxMKQpAQCAtMTI1Niw3ICsxMjU1LDYgQEAKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nIHRvbyBsb25nICglemQsIG1heGltdW0gbGVuZ3RoICV6ZCkiLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZSwgbGVuZ3RoKTsKLSAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfSBlbHNlIGlmIChzaXplIDwgbGVuZ3RoLTEpCiAgICAgICAgIC8qIGNvcHkgdGVybWluYXRpbmcgTlVMIGNoYXJhY3RlciBpZiB0aGVyZSBpcyBzcGFjZSAqLwpAQCAtMTI2Niw2ICsxMjY0LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisgICAgUHlfSU5DUkVGKHZhbHVlKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTEyOTIsOSArMTI5MSw3IEBACiAgICAgY2hhciAqZGF0YTsKICAgICBQeV9zc2l6ZV90IHNpemU7CiAKLSAgICBpZihQeUJ5dGVzX0NoZWNrKHZhbHVlKSkgewotICAgICAgICBQeV9JTkNSRUYodmFsdWUpOwotICAgIH0gZWxzZSB7CisgICAgaWYoIVB5Qnl0ZXNfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgYnl0ZXMsICVzIGZvdW5kIiwKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLT5vYl90eXBlLT50cF9uYW1lKTsKQEAgLTEzMDIsMTEgKzEyOTksOSBAQAogICAgIH0KIAogICAgIGRhdGEgPSBQeUJ5dGVzX0FTX1NUUklORyh2YWx1ZSk7Ci0gICAgaWYgKCFkYXRhKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzaXplID0gc3RybGVuKGRhdGEpOyAvKiBYWFggV2h5IG5vdCBQeV9TSVpFKHZhbHVlKT8gKi8KICAgICBpZiAoc2l6ZSA8IGxlbmd0aCkgewotICAgICAgICAvKiBUaGlzIHdpbGwgY29weSB0aGUgbGVhZGluZyBOVUwgY2hhcmFjdGVyCisgICAgICAgIC8qIFRoaXMgd2lsbCBjb3B5IHRoZSB0ZXJtaW5hdGluZyBOVUwgY2hhcmFjdGVyCiAgICAgICAgICAqIGlmIHRoZXJlIGlzIHNwYWNlIGZvciBpdC4KICAgICAgICAgICovCiAgICAgICAgICsrc2l6ZTsKQEAgLTEzMTQsMTMgKzEzMDksMTEgQEAKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiYnl0ZXMgdG9vIGxvbmcgKCV6ZCwgbWF4aW11bSBsZW5ndGggJXpkKSIsCiAgICAgICAgICAgICAgICAgICAgICBzaXplLCBsZW5ndGgpOwotICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgLyogQWxzbyBjb3B5IHRoZSB0ZXJtaW5hdGluZyBOVUwgY2hhcmFjdGVyIGlmIHRoZXJlIGlzIHNwYWNlICovCiAgICAgbWVtY3B5KChjaGFyICopcHRyLCBkYXRhLCBzaXplKTsKIAotICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgX1JFVCh2YWx1ZSk7CiB9CiAKQEAgLTE0MjgsOSArMTQyMSw3IEBACiAgICAgLyogY29udmVydCB2YWx1ZSBpbnRvIGEgUHlVbmljb2RlT2JqZWN0IG9yIE5VTEwgKi8KICAgICBpZiAoUHlfTm9uZSA9PSB2YWx1ZSkgewogICAgICAgICB2YWx1ZSA9IE5VTEw7Ci0gICAgfSBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKSB7Ci0gICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7IC8qIGZvciB0aGUgZGVzY3JlZiBiZWxvdyAqLwotICAgIH0gZWxzZSB7CisgICAgfSBlbHNlIGlmICghUHlVbmljb2RlX0NoZWNrKHZhbHVlKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInVuaWNvZGUgc3RyaW5nIGV4cGVjdGVkIGluc3RlYWQgb2YgJXMgaW5zdGFuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUtPm9iX3R5cGUtPnRwX25hbWUpOwpAQCAtMTQ0OSw3ICsxNDQwLDYgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGJzdHIgPSBTeXNBbGxvY1N0cmluZ0xlbih3dmFsdWUsICh1bnNpZ25lZCl3c2l6ZSk7Ci0gICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIGJzdHIgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19kZWNpbWFsL19kZWNpbWFsLmMgYi9Nb2R1bGVzL19kZWNpbWFsL19kZWNpbWFsLmMKaW5kZXggMTEyYjQ0Zi4uMjIwNTNiNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZGVjaW1hbC9fZGVjaW1hbC5jCisrKyBiL01vZHVsZXMvX2RlY2ltYWwvX2RlY2ltYWwuYwpAQCAtMjYzMCwxMiArMjYzMCwxOCBAQAogCiAvKiBjbGFzcyBtZXRob2QgKi8KIHN0YXRpYyBQeU9iamVjdCAqCi1kZWNfZnJvbV9mbG9hdChQeU9iamVjdCAqZGVjLCBQeU9iamVjdCAqcHlmbG9hdCkKK2RlY19mcm9tX2Zsb2F0KFB5T2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqcHlmbG9hdCkKIHsKICAgICBQeU9iamVjdCAqY29udGV4dDsKKyAgICBQeU9iamVjdCAqcmVzdWx0OwogCiAgICAgQ1VSUkVOVF9DT05URVhUKGNvbnRleHQpOwotICAgIHJldHVybiBQeURlY1R5cGVfRnJvbUZsb2F0RXhhY3QoKFB5VHlwZU9iamVjdCAqKWRlYywgcHlmbG9hdCwgY29udGV4dCk7CisgICAgcmVzdWx0ID0gUHlEZWNUeXBlX0Zyb21GbG9hdEV4YWN0KCZQeURlY19UeXBlLCBweWZsb2F0LCBjb250ZXh0KTsKKyAgICBpZiAodHlwZSAhPSAoUHlPYmplY3QgKikmUHlEZWNfVHlwZSAmJiByZXN1bHQgIT0gTlVMTCkgeworICAgICAgICBQeV9TRVRSRUYocmVzdWx0LCBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHR5cGUsIHJlc3VsdCwgTlVMTCkpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIC8qIGNyZWF0ZV9kZWNpbWFsX2Zyb21fZmxvYXQgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2VsZW1lbnR0cmVlLmMgYi9Nb2R1bGVzL19lbGVtZW50dHJlZS5jCmluZGV4IDBmMWQ2YTEuLjg1ZmZjYTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2VsZW1lbnR0cmVlLmMKKysrIGIvTW9kdWxlcy9fZWxlbWVudHRyZWUuYwpAQCAtMTU4MiwxMCArMTU4MiwyMyBAQAogc3RhdGljIFB5T2JqZWN0KgogZWxlbWVudF9yZXByKEVsZW1lbnRPYmplY3QqIHNlbGYpCiB7Ci0gICAgaWYgKHNlbGYtPnRhZykKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8RWxlbWVudCAlUiBhdCAlcD4iLCBzZWxmLT50YWcsIHNlbGYpOwotICAgIGVsc2UKKyAgICBpbnQgc3RhdHVzOworCisgICAgaWYgKHNlbGYtPnRhZyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxFbGVtZW50IGF0ICVwPiIsIHNlbGYpOworCisgICAgc3RhdHVzID0gUHlfUmVwckVudGVyKChQeU9iamVjdCAqKXNlbGYpOworICAgIGlmIChzdGF0dXMgPT0gMCkgeworICAgICAgICBQeU9iamVjdCAqcmVzOworICAgICAgICByZXMgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPEVsZW1lbnQgJVIgYXQgJXA+Iiwgc2VsZi0+dGFnLCBzZWxmKTsKKyAgICAgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKXNlbGYpOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBpZiAoc3RhdHVzID4gMCkKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJyZWVudHJhbnQgY2FsbCBpbnNpZGUgJXMuX19yZXByX18iLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIC8qW2NsaW5pYyBpbnB1dF0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2Z1bmN0b29sc21vZHVsZS5jIGIvTW9kdWxlcy9fZnVuY3Rvb2xzbW9kdWxlLmMKaW5kZXggMWFhNDU3MS4uZDc4NWM0OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZnVuY3Rvb2xzbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fZnVuY3Rvb2xzbW9kdWxlLmMKQEAgLTIwMyw0MCArMjAzLDQ1IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcGFydGlhbF9yZXByKHBhcnRpYWxvYmplY3QgKnB0bykKIHsKLSAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogICAgIFB5T2JqZWN0ICphcmdsaXN0OwotICAgIFB5T2JqZWN0ICp0bXA7CiAgICAgUHlfc3NpemVfdCBpLCBuOwogICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZTsKKyAgICBpbnQgc3RhdHVzOworCisgICAgc3RhdHVzID0gUHlfUmVwckVudGVyKChQeU9iamVjdCAqKXB0byk7CisgICAgaWYgKHN0YXR1cyAhPSAwKSB7CisgICAgICAgIGlmIChzdGF0dXMgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXMoLi4uKSIsIFB5X1RZUEUocHRvKS0+dHBfbmFtZSk7CisgICAgfQogCiAgICAgYXJnbGlzdCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIiKTsKLSAgICBpZiAoYXJnbGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoYXJnbGlzdCA9PSBOVUxMKQorICAgICAgICBnb3RvIGRvbmU7CiAgICAgLyogUGFjayBwb3NpdGlvbmFsIGFyZ3VtZW50cyAqLwogICAgIGFzc2VydCAoUHlUdXBsZV9DaGVjayhwdG8tPmFyZ3MpKTsKICAgICBuID0gUHlUdXBsZV9HRVRfU0laRShwdG8tPmFyZ3MpOwogICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgdG1wID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVVLCAlUiIsIGFyZ2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfR0VUX0lURU0ocHRvLT5hcmdzLCBpKSk7Ci0gICAgICAgIFB5X0RFQ1JFRihhcmdsaXN0KTsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGFyZ2xpc3QgPSB0bXA7CisgICAgICAgIFB5X1NFVFJFRihhcmdsaXN0LCBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJVUsICVSIiwgYXJnbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX0dFVF9JVEVNKHB0by0+YXJncywgaSkpKTsKKyAgICAgICAgaWYgKGFyZ2xpc3QgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAgICAgLyogUGFjayBrZXl3b3JkIGFyZ3VtZW50cyAqLwogICAgIGFzc2VydCAoUHlEaWN0X0NoZWNrKHB0by0+a3cpKTsKICAgICBmb3IgKGkgPSAwOyBQeURpY3RfTmV4dChwdG8tPmt3LCAmaSwgJmtleSwgJnZhbHVlKTspIHsKLSAgICAgICAgdG1wID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVVLCAlVT0lUiIsIGFyZ2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksIHZhbHVlKTsKLSAgICAgICAgUHlfREVDUkVGKGFyZ2xpc3QpOwotICAgICAgICBpZiAodG1wID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXJnbGlzdCA9IHRtcDsKKyAgICAgICAgUHlfU0VUUkVGKGFyZ2xpc3QsIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlVSwgJVU9JVIiLCBhcmdsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LCB2YWx1ZSkpOworICAgICAgICBpZiAoYXJnbGlzdCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBkb25lOwogICAgIH0KICAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXMoJVIlVSkiLCBQeV9UWVBFKHB0byktPnRwX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRvLT5mbiwgYXJnbGlzdCk7CiAgICAgUHlfREVDUkVGKGFyZ2xpc3QpOworCisgZG9uZToKKyAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopcHRvKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5jIGIvTW9kdWxlcy9fc3FsaXRlL2Nvbm5lY3Rpb24uYwppbmRleCA3NTcwNjI0Li42YWE0NzY0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmMKQEAgLTE2NCw2ICsxNjQsMTAgQEAKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIHNlbGYtPnRocmVhZF9pZGVudCA9IFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKTsKICNlbmRpZgorICAgIGlmICghY2hlY2tfc2FtZV90aHJlYWQgJiYgc3FsaXRlM19saWJ2ZXJzaW9uX251bWJlcigpIDwgMzAwMzAwMSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcocHlzcWxpdGVfTm90U3VwcG9ydGVkRXJyb3IsICJzaGFyZWQgY29ubmVjdGlvbnMgbm90IGF2YWlsYWJsZSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIHNlbGYtPmNoZWNrX3NhbWVfdGhyZWFkID0gY2hlY2tfc2FtZV90aHJlYWQ7CiAKICAgICBzZWxmLT5mdW5jdGlvbl9waW5ib2FyZCA9IFB5RGljdF9OZXcoKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuaCBiL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuaAppbmRleCBiNTE3MjRiLi4wZmI1YTU1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmgKKysrIGIvTW9kdWxlcy9fc3FsaXRlL21vZHVsZS5oCkBAIC00Miw3ICs0Miw3IEBACiBleHRlcm4gUHlPYmplY3QqIHRpbWVfdGltZTsKIGV4dGVybiBQeU9iamVjdCogdGltZV9zbGVlcDsKIAotLyogQSBkaWN0aW9uYXJ5LCBtYXBwaW5nIGNvbHVtIHR5cGVzIChJTlRFR0VSLCBWQVJDSEFSLCBldGMuKSB0byBjb252ZXJ0ZXIKKy8qIEEgZGljdGlvbmFyeSwgbWFwcGluZyBjb2x1bW4gdHlwZXMgKElOVEVHRVIsIFZBUkNIQVIsIGV0Yy4pIHRvIGNvbnZlcnRlcgogICogZnVuY3Rpb25zLCB0aGF0IGNvbnZlcnQgdGhlIFNRTCB2YWx1ZSB0byB0aGUgYXBwcm9wcmlhdGUgUHl0aG9uIHZhbHVlLgogICogVGhlIGtleSBpcyB1cHBlcmNhc2UuCiAgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvYXJyYXltb2R1bGUuYyBiL01vZHVsZXMvYXJyYXltb2R1bGUuYwppbmRleCBmNzNjNTk5Li4yODAzMTc3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2FycmF5bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9hcnJheW1vZHVsZS5jCkBAIC0xMjY4LDcgKzEyNjgsNyBAQAogICAgIH0KICAgICBQeVR1cGxlX1NFVF9JVEVNKHJldHZhbCwgMCwgdik7CiAKLSAgICB2ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKShQeV9TSVpFKHNlbGYpKSk7CisgICAgdiA9IFB5TG9uZ19Gcm9tU3NpemVfdChQeV9TSVpFKHNlbGYpKTsKICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihyZXR2YWwpOwogICAgICAgICByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvZXhwYXQveG1scm9sZS5jIGIvTW9kdWxlcy9leHBhdC94bWxyb2xlLmMKaW5kZXggOWE4Zjg1ZC4uNDQ3NzJlMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9leHBhdC94bWxyb2xlLmMKKysrIGIvTW9kdWxlcy9leHBhdC94bWxyb2xlLmMKQEAgLTIsNiArMiw4IEBACiAgICBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgY29weWluZyBwZXJtaXNzaW9uLgogKi8KIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiAjaWZkZWYgQ09NUElMRURfRlJPTV9EU1AKICNpbmNsdWRlICJ3aW5jb25maWcuaCIKICNlbGlmIGRlZmluZWQoTUFDT1NfQ0xBU1NJQykKQEAgLTE2LDggKzE4LDYgQEAKICNlbmRpZgogI2VuZGlmIC8qIG5kZWYgQ09NUElMRURfRlJPTV9EU1AgKi8KIAotI2luY2x1ZGUgPHN0ZGRlZi5oPgotCiAjaW5jbHVkZSAiZXhwYXRfZXh0ZXJuYWwuaCIKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogI2luY2x1ZGUgInhtbHJvbGUuaCIKZGlmZiAtLWdpdCBhL01vZHVsZXMvZXhwYXQveG1sdG9rLmMgYi9Nb2R1bGVzL2V4cGF0L3htbHRvay5jCmluZGV4IDIwNWMwN2UuLmJmMDlkZmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZXhwYXQveG1sdG9rLmMKKysrIGIvTW9kdWxlcy9leHBhdC94bWx0b2suYwpAQCAtMiw2ICsyLDggQEAKICAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBjb3B5aW5nIHBlcm1pc3Npb24uCiAqLwogCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKICNpZmRlZiBDT01QSUxFRF9GUk9NX0RTUAogI2luY2x1ZGUgIndpbmNvbmZpZy5oIgogI2VsaWYgZGVmaW5lZChNQUNPU19DTEFTU0lDKQpAQCAtMTYsOCArMTgsNiBAQAogI2VuZGlmCiAjZW5kaWYgLyogbmRlZiBDT01QSUxFRF9GUk9NX0RTUCAqLwogCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0KICNpbmNsdWRlICJleHBhdF9leHRlcm5hbC5oIgogI2luY2x1ZGUgImludGVybmFsLmgiCiAjaW5jbHVkZSAieG1sdG9rLmgiCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3JlYWRsaW5lLmMgYi9Nb2R1bGVzL3JlYWRsaW5lLmMKaW5kZXggOGMwMGRlYy4uOTFmN2NjYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9yZWFkbGluZS5jCisrKyBiL01vZHVsZXMvcmVhZGxpbmUuYwpAQCAtMTI4LDIwICsxMjgsNDAgQEAKICNkZWZpbmUgcmVhZGxpbmVzdGF0ZV9nbG9iYWwgKChyZWFkbGluZXN0YXRlICopUHlNb2R1bGVfR2V0U3RhdGUoUHlTdGF0ZV9GaW5kTW9kdWxlKCZyZWFkbGluZW1vZHVsZSkpKQogCiAKKy8qIENvbnZlcnQgdG8vZnJvbSBtdWx0aWJ5dGUgQyBzdHJpbmdzICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitlbmNvZGUoUHlPYmplY3QgKmIpCit7CisgICAgcmV0dXJuIFB5VW5pY29kZV9FbmNvZGVMb2NhbGUoYiwgInN1cnJvZ2F0ZWVzY2FwZSIpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZGVjb2RlKGNvbnN0IGNoYXIgKnMpCit7CisgICAgcmV0dXJuIFB5VW5pY29kZV9EZWNvZGVMb2NhbGUocywgInN1cnJvZ2F0ZWVzY2FwZSIpOworfQorCisKIC8qIEV4cG9ydGVkIGZ1bmN0aW9uIHRvIHNlbmQgb25lIGxpbmUgdG8gcmVhZGxpbmUncyBpbml0IGZpbGUgcGFyc2VyICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wYXJzZV9hbmRfYmluZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitwYXJzZV9hbmRfYmluZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN0cmluZykKIHsKLSAgICBjaGFyICpzLCAqY29weTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6cGFyc2VfYW5kX2JpbmQiLCAmcykpCisgICAgY2hhciAqY29weTsKKyAgICBQeU9iamVjdCAqZW5jb2RlZCA9IGVuY29kZShzdHJpbmcpOworICAgIGlmIChlbmNvZGVkID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIC8qIE1ha2UgYSBjb3B5IC0tIHJsX3BhcnNlX2FuZF9iaW5kKCkgbW9kaWZpZXMgaXRzIGFyZ3VtZW50ICovCiAgICAgLyogQmVybmFyZCBIZXJ6b2cgKi8KLSAgICBjb3B5ID0gUHlNZW1fTWFsbG9jKDEgKyBzdHJsZW4ocykpOwotICAgIGlmIChjb3B5ID09IE5VTEwpCisgICAgY29weSA9IFB5TWVtX01hbGxvYygxICsgUHlCeXRlc19HRVRfU0laRShlbmNvZGVkKSk7CisgICAgaWYgKGNvcHkgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIHN0cmNweShjb3B5LCBzKTsKKyAgICB9CisgICAgc3RyY3B5KGNvcHksIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpKTsKKyAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CiAgICAgcmxfcGFyc2VfYW5kX2JpbmQoY29weSk7CiAgICAgUHlNZW1fRnJlZShjb3B5KTsgLyogRnJlZSB0aGUgY29weSAqLwogICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtNDQxLDE3ICs0NjEsMTggQEAKIC8qIFNldCB0aGUgdGFiLWNvbXBsZXRpb24gd29yZC1kZWxpbWl0ZXJzIHRoYXQgcmVhZGxpbmUgdXNlcyAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgotc2V0X2NvbXBsZXRlcl9kZWxpbXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorc2V0X2NvbXBsZXRlcl9kZWxpbXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdHJpbmcpCiB7CiAgICAgY2hhciAqYnJlYWtfY2hhcnM7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6c2V0X2NvbXBsZXRlcl9kZWxpbXMiLCAmYnJlYWtfY2hhcnMpKSB7CisgICAgUHlPYmplY3QgKmVuY29kZWQgPSBlbmNvZGUoc3RyaW5nKTsKKyAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICAvKiBLZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGluIHRoZSBtb2R1bGUgc3RhdGUgaW4gY2FzZQogICAgICAgIHNvbWUgb3RoZXIgbW9kdWxlIG1vZGlmaWVzIHJsX2NvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnMKICAgICAgICAoc2VlIGlzc3VlICMxNzI4OSkuICovCi0gICAgYnJlYWtfY2hhcnMgPSBzdHJkdXAoYnJlYWtfY2hhcnMpOworICAgIGJyZWFrX2NoYXJzID0gc3RyZHVwKFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpKTsKKyAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CiAgICAgaWYgKGJyZWFrX2NoYXJzKSB7CiAgICAgICAgIGZyZWUoY29tcGxldGVyX3dvcmRfYnJlYWtfY2hhcmFjdGVycyk7CiAgICAgICAgIGNvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnMgPSBicmVha19jaGFyczsKQEAgLTUzMSwxMCArNTUyLDExIEBACiBweV9yZXBsYWNlX2hpc3RvcnkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGludCBlbnRyeV9udW1iZXI7Ci0gICAgY2hhciAqbGluZTsKKyAgICBQeU9iamVjdCAqbGluZTsKKyAgICBQeU9iamVjdCAqZW5jb2RlZDsKICAgICBISVNUX0VOVFJZICpvbGRfZW50cnk7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlzOnJlcGxhY2VfaGlzdG9yeV9pdGVtIiwgJmVudHJ5X251bWJlciwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlVOnJlcGxhY2VfaGlzdG9yeV9pdGVtIiwgJmVudHJ5X251bWJlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxpbmUpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTU0Myw3ICs1NjUsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJIaXN0b3J5IGluZGV4IGNhbm5vdCBiZSBuZWdhdGl2ZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgb2xkX2VudHJ5ID0gcmVwbGFjZV9oaXN0b3J5X2VudHJ5KGVudHJ5X251bWJlciwgbGluZSwgKHZvaWQgKilOVUxMKTsKKyAgICBlbmNvZGVkID0gZW5jb2RlKGxpbmUpOworICAgIGlmIChlbmNvZGVkID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG9sZF9lbnRyeSA9IHJlcGxhY2VfaGlzdG9yeV9lbnRyeShlbnRyeV9udW1iZXIsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLCAodm9pZCAqKU5VTEwpOworICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKICAgICBpZiAoIW9sZF9lbnRyeSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJObyBoaXN0b3J5IGl0ZW0gYXQgcG9zaXRpb24gJWQiLApAQCAtNTYyLDE0ICs1ODksMTQgQEAKIC8qIEFkZCBhIGxpbmUgdG8gdGhlIGhpc3RvcnkgYnVmZmVyICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1weV9hZGRfaGlzdG9yeShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitweV9hZGRfaGlzdG9yeShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN0cmluZykKIHsKLSAgICBjaGFyICpsaW5lOwotCi0gICAgaWYoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6YWRkX2hpc3RvcnkiLCAmbGluZSkpIHsKKyAgICBQeU9iamVjdCAqZW5jb2RlZCA9IGVuY29kZShzdHJpbmcpOworICAgIGlmIChlbmNvZGVkID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGFkZF9oaXN0b3J5KGxpbmUpOworICAgIGFkZF9oaXN0b3J5KFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpKTsKKyAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKQEAgLTU4Myw3ICs2MTAsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGdldF9jb21wbGV0ZXJfZGVsaW1zKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmcpCiB7Ci0gICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKHJsX2NvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnMpOworICAgIHJldHVybiBkZWNvZGUocmxfY29tcGxldGVyX3dvcmRfYnJlYWtfY2hhcmFjdGVycyk7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2NfZ2V0X2NvbXBsZXRlcl9kZWxpbXMsCkBAIC02NzMsNyArNzAwLDcgQEAKICAgICB9CiAjZW5kaWYgLyogX19BUFBMRV9fICovCiAgICAgaWYgKChoaXN0X2VudCA9IGhpc3RvcnlfZ2V0KGlkeCkpKQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoaGlzdF9lbnQtPmxpbmUpOworICAgICAgICByZXR1cm4gZGVjb2RlKGhpc3RfZW50LT5saW5lKTsKICAgICBlbHNlIHsKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgfQpAQCAtNzAyLDcgKzcyOSw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X2xpbmVfYnVmZmVyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmcpCiB7Ci0gICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKHJsX2xpbmVfYnVmZmVyKTsKKyAgICByZXR1cm4gZGVjb2RlKHJsX2xpbmVfYnVmZmVyKTsKIH0KIAogUHlEb2NfU1RSVkFSKGRvY19nZXRfbGluZV9idWZmZXIsCkBAIC03MzAsMTIgKzc1NywxNCBAQAogLyogRXhwb3J0ZWQgZnVuY3Rpb24gdG8gaW5zZXJ0IHRleHQgaW50byB0aGUgbGluZSBidWZmZXIgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWluc2VydF90ZXh0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2luc2VydF90ZXh0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc3RyaW5nKQogewotICAgIGNoYXIgKnM7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmluc2VydF90ZXh0IiwgJnMpKQorICAgIFB5T2JqZWN0ICplbmNvZGVkID0gZW5jb2RlKHN0cmluZyk7CisgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBybF9pbnNlcnRfdGV4dChzKTsKKyAgICB9CisgICAgcmxfaW5zZXJ0X3RleHQoUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCkpOworICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIApAQCAtNzYzLDkgKzc5Miw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgcmVhZGxpbmVfbWV0aG9kc1tdID0KIHsKLSAgICB7InBhcnNlX2FuZF9iaW5kIiwgcGFyc2VfYW5kX2JpbmQsIE1FVEhfVkFSQVJHUywgZG9jX3BhcnNlX2FuZF9iaW5kfSwKKyAgICB7InBhcnNlX2FuZF9iaW5kIiwgcGFyc2VfYW5kX2JpbmQsIE1FVEhfTywgZG9jX3BhcnNlX2FuZF9iaW5kfSwKICAgICB7ImdldF9saW5lX2J1ZmZlciIsIGdldF9saW5lX2J1ZmZlciwgTUVUSF9OT0FSR1MsIGRvY19nZXRfbGluZV9idWZmZXJ9LAotICAgIHsiaW5zZXJ0X3RleHQiLCBpbnNlcnRfdGV4dCwgTUVUSF9WQVJBUkdTLCBkb2NfaW5zZXJ0X3RleHR9LAorICAgIHsiaW5zZXJ0X3RleHQiLCBpbnNlcnRfdGV4dCwgTUVUSF9PLCBkb2NfaW5zZXJ0X3RleHR9LAogICAgIHsicmVkaXNwbGF5IiwgcmVkaXNwbGF5LCBNRVRIX05PQVJHUywgZG9jX3JlZGlzcGxheX0sCiAgICAgeyJyZWFkX2luaXRfZmlsZSIsIHJlYWRfaW5pdF9maWxlLCBNRVRIX1ZBUkFSR1MsIGRvY19yZWFkX2luaXRfZmlsZX0sCiAgICAgeyJyZWFkX2hpc3RvcnlfZmlsZSIsIHJlYWRfaGlzdG9yeV9maWxlLApAQCAtNzkyLDggKzgyMSw4IEBACiAgICAgeyJnZXRfZW5kaWR4IiwgZ2V0X2VuZGlkeCwgTUVUSF9OT0FSR1MsIGRvY19nZXRfZW5kaWR4fSwKIAogICAgIHsic2V0X2NvbXBsZXRlcl9kZWxpbXMiLCBzZXRfY29tcGxldGVyX2RlbGltcywKLSAgICAgTUVUSF9WQVJBUkdTLCBkb2Nfc2V0X2NvbXBsZXRlcl9kZWxpbXN9LAotICAgIHsiYWRkX2hpc3RvcnkiLCBweV9hZGRfaGlzdG9yeSwgTUVUSF9WQVJBUkdTLCBkb2NfYWRkX2hpc3Rvcnl9LAorICAgICBNRVRIX08sIGRvY19zZXRfY29tcGxldGVyX2RlbGltc30sCisgICAgeyJhZGRfaGlzdG9yeSIsIHB5X2FkZF9oaXN0b3J5LCBNRVRIX08sIGRvY19hZGRfaGlzdG9yeX0sCiAgICAgeyJyZW1vdmVfaGlzdG9yeV9pdGVtIiwgcHlfcmVtb3ZlX2hpc3RvcnksIE1FVEhfVkFSQVJHUywgZG9jX3JlbW92ZV9oaXN0b3J5fSwKICAgICB7InJlcGxhY2VfaGlzdG9yeV9pdGVtIiwgcHlfcmVwbGFjZV9oaXN0b3J5LCBNRVRIX1ZBUkFSR1MsIGRvY19yZXBsYWNlX2hpc3Rvcnl9LAogICAgIHsiZ2V0X2NvbXBsZXRlcl9kZWxpbXMiLCBnZXRfY29tcGxldGVyX2RlbGltcywKQEAgLTg5MCw3ICs5MTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX21hdGNoZXMsIGludCBtYXhfbGVuZ3RoKQogewogICAgIGludCBpOwotICAgIFB5T2JqZWN0ICptPU5VTEwsICpzPU5VTEwsICpyPU5VTEw7CisgICAgUHlPYmplY3QgKnN1YiwgKm09TlVMTCwgKnM9TlVMTCwgKnI9TlVMTDsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOwogI2VuZGlmCkBAIC04OTgsMTYgKzkyNywxNyBAQAogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgZm9yIChpID0gMDsgaSA8IG51bV9tYXRjaGVzOyBpKyspIHsKLSAgICAgICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKG1hdGNoZXNbaSsxXSk7CisgICAgICAgIHMgPSBkZWNvZGUobWF0Y2hlc1tpKzFdKTsKICAgICAgICAgaWYgKHMgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIGlmIChQeUxpc3RfU2V0SXRlbShtLCBpLCBzKSA9PSAtMSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQorICAgIHN1YiA9IGRlY29kZShtYXRjaGVzWzBdKTsKICAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNPaSIsIG1hdGNoZXNbMF0sIG0sIG1heF9sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5OaSIsIHN1YiwgbSwgbWF4X2xlbmd0aCk7CiAKLSAgICBQeV9ERUNSRUYobSk7IG09TlVMTDsKKyAgICBtPU5VTEw7CiAKICAgICBpZiAociA9PSBOVUxMIHx8CiAgICAgICAgIChyICE9IFB5X05vbmUgJiYgUHlMb25nX0FzTG9uZyhyKSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSkgewpAQCAtOTU1LDIyICs5ODUsMjQgQEAKIHsKICAgICBjaGFyICpyZXN1bHQgPSBOVUxMOwogICAgIGlmIChyZWFkbGluZXN0YXRlX2dsb2JhbC0+Y29tcGxldGVyICE9IE5VTEwpIHsKLSAgICAgICAgUHlPYmplY3QgKnI7CisgICAgICAgIFB5T2JqZWN0ICpyID0gTlVMTCwgKnQ7CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWxzdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CiAjZW5kaWYKICAgICAgICAgcmxfYXR0ZW1wdGVkX2NvbXBsZXRpb25fb3ZlciA9IDE7Ci0gICAgICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciwgInNpIiwgdGV4dCwgc3RhdGUpOworICAgICAgICB0ID0gZGVjb2RlKHRleHQpOworICAgICAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0ZXIsICJOaSIsIHQsIHN0YXRlKTsKICAgICAgICAgaWYgKHIgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIGlmIChyID09IFB5X05vbmUpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBjaGFyICpzID0gX1B5VW5pY29kZV9Bc1N0cmluZyhyKTsKLSAgICAgICAgICAgIGlmIChzID09IE5VTEwpCisgICAgICAgICAgICBQeU9iamVjdCAqZW5jb2RlZCA9IGVuY29kZShyKTsKKyAgICAgICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgIHJlc3VsdCA9IHN0cmR1cChzKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0cmR1cChQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CiAgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKHIpOwogICAgICAgICBnb3RvIGRvbmU7CkBAIC05OTQsNiArMTAyNiw5IEBACiBmbGV4X2NvbXBsZXRlKGNvbnN0IGNoYXIgKnRleHQsIGludCBzdGFydCwgaW50IGVuZCkKIHsKICAgICBjaGFyICoqcmVzdWx0OworICAgIGNoYXIgc2F2ZWQ7CisgICAgc2l6ZV90IHN0YXJ0X3NpemUsIGVuZF9zaXplOworICAgIHdjaGFyX3QgKnM7CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKICNlbmRpZgpAQCAtMTAwMyw2ICsxMDM4LDI3IEBACiAjaWZkZWYgSEFWRV9STF9DT01QTEVUSU9OX1NVUFBSRVNTX0FQUEVORAogICAgIHJsX2NvbXBsZXRpb25fc3VwcHJlc3NfYXBwZW5kID0gMDsKICNlbmRpZgorCisgICAgc2F2ZWQgPSBybF9saW5lX2J1ZmZlcltzdGFydF07CisgICAgcmxfbGluZV9idWZmZXJbc3RhcnRdID0gMDsKKyAgICBzID0gUHlfRGVjb2RlTG9jYWxlKHJsX2xpbmVfYnVmZmVyLCAmc3RhcnRfc2l6ZSk7CisgICAgcmxfbGluZV9idWZmZXJbc3RhcnRdID0gc2F2ZWQ7CisgICAgaWYgKHMgPT0gTlVMTCkgeworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIFB5TWVtX1Jhd0ZyZWUocyk7CisgICAgc2F2ZWQgPSBybF9saW5lX2J1ZmZlcltlbmRdOworICAgIHJsX2xpbmVfYnVmZmVyW2VuZF0gPSAwOworICAgIHMgPSBQeV9EZWNvZGVMb2NhbGUocmxfbGluZV9idWZmZXIgKyBzdGFydCwgJmVuZF9zaXplKTsKKyAgICBybF9saW5lX2J1ZmZlcltlbmRdID0gc2F2ZWQ7CisgICAgaWYgKHMgPT0gTlVMTCkgeworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIFB5TWVtX1Jhd0ZyZWUocyk7CisgICAgc3RhcnQgPSAoaW50KXN0YXJ0X3NpemU7CisgICAgZW5kID0gc3RhcnQgKyAoaW50KWVuZF9zaXplOworCitkb25lOgogICAgIFB5X1hERUNSRUYocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmJlZ2lkeCk7CiAgICAgUHlfWERFQ1JFRihyZWFkbGluZXN0YXRlX2dsb2JhbC0+ZW5kaWR4KTsKICAgICByZWFkbGluZXN0YXRlX2dsb2JhbC0+YmVnaWR4ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKSBzdGFydCk7CmRpZmYgLS1naXQgYS9PYmplY3RzL2Fic3RyYWN0LmMgYi9PYmplY3RzL2Fic3RyYWN0LmMKaW5kZXggYTAzNjJlNy4uNTg1OTkyZCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9hYnN0cmFjdC5jCisrKyBiL09iamVjdHMvYWJzdHJhY3QuYwpAQCAtMjEwOSw3ICsyMTA5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIHJldHVybmVkIE5VTEwgd2l0aG91dCBzZXR0aW5nIGFuIGVycm9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUpOwogI2lmZGVmIFB5X0RFQlVHCi0gICAgICAgICAgICAvKiBFbnN1cmUgdGhhdCB0aGUgYnVnIGlzIGNhdGNoZWQgaW4gZGVidWcgbW9kZSAqLworICAgICAgICAgICAgLyogRW5zdXJlIHRoYXQgdGhlIGJ1ZyBpcyBjYXVnaHQgaW4gZGVidWcgbW9kZSAqLwogICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiYSBmdW5jdGlvbiByZXR1cm5lZCBOVUxMIHdpdGhvdXQgc2V0dGluZyBhbiBlcnJvciIpOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIxMzIsNyArMjEzMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlKTsKICAgICAgICAgICAgIF9QeUVycl9DaGFpbkV4Y2VwdGlvbnMoZXhjLCB2YWwsIHRiKTsKICNpZmRlZiBQeV9ERUJVRwotICAgICAgICAgICAgLyogRW5zdXJlIHRoYXQgdGhlIGJ1ZyBpcyBjYXRjaGVkIGluIGRlYnVnIG1vZGUgKi8KKyAgICAgICAgICAgIC8qIEVuc3VyZSB0aGF0IHRoZSBidWcgaXMgY2F1Z2h0IGluIGRlYnVnIG1vZGUgKi8KICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImEgZnVuY3Rpb24gcmV0dXJuZWQgYSByZXN1bHQgd2l0aCBhbiBlcnJvciBzZXQiKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9PYmplY3RzL3VuaWNvZGVvYmplY3QuYyBiL09iamVjdHMvdW5pY29kZW9iamVjdC5jCmluZGV4IGYxMWEwODIuLjFmY2M4M2UgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdW5pY29kZW9iamVjdC5jCisrKyBiL09iamVjdHMvdW5pY29kZW9iamVjdC5jCkBAIC0zNjY2LDcgKzM2NjYsNyBAQAogICAgICAgICBvdXRwdXQgPSBhcmc7CiAgICAgICAgIFB5X0lOQ1JFRihvdXRwdXQpOwogICAgIH0KLSAgICBlbHNlIHsKKyAgICBlbHNlIGlmIChQeU9iamVjdF9DaGVja0J1ZmZlcihhcmcpKSB7CiAgICAgICAgIGFyZyA9IFB5Qnl0ZXNfRnJvbU9iamVjdChhcmcpOwogICAgICAgICBpZiAoIWFyZykKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMzY4MSw2ICszNjgxLDEyIEBACiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJwYXRoIHNob3VsZCBiZSBzdHJpbmcgb3IgYnl0ZXMsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShhcmcpLT50cF9uYW1lKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkob3V0cHV0KSA9PSAtMSkgewogICAgICAgICBQeV9ERUNSRUYob3V0cHV0KTsKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9QQy9sYXVuY2hlci5jIGIvUEMvbGF1bmNoZXIuYwppbmRleCBkYjUyMjZlLi40MGQ0Y2I1IDEwMDY0NAotLS0gYS9QQy9sYXVuY2hlci5jCisrKyBiL1BDL2xhdW5jaGVyLmMKQEAgLTEwODEsNyArMTA4MSw3IEBACiAgICAgeyAzMTYwLCAzMTgwLCBMIjMuMiIgfSwKICAgICB7IDMxOTAsIDMyMzAsIEwiMy4zIiB9LAogICAgIHsgMzI1MCwgMzMxMCwgTCIzLjQiIH0sCi0gICAgeyAzMzIwLCAzMzUwLCBMIjMuNSIgfSwKKyAgICB7IDMzMjAsIDMzNTEsIEwiMy41IiB9LAogICAgIHsgMzM2MCwgMzM2MSwgTCIzLjYiIH0sCiAgICAgeyAwIH0KIH07CmRpZmYgLS1naXQgYS9QeXRob24vY29tcGlsZS5jIGIvUHl0aG9uL2NvbXBpbGUuYwppbmRleCAxZTcyMGVhLi5jZTUxMGFhIDEwMDY0NAotLS0gYS9QeXRob24vY29tcGlsZS5jCisrKyBiL1B5dGhvbi9jb21waWxlLmMKQEAgLTE0OTQsNiArMTQ5NCw5IEBACiBjb21waWxlcl92aXNpdF9rd29ubHlkZWZhdWx0cyhzdHJ1Y3QgY29tcGlsZXIgKmMsIGFzZGxfc2VxICprd29ubHlhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKmt3X2RlZmF1bHRzKQogeworICAgIC8qIFJldHVybiB0aGUgbnVtYmVyIG9mIGRlZmF1bHRzICsgMS4KKyAgICAgICBSZXR1cm5zIDAgb24gZXJyb3IuCisgICAgICovCiAgICAgaW50IGksIGRlZmF1bHRfY291bnQgPSAwOwogICAgIGZvciAoaSA9IDA7IGkgPCBhc2RsX3NlcV9MRU4oa3dvbmx5YXJncyk7IGkrKykgewogICAgICAgICBhcmdfdHkgYXJnID0gYXNkbF9zZXFfR0VUKGt3b25seWFyZ3MsIGkpOwpAQCAtMTUwMSwxNiArMTUwNCwxNiBAQAogICAgICAgICBpZiAoZGVmYXVsdF8pIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICptYW5nbGVkID0gX1B5X01hbmdsZShjLT51LT51X3ByaXZhdGUsIGFyZy0+YXJnKTsKICAgICAgICAgICAgIGlmICghbWFuZ2xlZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIG1hbmdsZWQsIGNvbnN0cyk7CiAgICAgICAgICAgICBQeV9ERUNSRUYobWFuZ2xlZCk7CiAgICAgICAgICAgICBpZiAoIWNvbXBpbGVyX3Zpc2l0X2V4cHIoYywgZGVmYXVsdF8pKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdF9jb3VudCsrOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBkZWZhdWx0X2NvdW50OworICAgIHJldHVybiBkZWZhdWx0X2NvdW50ICsgMTsKIH0KIAogc3RhdGljIGludApAQCAtMTU1NCwxNyArMTU1NywxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90eSByZXR1cm5zKQogewogICAgIC8qIFB1c2ggYXJnIGFubm90YXRpb25zIGFuZCBhIGxpc3Qgb2YgdGhlIGFyZ3VtZW50IG5hbWVzLiBSZXR1cm4gdGhlICMKLSAgICAgICBvZiBpdGVtcyBwdXNoZWQuIFRoZSBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIG91dC1vZi1vcmRlciB3cnQgdGhlCisgICAgICAgb2YgaXRlbXMgcHVzaGVkICsgMS4gVGhlIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgb3V0LW9mLW9yZGVyIHdydCB0aGUKICAgICAgICBzb3VyY2UgY29kZS4KIAotICAgICAgIE1vcmUgdGhhbiAyXjE2LTEgYW5ub3RhdGlvbnMgaXMgYSBTeW50YXhFcnJvci4gUmV0dXJucyAtMSBvbiBlcnJvci4KKyAgICAgICBNb3JlIHRoYW4gMl4xNi0xIGFubm90YXRpb25zIGlzIGEgU3ludGF4RXJyb3IuIFJldHVybnMgMCBvbiBlcnJvci4KICAgICAgICAqLwogICAgIHN0YXRpYyBpZGVudGlmaWVyIHJldHVybl9zdHI7CiAgICAgUHlPYmplY3QgKm5hbWVzOwogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIG5hbWVzID0gUHlMaXN0X05ldygwKTsKICAgICBpZiAoIW5hbWVzKQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFjb21waWxlcl92aXNpdF9hcmdhbm5vdGF0aW9ucyhjLCBhcmdzLT5hcmdzLCBuYW1lcykpCiAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0xNjE0LDExICsxNjE3LDExIEBACiAgICAgUHlfREVDUkVGKG5hbWVzKTsKIAogICAgIC8qIFdlIGp1c3QgY2hlY2tlZCB0aGF0IGxlbiA8PSA2NTUzNSwgc2VlIGFib3ZlICovCi0gICAgcmV0dXJuIFB5X1NBRkVfRE9XTkNBU1QobGVuLCBQeV9zc2l6ZV90LCBpbnQpOworICAgIHJldHVybiBQeV9TQUZFX0RPV05DQVNUKGxlbiArIDEsIFB5X3NzaXplX3QsIGludCk7CiAKIGVycm9yOgogICAgIFB5X0RFQ1JFRihuYW1lcyk7Ci0gICAgcmV0dXJuIC0xOworICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CkBAIC0xNjY3LDEzICsxNjcwLDE0IEBACiAgICAgaWYgKGFyZ3MtPmt3b25seWFyZ3MpIHsKICAgICAgICAgaW50IHJlcyA9IGNvbXBpbGVyX3Zpc2l0X2t3b25seWRlZmF1bHRzKGMsIGFyZ3MtPmt3b25seWFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT5rd19kZWZhdWx0cyk7Ci0gICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICBpZiAocmVzID09IDApCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAga3dfZGVmYXVsdF9jb3VudCA9IHJlczsKKyAgICAgICAga3dfZGVmYXVsdF9jb3VudCA9IHJlcyAtIDE7CiAgICAgfQogICAgIG51bV9hbm5vdGF0aW9ucyA9IGNvbXBpbGVyX3Zpc2l0X2Fubm90YXRpb25zKGMsIGFyZ3MsIHJldHVybnMpOwotICAgIGlmIChudW1fYW5ub3RhdGlvbnMgPCAwKQorICAgIGlmIChudW1fYW5ub3RhdGlvbnMgPT0gMCkKICAgICAgICAgcmV0dXJuIDA7CisgICAgbnVtX2Fubm90YXRpb25zLS07CiAgICAgYXNzZXJ0KChudW1fYW5ub3RhdGlvbnMgJiAweEZGRkYpID09IG51bV9hbm5vdGF0aW9ucyk7CiAKICAgICBpZiAoIWNvbXBpbGVyX2VudGVyX3Njb3BlKGMsIG5hbWUsCkBAIC0xODg5LDggKzE4OTMsOCBAQAogICAgIGlmIChhcmdzLT5rd29ubHlhcmdzKSB7CiAgICAgICAgIGludCByZXMgPSBjb21waWxlcl92aXNpdF9rd29ubHlkZWZhdWx0cyhjLCBhcmdzLT5rd29ubHlhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+a3dfZGVmYXVsdHMpOwotICAgICAgICBpZiAocmVzIDwgMCkgcmV0dXJuIDA7Ci0gICAgICAgIGt3X2RlZmF1bHRfY291bnQgPSByZXM7CisgICAgICAgIGlmIChyZXMgPT0gMCkgcmV0dXJuIDA7CisgICAgICAgIGt3X2RlZmF1bHRfY291bnQgPSByZXMgLSAxOwogICAgIH0KICAgICBpZiAoIWNvbXBpbGVyX2VudGVyX3Njb3BlKGMsIG5hbWUsIENPTVBJTEVSX1NDT1BFX0xBTUJEQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopZSwgZS0+bGluZW5vKSkKQEAgLTI0MDMsNyArMjQwNyw3IEBACiAgICAgUHlfc3NpemVfdCBkb3QgPSBQeVVuaWNvZGVfRmluZENoYXIobmFtZSwgJy4nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKG5hbWUpLCAxKTsKICAgICBpZiAoZG90ID09IC0yKQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiAwOwogICAgIGlmIChkb3QgIT0gLTEpIHsKICAgICAgICAgLyogQ29uc3VtZSB0aGUgYmFzZSBtb2R1bGUgbmFtZSB0byBnZXQgdGhlIGZpcnN0IGF0dHJpYnV0ZSAqLwogICAgICAgICBQeV9zc2l6ZV90IHBvcyA9IGRvdCArIDE7CkBAIC0yNDEyLDEyICsyNDE2LDEyIEBACiAgICAgICAgICAgICBkb3QgPSBQeVVuaWNvZGVfRmluZENoYXIobmFtZSwgJy4nLCBwb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgobmFtZSksIDEpOwogICAgICAgICAgICAgaWYgKGRvdCA9PSAtMikKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBhdHRyID0gUHlVbmljb2RlX1N1YnN0cmluZyhuYW1lLCBwb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG90ICE9IC0xKSA/IGRvdCA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSChuYW1lKSk7CiAgICAgICAgICAgICBpZiAoIWF0dHIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgQURET1BfTyhjLCBMT0FEX0FUVFIsIGF0dHIsIG5hbWVzKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihhdHRyKTsKICAgICAgICAgICAgIHBvcyA9IGRvdCArIDE7CkBAIC0zMjYyLDcgKzMyNjYsNyBAQAogICAgICAgICBjb2RlIHw9IDI7CiAgICAgICAgIGlmIChuc3Via3dhcmdzID4gMSkgewogICAgICAgICAgICAgLyogUGFjayBpdCBhbGwgdXAgKi8KLSAgICAgICAgICAgIGludCBmdW5jdGlvbl9wb3MgPSBuICsgKGNvZGUgJiAxKSArIG5rdyArIDE7CisgICAgICAgICAgICBpbnQgZnVuY3Rpb25fcG9zID0gbiArIChjb2RlICYgMSkgKyAyICogbmt3ICsgMTsKICAgICAgICAgICAgIEFERE9QX0koYywgQlVJTERfTUFQX1VOUEFDS19XSVRIX0NBTEwsIG5zdWJrd2FyZ3MgfCAoZnVuY3Rpb25fcG9zIDw8IDgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi9pbXBvcnRsaWJfZXh0ZXJuYWwuaCBiL1B5dGhvbi9pbXBvcnRsaWJfZXh0ZXJuYWwuaAppbmRleCA0N2Y1YzYyLi5hODcxZjU0IDEwMDY0NAotLS0gYS9QeXRob24vaW1wb3J0bGliX2V4dGVybmFsLmgKKysrIGIvUHl0aG9uL2ltcG9ydGxpYl9leHRlcm5hbC5oCkBAIC0yNTksNyArMjU5LDcgQEAKICAgICAwLDAsMTE0LDUsMCwwLDAsMjE4LDEzLDk1LDExOSwxMTQsMTA1LDExNiwxMDEsOTUsCiAgICAgOTcsMTE2LDExMSwxMDksMTA1LDk5LDk5LDAsMCwwLDExNSwyNiwwLDAsMCwwLAogICAgIDUsMjQsMSw5LDEsMzMsMSwzLDMsMjEsMSwyMCwxLDIwLDEsMTMsCi0gICAgMSwzLDEsMTcsMSwxMywxLDUsMSwxMTQsNTUsMCwwLDAsMTA1LDIyLAorICAgIDEsMywxLDE3LDEsMTMsMSw1LDEsMTE0LDU1LDAsMCwwLDEwNSwyMywKICAgICAxMywwLDAsMjMzLDIsMCwwLDAsMTE0LDEzLDAsMCwwLDExNSwyLDAsCiAgICAgMCwwLDEzLDEwLDkwLDExLDk1LDk1LDExMiwxMjEsOTksOTcsOTksMTA0LDEwMSw5NSwKICAgICA5NSwxMjIsNCwxMTEsMTEyLDExNiw0NSwxMjIsMyw0NiwxMTIsMTIxLDEyMiw0LDQ2LDExMiwKQEAgLTM2OSw3ICszNjksNyBAQAogICAgIDExNiw5NywxMDMsOTAsMTUsOTcsMTA4LDEwOSwxMTEsMTE1LDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsCiAgICAgMTEwLDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCiAgICAgMCwwLDAsMjE4LDE3LDk5LDk3LDk5LDEwNCwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDk1LAotICAgIDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMjQ2LDAsMCwwLDExNSw0NiwwLDAsMCwwLAorICAgIDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMjQ3LDAsMCwwLDExNSw0NiwwLDAsMCwwLAogICAgIDE4LDEyLDEsOSwxLDcsMSwxMiwxLDYsMSwxMiwxLDE4LDEsMTgsCiAgICAgMSwyNCwxLDEyLDEsMTIsMSwxMiwxLDM2LDEsMTIsMSwxOCwxLDksCiAgICAgMiwxMiwxLDEyLDEsMTIsMSwxMiwxLDIxLDEsMjEsMSwxMTQsNzksMCwKQEAgLTQ0OCw3ICs0NDgsNyBAQAogICAgIDk1LDEwOCwxMDEsMTE4LDEwMSwxMDgsOTAsMTMsOTgsOTcsMTE1LDEwMSw5NSwxMDIsMTA1LDEwOCwKICAgICAxMDEsMTEwLDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAogICAgIDUsMCwwLDAsMjE4LDE3LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTAyLDExNCwxMTEsCi0gICAgMTA5LDk1LDk5LDk3LDk5LDEwNCwxMDEsMzQsMSwwLDAsMTE1LDQ0LDAsMCwwLAorICAgIDEwOSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDM1LDEsMCwwLDExNSw0NCwwLDAsMCwKICAgICAwLDksMTgsMSwxMiwxLDE4LDEsMTgsMSwxMiwxLDksMSwxNSwxLAogICAgIDE1LDEsMTIsMSw5LDEsMTUsMSwxMiwxLDIyLDEsMTUsMSw5LDEsCiAgICAgMTIsMSwyMiwxLDEyLDEsOSwxLDEyLDEsMTksMSwxMTQsODUsMCwwLApAQCAtNDg2LDcgKzQ4Niw3IEBACiAgICAgMTE1LDEwNSwxMTEsMTEwLDIxOCwxMSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExMiw5NywxMTYsCiAgICAgMTA0LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAogICAgIDIxOCwxNSw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwMiwxMDUsMTA4LAotICAgIDEwMSw2NywxLDAsMCwxMTUsMjAsMCwwLDAsMCw3LDE4LDEsNCwxLAorICAgIDEwMSw2OCwxLDAsMCwxMTUsMjAsMCwwLDAsMCw3LDE4LDEsNCwxLAogICAgIDI0LDEsMzUsMSw0LDEsMywxLDE2LDEsMTksMSwyMSwxLDExNCw5MSwKICAgICAwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwKICAgICAxMSwwLDAsMCw2NywwLDAsMCwxMTUsOTIsMCwwLDAsMTI0LDAsMCwKQEAgLTUwMCw3ICs1MDAsNyBAQAogICAgIDg0LDAsMCwwLDExNCw3OSwwLDAsMCwxMTQsNjYsMCwwLDAsMTE0LDc0LAogICAgIDAsMCwwLDQxLDEsMjE4LDgsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNCwKICAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMSwKLSAgICA5NSwxMDMsMTAxLDExNiw5NSw5OSw5Nyw5OSwxMDQsMTAxLDEwMCw4NiwxLDAsMCwxMTUsCisgICAgOTUsMTAzLDEwMSwxMTYsOTUsOTksOTcsOTksMTA0LDEwMSwxMDAsODcsMSwwLDAsMTE1LAogICAgIDE2LDAsMCwwLDAsMSwyMSwxLDMsMSwxNCwxLDEzLDEsOCwxLAogICAgIDIxLDEsNCwyLDExNCw5NSwwLDAsMCw5OSwxLDAsMCwwLDAsMCwKICAgICAwLDAsMiwwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwxMTUsNjAsCkBAIC01MTUsNyArNTE1LDcgQEAKICAgICA0MSwzLDExNCwzOSwwLDAsMCwxMTQsNDEsMCwwLDAsMTE0LDQwLDAsMCwKICAgICAwLDQxLDIsMTE0LDM1LDAsMCwwLDExNCw0MiwwLDAsMCwxMTQsNCwwLAogICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTAsOTUsOTksCi0gICAgOTcsMTA4LDk5LDk1LDEwOSwxMTEsMTAwLDEwMSw5OCwxLDAsMCwxMTUsMTIsMCwwLAorICAgIDk3LDEwOCw5OSw5NSwxMDksMTExLDEwMCwxMDEsOTksMSwwLDAsMTE1LDEyLDAsMCwKICAgICAwLDAsMiwzLDEsMTksMSwxMywxLDExLDMsMTAsMSwxMTQsOTcsMCwKICAgICAwLDAsMjE4LDksMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDUsMTE2LDEyMSwxMTQsMjksMCwKICAgICAwLDAsOTksMSwwLDAsMCwxLDAsMCwwLDMsMCwwLDAsNCwKQEAgLTUzNiw3ICs1MzYsNyBAQAogICAgIDIxOCw2LDExNSwxMTYsMTAwLDEwMSwxMTQsMTE0LDQxLDMsMTE0LDc1LDAsMCwwLDExNCwKICAgICA5OCwwLDAsMCwyMTgsNCw5NywxMTQsMTAzLDExNSwxMTQsNCwwLDAsMCwxMTQsCiAgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTYsOTUsMTE4LDEwMSwxMTQsOTgsCi0gICAgMTExLDExNSwxMDEsOTUsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTEwLDEsMCwwLDExNSwKKyAgICAxMTEsMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTEsMSwwLDAsMTE1LAogICAgIDgsMCwwLDAsMCwyLDE4LDEsMTUsMSwxMCwxLDExNCwxMDUsMCwwLAogICAgIDAsOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMTEsMCwKICAgICAwLDAsMywwLDAsMCwxMTUsODQsMCwwLDAsMTAwLDEsMCwxMzUsMCwKQEAgLTU3Niw3ICs1NzYsNyBAQAogICAgIDAsMCw5MCw2LDEwNywxMTksOTcsMTE0LDEwMywxMTUsNDEsMSwyMTgsNiwxMDksMTAxLAogICAgIDExNiwxMDQsMTExLDEwMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTksCiAgICAgOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsOTUsMTE5LDExNCw5NywxMTIsCi0gICAgMTEyLDEwMSwxMTQsMTI2LDEsMCwwLDExNSwxMiwwLDAsMCwwLDEsMTIsMSwKKyAgICAxMTIsMTAxLDExNCwxMjcsMSwwLDAsMTE1LDEyLDAsMCwwLDAsMSwxMiwxLAogICAgIDEyLDEsMTUsMSw2LDEsMjUsMSwxMjIsNDAsOTUsOTksMTA0LDEwMSw5OSwxMDcsCiAgICAgOTUsMTEwLDk3LDEwOSwxMDEsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDk1LAogICAgIDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywxMDksMTAxLDk1LDExOSwxMTQsOTcsMTEyLDExMiwKQEAgLTU5NSw3ICs1OTUsNyBAQAogICAgIDExNiw5NywxMTYsMTE2LDExNCwyMTgsOCw5NSw5NSwxMDAsMTA1LDk5LDExNiw5NSw5NSwyMTgsCiAgICAgNiwxMTcsMTEyLDEwMCw5NywxMTYsMTAxLDQxLDMsOTAsMywxMTAsMTAxLDExOSw5MCwzLAogICAgIDExMSwxMDgsMTAwLDExNCw1MiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAotICAgIDAsMCwxMTQsNSwwLDAsMCwyMTgsNSw5NSwxMTksMTE0LDk3LDExMiwxMzcsMSwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMjE4LDUsOTUsMTE5LDExNCw5NywxMTIsMTM4LDEsCiAgICAgMCwwLDExNSw4LDAsMCwwLDAsMSwyNSwxLDE1LDEsMjksMSwxMjIsCiAgICAgMjYsOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsNDYsNjAsMTA4LDExMSwKICAgICA5OSw5NywxMDgsMTE1LDYyLDQ2LDk1LDExOSwxMTQsOTcsMTEyLDQxLDMsMjE4LDEwLDk1LApAQCAtNjAzLDcgKzYwMyw3IEBACiAgICAgNzgsOTcsMTA5LDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsNDEsMywxMTQsMTA5LDAsMCwwLAogICAgIDExNCwxMTAsMCwwLDAsMTE0LDEyMCwwLDAsMCwxMTQsNCwwLDAsMCw0MSwKICAgICAxLDExNCwxMDksMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDExLDk1LDk5LDEwNCwKLSAgICAxMDEsOTksMTA3LDk1LDExMCw5NywxMDksMTAxLDExOCwxLDAsMCwxMTUsMTQsMCwwLAorICAgIDEwMSw5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsMTE5LDEsMCwwLDExNSwxNCwwLDAsCiAgICAgMCwwLDgsMjEsNywzLDEsMTMsMSwxMywyLDE3LDUsMTMsMSwxMTQsCiAgICAgMTIzLDAsMCwwLDk5LDIsMCwwLDAsMCwwLDAsMCw1LDAsMCwKICAgICAwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDg0LDAsMCwwLDEyNCwwLApAQCAtNjMzLDcgKzYzMyw3IEBACiAgICAgMjE4LDgsMTEyLDExMSwxMTQsMTE2LDEwNSwxMTEsMTEwLDExNSwyMTgsMywxMDksMTE1LDEwMywxMTQsCiAgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTcsCiAgICAgOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDQsMTA1LAotICAgIDEwOSwxNDYsMSwwLDAsMTE1LDEwLDAsMCwwLDAsMTAsMjEsMSwyNCwxLAorICAgIDEwOSwxNDcsMSwwLDAsMTE1LDEwLDAsMCwwLDAsMTAsMjEsMSwyNCwxLAogICAgIDYsMSwyOSwxLDExNCwxMzAsMCwwLDAsOTksNCwwLDAsMCwwLDAsCiAgICAgMCwwLDExLDAsMCwwLDE5LDAsMCwwLDY3LDAsMCwwLDExNSwyNDAsCiAgICAgMSwwLDAsMTA1LDAsMCwxMjUsNCwwLDEyNCwyLDAsMTAwLDEsMCwxMDcsCkBAIC03MTgsNyArNzE4LDcgQEAKICAgICAxMDksMTAxLDIxOCwxMSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExNSwxMDUsMTIyLDEwMSwxMTQsCiAgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMjUsCiAgICAgOTUsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLAotICAgIDEwMCwxMDEsOTUsMTA0LDEwMSw5NywxMDAsMTAxLDExNCwxNjMsMSwwLDAsMTE1LDc2LDAsCisgICAgMTAwLDEwMSw5NSwxMDQsMTAxLDk3LDEwMCwxMDEsMTE0LDE2NCwxLDAsMCwxMTUsNzYsMCwKICAgICAwLDAsMCwxMSw2LDEsMTIsMSwxMywzLDYsMSwxMiwxLDEwLDEsCiAgICAgMTYsMSwxNiwxLDE2LDEsMTIsMSwxOCwxLDEzLDEsMTgsMSwxOCwxLAogICAgIDE1LDEsMTMsMSwxNSwxLDE4LDEsMTUsMSwxMywxLDEyLDEsMTIsMSwKQEAgLTc0OSw3ICs3NDksNyBAQAogICAgIDExNCwxMDYsMCwwLDAsMTE0LDg5LDAsMCwwLDExNCw5MCwwLDAsMCwyMTgsCiAgICAgNCw5OSwxMTEsMTAwLDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCiAgICAgNSwwLDAsMCwyMTgsMTcsOTUsOTksMTExLDEwOSwxMTIsMTA1LDEwOCwxMDEsOTUsOTgsCi0gICAgMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMjE4LDEsMCwwLDExNSwxNiwwLDAsMCwKKyAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwyMTksMSwwLDAsMTE1LDE2LDAsMCwwLAogICAgIDAsMiwxNSwxLDE1LDEsMTMsMSwxMiwxLDE2LDEsNCwyLDE4LDEsCiAgICAgMTE0LDE0NywwLDAsMCwxMTQsNTksMCwwLDAsOTksMywwLDAsMCwwLAogICAgIDAsMCwwLDQsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsCkBAIC03NjksNyArNzY5LDcgQEAKICAgICA0LDExNCwxNDYsMCwwLDAsMTE0LDEzMywwLDAsMCwxMTQsMTQwLDAsMCwwLAogICAgIDExNCw1MywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCiAgICAgNSwwLDAsMCwyMTgsMTcsOTUsOTksMTExLDEwMCwxMDEsOTUsMTE2LDExMSw5NSw5OCwKLSAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwyMzAsMSwwLDAsMTE1LDEwLDAsMCwwLAorICAgIDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDIzMSwxLDAsMCwxMTUsMTAsMCwwLDAsCiAgICAgMCwzLDEyLDEsMTksMSwxOSwxLDIyLDEsMTE0LDE1MCwwLDAsMCw5OSwKICAgICAxLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCw0LDAsMCwwLAogICAgIDY3LDAsMCwwLDExNSw4OSwwLDAsMCwxMDAsMSwwLDEwMCwyLDAsMTA4LApAQCAtNzk4LDcgKzc5OCw3IEBACiAgICAgMTAwLDEwNSwxMTAsMTAzLDkwLDE1LDExMCwxMDEsMTE5LDEwOCwxMDUsMTEwLDEwMSw5NSwxMDAsMTAxLAogICAgIDk5LDExMSwxMDAsMTAxLDExNCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCiAgICAgNSwwLDAsMCwyMTgsMTMsMTAwLDEwMSw5OSwxMTEsMTAwLDEwMSw5NSwxMTUsMTExLDExNywKLSAgICAxMTQsOTksMTAxLDI0MCwxLDAsMCwxMTUsMTAsMCwwLDAsMCw1LDEyLDEsCisgICAgMTE0LDk5LDEwMSwyNDEsMSwwLDAsMTE1LDEwLDAsMCwwLDAsNSwxMiwxLAogICAgIDE4LDEsMTUsMSwxOCwxLDExNCwxNTUsMCwwLDAsMTE0LDEyNywwLDAsMCwKICAgICAyMTgsMjYsMTE1LDExNyw5OCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTAxLDk3LDExNCwKICAgICA5OSwxMDQsOTUsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE1LDk5LDIsMCwwLApAQCAtODYzLDcgKzg2Myw3IEBACiAgICAgMTU5LDAsMCwwLDkwLDcsMTAwLDEwNSwxMTQsMTEwLDk3LDEwOSwxMDEsMTE0LDQsMCwKICAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDIzLDExNSwxMTIsCiAgICAgMTAxLDk5LDk1LDEwMiwxMTQsMTExLDEwOSw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwKLSAgICA5NywxMTYsMTA1LDExMSwxMTAsMSwyLDAsMCwxMTUsNjAsMCwwLDAsMCwxMiwKKyAgICA5NywxMTYsMTA1LDExMSwxMTAsMiwyLDAsMCwxMTUsNjAsMCwwLDAsMCwxMiwKICAgICAxMiw0LDYsMSwxNSwyLDMsMSwxOSwxLDEzLDEsNSw4LDI0LDEsCiAgICAgOSwzLDEyLDEsMjIsMSwyMSwxLDE1LDEsOSwxLDUsMiw0LDMsCiAgICAgMTIsMiwxNSwxLDMsMSwxOSwxLDEzLDEsNSwyLDYsMSwxMiwyLApAQCAtOTAzLDcgKzkwMyw3IEBACiAgICAgNzksNjcsNjUsNzYsOTUsNzcsNjUsNjcsNzIsNzMsNzgsNjksNDEsMiwyMTgsMywKICAgICA5OSwxMDgsMTE1LDIxOCwzLDEwNywxMDEsMTIxLDExNCw0LDAsMCwwLDExNCw0LDAsCiAgICAgMCwwLDExNCw1LDAsMCwwLDIxOCwxNCw5NSwxMTEsMTEyLDEwMSwxMTAsOTUsMTE0LAotICAgIDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3OSwyLDAsMCwxMTUsOCwwLDAsMCwKKyAgICAxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsODAsMiwwLDAsMTE1LDgsMCwwLDAsCiAgICAgMCwyLDMsMSwyMywxLDEzLDEsMTIyLDM2LDg3LDEwNSwxMTAsMTAwLDExMSwxMTksCiAgICAgMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LAogICAgIDk1LDExMSwxMTIsMTAxLDExMCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDk5LDIsCkBAIC05MzAsNyArOTMwLDcgQEAKICAgICAxNzEsMCwwLDAsOTAsNCwxMDQsMTA3LDEwMSwxMjEsMjE4LDgsMTAyLDEwNSwxMDgsMTAxLAogICAgIDExMiw5NywxMTYsMTA0LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAogICAgIDAsMCwwLDIxOCwxNiw5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTE0LDEwMSwxMDMsCi0gICAgMTA1LDExNSwxMTYsMTE0LDEyMSw4NiwyLDAsMCwxMTUsMjIsMCwwLDAsMCwyLAorICAgIDEwNSwxMTUsMTE2LDExNCwxMjEsODcsMiwwLDAsMTE1LDIyLDAsMCwwLDAsMiwKICAgICA5LDEsMTIsMiw5LDEsMTUsMSwyMiwxLDMsMSwxOCwxLDI5LDEsCiAgICAgMTMsMSw5LDEsMTIyLDM4LDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsCiAgICAgMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDExNSwxMDEsOTcsCkBAIC05NTQsNyArOTU0LDcgQEAKICAgICAxMTQsMzUsMCwwLDAsMjE4LDYsMTE2LDk3LDExNCwxMDMsMTAxLDExNiwxMTQsMTc3LDAsCiAgICAgMCwwLDExNCwxMjcsMCwwLDAsMTE0LDE2NiwwLDAsMCwxMTQsMTY0LDAsMCwKICAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAotICAgIDIxOCw5LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSwxMDEsMiwwLDAsMTE1LAorICAgIDIxOCw5LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSwxMDIsMiwwLDAsMTE1LAogICAgIDI2LDAsMCwwLDAsMiwxNSwxLDEyLDEsNCwxLDMsMSwxNCwxLAogICAgIDEzLDEsOSwxLDIyLDEsMjEsMSw5LDEsMTUsMSw5LDEsMTIyLDMxLAogICAgIDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwKQEAgLTk3NCw3ICs5NzQsNyBAQAogICAgIDAsMCwwLDQxLDQsMTE0LDE3MCwwLDAsMCwxMTQsMTI2LDAsMCwwLDExNCwKICAgICAzNSwwLDAsMCwxMTQsMTY0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAogICAgIDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMSwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDIsMCwwLDExNSw4LDAsMCwwLDAsNywKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDExOCwyLDAsMCwxMTUsOCwwLDAsMCwwLDcsCiAgICAgMTgsMSwxMiwxLDcsMiwxMjIsMzMsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsCiAgICAgMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwKICAgICAxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQxLDEyLDExNCwxMTIsMCwwLDAsCkBAIC05ODMsNyArOTgzLDcgQEAKICAgICA5OSwxMDgsOTcsMTE1LDExNSwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTQsMTcyLDAsMCwwLAogICAgIDExNCwxNzgsMCwwLDAsMTE0LDE4MSwwLDAsMCwxMTQsMTgyLDAsMCwwLDExNCwKICAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAotICAgIDAsMCwwLDExNCwxNjgsMCwwLDAsNjcsMiwwLDAsMTE1LDIwLDAsMCwKKyAgICAwLDAsMCwxMTQsMTY4LDAsMCwwLDY4LDIsMCwwLDExNSwyMCwwLDAsCiAgICAgMCwxMiwyLDYsMyw2LDMsNiwyLDYsMiwxOCw3LDE4LDE1LDMsCiAgICAgMSwyMSwxNSwzLDEsMTE0LDE2OCwwLDAsMCw5OSwwLDAsMCwwLDAsCiAgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDY0LDAsMCwwLDExNSwKQEAgLTEwMjEsNyArMTAyMSw3IEBACiAgICAgMCwwLDAsMTE0LDk0LDAsMCwwLDkwLDEzLDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsCiAgICAgMTA5LDEwMSw5NSw5OCw5NywxMTUsMTAxLDkwLDksMTE2LDk3LDEwNSwxMDgsOTUsMTEwLDk3LAogICAgIDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAotICAgIDAsMTE0LDE1OSwwLDAsMCwxMzYsMiwwLDAsMTE1LDgsMCwwLDAsMCwKKyAgICAwLDExNCwxNTksMCwwLDAsMTM3LDIsMCwwLDExNSw4LDAsMCwwLDAsCiAgICAgMywyNSwxLDIyLDEsMTksMSwxMjIsMjQsOTUsNzYsMTExLDk3LDEwMCwxMDEsMTE0LAogICAgIDY2LDk3LDExNSwxMDUsOTksMTE1LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsCiAgICAgMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwKQEAgLTEwMzEsNyArMTAzMSw3IEBACiAgICAgMTE3LDEwOCwxMDEsMzIsOTksMTE0LDEwMSw5NywxMTYsMTA1LDExMSwxMTAsNDYsNzgsMTE0LDQsCiAgICAgMCwwLDAsNDEsMiwxMTQsMTA4LDAsMCwwLDExNCwxNjQsMCwwLDAsMTE0LAogICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEzLAotICAgIDk5LDExNCwxMDEsOTcsMTE2LDEwMSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxNDQsMiwwLAorICAgIDk5LDExNCwxMDEsOTcsMTE2LDEwMSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxNDUsMiwwLAogICAgIDAsMTE1LDAsMCwwLDAsMTIyLDI3LDk1LDc2LDExMSw5NywxMDAsMTAxLDExNCw2NiwKICAgICA5NywxMTUsMTA1LDk5LDExNSw0Niw5OSwxMTQsMTAxLDk3LDExNiwxMDEsOTUsMTA5LDExMSwxMDAsCiAgICAgMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsCkBAIC0xMDUzLDcgKzEwNTMsNyBAQAogICAgIDAsNDEsMywxMTQsMTA4LDAsMCwwLDIxOCw2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAogICAgIDExNCwxNDYsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAogICAgIDUsMCwwLDAsMjE4LDExLDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDE0NywyLDAsMCwxMTUsMTAsMCwwLDAsMCwyLDE4LDEsMTIsMSwKKyAgICAxMDEsMTQ4LDIsMCwwLDExNSwxMCwwLDAsMCwwLDIsMTgsMSwxMiwxLAogICAgIDksMSwxNSwxLDEyMiwyNSw5NSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNjYsOTcsMTE1LAogICAgIDEwNSw5OSwxMTUsNDYsMTAxLDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksCiAgICAgMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCwKQEAgLTEwNjIsMTQgKzEwNjIsMTQgQEAKICAgICAwLDAsMCwyMTgsMTcsOTUsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKICAgICAxMDEsOTUsMTE1LDEwNCwxMDUsMTA5LDQxLDIsMTE0LDEwOCwwLDAsMCwxMTQsMTI2LDAsCiAgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKLSAgICAwLDIxOCwxMSwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxNTUsMiwKKyAgICAwLDIxOCwxMSwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxNTYsMiwKICAgICAwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyNSw5NSw3NiwxMTEsOTcsMTAwLAogICAgIDEwMSwxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsNDYsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwKICAgICAxMDAsMTE3LDEwOCwxMDEsNzgsNDEsOCwxMTQsMTEyLDAsMCwwLDExNCwxMTEsMCwwLAogICAgIDAsMTE0LDExMywwLDAsMCwxMTQsMTE0LDAsMCwwLDExNCwxNTksMCwwLDAsCiAgICAgMTE0LDE4NiwwLDAsMCwxMTQsMTkxLDAsMCwwLDExNCwxOTMsMCwwLDAsMTE0LAogICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCi0gICAgMCwwLDAsMTE0LDE4NCwwLDAsMCwxMzEsMiwwLDAsMTE1LDEwLDAsMCwKKyAgICAwLDAsMCwxMTQsMTg0LDAsMCwwLDEzMiwyLDAsMCwxMTUsMTAsMCwwLAogICAgIDAsMTIsMyw2LDIsMTIsOCwxMiwzLDEyLDgsMTE0LDE4NCwwLDAsMCwKICAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LDAsMCwKICAgICAwLDY0LDAsMCwwLDExNSwxMDYsMCwwLDAsMTAxLDAsMCw5MCwxLDAsCkBAIC0xMDk3LDcgKzEwOTcsNyBAQAogICAgIDEsMjE4LDcsNzMsNzksNjksMTE0LDExNCwxMTEsMTE0LDQxLDIsMTE0LDEwOCwwLDAsCiAgICAgMCwxMTQsMzUsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCiAgICAgMTE0LDUsMCwwLDAsMjE4LDEwLDExMiw5NywxMTYsMTA0LDk1LDEwOSwxMTYsMTA1LDEwOSwKLSAgICAxMDEsMTYxLDIsMCwwLDExNSwyLDAsMCwwLDAsNiwxMjIsMjMsODMsMTExLAorICAgIDEwMSwxNjIsMiwwLDAsMTE1LDIsMCwwLDAsMCw2LDEyMiwyMyw4MywxMTEsCiAgICAgMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDExMiw5NywxMTYsMTA0LDk1LAogICAgIDEwOSwxMTYsMTA1LDEwOSwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwKICAgICAwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTksMCwwLDAsMTAwLApAQCAtMTEzMiw3ICsxMTMyLDcgQEAKICAgICAzMiwzMiwzMiwxMTQsMTMzLDAsMCwwLDQxLDEsMTE0LDE5NiwwLDAsMCw0MSwKICAgICAyLDExNCwxMDgsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCw0LDAsMCwwLAogICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMCwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTY5LDIsMCwwLDExNSwyLDAsMCwwLDAsCisgICAgOTUsMTE1LDExNiw5NywxMTYsMTE1LDE3MCwyLDAsMCwxMTUsMiwwLDAsMCwwLAogICAgIDExLDEyMiwyMyw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LAogICAgIDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSw5OSw0LDAsMCwwLDAsCiAgICAgMCwwLDAsNCwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwKQEAgLTExNTYsNyArMTE1Niw3IEBACiAgICAgOTAsMCwwLDAsOTAsMTAsOTksOTcsOTksMTA0LDEwMSw5NSwxMTIsOTcsMTE2LDEwNCwKICAgICAxMTQsNTMsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAogICAgIDUsMCwwLDAsMjE4LDE1LDk1LDk5LDk3LDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwKLSAgICAxMDEsOTksMTExLDEwMCwxMDEsMTgyLDIsMCwwLDExNSwyLDAsMCwwLDAsOCwKKyAgICAxMDEsOTksMTExLDEwMCwxMDEsMTgzLDIsMCwwLDExNSwyLDAsMCwwLDAsOCwKICAgICAxMjIsMjgsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSwKICAgICA5OSw5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDk5LDMsCiAgICAgMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDEsMCwwLDAsNjcsCkBAIC0xMTczLDcgKzExNzMsNyBAQAogICAgIDMyLDMyLDMyLDMyLDMyLDMyLDc4LDExNCw0LDAsMCwwLDQxLDMsMTE0LDEwOCwKICAgICAwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDUzLDAsMCwwLDExNCw0LDAsCiAgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxOTgsMCwwLAotICAgIDAsMTkyLDIsMCwwLDExNSwwLDAsMCwwLDEyMiwyMSw4MywxMTEsMTE3LDExNCwKKyAgICAwLDE5MywyLDAsMCwxMTUsMCwwLDAsMCwxMjIsMjEsODMsMTExLDExNywxMTQsCiAgICAgOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LAogICAgIDk3LDk5LDIsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDE2LDAsCiAgICAgMCwwLDY3LDAsMCwwLDExNSwxMDUsMCwwLDAsMTI0LDAsMCwxMDYsMCwKQEAgLTExOTUsNyArMTE5NSw3IEBACiAgICAgMCwwLDExNCwxMjYsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwxNTMsMCwwLAogICAgIDAsMjE4LDMsMTAxLDEyMCw5OSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKICAgICAxMTQsNSwwLDAsMCwyMTgsMTAsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LAotICAgIDEwMSwxOTksMiwwLDAsMTE1LDE0LDAsMCwwLDAsMiwxNSwxLDMsMSwKKyAgICAxMDEsMjAwLDIsMCwwLDExNSwxNCwwLDAsMCwwLDIsMTUsMSwzLDEsCiAgICAgMTksMSwxOCwxLDksMSwzMSwxLDEyMiwyMyw4MywxMTEsMTE3LDExNCw5OSwxMDEsCiAgICAgNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwKICAgICAxMDEsMjE4LDksOTUsMTExLDExMiwxMTYsMTA1LDEwOSwxMDUsMTIyLDEwMSwxMTQsMjksMCwwLApAQCAtMTIxNyw3ICsxMjE3LDcgQEAKICAgICAxMDEsNDEsNCwxMTQsMTA4LDAsMCwwLDExNCw1MywwLDAsMCwxMTQsMzUsMCwKICAgICAwLDAsMTE0LDIwMywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCiAgICAgMCwxMTQsNSwwLDAsMCwyMTgsMTQsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTYsCi0gICAgMTExLDk1LDk5LDExMSwxMDAsMTAxLDIwOSwyLDAsMCwxMTUsNCwwLDAsMCwwLAorICAgIDExMSw5NSw5OSwxMTEsMTAwLDEwMSwyMTAsMiwwLDAsMTE1LDQsMCwwLDAsMCwKICAgICA1LDIxLDEsMTIyLDI3LDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKICAgICAxMTQsNDYsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTYsMTExLDk1LDk5LDExMSwxMDAsMTAxLAogICAgIDk5LDIsMCwwLDAsMCwwLDAsMCwxMCwwLDAsMCw0MywwLDAsCkBAIC0xMjc4LDcgKzEyNzgsNyBAQAogICAgIDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMDAsOTcsMTE2LDk3LDExNCwxNTMsMCwwLDAsOTAsCiAgICAgMTEsOTksMTExLDEwMCwxMDEsOTUsMTExLDk4LDEwNiwxMDEsOTksMTE2LDExNCw0LDAsMCwKICAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxODcsMCwwLDAsCi0gICAgMjE3LDIsMCwwLDExNSw3OCwwLDAsMCwwLDcsMTUsMSw2LDEsMywKKyAgICAyMTgsMiwwLDAsMTE1LDc4LDAsMCwwLDAsNywxNSwxLDYsMSwzLAogICAgIDEsMTYsMSwxMywxLDExLDIsMywxLDE5LDEsMTMsMSw1LDIsMTYsCiAgICAgMSwzLDEsMTksMSwxMywxLDUsMiwzLDEsOSwxLDEyLDEsMTMsCiAgICAgMSwxOSwxLDUsMiw5LDEsNywxLDE1LDEsNiwxLDcsMSwxNSwKQEAgLTEyOTAsNyArMTI5MCw3IEBACiAgICAgMTk5LDAsMCwwLDExNCwxOTgsMCwwLDAsMTE0LDIwMiwwLDAsMCwxMTQsMjA2LAogICAgIDAsMCwwLDExNCwxODcsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKICAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE5NCwwLDAsCi0gICAgMCwxNTksMiwwLDAsMTE1LDE0LDAsMCwwLDEyLDIsMTIsOCwxMiwxMywKKyAgICAwLDE2MCwyLDAsMCwxMTUsMTQsMCwwLDAsMTIsMiwxMiw4LDEyLDEzLAogICAgIDEyLDEwLDEyLDcsMTIsMTAsMTgsOCwxMTQsMTk0LDAsMCwwLDk5LDAsMCwKICAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMCwwLAogICAgIDAsMCwxMTUsMTEyLDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsCkBAIC0xMzE4LDcgKzEzMTgsNyBAQAogICAgIDMyLDMyLDMyLDMyLDMyLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDc4LDQxLDIsCiAgICAgMTE0LDEwNiwwLDAsMCwxMTQsMzUsMCwwLDAsNDEsMywxMTQsMTA4LDAsMCwKICAgICAwLDExNCwxMjYsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCw0LDAsMCwwLAotICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxODUsMCwwLDAsMTgsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE4NSwwLDAsMCwxOSwKICAgICAzLDAsMCwxMTUsNCwwLDAsMCwwLDMsOSwxLDEyMiwxOSw3MCwxMDUsCiAgICAgMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LAogICAgIDk1LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwKQEAgLTEzMjgsNyArMTMyOCw3IEBACiAgICAgNDEsMiwyMTgsOSw5NSw5NSw5OSwxMDgsOTcsMTE1LDExNSw5NSw5NSwxMTQsMTE4LDAsCiAgICAgMCwwLDQxLDIsMTE0LDEwOCwwLDAsMCwyMTgsNSwxMTEsMTE2LDEwNCwxMDEsMTE0LAogICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwKLSAgICA2LDk1LDk1LDEwMSwxMTMsOTUsOTUsMjQsMywwLDAsMTE1LDQsMCwwLDAsCisgICAgNiw5NSw5NSwxMDEsMTEzLDk1LDk1LDI1LDMsMCwwLDExNSw0LDAsMCwwLAogICAgIDAsMSwxOCwxLDEyMiwxNyw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsCiAgICAgNDYsOTUsOTUsMTAxLDExMyw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsCiAgICAgMSwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwyNiwwLDAsCkBAIC0xMzM3LDcgKzEzMzcsNyBAQAogICAgIDIxOCw0LDEwNCw5NywxMTUsMTA0LDExNCwxMDYsMCwwLDAsMTE0LDM1LDAsMCwwLAogICAgIDQxLDEsMTE0LDEwOCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCiAgICAgMCwxMTQsNSwwLDAsMCwyMTgsOCw5NSw5NSwxMDQsOTcsMTE1LDEwNCw5NSw5NSwKLSAgICAyOCwzLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDE5LDcwLDEwNSwxMDgsCisgICAgMjksMywwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwxOSw3MCwxMDUsMTA4LAogICAgIDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA0LDk3LDExNSwxMDQsOTUsOTUsCiAgICAgOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsCiAgICAgMCwzLDAsMCwwLDExNSwyMiwwLDAsMCwxMTYsMCwwLDExNiwxLDAsCkBAIC0xMzUxLDcgKzEzNTEsNyBAQAogICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDQxLDMsMjE4LDUsMTE1LDExNywxMTIsMTAxLAogICAgIDExNCwxMTQsMjEwLDAsMCwwLDExNCwxOTMsMCwwLDAsNDEsMiwxMTQsMTA4LDAsCiAgICAgMCwwLDExNCwxMjYsMCwwLDAsNDEsMSwxMTQsMjExLDAsMCwwLDExNCw0LAotICAgIDAsMCwwLDExNCw1LDAsMCwwLDExNCwxOTMsMCwwLDAsMzEsMywwLAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDExNCwxOTMsMCwwLDAsMzIsMywwLAogICAgIDAsMTE1LDIsMCwwLDAsMCwxMCwxMjIsMjIsNzAsMTA1LDEwOCwxMDEsNzYsMTExLAogICAgIDk3LDEwMCwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAogICAgIDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLApAQCAtMTM2Miw3ICsxMzYyLDcgQEAKICAgICAzMiw5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsNDEsCiAgICAgMSwxMTQsMzUsMCwwLDAsNDEsMiwxMTQsMTA4LDAsMCwwLDExNCwxMjYsMCwKICAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAotICAgIDAsMTE0LDE1NywwLDAsMCw0MywzLDAsMCwxMTUsMiwwLDAsMCwwLAorICAgIDAsMTE0LDE1NywwLDAsMCw0NCwzLDAsMCwxMTUsMiwwLDAsMCwwLAogICAgIDMsMTIyLDIzLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLAogICAgIDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsOTksMiwwLDAsMCwwLAogICAgIDAsMCwwLDMsMCwwLDAsOSwwLDAsMCw2NywwLDAsMCwxMTUsCkBAIC0xMzc1LDE0ICsxMzc1LDE0IEBACiAgICAgNDksMCwwLDAsMTE0LDUwLDAsMCwwLDkwLDQsMTE0LDEwMSw5NywxMDAsNDEsCiAgICAgMywxMTQsMTA4LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsNTQsMCwwLDAsCiAgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LAotICAgIDIwMCwwLDAsMCw0OCwzLDAsMCwxMTUsNCwwLDAsMCwwLDIsMjEsCisgICAgMjAwLDAsMCwwLDQ5LDMsMCwwLDExNSw0LDAsMCwwLDAsMiwyMSwKICAgICAxLDEyMiwxOSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwKICAgICAxMTYsOTUsMTAwLDk3LDExNiw5Nyw0MSwxMSwxMTQsMTEyLDAsMCwwLDExNCwxMTEsMCwKICAgICAwLDAsMTE0LDExMywwLDAsMCwxMTQsMTE0LDAsMCwwLDExNCwxODUsMCwwLAogICAgIDAsMTE0LDIxMywwLDAsMCwxMTQsMjE1LDAsMCwwLDExNCwxMjMsMCwwLDAsCiAgICAgMTE0LDE5MywwLDAsMCwxMTQsMTU3LDAsMCwwLDExNCwyMDAsMCwwLDAsMTE0LAogICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsNDEsMSwxMTQsMjExLDAsMCwwLAotICAgIDExNCw1LDAsMCwwLDExNCwyMTAsMCwwLDAsMTMsMywwLDAsMTE1LDE0LAorICAgIDExNCw1LDAsMCwwLDExNCwyMTAsMCwwLDAsMTQsMywwLDAsMTE1LDE0LAogICAgIDAsMCwwLDEyLDMsNiwyLDEyLDYsMTIsNCwxMiwzLDI0LDEyLDE4LAogICAgIDUsMTE0LDIxMCwwLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwKICAgICAwLDAsMCw0LDAsMCwwLDY0LDAsMCwwLDExNSw2NCwwLDAsMCwKQEAgLTE0MDUsNyArMTQwNSw3IEBACiAgICAgMywxMTQsMzksMCwwLDAsMjE4LDgsMTE1LDExNiw5NSwxMDksMTE2LDEwNSwxMDksMTAxLAogICAgIDkwLDcsMTE1LDExNiw5NSwxMTUsMTA1LDEyMiwxMDEsNDEsMywxMTQsMTA4LDAsMCwwLAogICAgIDExNCwzNSwwLDAsMCwxMTQsMjA4LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKLSAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxOTcsMCwwLDAsNTgsMywKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxOTcsMCwwLDAsNTksMywKICAgICAwLDAsMTE1LDQsMCwwLDAsMCwyLDEyLDEsMTIyLDI3LDgzLDExMSwxMTcsCiAgICAgMTE0LDk5LDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTEyLDk3LAogICAgIDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsMTE1LDk5LDQsMCwwLDAsMCwwLDAsCkBAIC0xNDE2LDcgKzE0MTYsNyBAQAogICAgIDExNCw5NywwLDAsMCwxMTQsMTk4LDAsMCwwLDQxLDUsMTE0LDEwOCwwLDAsCiAgICAgMCwxMTQsOTAsMCwwLDAsMTE0LDg5LDAsMCwwLDExNCw1MywwLDAsMCwKICAgICAxMTQsNDIsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAotICAgIDUsMCwwLDAsMTE0LDE5OSwwLDAsMCw2MywzLDAsMCwxMTUsNCwwLAorICAgIDUsMCwwLDAsMTE0LDE5OSwwLDAsMCw2NCwzLDAsMCwxMTUsNCwwLAogICAgIDAsMCwwLDIsMTIsMSwxMjIsMzIsODMsMTExLDExNywxMTQsOTksMTAxLDcwLDEwNSwKICAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5OSw5Nyw5OSwxMDQsMTAxLDk1LAogICAgIDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDExNCwyMjAsMCwwLDAsMTA1LDE4MiwxLApAQCAtMTQ1NCw3ICsxNDU0LDcgQEAKICAgICA1MywwLDAsMCwxMTQsMjIwLDAsMCwwLDIxOCw2LDExMiw5NywxMTQsMTAxLDExMCwKICAgICAxMTYsMTE0LDk0LDAsMCwwLDExNCwyNywwLDAsMCwxMTQsMjMsMCwwLDAsCiAgICAgMTE0LDIwMSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCi0gICAgNSwwLDAsMCwxMTQsMTk4LDAsMCwwLDY4LDMsMCwwLDExNSwzOCwwLAorICAgIDUsMCwwLDAsMTE0LDE5OCwwLDAsMCw2OSwzLDAsMCwxMTUsMzgsMCwKICAgICAwLDAsMCwyLDE4LDEsNiwyLDIyLDEsMTgsMSwxNywyLDE5LDEsCiAgICAgMTUsMSwzLDEsMTcsMSwxMywyLDcsMSwxOCwzLDE2LDEsMjcsMSwKICAgICAzLDEsMTYsMSwxNywxLDE4LDIsMTIyLDI1LDgzLDExMSwxMTcsMTE0LDk5LDEwMSwKQEAgLTE0NjMsNyArMTQ2Myw3IEBACiAgICAgMTE0LDExMywwLDAsMCwxMTQsMTE0LDAsMCwwLDExNCwxOTcsMCwwLDAsMTE0LAogICAgIDE5OSwwLDAsMCwxMTQsMTk4LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAogICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMTgsMCwKLSAgICAwLDAsNTQsMywwLDAsMTE1LDgsMCwwLDAsMTIsMiw2LDIsMTIsCisgICAgMCwwLDU1LDMsMCwwLDExNSw4LDAsMCwwLDEyLDIsNiwyLDEyLAogICAgIDUsMTIsNSwxMTQsMjE4LDAsMCwwLDk5LDAsMCwwLDAsMCwwLDAsCiAgICAgMCwwLDAsMCwwLDIsMCwwLDAsNjQsMCwwLDAsMTE1LDQ2LDAsCiAgICAgMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLApAQCAtMTQ4NSw3ICsxNDg1LDcgQEAKICAgICAxMTQsMTQ3LDAsMCwwLDQxLDUsMTE0LDEwOCwwLDAsMCwxMTQsMTI2LDAsMCwKICAgICAwLDExNCwzNSwwLDAsMCwxMTQsNTMsMCwwLDAsMTE0LDIwOSwwLDAsMCwKICAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCi0gICAgMTg3LDAsMCwwLDEwMSwzLDAsMCwxMTUsOCwwLDAsMCwwLDEsMTUsCisgICAgMTg3LDAsMCwwLDEwMiwzLDAsMCwxMTUsOCwwLDAsMCwwLDEsMTUsCiAgICAgMSwxNSwxLDI0LDEsMTIyLDI5LDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwKICAgICAxMTUsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LAogICAgIDk5LDExMSwxMDAsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwKQEAgLTE0OTUsMTMgKzE0OTUsMTMgQEAKICAgICAzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDc4LDExNCw0LAogICAgIDAsMCwwLDQxLDIsMTE0LDEwOCwwLDAsMCwxMTQsMTI2LDAsMCwwLDExNCwKICAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMDIsCi0gICAgMCwwLDAsMTA3LDMsMCwwLDExNSwyLDAsMCwwLDAsMiwxMjIsMzEsCisgICAgMCwwLDAsMTA4LDMsMCwwLDExNSwyLDAsMCwwLDAsMiwxMjIsMzEsCiAgICAgODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsCiAgICAgOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw3OCwKICAgICA0MSw2LDExNCwxMTIsMCwwLDAsMTE0LDExMSwwLDAsMCwxMTQsMTEzLDAsMCwKICAgICAwLDExNCwxMTQsMCwwLDAsMTE0LDE4NywwLDAsMCwxMTQsMjAyLDAsMCwwLAogICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKLSAgICA1LDAsMCwwLDExNCwyMjMsMCwwLDAsOTcsMywwLDAsMTE1LDYsMCwKKyAgICA1LDAsMCwwLDExNCwyMjMsMCwwLDAsOTgsMywwLDAsMTE1LDYsMCwKICAgICAwLDAsMTIsMiw2LDIsMTIsNiwxMTQsMjIzLDAsMCwwLDk5LDAsMCwKICAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsNjQsMCwKICAgICAwLDAsMTE1LDEzNiwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLApAQCAtMTUyNiw3ICsxNTI2LDcgQEAKICAgICAwLDEwMCwwLDAsODMsNDEsMSw3OCw0MSwyLDExNCwxMDYsMCwwLDAsMTE0LAogICAgIDM1LDAsMCwwLDQxLDMsMTE0LDEwOCwwLDAsMCwxMTQsMTA2LDAsMCwwLAogICAgIDExNCwzNSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCi0gICAgNSwwLDAsMCwxMTQsMTg1LDAsMCwwLDEyNCwzLDAsMCwxMTUsNCwwLAorICAgIDUsMCwwLDAsMTE0LDE4NSwwLDAsMCwxMjUsMywwLDAsMTE1LDQsMCwKICAgICAwLDAsMCwxLDksMSwxMjIsMjgsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLAogICAgIDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LDExMCwKICAgICAxMDUsMTE2LDk1LDk1LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwKQEAgLTE1MzUsNyArMTUzNSw3IEBACiAgICAgMTI0LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTA2LDEsMCwxMDcsMiwwLDgzLAogICAgIDQxLDEsNzgsNDEsMiwxMTQsMjExLDAsMCwwLDExNCwxMTgsMCwwLDAsNDEsCiAgICAgMiwxMTQsMTA4LDAsMCwwLDExNCwyMTIsMCwwLDAsMTE0LDQsMCwwLDAsCi0gICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIxMywwLDAsMCwxMjgsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIxMywwLDAsMCwxMjksCiAgICAgMywwLDAsMTE1LDQsMCwwLDAsMCwxLDE4LDEsMTIyLDI2LDY5LDEyMCwKICAgICAxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsCiAgICAgMTE0LDQ2LDk1LDk1LDEwMSwxMTMsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwKQEAgLTE1NDQsNyArMTU0NCw3IEBACiAgICAgMCwxMjQsMCwwLDEwNiwyLDAsMTMxLDEsMCw2NSw4Myw0MSwxLDc4LDQxLAogICAgIDMsMTE0LDIxNCwwLDAsMCwxMTQsMTA2LDAsMCwwLDExNCwzNSwwLDAsMCwKICAgICA0MSwxLDExNCwxMDgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAotICAgIDAsMTE0LDUsMCwwLDAsMTE0LDIxNSwwLDAsMCwxMzIsMywwLDAsMTE1LAorICAgIDAsMTE0LDUsMCwwLDAsMTE0LDIxNSwwLDAsMCwxMzMsMywwLDAsMTE1LAogICAgIDIsMCwwLDAsMCwxLDEyMiwyOCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsCiAgICAgMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5NSwxMDQsOTcsCiAgICAgMTE1LDEwNCw5NSw5NSw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLDAsCkBAIC0xNTYyLDcgKzE1NjIsNyBAQAogICAgIDExNCwxMDUsMCwwLDAsMTE0LDEwNiwwLDAsMCwxMTQsMzUsMCwwLDAsNDEsCiAgICAgMywxMTQsMTA4LDAsMCwwLDExNCwxNjQsMCwwLDAsMTE0LDE5MCwwLDAsMCwKICAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCi0gICAgMTg2LDAsMCwwLDEzNSwzLDAsMCwxMTUsMTAsMCwwLDAsMCwyLDYsCisgICAgMTg2LDAsMCwwLDEzNiwzLDAsMCwxMTUsMTAsMCwwLDAsMCwyLDYsCiAgICAgMSwxNSwxLDYsMSwxNiwxLDEyMiwzMyw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwKICAgICAxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5OSwxMTQsMTAxLAogICAgIDk3LDExNiwxMDEsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLApAQCAtMTU3OSw3ICsxNTc5LDcgQEAKICAgICAxMiwxMDEsMTIwLDEwMSw5OSw5NSwxMDAsMTIxLDExMCw5NywxMDksMTA1LDk5LDExNCwxMDUsMCwKICAgICAwLDAsMTE0LDEwNiwwLDAsMCwxMTQsMzUsMCwwLDAsNDEsMiwxMTQsMTA4LAogICAgIDAsMCwwLDExNCwxOTAsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKLSAgICAwLDAsMTE0LDUsMCwwLDAsMTE0LDE5MSwwLDAsMCwxNDMsMywwLDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDExNCwxOTEsMCwwLDAsMTQ0LDMsMCwwLAogICAgIDExNSw2LDAsMCwwLDAsMiwxOSwxLDYsMSwxMjIsMzEsNjksMTIwLDExNiwKICAgICAxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsCiAgICAgNDYsMTAxLDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsCkBAIC0xNTk4LDcgKzE1OTgsNyBAQAogICAgIDc4LDExNCw0LDAsMCwwLDQxLDIsMTE0LDIyLDAsMCwwLDIxOCw2LDExNSwKICAgICAxMTcsMTAyLDEwMiwxMDUsMTIwLDQxLDEsMjE4LDksMTAyLDEwNSwxMDgsMTAxLDk1LDExMCw5NywKICAgICAxMDksMTAxLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDI1MCw5LDYwLDEwMywKLSAgICAxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2MiwxNTIsMywwLDAsMTE1LDIsMCwwLDAsCisgICAgMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTUzLDMsMCwwLDExNSwyLDAsMCwwLAogICAgIDYsMSwxMjIsNDksNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LAogICAgIDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LAogICAgIDEwMywxMDEsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDYwLDEwMywxMDEsMTEwLApAQCAtMTYwNiw3ICsxNjA2LDcgQEAKICAgICAwLDIxOCwzLDk3LDExMCwxMjEsMjE4LDE4LDY5LDg4LDg0LDY5LDc4LDgzLDczLDc5LAogICAgIDc4LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDQxLDIsMTE0LDEwOCwwLDAsCiAgICAgMCwxMTQsMTI2LDAsMCwwLDExNCw0LDAsMCwwLDQxLDEsMTE0LDIyNiwwLAotICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsMTU5LDAsMCwwLDE0OSwzLDAsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMTE0LDE1OSwwLDAsMCwxNTAsMywwLDAsCiAgICAgMTE1LDYsMCwwLDAsMCwyLDE5LDEsMTgsMSwxMjIsMzAsNjksMTIwLDExNiwKICAgICAxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsCiAgICAgNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTksMiwwLDAsMCwKQEAgLTE2MTgsNyArMTYxOCw3IEBACiAgICAgOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDQ2LDc4LDExNCw0LDAsCiAgICAgMCwwLDQxLDIsMTE0LDEwOCwwLDAsMCwxMTQsMTI2LDAsMCwwLDExNCw0LAogICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxODcsMCwKLSAgICAwLDAsMTU1LDMsMCwwLDExNSwyLDAsMCwwLDAsMiwxMjIsMjgsNjksCisgICAgMCwwLDE1NiwzLDAsMCwxMTUsMiwwLDAsMCwwLDIsMTIyLDI4LDY5LAogICAgIDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwKICAgICAxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDk5LDIsMCwwLDAsCiAgICAgMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsCkBAIC0xNjI4LDcgKzE2MjgsNyBAQAogICAgIDExOCwxMDEsMzIsMTEwLDExMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsCiAgICAgMTAxLDQ2LDc4LDExNCw0LDAsMCwwLDQxLDIsMTE0LDEwOCwwLDAsMCwxMTQsCiAgICAgMTI2LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAotICAgIDAsMCwwLDExNCwyMDIsMCwwLDAsMTU5LDMsMCwwLDExNSwyLDAsMCwKKyAgICAwLDAsMCwxMTQsMjAyLDAsMCwwLDE2MCwzLDAsMCwxMTUsMiwwLDAsCiAgICAgMCwwLDIsMTIyLDMwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LAogICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LAogICAgIDExNCw5OSwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCkBAIC0xNjM5LDcgKzE2MzksNyBAQAogICAgIDExNywxMTAsMTAwLDMyLDk4LDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLAogICAgIDExNCw0Niw0MSwxLDExNCwzNSwwLDAsMCw0MSwyLDExNCwxMDgsMCwwLDAsCiAgICAgMTE0LDEyNiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCi0gICAgNSwwLDAsMCwxMTQsMTU3LDAsMCwwLDE2MywzLDAsMCwxMTUsMiwwLAorICAgIDUsMCwwLDAsMTE0LDE1NywwLDAsMCwxNjQsMywwLDAsMTE1LDIsMCwKICAgICAwLDAsMCwzLDEyMiwzMiw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLAogICAgIDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LAogICAgIDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsNzgsNDEsMTQsMTE0LDExMiwwLDAsMCwxMTQsMTExLApAQCAtMTY0OCw3ICsxNjQ4LDcgQEAKICAgICAwLDExNCwxOTEsMCwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsMTg3LDAsMCwwLAogICAgIDExNCwyMDIsMCwwLDAsMTE0LDEyMywwLDAsMCwxMTQsMTU3LDAsMCwwLDExNCwKICAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAotICAgIDAsMCwwLDExNCwyMjQsMCwwLDAsMTE2LDMsMCwwLDExNSwyMCwwLDAsCisgICAgMCwwLDAsMTE0LDIyNCwwLDAsMCwxMTcsMywwLDAsMTE1LDIwLDAsMCwKICAgICAwLDEyLDYsNiwyLDEyLDQsMTIsNCwxMiwzLDEyLDgsMTIsNiwxMiwKICAgICA2LDEyLDQsMTIsNCwxMTQsMjI0LDAsMCwwLDk5LDAsMCwwLDAsMCwKICAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNjQsMCwwLDAsMTE1LApAQCAtMTY5Miw3ICsxNjkyLDcgQEAKICAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCw0MSw0LDExNCwxMDgsCiAgICAgMCwwLDAsMTE0LDEwNiwwLDAsMCwxMTQsMzUsMCwwLDAsMjE4LDExLDExMiwKICAgICA5NywxMTYsMTA0LDk1LDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNCw0LDAsMCwwLDExNCwKLSAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxODUsMCwwLDAsMTc2LDMsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTg1LDAsMCwwLDE3NywzLAogICAgIDAsMCwxMTUsOCwwLDAsMCwwLDEsOSwxLDksMSwyMSwxLDEyMiwKICAgICAyMyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsCiAgICAgOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsCkBAIC0xNzExLDcgKzE3MTEsNyBAQAogICAgIDQxLDQsMTE0LDEwOCwwLDAsMCwxMTQsMjIyLDAsMCwwLDIxOCwzLDEwMCwxMTEsCiAgICAgMTE2LDkwLDIsMTA5LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCiAgICAgNSwwLDAsMCwyMTgsMjMsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExMiw5NywxMTQsMTAxLAotICAgIDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDE4MiwzLDAsCisgICAgMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTgzLDMsMCwKICAgICAwLDExNSw4LDAsMCwwLDAsMiwyNywxLDEyLDIsNCwzLDEyMiwzOCwKICAgICA5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsCiAgICAgMTAyLDEwNSwxMTAsMTAwLDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsCkBAIC0xNzI1LDcgKzE3MjUsNyBAQAogICAgIDExMCwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsOTAsMTQsCiAgICAgMTEyLDk3LDExNiwxMDQsOTUsOTcsMTE2LDExNiwxMTQsOTUsMTEwLDk3LDEwOSwxMDEsMTE0LDQsCiAgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIzMywwLAotICAgIDAsMCwxOTIsMywwLDAsMTE1LDQsMCwwLDAsMCwxLDE4LDEsMTIyLAorICAgIDAsMCwxOTMsMywwLDAsMTE1LDQsMCwwLDAsMCwxLDE4LDEsMTIyLAogICAgIDMxLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0NiwKICAgICA5NSwxMDMsMTAxLDExNiw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LAogICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLApAQCAtMTc0Myw3ICsxNzQzLDcgQEAKICAgICAxMDgsMCwwLDAsOTAsMTEsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LAogICAgIDEwNCwxMTQsMTY0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAogICAgIDExNCw1LDAsMCwwLDIxOCwxMiw5NSwxMTQsMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LAotICAgIDk3LDExNiwxMDEsMTk2LDMsMCwwLDExNSwxNiwwLDAsMCwwLDIsMTgsMSwKKyAgICA5NywxMTYsMTAxLDE5NywzLDAsMCwxMTUsMTYsMCwwLDAsMCwyLDE4LDEsCiAgICAgMTUsMSwyMSwzLDI3LDEsOSwxLDEyLDEsOSwxLDEyMiwyNyw5NSw3OCwKICAgICA5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsMTE0LDEwMSwKICAgICA5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLDk5LDEsMCwwLDAsMCwwLApAQCAtMTc1MiwxNCArMTc1MiwxNCBAQAogICAgIDEsMCw4Myw0MSwxLDc4LDQxLDIsMjE4LDQsMTA1LDExNiwxMDEsMTE0LDExNCwyNDAsCiAgICAgMCwwLDAsNDEsMSwxMTQsMTA4LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKICAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCw4LDk1LDk1LDEwNSwxMTYsMTAxLAotICAgIDExNCw5NSw5NSwyMDksMywwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyMywKKyAgICAxMTQsOTUsOTUsMjEwLDMsMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjMsCiAgICAgOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LAogICAgIDk1LDEwNSwxMTYsMTAxLDExNCw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsCiAgICAgMSwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsCiAgICAgMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMCwwLDEzMSwxLDAsCiAgICAgODMsNDEsMSw3OCw0MSwyLDExNCwzMSwwLDAsMCwxMTQsMjQwLDAsMCwwLAogICAgIDQxLDEsMTE0LDEwOCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCi0gICAgMCwxMTQsNSwwLDAsMCwyMTgsNyw5NSw5NSwxMDgsMTAxLDExMCw5NSw5NSwyMTIsCisgICAgMCwxMTQsNSwwLDAsMCwyMTgsNyw5NSw5NSwxMDgsMTAxLDExMCw5NSw5NSwyMTMsCiAgICAgMywwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyMiw5NSw3OCw5NywxMDksCiAgICAgMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsOTUsMTA4LDEwMSwxMTAsCiAgICAgOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwKQEAgLTE3NjksNyArMTc2OSw3IEBACiAgICAgMTIzLDMzLDExNCwxMjUsNDEsNDEsMiwxMTQsNDcsMCwwLDAsMTE0LDIzMiwwLDAsCiAgICAgMCw0MSwxLDExNCwxMDgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKICAgICAwLDAsMTE0LDUsMCwwLDAsMjE4LDgsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LAotICAgIDk1LDIxNSwzLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDIzLDk1LDc4LAorICAgIDk1LDIxNiwzLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDIzLDk1LDc4LAogICAgIDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSw5NSwxMTQsCiAgICAgMTAxLDExMiwxMTQsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwKICAgICAwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTI0LApAQCAtMTc3Nyw3ICsxNzc3LDcgQEAKICAgICAxLDc4LDQxLDEsMTE0LDI0MCwwLDAsMCw0MSwyLDExNCwxMDgsMCwwLDAsCiAgICAgMjE4LDQsMTA1LDExNiwxMDEsMTA5LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAogICAgIDExNCw1LDAsMCwwLDIxOCwxMiw5NSw5NSw5OSwxMTEsMTEwLDExNiw5NywxMDUsMTEwLAotICAgIDExNSw5NSw5NSwyMTgsMywwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyNywKKyAgICAxMTUsOTUsOTUsMjE5LDMsMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjcsCiAgICAgOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LAogICAgIDk1LDk5LDExMSwxMTAsMTE2LDk3LDEwNSwxMTAsMTE1LDk1LDk1LDk5LDIsMCwwLDAsCiAgICAgMCwwLDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsCkBAIC0xNzg1LDcgKzE3ODUsNyBAQAogICAgIDAsMTMxLDEsMCwxLDEwMCwwLDAsODMsNDEsMSw3OCw0MSwyLDExNCwyMzIsCiAgICAgMCwwLDAsMTE0LDE2MywwLDAsMCw0MSwyLDExNCwxMDgsMCwwLDAsMTE0LAogICAgIDI0NSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKLSAgICAwLDAsMCwxMTQsMTYzLDAsMCwwLDIyMSwzLDAsMCwxMTUsMiwwLDAsCisgICAgMCwwLDAsMTE0LDE2MywwLDAsMCwyMjIsMywwLDAsMTE1LDIsMCwwLAogICAgIDAsMCwxLDEyMiwyMSw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLAogICAgIDk3LDExNiwxMDQsNDYsOTcsMTEyLDExMiwxMDEsMTEwLDEwMCw3OCw0MSwxMywxMTQsMTEyLDAsCiAgICAgMCwwLDExNCwxMTEsMCwwLDAsMTE0LDExMywwLDAsMCwxMTQsMTE0LDAsMCwKQEAgLTE3OTMsNyArMTc5Myw3IEBACiAgICAgMTE0LDI0MCwwLDAsMCwxMTQsMjQyLDAsMCwwLDExNCwyNDMsMCwwLDAsMTE0LAogICAgIDI0NCwwLDAsMCwxMTQsMjQ2LDAsMCwwLDExNCwxNjMsMCwwLDAsMTE0LDQsCiAgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKLSAgICAwLDAsMTE0LDIzMCwwLDAsMCwxNjksMywwLDAsMTE1LDIwLDAsMCwwLAorICAgIDAsMCwxMTQsMjMwLDAsMCwwLDE3MCwzLDAsMCwxMTUsMjAsMCwwLDAsCiAgICAgMTIsNSw2LDIsMTIsNiwxMiwxMCwxMiw0LDEyLDEzLDEyLDMsMTIsMywKICAgICAxMiwzLDEyLDMsMTE0LDIzMCwwLDAsMCw5OSwwLDAsMCwwLDAsMCwKICAgICAwLDAsMCwwLDAsMCwzLDAsMCwwLDY0LDAsMCwwLDExNSwxMTgsCkBAIC0xODEyLDcgKzE4MTIsNyBAQAogICAgIDQxLDEsNzgsNDEsMiwxMTQsMjMwLDAsMCwwLDExNCwyMzIsMCwwLDAsNDEsCiAgICAgNCwxMTQsMTA4LDAsMCwwLDExNCwxMDYsMCwwLDAsMTE0LDM1LDAsMCwwLAogICAgIDExNCwyMzYsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAotICAgIDUsMCwwLDAsMTE0LDE4NSwwLDAsMCwyMjcsMywwLDAsMTE1LDIsMCwKKyAgICA1LDAsMCwwLDExNCwxODUsMCwwLDAsMjI4LDMsMCwwLDExNSwyLDAsCiAgICAgMCwwLDAsMSwxMjIsMjUsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwKICAgICA3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LAogICAgIDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwwLDAsCkBAIC0xODI5LDE0ICsxODI5LDE0IEBACiAgICAgMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNDEsNjIsNDEsMiwxMTQsNDcsMCwKICAgICAwLDAsMTE0LDExMiwwLDAsMCw0MSwyLDExNCwxNzAsMCwwLDAsMTE0LDE5MCwKICAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAotICAgIDAsMCwyMTgsMTEsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDIzMCwKKyAgICAwLDAsMjE4LDExLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwyMzEsCiAgICAgMywwLDAsMTE1LDIsMCwwLDAsMCw3LDEyMiwyOCw5NSw3OCw5NywxMDksCiAgICAgMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDksMTExLDEwMCwKICAgICAxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsOTksMiwwLDAsMCwwLDAsMCwKICAgICAwLDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwwLAogICAgIDAsMCwxMDAsMSwwLDgzLDQxLDIsNzgsODQsMTE0LDQsMCwwLDAsNDEsCiAgICAgMiwxMTQsMTA4LDAsMCwwLDExNCwxMjYsMCwwLDAsMTE0LDQsMCwwLDAsCi0gICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE1OSwwLDAsMCwyMzksCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE1OSwwLDAsMCwyNDAsCiAgICAgMywwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyNyw5NSw3OCw5NywxMDksCiAgICAgMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LAogICAgIDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsCkBAIC0xODQ0LDcgKzE4NDQsNyBAQAogICAgIDAsMTAwLDEsMCw4Myw0MSwyLDc4LDExNCwzMCwwLDAsMCwxMTQsNCwwLAogICAgIDAsMCw0MSwyLDExNCwxMDgsMCwwLDAsMTE0LDEyNiwwLDAsMCwxMTQsNCwKICAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjAyLDAsCi0gICAgMCwwLDI0MiwzLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDI3LDk1LAorICAgIDAsMCwyNDMsMywwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyNyw5NSwKICAgICA3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwKICAgICAxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk5LDIsMCwwLDAsMCwKICAgICAwLDAsMCwyLDAsMCwwLDYsMCwwLDAsNjcsMCwwLDAsMTE1LApAQCAtMTg1Myw3ICsxODUzLDcgQEAKICAgICAwLDAsMTIyLDgsNjAsMTE1LDExNiwxMTQsMTA1LDExMCwxMDMsNjIsMTE0LDE4OSwwLDAsCiAgICAgMCwxMTQsMjA0LDAsMCwwLDg0LDQxLDEsMTE0LDIwNSwwLDAsMCw0MSwyLAogICAgIDExNCwxMDgsMCwwLDAsMTE0LDEyNiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCi0gICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTg3LDAsMCwwLDI0NSwzLAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE4NywwLDAsMCwyNDYsMywKICAgICAwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyNSw5NSw3OCw5NywxMDksMTAxLAogICAgIDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwKICAgICA5OSwxMTEsMTAwLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsCkBAIC0xODYzLDE0ICsxODYzLDE0IEBACiAgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTksMTE0LDEwMSw5NywxMTYsMTA1LDExMSwxMTAsNDYsCiAgICAgNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsMTA4LDAsMCwwLDExNCwxNjQsMCwKICAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAotICAgIDAsMTE0LDE4NiwwLDAsMCwyNDgsMywwLDAsMTE1LDAsMCwwLDAsMTIyLAorICAgIDAsMTE0LDE4NiwwLDAsMCwyNDksMywwLDAsMTE1LDAsMCwwLDAsMTIyLAogICAgIDMwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsCiAgICAgMTE0LDQ2LDk5LDExNCwxMDEsOTcsMTE2LDEwMSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwKICAgICAyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLAogICAgIDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwwLDAsODMsNDEsMSw3OCwKICAgICAxMTQsNCwwLDAsMCw0MSwyLDExNCwxMDgsMCwwLDAsMTE0LDE5MCwwLDAsCiAgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKLSAgICAxMTQsMTkxLDAsMCwwLDI1MSwzLDAsMCwxMTUsMiwwLDAsMCwwLDEsCisgICAgMTE0LDE5MSwwLDAsMCwyNTIsMywwLDAsMTE1LDIsMCwwLDAsMCwxLAogICAgIDEyMiwyOCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsCiAgICAgMTAxLDExNCw0NiwxMDEsMTIwLDEwMSw5OSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLAogICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDY3LApAQCAtMTg4OCw3ICsxODg4LDcgQEAKICAgICAxMDQsMzIsMTIzLDMzLDExNCwxMjUsNDEsNCwxMTQsMTA1LDAsMCwwLDExNCwyMzIsMCwKICAgICAwLDAsMTE0LDEyMSwwLDAsMCwxMTQsMTkyLDAsMCwwLDQxLDIsMTE0LDEwOCwKICAgICAwLDAsMCwxMTQsMTI2LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCi0gICAgMCwwLDExNCw1LDAsMCwwLDExNCwxOTMsMCwwLDAsMjU0LDMsMCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsMTkzLDAsMCwwLDI1NSwzLDAsMCwKICAgICAxMTUsNCwwLDAsMCwwLDcsMTYsMSwxMjIsMjgsOTUsNzgsOTcsMTA5LDEwMSwKICAgICAxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsCiAgICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNzgsNDEsMTIsMTE0LDExMiwwLDAsMCwxMTQsCkBAIC0xODk2LDcgKzE4OTYsNyBAQAogICAgIDAsMCwwLDExNCwyNDgsMCwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsMjAyLDAsCiAgICAgMCwwLDExNCwxODcsMCwwLDAsMTE0LDE4NiwwLDAsMCwxMTQsMTkxLDAsMCwKICAgICAwLDExNCwxOTMsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCi0gICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDI0NywwLDAsMCwyMjYsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDI0NywwLDAsMCwyMjcsCiAgICAgMywwLDAsMTE1LDE2LDAsMCwwLDEyLDEsMTIsMywxOCw5LDEyLDMsCiAgICAgMTIsMywxMiwzLDEyLDMsMTIsMywxMTQsMjQ3LDAsMCwwLDk5LDAsMCwKICAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsNjQsMCwKQEAgLTE5MzQsNyArMTkzNCw3IEBACiAgICAgMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsMjE4LDYsMTE4LDk3LDEwOCwxMTcsMTAxLDExNSwxMTQsCiAgICAgMTE1LDAsMCwwLDExNCwyNTAsMCwwLDAsNDEsMiwxMTQsMTcwLDAsMCwwLAogICAgIDIxOCw2LDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNCw0LDAsMCwwLDExNCw0LDAsCi0gICAgMCwwLDExNCw1LDAsMCwwLDExNCwyNTAsMCwwLDAsMTUsNCwwLDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDExNCwyNTAsMCwwLDAsMTYsNCwwLDAsCiAgICAgMTE1LDYsMCwwLDAsMCw0LDIyLDEsMTUsMSwxMjIsMjgsODAsOTcsMTE2LAogICAgIDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LAogICAgIDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsOTksMiwwLDAsMCwwLDAsCkBAIC0xOTYwLDcgKzE5NjAsNyBAQAogICAgIDEwNywwLDAsMCw0MSwzLDExNCwxNzAsMCwwLDAsMTE0LDM1LDAsMCwwLAogICAgIDkwLDQsMTA0LDExMSwxMTEsMTA3LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAogICAgIDExNCw1LDAsMCwwLDIxOCwxMSw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwKLSAgICAxMDcsMTE1LDIzLDQsMCwwLDExNSwxNiwwLDAsMCwwLDcsMjUsMSwxNiwKKyAgICAxMDcsMTE1LDI0LDQsMCwwLDExNSwxNiwwLDAsMCwwLDcsMjUsMSwxNiwKICAgICAxLDE2LDEsMywxLDE0LDEsMTMsMSwxMiwyLDEyMiwyMiw4MCw5NywxMTYsCiAgICAgMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwKICAgICAxMTEsMTA3LDExNSw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwKQEAgLTE5OTIsNyArMTk5Miw3IEBACiAgICAgMCwwLDExNCwyNTUsMCwwLDAsNDEsMywxMTQsMTcwLDAsMCwwLDExNCwzNSwKICAgICAwLDAsMCwxMTQsMjUzLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCiAgICAgMCwwLDExNCw1LDAsMCwwLDIxOCwyMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsNDAsNCwwLAorICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDQxLDQsMCwKICAgICAwLDExNSwyMiwwLDAsMCwwLDgsMTIsMSwzLDEsMTYsMSwxMywzLAogICAgIDksMSwzLDEsMTcsMSwxMywxLDE1LDEsMTgsMSwxMjIsMzEsODAsOTcsCiAgICAgMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwKQEAgLTIwMTIsNyArMjAxMiw3IEBACiAgICAgMCwwLDExNCwxMjYsMCwwLDAsMTE0LDI1MywwLDAsMCwxMTQsMTI3LDAsMCwKICAgICAwLDExNCwxMjgsMCwwLDAsMTE0LDE2NCwwLDAsMCwxMTQsNCwwLDAsMCwKICAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTYsOTUsMTA4LDEwMSwxMDMsCi0gICAgOTcsOTksMTIxLDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTIsMTAxLDk5LDYyLDQsMCwwLAorICAgIDk3LDk5LDEyMSw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTEyLDEwMSw5OSw2Myw0LDAsMCwKICAgICAxMTUsMTgsMCwwLDAsMCw0LDE1LDEsMjQsMiwxNSwxLDYsMSwxMiwKICAgICAxLDE2LDEsMTgsMSw5LDEsMTIyLDI3LDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwKICAgICAxMDAsMTAxLDExNCw0Niw5NSwxMDgsMTAxLDEwMyw5Nyw5OSwxMjEsOTUsMTAzLDEwMSwxMTYsOTUsCkBAIC0yMDQ4LDcgKzIwNDgsNyBAQAogICAgIDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw5NSwxMTIsOTcsMTE2LDEwNCw5MCw1LDEwMSwxMTAsMTE2LAogICAgIDExNCwxMjEsMTE0LDI1MywwLDAsMCwxMTQsMTY0LDAsMCwwLDExNCwxMjgsMCwwLAogICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCi0gICAgMjE4LDksOTUsMTAzLDEwMSwxMTYsOTUsMTE1LDExMiwxMDEsOTksNzcsNCwwLDAsMTE1LAorICAgIDIxOCw5LDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTIsMTAxLDk5LDc4LDQsMCwwLDExNSwKICAgICA0MCwwLDAsMCwwLDUsNiwxLDEzLDEsMjEsMSwzLDEsMTUsMSwKICAgICAxMiwxLDE1LDEsMjEsMiwxOCwxLDEyLDEsMywxLDE1LDEsNCwxLAogICAgIDksMSwxMiwxLDEyLDUsMTcsMiwxOCwxLDksMSwxMjIsMjAsODAsOTcsCkBAIC0yMDc2LDcgKzIwNzYsNyBAQAogICAgIDYsMTE0LDE3MCwwLDAsMCwxMTQsMTI2LDAsMCwwLDExNCwzNSwwLDAsMCwKICAgICAxMTQsMTgwLDAsMCwwLDExNCwxNjQsMCwwLDAsMTE0LDQsMSwwLDAsMTE0LAogICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE4MSwKLSAgICAwLDAsMCwxMDksNCwwLDAsMTE1LDI2LDAsMCwwLDAsNCwxMiwxLAorICAgIDAsMCwwLDExMCw0LDAsMCwxMTUsMjYsMCwwLDAsMCw0LDEyLDEsCiAgICAgOSwxLDIxLDEsMTIsMSw0LDEsMTUsMSw5LDEsNiwzLDksMSwKICAgICAyNCwxLDQsMiw3LDIsMTIyLDIwLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsCiAgICAgMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksOTksMywwLDAsCkBAIC0yMDk4LDcgKzIwOTgsNyBAQAogICAgIDExNCwxODEsMCwwLDAsMTE0LDEyNywwLDAsMCw0MSw0LDExNCwxNzAsMCwwLAogICAgIDAsMTE0LDEyNiwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDE2NCwwLDAsMCwKICAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCi0gICAgMTgyLDAsMCwwLDEzMSw0LDAsMCwxMTUsOCwwLDAsMCwwLDgsMTgsCisgICAgMTgyLDAsMCwwLDEzMiw0LDAsMCwxMTUsOCwwLDAsMCwwLDgsMTgsCiAgICAgMSwxMiwxLDQsMSwxMjIsMjIsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsCiAgICAgMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MSwxMiwxMTQsCiAgICAgMTEyLDAsMCwwLDExNCwxMTEsMCwwLDAsMTE0LDExMywwLDAsMCwxMTQsMTE0LApAQCAtMjEwNiw3ICsyMTA2LDcgQEAKICAgICAwLDAsMTE0LDEsMSwwLDAsMTE0LDIsMSwwLDAsMTE0LDUsMSwwLAogICAgIDAsMTE0LDE4MSwwLDAsMCwxMTQsMTgyLDAsMCwwLDExNCw0LDAsMCwwLAogICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKLSAgICAyNDksMCwwLDAsMTEsNCwwLDAsMTE1LDIyLDAsMCwwLDEyLDIsNiwKKyAgICAyNDksMCwwLDAsMTIsNCwwLDAsMTE1LDIyLDAsMCwwLDEyLDIsNiwKICAgICAyLDE4LDgsMTgsMTcsMTgsMjIsMTgsMTUsMywxLDE4LDMxLDMsMSwyMSwKICAgICAyMSwzLDEsMTE0LDI0OSwwLDAsMCw5OSwwLDAsMCwwLDAsMCwwLAogICAgIDAsMCwwLDAsMCwzLDAsMCwwLDY0LDAsMCwwLDExNSwxMzMsMCwKQEAgLTIxNTUsNyArMjE1NSw3IEBACiAgICAgMCw4NiwxLDExMywzLDAsMTAwLDAsMCw4Myw0MSwxLDc4LDExNCw0LDAsCiAgICAgMCwwLDQxLDIsMTE0LDIyLDAsMCwwLDExNCwyMjUsMCwwLDAsNDEsMSwKICAgICAxMTQsMTI3LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKLSAgICAyMjcsMCwwLDAsMTYwLDQsMCwwLDExNSwyLDAsMCwwLDYsMCwxMjIsCisgICAgMjI3LDAsMCwwLDE2MSw0LDAsMCwxMTUsMiwwLDAsMCw2LDAsMTIyLAogICAgIDM4LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LDExMCwKICAgICAxMDUsMTE2LDk1LDk1LDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw2MCwxMDMsCiAgICAgMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTE0LDU4LDAsMCwwLDExNCwyOSwwLDAsCkBAIC0yMTY4LDcgKzIxNjgsNyBAQAogICAgIDExMSw5NywxMDAsMTAxLDExNCw5NSwxMDAsMTAxLDExNiw5NywxMDUsMTA4LDExNSw5MCw3LDEwOCwKICAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDExNCwxNjYsMCwwLDAsMTE0LDQsMCwwLDAsCiAgICAgNDEsMSwxMTQsMTI3LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxODUsMCwwLAotICAgIDAsMTU0LDQsMCwwLDExNSwxNiwwLDAsMCwwLDQsNiwxLDE5LDEsCisgICAgMCwxNTUsNCwwLDAsMTE1LDE2LDAsMCwwLDAsNCw2LDEsMTksMSwKICAgICAzNiwxLDksMiwxNSwxLDksMSwxMiwxLDEyMiwxOSw3MCwxMDUsMTA4LDEwMSwKICAgICA3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwKICAgICAxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLApAQCAtMjE3OCw3ICsyMTc4LDcgQEAKICAgICAxMTQsMTIxLDMyLDEwOSwxMTYsMTA1LDEwOSwxMDEsNDYsMTE0LDI5LDAsMCwwLDc4LDExNCwKICAgICA4NywwLDAsMCw0MSwxLDExNCw4LDEsMCwwLDQxLDEsMTE0LDEwOCwwLAogICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCi0gICAgMCwxMTQsMjUwLDAsMCwwLDE2OCw0LDAsMCwxMTUsMiwwLDAsMCwwLAorICAgIDAsMTE0LDI1MCwwLDAsMCwxNjksNCwwLDAsMTE1LDIsMCwwLDAsMCwKICAgICAyLDEyMiwyOCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTAsCiAgICAgMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsOTksCiAgICAgMiwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMiwwLDAsMCwKQEAgLTIyMDIsNyArMjIwMiw3IEBACiAgICAgMTE0LDE4MSwwLDAsMCwxMTQsMTI3LDAsMCwwLDExNCwxNTYsMCwwLDAsNDEsCiAgICAgMywxMTQsMTA4LDAsMCwwLDExNCwxMjYsMCwwLDAsMTE0LDE2NCwwLDAsMCwKICAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCi0gICAgMTI0LDAsMCwwLDE3NCw0LDAsMCwxMTUsOCwwLDAsMCwwLDcsMTUsCisgICAgMTI0LDAsMCwwLDE3NSw0LDAsMCwxMTUsOCwwLDAsMCwwLDcsMTUsCiAgICAgMSwxMiwxLDEwLDEsMTIyLDIyLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwKICAgICAxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTksNiwwLAogICAgIDAsMCwwLDAsMCwwLDcsMCwwLDAsNywwLDAsMCw2NywwLApAQCAtMjIxMyw3ICsyMjEzLDcgQEAKICAgICAwLDAsMCw0MSw3LDExNCwxMDgsMCwwLDAsMTE0LDE2NSwwLDAsMCwxMTQsCiAgICAgMTI2LDAsMCwwLDExNCwzNSwwLDAsMCw5MCw0LDExNSwxMDksMTE1LDEwOCwxMTQsCiAgICAgMTgwLDAsMCwwLDExNCwxMjcsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCi0gICAgMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDUsMSwwLDAsMTg2LDQsMCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNSwxLDAsMCwxODcsNCwwLAogICAgIDAsMTE1LDYsMCwwLDAsMCwxLDE1LDEsMTgsMSwxMjIsMjAsNzAsMTA1LAogICAgIDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTEyLAogICAgIDEwMSw5OSw3OCw5OSwzLDAsMCwwLDAsMCwwLDAsMTQsMCwwLDAsCkBAIC0yMjc2LDcgKzIyNzYsNyBAQAogICAgIDEzLDEwNSwxMTAsMTA1LDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsOTAsOSwKICAgICAxMDIsMTE3LDEwOCwxMDgsOTUsMTEyLDk3LDExNiwxMDQsMTE0LDE2NCwwLDAsMCwxMTQsNCwKICAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTgxLDAsCi0gICAgMCwwLDE5MSw0LDAsMCwxMTUsNjgsMCwwLDAsMCwzLDYsMSwxOSwKKyAgICAwLDAsMTkyLDQsMCwwLDExNSw2OCwwLDAsMCwwLDMsNiwxLDE5LAogICAgIDEsMywxLDM0LDEsMTMsMSwxMSwxLDE1LDEsMTAsMSw5LDIsOSwKICAgICAxLDksMSwxNSwyLDksMSw2LDIsMTIsMSwxOCwxLDIyLDEsMTAsCiAgICAgMSwxNSwxLDEyLDEsMzIsNCwxMiwyLDIyLDEsMjIsMSwyNSwxLDE2LApAQCAtMjMxMiw3ICsyMzEyLDcgQEAKICAgICAwLDAsMTQ2LDIsMCwxMTMsNiwwLDgzLDExNCw0LDAsMCwwLDQxLDEsCiAgICAgMTE0LDg4LDAsMCwwLDQxLDIsMTE0LDIyLDAsMCwwLDkwLDIsMTAyLDExMCwKICAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyNTAsCi0gICAgOSw2MCwxMTUsMTAxLDExNiw5OSwxMTEsMTA5LDExMiw2Miw5LDUsMCwwLDExNSwyLAorICAgIDksNjAsMTE1LDEwMSwxMTYsOTksMTExLDEwOSwxMTIsNjIsMTAsNSwwLDAsMTE1LDIsCiAgICAgMCwwLDAsOSwwLDEyMiw0MSw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsCiAgICAgMTE0LDQ2LDk1LDEwMiwxMDUsMTA4LDEwOCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDQ2LDYwLDEwOCwKICAgICAxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw2MCwxMTUsMTAxLDExNiw5OSwxMTEsMTA5LDExMiw2MiwKQEAgLTIzMjksNyArMjMyOSw3IEBACiAgICAgOTUsOTksMTExLDExMCwxMTYsMTAxLDExMCwxMTYsMTE1LDExNCwyNDUsMCwwLDAsMTE0LDEwNiwKICAgICAwLDAsMCwxMTQsMjM3LDAsMCwwLDExNCwyMjUsMCwwLDAsOTAsOCwxMTAsCiAgICAgMTAxLDExOSw5NSwxMTAsOTcsMTA5LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCi0gICAgMCwxMTQsNSwwLDAsMCwxMTQsMTMsMSwwLDAsMjM2LDQsMCwwLDExNSwKKyAgICAwLDExNCw1LDAsMCwwLDExNCwxMywxLDAsMCwyMzcsNCwwLDAsMTE1LAogICAgIDM0LDAsMCwwLDAsMiw5LDEsMywxLDMxLDEsMjIsMywxMSwzLAogICAgIDE4LDEsMTgsNyw5LDEsMTMsMSwyNCwxLDYsMSwyNywyLDYsMSwKICAgICAxNywxLDksMSwxOCwxLDEyMiwyMiw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwKQEAgLTIzNjgsNyArMjM2OCw3IEBACiAgICAgMCwwLDAsNDEsMSwxMTQsMzUsMCwwLDAsNDEsMiwxMTQsMTcwLDAsMCwKICAgICAwLDExNCwxMiwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKICAgICAyMTgsMjQsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDk1LDEwMiwxMTEsMTE0LDk1LAotICAgIDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMjEsNSwwLDAsMTE1LDYsCisgICAgNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwyMiw1LDAsMCwxMTUsNiwKICAgICAwLDAsMCwwLDIsMTIsMSwxOCwxLDEyMiw1NCw3MCwxMDUsMTA4LDEwMSw3MCwKICAgICAxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNyw0NiwKICAgICA2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwKQEAgLTIzNzYsNyArMjM3Niw3IEBACiAgICAgMTE0LDExNCw0LDAsMCwwLDQxLDMsMTE0LDE3MCwwLDAsMCwxMTQsMTIsMSwKICAgICAwLDAsMTE0LDE4LDEsMCwwLDExNCw0LDAsMCwwLDQxLDIsMTE0LDE3MCwKICAgICAwLDAsMCwxMTQsMTIsMSwwLDAsMTE0LDUsMCwwLDAsMjE4LDksMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExLDUsMCwwLDExNSw0LDAsMCwKKyAgICA5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMiw1LDAsMCwxMTUsNCwwLDAsCiAgICAgMCwwLDEwLDIxLDYsMTIyLDIwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwKICAgICAxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDk5LDEsMCwwLDAsCiAgICAgMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsCkBAIC0yMzg1LDcgKzIzODUsNyBAQAogICAgIDExMCwxMDAsMTAxLDExNCw0MCwxMjMsMzMsMTE0LDEyNSw0MSw0MSwyLDExNCw0NywwLDAsCiAgICAgMCwxMTQsMzUsMCwwLDAsNDEsMSwxMTQsMTA4LDAsMCwwLDExNCw0LDAsCiAgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyNDQsMCwwLAotICAgIDAsMjksNSwwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwxOSw3MCwxMDUsCisgICAgMCwzMCw1LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDE5LDcwLDEwNSwKICAgICAxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LAogICAgIDk1LDQxLDE1LDExNCwxMTIsMCwwLDAsMTE0LDExMSwwLDAsMCwxMTQsMTEzLDAsCiAgICAgMCwwLDExNCwxMTQsMCwwLDAsMTE0LDE4NSwwLDAsMCwxMTQsMjUwLDAsMCwKQEAgLTIzOTMsNyArMjM5Myw3IEBACiAgICAgMTE0LDUsMSwwLDAsMTE0LDE4MSwwLDAsMCwxMTQsMTMsMSwwLDAsMTE0LAogICAgIDE4MywwLDAsMCwxMTQsMTksMSwwLDAsMTE0LDI0NCwwLDAsMCwxMTQsNCwKICAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAotICAgIDAsMCwxMTQsNiwxLDAsMCwxNDUsNCwwLDAsMTE1LDIwLDAsMCwwLAorICAgIDAsMCwxMTQsNiwxLDAsMCwxNDYsNCwwLDAsMTE1LDIwLDAsMCwwLAogICAgIDEyLDcsNiwyLDEyLDE0LDEyLDQsNiwyLDEyLDEyLDEyLDUsMTUsNDUsCiAgICAgMTIsMzEsMTgsMTgsMTE0LDYsMSwwLDAsOTksNCwwLDAsMCwwLDAsCiAgICAgMCwwLDYsMCwwLDAsMTEsMCwwLDAsNjcsMCwwLDAsMTE1LDE5NSwKQEAgLTI0MTksNyArMjQxOSw3IEBACiAgICAgMTA0LDExMCw5NywxMDksMTAxLDkwLDksOTksMTEyLDk3LDExNiwxMDQsMTEwLDk3LDEwOSwxMDEsCiAgICAgMTE0LDEyNywwLDAsMCwxMTQsMTY0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKICAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNCw5NSwxMDIsMTA1LDEyMCw5NSwKLSAgICAxMTcsMTEyLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM1LDUsMCwwLDExNSwzNCwwLAorICAgIDExNywxMTIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzYsNSwwLDAsMTE1LDM0LDAsCiAgICAgMCwwLDAsMiwxNSwxLDE1LDEsNiwxLDYsMSwxMiwxLDEyLDEsCiAgICAgMTgsMiwxNSwxLDYsMSwyMSwxLDMsMSwxMCwxLDEwLDEsMTAsMSwKICAgICAxNCwxLDEzLDIsMTE0LDI0LDEsMCwwLDk5LDAsMCwwLDAsMCwwLApAQCAtMjQ0MCw3ICsyNDQwLDcgQEAKICAgICAwLDQxLDMsOTAsMTAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMTE1LDkwLAogICAgIDYsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5MCw4LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsCiAgICAgMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAotICAgIDExNCwxNjEsMCwwLDAsNTgsNSwwLDAsMTE1LDgsMCwwLDAsMCw1LAorICAgIDExNCwxNjEsMCwwLDAsNTksNSwwLDAsMTE1LDgsMCwwLDAsMCw1LAogICAgIDE4LDEsMTIsMSwxMiwxLDExNCwxNjEsMCwwLDAsOTksMSwwLDAsMCwKICAgICAwLDAsMCwwLDEyLDAsMCwwLDEyLDAsMCwwLDY3LDAsMCwwLAogICAgIDExNSw3MCwyLDAsMCwxMjQsMCwwLDk3LDAsMCwxMTYsMCwwLDEwNiwxLApAQCAtMjUwMiw3ICsyNTAyLDcgQEAKICAgICA4Myw0MSwyLDExNCwyOSwwLDAsMCw3OCw0MSwxLDExNCwzMSwwLDAsMCwKICAgICA0MSwyLDExNCwyMiwwLDAsMCwxMTQsNzcsMCwwLDAsMTE0LDQsMCwwLAogICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIyNywwLDAsMCwKLSAgICA5NCw1LDAsMCwxMTUsMiwwLDAsMCw2LDAsMTIyLDI1LDk1LDExNSwxMDEsCisgICAgOTUsNSwwLDAsMTE1LDIsMCwwLDAsNiwwLDEyMiwyNSw5NSwxMTUsMTAxLAogICAgIDExNiwxMTcsMTEyLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw2MCwxMDMsMTAxLAogICAgIDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTE0LDU5LDAsMCwwLDEyMiwzMCwxMDUsMTA5LDExMiwKICAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsCkBAIC0yNTMyLDcgKzI1MzIsNyBAQAogICAgIDkwLDE0LDExOSwxMDEsOTcsMTA3LDExNCwxMDEsMTAyLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAogICAgIDkwLDEzLDExOSwxMDUsMTEwLDExNCwxMDEsMTAzLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNCwKICAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCw2LAotICAgIDk1LDExNSwxMDEsMTE2LDExNywxMTIsNjksNSwwLDAsMTE1LDgyLDAsMCwwLDAsCisgICAgOTUsMTE1LDEwMSwxMTYsMTE3LDExMiw3MCw1LDAsMCwxMTUsODIsMCwwLDAsMCwKICAgICA4LDYsMSw5LDEsOSwzLDEzLDEsMTMsMSwxNSwxLDE4LDIsMTMsCiAgICAgMSwyMCwzLDMzLDEsMTksMiwzMSwxLDEwLDEsMTUsMSwxMywxLDQsCiAgICAgMiwzLDEsMTUsMSw1LDEsMTMsMSwxMiwyLDEyLDEsMTYsMSwxNiwKQEAgLTI1NTgsNyArMjU1OCw3IEBACiAgICAgMTE0LDIxOCwwLDAsMCw0MSwyLDExNCwzMiwxLDAsMCw5MCwxNywxMTUsMTE3LAogICAgIDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwxMTQsCiAgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsOCwKLSAgICA5NSwxMDUsMTEwLDExNSwxMTYsOTcsMTA4LDEwOCwxMzcsNSwwLDAsMTE1LDE2LDAsMCwKKyAgICA5NSwxMDUsMTEwLDExNSwxMTYsOTcsMTA4LDEwOCwxMzgsNSwwLDAsMTE1LDE2LDAsMCwKICAgICAwLDAsMiwxMCwxLDksMSwyOCwxLDE1LDEsMTYsMSwxNiw0LDksCiAgICAgMSwxMTQsMzUsMSwwLDAsNDEsMywxMjIsMywxMTksMTA1LDExMCwxMTQsMSwwLAogICAgIDAsMCwxMTQsMiwwLDAsMCw0MSw1NywxMTQsMTE0LDAsMCwwLDExNCwxMCwKQEAgLTI1ODcsNyArMjU4Nyw3IEBACiAgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDgsNjAsCiAgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNjIsOCwwLDAsMCwxMTUsMTAwLDAsMCwwLAogICAgIDYsMTcsNiwzLDEyLDEyLDEyLDUsMTIsNSwxMiw2LDEyLDEyLDEyLDEwLAotICAgIDEyLDksMTIsNSwxMiw3LDE1LDIyLDE1LDExMywyMiwxLDE4LDIsNiwxLAorICAgIDEyLDksMTIsNSwxMiw3LDE1LDIyLDE1LDExNCwyMiwxLDE4LDIsNiwxLAogICAgIDYsMiw5LDIsOSwyLDEwLDIsMjEsNDQsMTIsMzMsMTIsMTksMTIsMTIsCiAgICAgMTIsMTIsMTgsOCwxMiwyOCwxMiwxNywyMSw1NSwyMSwxMiwxOCwxMCwxMiwxNCwKICAgICA5LDMsMTIsMSwxNSw2NSwxOSw2NCwxOSwyOCwyMiwxMTAsMTksNDEsMjUsNDMsCmRpZmYgLS1naXQgYS9QeXRob24vcmFuZG9tLmMgYi9QeXRob24vcmFuZG9tLmMKaW5kZXggMDdkYWNmZS4uMzExOTg3MiAxMDA2NDQKLS0tIGEvUHl0aG9uL3JhbmRvbS5jCisrKyBiL1B5dGhvbi9yYW5kb20uYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAgICAgICogc2VlIGh0dHBzOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjY4MzkuIFRvIGF2b2lkIHRoaXMsIHVzZSB0aGUKICAgICAgKiBHUk5EX05PTkJMT0NLIGZsYWcuICovCiAgICAgY29uc3QgaW50IGZsYWdzID0gR1JORF9OT05CTE9DSzsKLSAgICBpbnQgbjsKKyAgICBsb25nIG47CiAKICAgICBpZiAoIWdldHJhbmRvbV93b3JrcykKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNDMsNyArMTQzLDcgQEAKICAgICAgICAgICAgdG8gMTAyNCBieXRlcyAqLwogICAgICAgICBuID0gUHlfTUlOKHNpemUsIDEwMjQpOwogI2Vsc2UKLSAgICAgICAgbiA9IHNpemU7CisgICAgICAgIG4gPSBQeV9NSU4oc2l6ZSwgTE9OR19NQVgpOwogI2VuZGlmCiAKICAgICAgICAgZXJybm8gPSAwOwpAQCAtMjUxLDcgKzI1MSw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBidWZmZXIgKz0gbjsKLSAgICAgICAgc2l6ZSAtPSAoUHlfc3NpemVfdCluOworICAgICAgICBzaXplIC09IG47CiAgICAgfQogICAgIGNsb3NlKGZkKTsKIH0KZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCA5YTA3YmZkLi40ODMxMzRkIDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0xLDUgKzEsNSBAQAotVGhpcyBpcyBQeXRob24gdmVyc2lvbiAzLjUuMgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhpcyBpcyBQeXRob24gdmVyc2lvbiAzLjUuMyByZWxlYXNlIGNhbmRpZGF0ZSAxCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLAogMjAxMiwgMjAxMywgMjAxNCwgMjAxNSwgMjAxNiBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvbWFrZV96aXAucHkgYi9Ub29scy9tc2kvbWFrZV96aXAucHkKaW5kZXggNzUzYmEwZi4uMmZiNDBkMSAxMDA2NDQKLS0tIGEvVG9vbHMvbXNpL21ha2VfemlwLnB5CisrKyBiL1Rvb2xzL21zaS9tYWtlX3ppcC5weQpAQCAtNzUsMTAgKzc1LDEyIEBACiAgICAgcmV0dXJuIHAuc3VmZml4Lmxvd2VyKCkgaW4geycucHknLCAnLnB5dycsICcudHh0J30KIAogRlVMTF9MQVlPVVQgPSBbCi0gICAgKCcvJywgJ1BDQnVpbGQvJGFyY2gnLCAncHl0aG9uKi5leGUnLCBpc19ub3RfZGVidWcpLAotICAgICgnLycsICdQQ0J1aWxkLyRhcmNoJywgJ3B5dGhvbiouZGxsJywgaXNfbm90X2RlYnVnKSwKKyAgICAoJy8nLCAnUENCdWlsZC8kYXJjaCcsICdweXRob24uZXhlJywgaXNfbm90X2RlYnVnKSwKKyAgICAoJy8nLCAnUENCdWlsZC8kYXJjaCcsICdweXRob253LmV4ZScsIGlzX25vdF9kZWJ1ZyksCisgICAgKCcvJywgJ1BDQnVpbGQvJGFyY2gnLCAncHl0aG9uezAubWFqb3J9LmRsbCcuZm9ybWF0KHN5cy52ZXJzaW9uX2luZm8pLCBpc19ub3RfZGVidWcpLAorICAgICgnLycsICdQQ0J1aWxkLyRhcmNoJywgJ3B5dGhvbnswLm1ham9yfXswLm1pbm9yfS5kbGwnLmZvcm1hdChzeXMudmVyc2lvbl9pbmZvKSwgaXNfbm90X2RlYnVnKSwKICAgICAoJ0RMTHMvJywgJ1BDQnVpbGQvJGFyY2gnLCAnKi5weWQnLCBpc19ub3RfZGVidWcpLAotICAgICgnRExMcy8nLCAnUENCdWlsZC8kYXJjaCcsICcqLmRsbCcsIGlzX25vdF9kZWJ1ZyksCisgICAgKCdETExzLycsICdQQ0J1aWxkLyRhcmNoJywgJyouZGxsJywgaXNfbm90X2RlYnVnX29yX3B5dGhvbiksCiAgICAgKCdpbmNsdWRlLycsICdpbmNsdWRlJywgJyouaCcsIE5vbmUpLAogICAgICgnaW5jbHVkZS8nLCAnUEMnLCAncHljb25maWcuaCcsIE5vbmUpLAogICAgICgnTGliLycsICdMaWInLCAnKiovKicsIGluY2x1ZGVfaW5fbGliKSwKQEAgLTE1MCwxNyArMTUyLDE3IEBACiBkZWYgbWFpbigpOgogICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcycsICctLXNvdXJjZScsIG1ldGF2YXI9J2RpcicsIGhlbHA9J1RoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgcmVwb3NpdG9yeSByb290JywgdHlwZT1QYXRoKQotICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1vJywgJy0tb3V0JywgbWV0YXZhcj0nZmlsZScsIGhlbHA9J1RoZSBuYW1lIG9mIHRoZSBvdXRwdXQgc2VsZi1leHRyYWN0aW5nIGFyY2hpdmUnLCB0eXBlPVBhdGgsIHJlcXVpcmVkPVRydWUpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLW8nLCAnLS1vdXQnLCBtZXRhdmFyPSdmaWxlJywgaGVscD0nVGhlIG5hbWUgb2YgdGhlIG91dHB1dCBzZWxmLWV4dHJhY3RpbmcgYXJjaGl2ZScsIHR5cGU9UGF0aCwgZGVmYXVsdD1Ob25lKQogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy10JywgJy0tdGVtcCcsIG1ldGF2YXI9J2RpcicsIGhlbHA9J0EgZGlyZWN0b3J5IHRvIHRlbXBvcmFyaWx5IGV4dHJhY3QgZmlsZXMgaW50bycsIHR5cGU9UGF0aCwgZGVmYXVsdD1Ob25lKQogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1lJywgJy0tZW1iZWQnLCBoZWxwPSdDcmVhdGUgYW4gZW1iZWRkaW5nIGxheW91dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWEnLCAnLS1hcmNoJywgaGVscD0nU3BlY2lmeSB0aGUgYXJjaGl0ZWN0dXJlIHRvIHVzZSAod2luMzIvYW1kNjQpJywgdHlwZT1zdHIsIGRlZmF1bHQ9IndpbjMyIikKICAgICBucyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKIAotICAgIHNvdXJjZSA9IG5zLnNvdXJjZSBvciAoUGF0aChfX2ZpbGVfXykucGFyZW50LnBhcmVudC5wYXJlbnQpCisgICAgc291cmNlID0gbnMuc291cmNlIG9yIChQYXRoKF9fZmlsZV9fKS5yZXNvbHZlKCkucGFyZW50LnBhcmVudC5wYXJlbnQpCiAgICAgb3V0ID0gbnMub3V0CiAgICAgYXJjaCA9IG5zLmFyY2gKICAgICBhc3NlcnQgaXNpbnN0YW5jZShzb3VyY2UsIFBhdGgpCi0gICAgYXNzZXJ0IGlzaW5zdGFuY2Uob3V0LCBQYXRoKQorICAgIGFzc2VydCBub3Qgb3V0IG9yIGlzaW5zdGFuY2Uob3V0LCBQYXRoKQogICAgIGFzc2VydCBpc2luc3RhbmNlKGFyY2gsIHN0cikKIAogICAgIGlmIG5zLnRlbXA6CkBAIC0xNzAsMTAgKzE3MiwxMSBAQAogICAgICAgICB0ZW1wID0gUGF0aCh0ZW1wZmlsZS5ta2R0ZW1wKCkpCiAgICAgICAgIGRlbGV0ZV90ZW1wID0gVHJ1ZQogCi0gICAgdHJ5OgotICAgICAgICBvdXQucGFyZW50Lm1rZGlyKHBhcmVudHM9VHJ1ZSkKLSAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgotICAgICAgICBwYXNzCisgICAgaWYgb3V0OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXQucGFyZW50Lm1rZGlyKHBhcmVudHM9VHJ1ZSkKKyAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKICAgICB0cnk6CiAgICAgICAgIHRlbXAubWtkaXIocGFyZW50cz1UcnVlKQogICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CkBAIC0xOTAsOCArMTkzLDkgQEAKICAgICAgICAgd2l0aCBvcGVuKHN0cih0ZW1wIC8gJ3B5dmVudi5jZmcnKSwgJ3cnKSBhcyBmOgogICAgICAgICAgICAgcHJpbnQoJ2FwcGxvY2FsID0gdHJ1ZScsIGZpbGU9ZikKIAotICAgICAgICB0b3RhbCA9IGNvcHlfdG9fbGF5b3V0KG91dCwgcmdsb2IodGVtcCwgJyonLCBOb25lKSkKLSAgICAgICAgcHJpbnQoJ1dyb3RlIHt9IGZpbGVzIHRvIHt9Jy5mb3JtYXQodG90YWwsIG91dCkpCisgICAgICAgIGlmIG91dDoKKyAgICAgICAgICAgIHRvdGFsID0gY29weV90b19sYXlvdXQob3V0LCByZ2xvYih0ZW1wLCAnKiovKicsIE5vbmUpKQorICAgICAgICAgICAgcHJpbnQoJ1dyb3RlIHt9IGZpbGVzIHRvIHt9Jy5mb3JtYXQodG90YWwsIG91dCkpCiAgICAgZmluYWxseToKICAgICAgICAgaWYgZGVsZXRlX3RlbXA6CiAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRlbXAsIFRydWUpCmRpZmYgLS1naXQgYS9Ub29scy9udWdldC9tYWtlX3BrZy5wcm9qIGIvVG9vbHMvbnVnZXQvbWFrZV9wa2cucHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDNmYWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvbnVnZXQvbWFrZV9wa2cucHJvagpAQCAtMCwwICsxLDU1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgICAgPFByb3BlcnR5R3JvdXA+CisgICAgICAgIDxQcm9qZWN0R3VpZD57MTA0ODc5NDUtMTVEMS00MDkyLUEyMTQtMzM4Mzk1QzQxMTZCfTwvUHJvamVjdEd1aWQ+CisgICAgICAgIDxPdXRwdXROYW1lPnB5dGhvbjwvT3V0cHV0TmFtZT4KKyAgICAgICAgPE91dHB1dE5hbWUgQ29uZGl0aW9uPSIkKFBsYXRmb3JtKSA9PSAneDg2JyI+JChPdXRwdXROYW1lKXg4NjwvT3V0cHV0TmFtZT4KKyAgICAgICAgPE91dHB1dFN1ZmZpeD48L091dHB1dFN1ZmZpeD4KKyAgICAgICAgPFN1cHBvcnRTaWduaW5nPmZhbHNlPC9TdXBwb3J0U2lnbmluZz4KKyAgICAgICAgPEJ1aWxkRm9yUmVsZWFzZSBDb25kaXRpb249IiQoQnVpbGRGb3JSZWxlYXNlKSA9PSAnJyI+dHJ1ZTwvQnVpbGRGb3JSZWxlYXNlPgorICAgIDwvUHJvcGVydHlHcm91cD4KKworICAgIDxJbXBvcnQgUHJvamVjdD0iLi5cbXNpXG1zaS5wcm9wcyIgLz4KKworICAgIDxQcm9wZXJ0eUdyb3VwPgorICAgICAgICA8TnVnZXQgQ29uZGl0aW9uPSIkKE51Z2V0KSA9PSAnJyI+JChFeHRlcm5hbHNEaXIpXHdpbmRvd3MtaW5zdGFsbGVyXG51Z2V0XG51Z2V0LmV4ZTwvTnVnZXQ+CisgICAgICAgIDxOdXNwZWNWZXJzaW9uPiQoTWFqb3JWZXJzaW9uTnVtYmVyKS4kKE1pbm9yVmVyc2lvbk51bWJlcikuJChNaWNyb1ZlcnNpb25OdW1iZXIpPC9OdXNwZWNWZXJzaW9uPgorICAgICAgICA8U2lnbk91dHB1dD5mYWxzZTwvU2lnbk91dHB1dD4KKyAgICAgICAgPFRhcmdldE5hbWU+JChPdXRwdXROYW1lKS4kKE51c3BlY1ZlcnNpb24pPC9UYXJnZXROYW1lPgorICAgICAgICA8VGFyZ2V0RXh0Pi5udXBrZzwvVGFyZ2V0RXh0PgorICAgICAgICA8VGFyZ2V0UGF0aD4kKE91dHB1dFBhdGgpXGVuLXVzXCQoVGFyZ2V0TmFtZSkkKFRhcmdldEV4dCk8L1RhcmdldFBhdGg+CisgICAgICAgIDxJbnRlcm1lZGlhdGVPdXRwdXRQYXRoPiQoSW50ZXJtZWRpYXRlT3V0cHV0UGF0aClcbnVnZXRfJChBcmNoTmFtZSk8L0ludGVybWVkaWF0ZU91dHB1dFBhdGg+CisgICAgICAgIAorICAgICAgICA8Q2xlYW5Db21tYW5kPnJtZGlyIC9xL3MgIiQoSW50ZXJtZWRpYXRlT3V0cHV0UGF0aCkiPC9DbGVhbkNvbW1hbmQ+CisgICAgICAgIAorICAgICAgICA8UHl0aG9uQXJndW1lbnRzPiIkKFB5dGhvbkV4ZSkiICIkKE1TQnVpbGRUaGlzRmlsZURpcmVjdG9yeSlcLi5cbXNpXG1ha2VfemlwLnB5IjwvUHl0aG9uQXJndW1lbnRzPgorICAgICAgICA8UHl0aG9uQXJndW1lbnRzPiQoUHl0aG9uQXJndW1lbnRzKSAtdCAiJChJbnRlcm1lZGlhdGVPdXRwdXRQYXRoKSIgLWEgJChBcmNoTmFtZSk8L1B5dGhvbkFyZ3VtZW50cz4KKyAgICAgICAgCisgICAgICAgIDxQaXBBcmd1bWVudHM+IiQoSW50ZXJtZWRpYXRlT3V0cHV0UGF0aClccHl0aG9uLmV4ZSIgLUIgLWMgImltcG9ydCBzeXM7IHN5cy5wYXRoLmFwcGVuZChyJyQoUHlTb3VyY2VQYXRoKVxMaWInKTsgaW1wb3J0IGVuc3VyZXBpcDsgZW5zdXJlcGlwLl9tYWluKCkiPC9QaXBBcmd1bWVudHM+CisgICAgICAgIAorICAgICAgICA8TnVnZXRBcmd1bWVudHM+IiQoTnVnZXQpIiBwYWNrICIkKE1TQnVpbGRUaGlzRmlsZURpcmVjdG9yeSlcJChPdXRwdXROYW1lKS5udXNwZWMiPC9OdWdldEFyZ3VtZW50cz4KKyAgICAgICAgPE51Z2V0QXJndW1lbnRzPiQoTnVnZXRBcmd1bWVudHMpIC1CYXNlUGF0aCAiJChJbnRlcm1lZGlhdGVPdXRwdXRQYXRoKSI8L051Z2V0QXJndW1lbnRzPgorICAgICAgICA8TnVnZXRBcmd1bWVudHM+JChOdWdldEFyZ3VtZW50cykgLU91dHB1dERpcmVjdG9yeSAiJChPdXRwdXRQYXRoKVxlbi11cyI8L051Z2V0QXJndW1lbnRzPgorICAgICAgICA8TnVnZXRBcmd1bWVudHM+JChOdWdldEFyZ3VtZW50cykgLVZlcnNpb24gIiQoTnVzcGVjVmVyc2lvbikiPC9OdWdldEFyZ3VtZW50cz4KKyAgICAgICAgPE51Z2V0QXJndW1lbnRzPiQoTnVnZXRBcmd1bWVudHMpIC1Ob1BhY2thZ2VBbmFseXNpcyAtTm9uSW50ZXJhY3RpdmU8L051Z2V0QXJndW1lbnRzPgorICAgICAgICAKKyAgICAgICAgPEVudmlyb25tZW50PnNldGxvY2FsCitzZXQgRE9DX0ZJTEVOQU1FPXB5dGhvbiQoUHl0aG9uVmVyc2lvbikuY2htCitzZXQgVkNSRURJU1RfUEFUSD0kKFZTMTQwQ09NTlRPT0xTKVwuLlwuLlxWQ1xyZWRpc3RcJChQbGF0Zm9ybSlcTWljcm9zb2Z0LlZDMTQwLkNSVDwvRW52aXJvbm1lbnQ+CisgICAgPC9Qcm9wZXJ0eUdyb3VwPgorCisgICAgPFRhcmdldCBOYW1lPSJfTnVnZXRNaXNzaW5nIiBCZWZvcmVUYXJnZXRzPSJfQnVpbGQiIENvbmRpdGlvbj0iIUV4aXN0cygkKE51Z2V0KSkiPgorICAgICAgICA8RXJyb3IgVGV4dD0iJChOdWdldCkgY291bGQgbm90IGJlIGZvdW5kLiBFaXRoZXIgYXZvaWQgc3BlY2lmeWluZyB0aGUgcHJvcGVydHkgb3IgdXBkYXRlIHlvdXIgZXh0ZXJuYWxzL3dpbmRvd3MtaW5zdGFsbGVyIGZpbGVzLiIgLz4KKyAgICA8L1RhcmdldD4KKworICAgIDxUYXJnZXQgTmFtZT0iX0J1aWxkIj4KKyAgICAgICAgPEV4ZWMgQ29tbWFuZD0iJChDbGVhbkNvbW1hbmQpIiAvPgorICAgICAgICA8RXhlYyBDb21tYW5kPSIkKEVudmlyb25tZW50KQorJChQeXRob25Bcmd1bWVudHMpIiAvPgorICAgICAgICA8RXhlYyBDb21tYW5kPSIkKFBpcEFyZ3VtZW50cykiIC8+CisgICAgICAgIDxFeGVjIENvbW1hbmQ9IiQoTnVnZXRBcmd1bWVudHMpIiAvPgorICAgIDwvVGFyZ2V0PgorCisgICAgPFRhcmdldCBOYW1lPSJBZnRlckJ1aWxkIiAvPgorICAgIDxUYXJnZXQgTmFtZT0iQnVpbGQiIERlcGVuZHNPblRhcmdldHM9Il9CdWlsZDtBZnRlckJ1aWxkIiAvPgorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvVG9vbHMvbnVnZXQvcHl0aG9uLm51c3BlYyBiL1Rvb2xzL251Z2V0L3B5dGhvbi5udXNwZWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNjNWMzNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL251Z2V0L3B5dGhvbi5udXNwZWMKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8cGFja2FnZSA+CisgIDxtZXRhZGF0YT4KKyAgICA8aWQ+cHl0aG9uPC9pZD4KKyAgICA8dGl0bGU+UHl0aG9uPC90aXRsZT4KKyAgICA8dmVyc2lvbj4wLjAuMC4wPC92ZXJzaW9uPgorICAgIDxhdXRob3JzPlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9hdXRob3JzPgorICAgIDxsaWNlbnNlVXJsPmh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvbGljZW5zZS5odG1sPC9saWNlbnNlVXJsPgorICAgIDxwcm9qZWN0VXJsPmh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvPC9wcm9qZWN0VXJsPgorICAgIDxyZXF1aXJlTGljZW5zZUFjY2VwdGFuY2U+ZmFsc2U8L3JlcXVpcmVMaWNlbnNlQWNjZXB0YW5jZT4KKyAgICA8ZGVzY3JpcHRpb24+SW5zdGFsbHMgNjQtYml0IFB5dGhvbiBmb3IgdXNlIGluIGJ1aWxkIHNjZW5hcmlvcy48L2Rlc2NyaXB0aW9uPgorICAgIDxpY29uVXJsPmh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvc3RhdGljL2Zhdmljb24uaWNvPC9pY29uVXJsPgorICAgIDx0YWdzPnB5dGhvbjwvdGFncz4KKyAgPC9tZXRhZGF0YT4KKyAgPGZpbGVzPgorICAgIDxmaWxlIHNyYz0iKipcKiIgdGFyZ2V0PSJ0b29scyIgLz4KKyAgPC9maWxlcz4KKzwvcGFja2FnZT4KZGlmZiAtLWdpdCBhL1Rvb2xzL251Z2V0L3B5dGhvbng4Ni5udXNwZWMgYi9Ub29scy9udWdldC9weXRob254ODYubnVzcGVjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1NWM4NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9udWdldC9weXRob254ODYubnVzcGVjCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPHBhY2thZ2UgPgorICA8bWV0YWRhdGE+CisgICAgPGlkPnB5dGhvbng4NjwvaWQ+CisgICAgPHRpdGxlPlB5dGhvbiAoMzItYml0KTwvdGl0bGU+CisgICAgPGF1dGhvcnM+UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb248L2F1dGhvcnM+CisgICAgPHZlcnNpb24+MC4wLjAuMDwvdmVyc2lvbj4KKyAgICA8bGljZW5zZVVybD5odHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpY2Vuc2UuaHRtbDwvbGljZW5zZVVybD4KKyAgICA8cHJvamVjdFVybD5odHRwczovL3d3dy5weXRob24ub3JnLzwvcHJvamVjdFVybD4KKyAgICA8cmVxdWlyZUxpY2Vuc2VBY2NlcHRhbmNlPmZhbHNlPC9yZXF1aXJlTGljZW5zZUFjY2VwdGFuY2U+CisgICAgPGRlc2NyaXB0aW9uPkluc3RhbGxzIDMyLWJpdCBQeXRob24gZm9yIHVzZSBpbiBidWlsZCBzY2VuYXJpb3MuPC9kZXNjcmlwdGlvbj4KKyAgICA8aWNvblVybD5odHRwczovL3d3dy5weXRob24ub3JnL3N0YXRpYy9mYXZpY29uLmljbzwvaWNvblVybD4KKyAgICA8dGFncz5weXRob248L3RhZ3M+CisgIDwvbWV0YWRhdGE+CisgIDxmaWxlcz4KKyAgICA8ZmlsZSBzcmM9IioqXCoiIHRhcmdldD0idG9vbHMiIC8+CisgIDwvZmlsZXM+Cis8L3BhY2thZ2U+Cg==