ZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvTWFrZWZpbGUuaW4gYi9BZGE5NS9zYW1wbGVzL01ha2VmaWxlLmluCmluZGV4IDVlZTc4ZGYuLjViNDAwMjcgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvTWFrZWZpbGUuaW4KKysrIGIvQWRhOTUvc2FtcGxlcy9NYWtlZmlsZS5pbgpAQCAtMSw1ICsxLDUgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAjCisjIENvcHlyaWdodCAoYykgMTk5OC0yMDEyLDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICMKICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwogIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgICAjCiAjIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksICMKQEAgLTI4LDE4ICsyOCwyMiBAQAogIwogIyAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAjCi0jICAkSWQ6IE1ha2VmaWxlLmluLHYgMS4zNCAyMDA2LzEyLzE3IDE2OjQ1OjAyIHRvbSBFeHAgJAorIyAgJElkOiBNYWtlZmlsZS5pbix2IDEuNDkgMjAxNS8wOC8wNSAyMzoxNTo0MSB0b20gRXhwICQKICMKIC5TVUZGSVhFUzoKIAotU0hFTEwJCT0gL2Jpbi9zaAorU0hFTEwJCT0gQFNIRUxMQAorVlBBVEgJCT0gQHNyY2RpckAKIFRISVMJCT0gTWFrZWZpbGUKIAoteAkJPSBAUFJPR19FWFRACit4CQk9IEBFWEVFWFRACiAKIHNyY2RpcgkJPSBAc3JjZGlyQAogcHJlZml4CQk9IEBwcmVmaXhACiBleGVjX3ByZWZpeAk9IEBleGVjX3ByZWZpeEAKK2JpbmRpcgkJPSBAYmluZGlyQAorZGF0YXJvb3RkaXIJPSBAZGF0YXJvb3RkaXJACitkYXRhZGlyCQk9IEBkYXRhZGlyQAogbGliZGlyCQk9IEBsaWJkaXJACiBpbmNsdWRlZGlyCT0gQGluY2x1ZGVkaXJACiAKQEAgLTczLDYgKzc3LDEzIEBACiAKIFJBTkxJQgkJPSBAUkFOTElCQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0JJTkRJUgkJPSAkKERFU1RESVIpJChiaW5kaXIpCitEQVRBRElSCQk9ICQoREVTVERJUikkKGRhdGFkaXIpCitMSUJESVIJCT0gJChERVNURElSKSQobGliZGlyKQorCitNWV9EQVRBRElSCT0gJChEQVRBRElSKS9BZGFDdXJzZXMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIGFkYV9zcmNkaXI9Li4vc3JjCiAKIExEX0ZMQUdTICAgICA9IEBMRF9NT0RFTEAgJChMT0NBTF9MSUJTKSBATERGTEFHU0AgQExJQlNAIEBMT0NBTF9MREZMQUdTMkAgJChMREZMQUdTKQpAQCAtODcsMzMgKzk4LDExIEBACiBBQkFTRSAgICAgICAgPSAkKEFMSUIpLWN1cnNlcwogCiBDQVJHUyAgICAgICAgPS1jYXJncyAkKEFEQUZMQUdTKQotTEFSR1MgICAgICAgID0tbGFyZ3MgQFRFU1RfQVJHMkAgJChMRF9GTEFHUykgLWxBZGFDdXJzZXMKLSAKLVBST0dTICAgICAgICA9IHRvdXIgcmFpbiBuY3Vyc2VzIAorTEFSR1MgICAgICAgID0tbGFyZ3MgLUwuLi9saWIgLWxBZGFDdXJzZXMgQFRFU1RfQVJHMkAgJChMRF9GTEFHUykgQFRFU1RfTElCUzJACiAKLVRPVVJfT0JKUyAgICA9CXRvdXIubyBzYW1wbGUubyBzYW1wbGUtY3Vyc2VzX2RlbW8ubyBzYW1wbGUtZXhwbGFuYXRpb24ubyAJXAotCQlzYW1wbGUtZm9ybV9kZW1vLm8gc2FtcGxlLWZ1bmN0aW9uX2tleV9zZXR0aW5nLm8gCQlcCi0JCXNhbXBsZS1oZWFkZXJfaGFuZGxlci5vIHNhbXBsZS1oZWxwZXJzLm8gCQkJXAotCQlzYW1wbGUta2V5Ym9hcmRfaGFuZGxlci5vIHNhbXBsZS1tYW5pZmVzdC5vIHNhbXBsZS1tZW51X2RlbW8ubwlcCi0JCXNhbXBsZS1tZW51X2RlbW8tYXV4Lm8gc2FtcGxlLXRleHRfaW9fZGVtby5vCQkJXAotCQlzYW1wbGUtY3Vyc2VzX2RlbW8tYXR0cmlidXRlcy5vIHNhbXBsZS1jdXJzZXNfZGVtby1tb3VzZS5vCVwKLQkJc2FtcGxlLWZvcm1fZGVtby1hdXgubyBzYW1wbGUtbXlfZmllbGRfdHlwZS5vCitQUk9HUyAgICAgICAgPSB0b3VyJHggbmN1cnNlcyR4IEBVU0VfR05BVF9TSUdJTlRAIHJhaW4keCAKIAotUkFJTl9PQkpTICAgID0JcmFpbi5vIHN0YXR1cy5vCi0KLU5DVVJTRVNfT0JKUyA9IG5jdXJzZXMubyAgICAgICAgCW5jdXJzZXMyLWdldGNoX3Rlc3QubyBcCi0JbmN1cnNlczItYWNzX2FuZF9zY3JvbGwubyAgICAgICBuY3Vyc2VzMi1tLm8gXAotCW5jdXJzZXMyLWFjc19kaXNwbGF5Lm8gICAgICAgICAgbmN1cnNlczItbWVudV90ZXN0Lm8gXAotCW5jdXJzZXMyLWF0dHJfdGVzdC5vICAgICAgICAgICAgbmN1cnNlczItb3ZlcmxhcF90ZXN0Lm8gXAotCW5jdXJzZXMyLWNvbG9yX2VkaXQubyAgICAgICAgICAgbmN1cnNlczItc2xrX3Rlc3QubyBcCi0JbmN1cnNlczItY29sb3JfdGVzdC5vICAgICAgICAgICBuY3Vyc2VzMi10ZXN0X3Nncl9hdHRyaWJ1dGVzLm8gXAotCW5jdXJzZXMyLWRlbW9fZm9ybXMubyAgICAgICAgICAgbmN1cnNlczItdHJhY2Vfc2V0Lm8gXAotCW5jdXJzZXMyLWRlbW9fcGFkLm8gICAgICAgICAgICAgbmN1cnNlczItdXRpbC5vIFwKLQluY3Vyc2VzMi1kZW1vX3BhbmVscy5vICAgICAgICAgIG5jdXJzZXMyLm8gXAotCW5jdXJzZXMyLWZsdXNoaW5wX3Rlc3QubwotCi0KLWFsbCA6OiAgdG91ciR4IHJhaW4keCBuY3Vyc2VzJHgKK2FsbCA6OiAgJChQUk9HUykKIAlAZWNobyBtYWRlICRACiAKIHNvdXJjZXMgOgpAQCAtMTI4LDE1ICsxMTcsMjggQEAKIHVuaW5zdGFsbC5saWJzIDo6CiAJQGVjaG8gbWFkZSAkQAogCitpbnN0YWxsLmV4YW1wbGVzIDo6ICQoQklORElSKSAkKFBST0dTKQorCSQoSU5TVEFMTCkgJChQUk9HUykgJChCSU5ESVIpCisKK2luc3RhbGwuZXhhbXBsZXMgOjogJChNWV9EQVRBRElSKQorCSQoSU5TVEFMTF9EQVRBKSBleHBsYWluLnR4dCAkKE1ZX0RBVEFESVIpCisKK3VuaW5zdGFsbC5leGFtcGxlcyA6OgorCS1jZCAkKEJJTkRJUikgJiYgcm0gLWYgJChQUk9HUykKKwktcm1kaXIgJChCSU5ESVIpCisJLXJtIC1mICQoTVlfREFUQURJUikvZXhwbGFpbi50eHQKKwktcm1kaXIgJChNWV9EQVRBRElSKQorCiskKEJJTkRJUikgXAorJChNWV9EQVRBRElSKSA6CisJbWtkaXIgLXAgJEAKKwogbmN1cnNlcyR4IDoKIAkkKEFEQU1BS0UpICQoQURBTUFLRUZMQUdTKSBuY3Vyc2VzICQoQ0FSR1MpICQoTEFSR1MpCiAKLXRvdXIkeCA6CWV4cGxhaW4ubXNnCit0b3VyJHggOgogCSQoQURBTUFLRSkgJChBREFNQUtFRkxBR1MpIHRvdXIgJChDQVJHUykgJChMQVJHUykKIAotZXhwbGFpbi5tc2c6CSQoc3JjZGlyKS9leHBsYWluLnR4dAotCWNwICQoc3JjZGlyKS9leHBsYWluLnR4dCAkQAotCiByYWluJHggOgogCSQoQURBTUFLRSkgJChBREFNQUtFRkxBR1MpIHJhaW4gJChDQVJHUykgJChMQVJHUykKIApAQCAtMTQ1LDcgKzE0Nyw3IEBACiAKIGNsZWFuIDo6IG1vc3RseWNsZWFuCiAJcm0gLWYgKi5vICouYWxpIGJfdCouKiAqLnMgJChQUk9HUykgYS5vdXQgY29yZSBiXypfdGVzdC5jICoueHJbYnNdIFwKLQlleHBsYWluLm1zZyB0cmFjZSBzY3JlZW5kdW1wIAorCXRyYWNlIHNjcmVlbmR1bXAgYn4qLmFkW2JzXQogCiBkaXN0Y2xlYW4gOjogY2xlYW4KIAlybSAtZiBNYWtlZmlsZQpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9leHBsYWluLnR4dCBiL0FkYTk1L3NhbXBsZXMvZXhwbGFpbi50eHQKaW5kZXggNTcwZjYxNy4uYmUyY2JhMSAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9leHBsYWluLnR4dAorKysgYi9BZGE5NS9zYW1wbGVzL2V4cGxhaW4udHh0CkBAIC01NCwxMyArNTQsMTMgQEAKICNIRUxQCiAjSEVMUEtFWVMKIFlvdSBtYXkgc2Nyb2xsIHdpdGggdGhlIEN1cnNvciBVcC9Eb3duIEtleXMuCi1Zb3UgbWF5IGxlYXZlIHRoZSBoZWxwIHdpdGggdGhlIEZ1bmN0aW9uIEtleSBsYWJlbGxlZCAnUXVpdCcuCitZb3UgbWF5IGxlYXZlIHRoZSBoZWxwIHdpdGggdGhlIEZ1bmN0aW9uIEtleSBsYWJlbGVkICdRdWl0Jy4KICNJTkhFTFAKIFlvdSBhcmUgYWxyZWFkeSBpbiB0aGUgaGVscCBzeXN0ZW0uCi1Zb3UgbWF5IGxlYXZlIHRoZSBoZWxwIHdpdGggdGhlIEZ1bmN0aW9uIEtleSBsYWJlbGxlZCAnUXVpdCcuCitZb3UgbWF5IGxlYXZlIHRoZSBoZWxwIHdpdGggdGhlIEZ1bmN0aW9uIEtleSBsYWJlbGVkICdRdWl0Jy4KICNNQUlOCiBUaGlzIGlzIHRoZSBtYWluIG1lbnUgb2YgdGhlIHNhbXBsZSBwcm9ncmFtIGZvciB0aGUgbmN1cnNlcyBBZGE5NQotYmluZGluZy4gVGhlIG1haW4gaW50ZW50aW9uIG9mIHRoZSBkZW1vIGlzIG5vdCB0byBkZW1vbnN0YXRlIG9yCitiaW5kaW5nLiBUaGUgbWFpbiBpbnRlbnRpb24gb2YgdGhlIGRlbW8gaXMgbm90IHRvIGRlbW9uc3RyYXRlIG9yCiB0ZXN0IGFsbCB0aGUgZmVhdHVyZXMgb2YgbmN1cnNlcyBhbmQgaXQncyBzdWJzeXN0ZW1zLCBidXQgdG8gcHJvdmlkZQogdG8geW91IHNvbWUgc2FtcGxlIGNvZGUgaG93IHRvIHVzZSB0aGUgYmluZGluZyB3aXRoIEFkYTk1LiAKIApAQCAtODYsMjMgKzg2LDIzIEBACiB0aGUgaXRlbSBuYW1lIGFuZCB0aGUgZGVzY3JpcHRpb24uCiAjTUVOVTAxCiBUaGlzIGlzIGEgZGVtbyBvZiB0aGUgc29tZSBvZiB0aGUgbWVudSBsYXlvdXQgb3B0aW9ucy4gT25lIG9mIHRoZW0KLWlzIHRoZSBzcGFjaW5nIGZ1bmN0aW9uYWxpdHkuIEp1c3QgcHJlc3MgdGhlIEtleSBsYWJlbGxlZCAiRmxpcCIgdG8gCitpcyB0aGUgc3BhY2luZyBmdW5jdGlvbmFsaXR5LiBKdXN0IHByZXNzIHRoZSBLZXkgbGFiZWxlZCAiRmxpcCIgdG8gCiBmbGlwIGJldHdlZW4gdGhlIG5vbi1zcGFjZWQgYW5kIGEgc3BhY2VkIHZlcnNpb24gb2YgdGhlIG1lbnUuIFBsZWFzZQogbm90ZSB0aGF0IHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1bmlxdWUgZm9yIG5jdXJzZXMgYW5kIGlzIG5vdCBmb3VuZCAKIGluIHRoZSBTVnI0IG1lbnUgaW1wbGVtZW50YXRpb24uIAogCi1UaGlzIGlzIGEgbWVudSB0aGF0IHNvbWV0aW1lcyBkb2Vzbid0IGZpdCBpbnRvIGl0J3Mgd2luZG93IGFuZCAKK1RoaXMgaXMgYSBtZW51IHRoYXQgc29tZXRpbWVzIGRvZXMgbm90IGZpdCBpbnRvIGl0J3Mgd2luZG93IGFuZCAKIHRoZXJlZm9yZSBpdCBiZWNvbWVzIGEgc2Nyb2xsIG1lbnUuIAogCiBZb3UgY2FuIGFsc28gc2VlIGhlcmUgdmVyeSBuaWNlbHkgdGhlIHBhdHRlcm4gbWF0Y2hpbmcgZnVuY3Rpb25hbGl0eQogb2YgbWVudXMuIFR5cGUgZm9yIGV4YW1wbGUgYSAnSicgYW5kIHlvdSB3aWxsIGJlIHBvc2l0aW9uZWQgdG8gdGhlCiBuZXh0IGl0ZW0gYWZ0ZXIgdGhlIGN1cnJlbnQgc3RhcnRpbmcgd2l0aCBhICdKJy4gQW55IG1vcmUgY2hhcmFjdGVycwogeW91IHR5cGUgaW4gbWFrZSB0aGUgcGF0dGVybiBtb3JlIHNwZWNpZmljLiBXaXRoIENUUkwtQSBhbmQgQ1RSTC1aCi0oZm9yIG1vcmUgZGV0YWlscyBwcmVzcyB0aGUgS2V5IGxhYmVsbGVkICJLZXlzIikgeW91IGNhbiBicm93c2UKKyhmb3IgbW9yZSBkZXRhaWxzIHByZXNzIHRoZSBLZXkgbGFiZWxlZCAiS2V5cyIpIHlvdSBjYW4gYnJvd3NlCiB0aHJvdWdoIGFsbCB0aGUgaXRlbXMgbWF0Y2hpbmcgdGhlIHBhdHRlcm4uCiAKIFlvdSBtYXkgY2hhbmdlIHRoZSBmb3JtYXQgb2YgdGhlIG1lbnUuIEp1c3QgcHJlc3Mgb25lIG9mIHRoZSBrZXlzCi1sYWJlbGxlZCAiNHgxIiwgIjR4MiIgb3IgIjR4MyIgdG8gZ2V0IGEgbWVudSB3aXRoIHRoYXQgbWFueSByb3dzCitsYWJlbGVkICI0eDEiLCAiNHgyIiBvciAiNHgzIiB0byBnZXQgYSBtZW51IHdpdGggdGhhdCBtYW55IHJvd3MKIGFuZCBjb2x1bW5zLgogCiBXaXRoIHRoZSBLZXlzICJPLVJvdyIgb3IgIk8tQ29sIiAodGhleSBvY2N1cHkgdGhlIHNhbWUgbGFiZWwgYW5kCkBAIC0xMjEsNyArMTIxLDcgQEAKIHN3aXRjaCBvbiBzZWxlY3Rpb24pIHlvdSBjYW4gY2hhbmdlIHdoZXRoZXIgb3Igbm90IHRoZSBkZXNjcmlwdGlvbnMKIGZvciBlYWNoIGl0ZW0gc2hvdWxkIGJlIGRpc3BsYXllZC4gUGxlYXNlIG5vdCB0aGF0IHRoaXMga2V5IGlzCiBub3QgdmlzaWJsZSBpbiB0aGUgIjR4MyIgbGF5b3V0IG1vZGUsIGJlY2F1c2UgaW4gdGhpcyBjYXNlIHRoZQotbWVudSB3b3VsZG4ndCBmaXQgb24gYSB0eXBpY2FsbCA4MHgyNCBzY3JlZW4uCittZW51IHdvdWxkIG5vdCBmaXQgb24gYSB0eXBpY2FsIDgweDI0IHNjcmVlbi4KIAogV2l0aCB0aGUgS2V5cyAiRGlzYWIiIG9yICJFbmFiIiAodGhleSBvY2N1cHkgdGhlIHNhbWUgbGFiZWwgYW5kCiBzd2l0Y2ggb24gc2VsZWN0aW9uKSB5b3UgY2FuIGRpcy0gb3IgZW5hYmxlIHRoZSBzZWxlY3RhYmlsaXR5IG9mCkBAIC0xMzEsMTMgKzEzMSwxMyBAQAogVGhlIEtleXMgIjR4MSIsICI0eDIiIGFuZCAiNHgzIiB3aWxsIGNoYW5nZSB0aGUgZm9ybWF0IG9mIHRoZSBtZW51LgogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGlzIGEgc2Nyb2xsaW5nIG1lbnUuIFlvdSBtYXkgYWxzbyBwbGF5IHdpdGggdGhlCiBwYXR0ZXJuIG1hdGNoaW5nIGZ1bmN0aW9uYWxpdHkgb3IgdHJ5IHRvIGNoYW5nZSB0aGUgZm9ybWF0IG9mIHRoZSBtZW51LgotRm9yIG1vcmUgZGV0YWlscyBwcmVzcyB0aGUgS2V5IGxhYmVsbGVkICJIZWxwIi4KK0ZvciBtb3JlIGRldGFpbHMgcHJlc3MgdGhlIEtleSBsYWJlbGVkICJIZWxwIi4KICNGT1JNMDAKIFRoaXMgaXMgYSBkZW1vIG9mIHRoZSBmb3JtcyBwYWNrYWdlLgogI0ZPUk0tUEFEMDAKIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBkZW1vIGlzIGZhciBmcm9tIGJlaW5nIGNvbXBsZXRlLiBJdCByZWFsbHkgc2hvd3MKIG9ubHkgYSBzbWFsbCBwYXJ0IG9mIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBmb3JtcyBwYWNrYWdlLiBMZXQncyBob3BlIAotdGhlIG5leHQgdmVyc2lvbiB3aWxsIGhhdmUgYSByaWNoZXIgZGVtbyAoWW91IHdhbid0IHRvIGNvbnRyaWJ1dGUgPykuCit0aGUgbmV4dCB2ZXJzaW9uIHdpbGwgaGF2ZSBhIHJpY2hlciBkZW1vIChZb3Ugd2FudCB0byBjb250cmlidXRlID8pLgogI05PVElNUEwKIFNvcnJ5IHRoaXMgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZGVtbyBpcyBub3QgaW1wbGVtZW50ZWQgYXQgdGhlIG1vbWVudC4KIFJlbWVtYmVyIHRoaXMgaXMgYSBmcmVld2FyZSBwcm9qZWN0LCBzbyBJIGNhbiB1c2Ugb25seSBteSB2ZXJ5IHJhcmUKQEAgLTE0OSwxMyArMTQ5LDEzIEBACiAjQ1VSU0VTLVBBRDAwCiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZGVtbyBpcyBmYXIgZnJvbSBiZWluZyBjb21wbGV0ZS4gSXQgcmVhbGx5IHNob3dzCiBvbmx5IGEgc21hbGwgcGFydCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgY3Vyc2VzIHBhY2thZ2UuIExldCdzIGhvcGUgCi10aGUgbmV4dCB2ZXJzaW9uIHdpbGwgaGF2ZSBhIHJpY2hlciBkZW1vIChZb3Ugd2FuJ3QgdG8gY29udHJpYnV0ZSA/KS4KK3RoZSBuZXh0IHZlcnNpb24gd2lsbCBoYXZlIGEgcmljaGVyIGRlbW8gKFlvdSB3YW50IHRvIGNvbnRyaWJ1dGUgPykuCiAjTU9VU0VLRVlTCiBJbiB0aGlzIGRlbW8geW91IG1heSB1c2UgdGhpcyBrZXlzOgogCi0gICAtIEtleSBsYWJlbGxlZCAiSGVscCIgIHRvIGdldCBhIGhlbHAKLSAgIC0gS2V5IGxhYmVsbGVkICJLZXlzIiAgaXMgd2hhdCB5b3UgYXJlIHJlYWRpbmcgbm93Ci0gICAtIEtleSBsYWJlbGxlZCAiUXVpdCIgIHRvIGxlYXZlIHRoZSBkZW1vCisgICAtIEtleSBsYWJlbGVkICJIZWxwIiAgdG8gZ2V0IGEgaGVscAorICAgLSBLZXkgbGFiZWxlZCAiS2V5cyIgIGlzIHdoYXQgeW91IGFyZSByZWFkaW5nIG5vdworICAgLSBLZXkgbGFiZWxlZCAiUXVpdCIgIHRvIGxlYXZlIHRoZSBkZW1vCiAKIFlvdSBtYXkgY2xpY2sgdGhlIG1vdXNlIGJ1dHRvbnMgYXQgYW55IGxvY2F0aW9uIGF0IHRoZSBzY3JlZW4gYW5kIGxvb2sKIGF0IHRoZSBwcm90b2NvbCB3aW5kb3cgIQpAQCAtMTc5LDcgKzE3OSw3IEBACiBZb3UgbWF5IHByZXNzIG9uZSBvZiB0aGUgdGhyZWUgd2VsbCBrbm93biBzdGFuZGFyZCBrZXlzIG9mIHRoaXMgZGVtby4KICNBVFRSSUItUEFEMDAKIEFnYWluIHRoaXMgaXMgYSBtb3JlIHRoYW4gc2ltcGxlIGRlbW8gYW5kIGp1c3QgaGVyZSB0byBnaXZlIHlvdSB0aGUKLXNvdXJjZWNvZGUuIEZlZWwgZnJlZSB0byBjb250cmlidXRlIG1vcmUuCitzb3VyY2UgY29kZS4gRmVlbCBmcmVlIHRvIGNvbnRyaWJ1dGUgbW9yZS4KICNURVhUSU8KICNURVhUSU9LRVlTCiAjVEVYVElPLVBBRDAwCmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWFjc19hbmRfc2Nyb2xsLmFkYiBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYWNzX2FuZF9zY3JvbGwuYWRiCmluZGV4IDA3YjJkOTEuLjAwZTlhZmMgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYWNzX2FuZF9zY3JvbGwuYWRiCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItYWNzX2FuZF9zY3JvbGwuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSwyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDggKzM1LDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjggJAotLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ3OjQyICQKKy0tICAkUmV2aXNpb246IDEuMTEgJAorLS0gICREYXRlOiAyMDExLzAzLzIzIDAwOjMzOjAwICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIFdpbmRvd3MgYW5kIHNjcm9sbGluZyB0ZXN0ZXIuCkBAIC05Myw4ICs5Myw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGR4ICA6IENvbHVtbl9Qb3NpdGlvbik7CiAgICBmdW5jdGlvbiBkZWxldGVfZnJhbWVkIChmcCA6IEZyYW1lQTsgc2hvd2l0IDogQm9vbGVhbikgcmV0dXJuIEZyYW1lQTsKIAotICAgdXNlIEFkYS5TdHJlYW1zLlN0cmVhbV9JTzsKLQogICAgLS0gIEEgbGlua2VkIGxpc3QKICAgIC0tICBJICB3aXNoIHRoZXJlIHdhcyBhIHN0YW5kYXJkIGxpYnJhcnkgbGlua2VkIGxpc3QuIE9oIHdlbGwuCiAgICB0eXBlIEZyYW1lIGlzIHJlY29yZApAQCAtMjg1LDExICsyODMsMTEgQEAKICAgICAgIGVsc2UKICAgICAgICAgIEFkZCAoU3RyID0+ICJBbGwgb3RoZXIiKTsKICAgICAgIGVuZCBpZjsKLSAgICAgIEFkZCAoc3RyID0+ICIgY2hhcmFjdGVycyBhcmUgZWNob2VkLCB3aW5kb3cgc2hvdWxkICIpOworICAgICAgQWRkIChTdHIgPT4gIiBjaGFyYWN0ZXJzIGFyZSBlY2hvZWQsIHdpbmRvdyBzaG91bGQgIik7CiAgICAgICBpZiBub3QgSGF2ZVNjcm9sbCAoY3VycHcpIHRoZW4KICAgICAgICAgIEFkZCAoU3RyID0+ICJub3QgIik7CiAgICAgICBlbmQgaWY7Ci0gICAgICBBZGQgKHN0ciA9PiAic2Nyb2xsIik7CisgICAgICBBZGQgKFN0ciA9PiAic2Nyb2xsIik7CiAKICAgICAgIENsZWFyX1RvX0VuZF9PZl9MaW5lOwogICAgZW5kIHRyYW5zaWVudDsKQEAgLTM0Nyw3ICszNDUsNyBAQAogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgd2hlbiBLRVlfVVAgPT4KICAgICAgICAgICAgICAgIGkgOj0gaSArIHNpIC0gMTsKLSAgICAgICAgICAgICAgIC0tICBzYW1lIGFzICBpIDo9IGkgLSAxIGJlY2F1c2Ugb2YgTW9kdWx1cyBhcml0aGV0aWMsCisgICAgICAgICAgICAgICAtLSAgc2FtZSBhcyAgaSA6PSBpIC0gMSBiZWNhdXNlIG9mIE1vZHVsdXMgYXJpdGhtZXRpYywKICAgICAgICAgICAgICAgIC0tICBvbiBMaW5lX1Bvc2l0aW9uLCB3aGljaCBpcyBhIE5hdHVyYWwKICAgICAgICAgICAgICAgIC0tICB0aGUgQyB2ZXJzaW9uIHVzZXMgdGhpcyBmb3JtIHRvbywgaW50ZXJlc3RpbmdseS4KICAgICAgICAgICAgIHdoZW4gS0VZX0RPV04gPT4KQEAgLTQ1NCwxOSArNDUyLDE5IEBACiAgICBmdW5jdGlvbiBkZWxldGVfZnJhbWVkIChmcCA6IEZyYW1lQTsgc2hvd2l0IDogQm9vbGVhbikgcmV0dXJuIEZyYW1lQSBpcwogICAgICAgbnAgOiBGcmFtZUE7CiAgICBiZWdpbgotICAgICAgZnAubGFzdC5uZXh0IDo9IGZwLm5leHQ7Ci0gICAgICBmcC5uZXh0Lmxhc3QgOj0gZnAubGFzdDsKKyAgICAgIGZwLmFsbC5sYXN0LmFsbC5uZXh0IDo9IGZwLmFsbC5uZXh0OworICAgICAgZnAuYWxsLm5leHQuYWxsLmxhc3QgOj0gZnAuYWxsLmxhc3Q7CiAKICAgICAgIGlmIHNob3dpdCB0aGVuCi0gICAgICAgICBFcmFzZSAoZnAud2luZCk7Ci0gICAgICAgICBSZWZyZXNoIChmcC53aW5kKTsKKyAgICAgICAgIEVyYXNlIChmcC5hbGwud2luZCk7CisgICAgICAgICBSZWZyZXNoIChmcC5hbGwud2luZCk7CiAgICAgICBlbmQgaWY7Ci0gICAgICBEZWxldGUgKGZwLndpbmQpOworICAgICAgRGVsZXRlIChmcC5hbGwud2luZCk7CiAKLSAgICAgIGlmIGZwID0gZnAubmV4dCB0aGVuCisgICAgICBpZiBmcCA9IGZwLmFsbC5uZXh0IHRoZW4KICAgICAgICAgIG5wIDo9IG51bGw7CiAgICAgICBlbHNlCi0gICAgICAgICBucCA6PSBmcC5uZXh0OworICAgICAgICAgbnAgOj0gZnAuYWxsLm5leHQ7CiAgICAgICBlbmQgaWY7CiAgICAgICAtLSAgVE9ETyBmcmVlKGZwKTsKICAgICAgIHJldHVybiBucDsKQEAgLTQ5Niw2NCArNDk0LDY0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UsIEZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bGxfV2luZG93KTsKICAgICAgICAgICAgIGJlZ2luCi0gICAgICAgICAgICAgICBuZXd3LndpbmQgOj0gZ2V0d2luZG93OwotICAgICAgICAgICAgICAgaWYgbmV3dy53aW5kID0gTnVsbF9XaW5kb3cgIHRoZW4KKyAgICAgICAgICAgICAgIG5ld3cuYWxsLndpbmQgOj0gZ2V0d2luZG93OworICAgICAgICAgICAgICAgaWYgbmV3dy5hbGwud2luZCA9IE51bGxfV2luZG93ICB0aGVuCiAgICAgICAgICAgICAgICAgICBleGl0OwogICAgICAgICAgICAgICAgICAgLS0gIHdhcyBnb3RvIGJyZWFrb3V0OyBoYSBoYSBoYQogICAgICAgICAgICAgICAgZWxzZQogCiAgICAgICAgICAgICAgICAgICBpZiBjdXJyZW50ID0gbnVsbCAgdGhlbgotICAgICAgICAgICAgICAgICAgICAgbmV3dy5uZXh0IDo9IG5ld3c7Ci0gICAgICAgICAgICAgICAgICAgICBuZXd3Lmxhc3QgOj0gbmV3dzsKKyAgICAgICAgICAgICAgICAgICAgIG5ld3cuYWxsLm5leHQgOj0gbmV3dzsKKyAgICAgICAgICAgICAgICAgICAgIG5ld3cuYWxsLmxhc3QgOj0gbmV3dzsKICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIG5ld3cubmV4dCA6PSBjdXJyZW50Lm5leHQ7Ci0gICAgICAgICAgICAgICAgICAgICBuZXd3Lmxhc3QgOj0gY3VycmVudDsKLSAgICAgICAgICAgICAgICAgICAgIG5ld3cubGFzdC5uZXh0IDo9IG5ld3c7Ci0gICAgICAgICAgICAgICAgICAgICBuZXd3Lm5leHQubGFzdCA6PSBuZXd3OworICAgICAgICAgICAgICAgICAgICAgbmV3dy5hbGwubmV4dCA6PSBjdXJyZW50LmFsbC5uZXh0OworICAgICAgICAgICAgICAgICAgICAgbmV3dy5hbGwubGFzdCA6PSBjdXJyZW50OworICAgICAgICAgICAgICAgICAgICAgbmV3dy5hbGwubGFzdC5hbGwubmV4dCA6PSBuZXd3OworICAgICAgICAgICAgICAgICAgICAgbmV3dy5hbGwubmV4dC5hbGwubGFzdCA6PSBuZXd3OwogICAgICAgICAgICAgICAgICAgZW5kIGlmOwogICAgICAgICAgICAgICAgICAgY3VycmVudCA6PSBuZXd3OwogCi0gICAgICAgICAgICAgICAgICBTZXRfS2V5UGFkX01vZGUgKGN1cnJlbnQud2luZCwgVHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICBjdXJyZW50LmRvX2tleXBhZCA6PSBIYXZlS2V5UGFkIChjdXJyZW50LndpbmQpOwotICAgICAgICAgICAgICAgICAgY3VycmVudC5kb19zY3JvbGwgOj0gSGF2ZVNjcm9sbCAoY3VycmVudC53aW5kKTsKKyAgICAgICAgICAgICAgICAgIFNldF9LZXlQYWRfTW9kZSAoY3VycmVudC5hbGwud2luZCwgVHJ1ZSk7CisgICAgICAgICAgICAgICAgICBjdXJyZW50LmFsbC5kb19rZXlwYWQgOj0gSGF2ZUtleVBhZCAoY3VycmVudC5hbGwud2luZCk7CisgICAgICAgICAgICAgICAgICBjdXJyZW50LmFsbC5kb19zY3JvbGwgOj0gSGF2ZVNjcm9sbCAoY3VycmVudC5hbGwud2luZCk7CiAgICAgICAgICAgICAgICBlbmQgaWY7CiAgICAgICAgICAgICBlbmQ7CiAgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdOJykgbW9kIDE2IzIwIyAgPT4gLS0gIEN0cmwoJ04nKQogICAgICAgICAgICAgaWYgY3VycmVudCAvPSBudWxsIHRoZW4KLSAgICAgICAgICAgICAgIGN1cnJlbnQgOj0gY3VycmVudC5uZXh0OworICAgICAgICAgICAgICAgY3VycmVudCA6PSBjdXJyZW50LmFsbC5uZXh0OwogICAgICAgICAgICAgZW5kIGlmOwogICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnUCcpIG1vZCAxNiMyMCMgID0+IC0tICBDdHJsKCdQJykKICAgICAgICAgICAgIGlmIGN1cnJlbnQgLz0gbnVsbCB0aGVuCi0gICAgICAgICAgICAgICBjdXJyZW50IDo9IGN1cnJlbnQubGFzdDsKKyAgICAgICAgICAgICAgIGN1cnJlbnQgOj0gY3VycmVudC5hbGwubGFzdDsKICAgICAgICAgICAgIGVuZCBpZjsKICAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ0YnKSBtb2QgMTYjMjAjICA9PiAtLSAgQ3RybCgnRicpCi0gICAgICAgICAgICBpZiBjdXJyZW50IC89IG51bGwgYW5kIHRoZW4gSGF2ZVNjcm9sbCAoY3VycmVudC53aW5kKSB0aGVuCi0gICAgICAgICAgICAgICBTY3JvbGwgKGN1cnJlbnQud2luZCwgMSk7CisgICAgICAgICAgICBpZiBjdXJyZW50IC89IG51bGwgYW5kIHRoZW4gSGF2ZVNjcm9sbCAoY3VycmVudC5hbGwud2luZCkgdGhlbgorICAgICAgICAgICAgICAgU2Nyb2xsIChjdXJyZW50LmFsbC53aW5kLCAxKTsKICAgICAgICAgICAgIGVuZCBpZjsKICAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ0InKSBtb2QgMTYjMjAjICA9PiAtLSAgQ3RybCgnQicpCi0gICAgICAgICAgICBpZiBjdXJyZW50IC89IG51bGwgYW5kIHRoZW4gSGF2ZVNjcm9sbCAoY3VycmVudC53aW5kKSB0aGVuCisgICAgICAgICAgICBpZiBjdXJyZW50IC89IG51bGwgYW5kIHRoZW4gSGF2ZVNjcm9sbCAoY3VycmVudC5hbGwud2luZCkgdGhlbgogICAgICAgICAgICAgLS0gIFRoZSBDIHZlcnNpb24gb2YgU2Nyb2xsIG1heSByZXR1cm4gRVJSIHdoaWNoIGlzIGlnbm9yZWQKICAgICAgICAgICAgIC0tICB3ZSBuZWVkIHRvIGF2b2lkIHRoZSBleGNlcHRpb24KICAgICAgICAgICAgIC0tICB3aXRoIHRoZSAnYW5kIEhhdmVTY3JvbGwoY3VycmVudC53aW5kKScKLSAgICAgICAgICAgICAgIFNjcm9sbCAoY3VycmVudC53aW5kLCAtMSk7CisgICAgICAgICAgICAgICBTY3JvbGwgKGN1cnJlbnQuYWxsLndpbmQsIC0xKTsKICAgICAgICAgICAgIGVuZCBpZjsKICAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAoJ0snKSBtb2QgMTYjMjAjICA9PiAtLSAgQ3RybCgnSycpCiAgICAgICAgICAgICBpZiBjdXJyZW50IC89IG51bGwgdGhlbgotICAgICAgICAgICAgICAgY3VycmVudC5kb19rZXlwYWQgOj0gbm90IGN1cnJlbnQuZG9fa2V5cGFkOwotICAgICAgICAgICAgICAgU2V0X0tleVBhZF9Nb2RlIChjdXJyZW50LndpbmQsIGN1cnJlbnQuZG9fa2V5cGFkKTsKKyAgICAgICAgICAgICAgIGN1cnJlbnQuYWxsLmRvX2tleXBhZCA6PSBub3QgY3VycmVudC5hbGwuZG9fa2V5cGFkOworICAgICAgICAgICAgICAgU2V0X0tleVBhZF9Nb2RlIChjdXJyZW50LmFsbC53aW5kLCBjdXJyZW50LmFsbC5kb19rZXlwYWQpOwogICAgICAgICAgICAgZW5kIGlmOwogICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnUycpIG1vZCAxNiMyMCMgID0+IC0tICBDdHJsKCdTJykKICAgICAgICAgICAgIGlmIGN1cnJlbnQgLz0gbnVsbCB0aGVuCi0gICAgICAgICAgICAgICBjdXJyZW50LmRvX3Njcm9sbCA6PSBub3QgY3VycmVudC5kb19zY3JvbGw7Ci0gICAgICAgICAgICAgICBBbGxvd19TY3JvbGxpbmcgKGN1cnJlbnQud2luZCwgY3VycmVudC5kb19zY3JvbGwpOworICAgICAgICAgICAgICAgY3VycmVudC5hbGwuZG9fc2Nyb2xsIDo9IG5vdCBjdXJyZW50LmFsbC5kb19zY3JvbGw7CisgICAgICAgICAgICAgICBBbGxvd19TY3JvbGxpbmcgKGN1cnJlbnQuYWxsLndpbmQsIGN1cnJlbnQuYWxsLmRvX3Njcm9sbCk7CiAgICAgICAgICAgICBlbmQgaWY7CiAgICAgICAgICB3aGVuIENoYXJhY3RlcidQb3MgKCdXJykgbW9kIDE2IzIwIyAgPT4gLS0gIEN0cmwoJ1cnKQotICAgICAgICAgICAgaWYgY3VycmVudCAvPSBjdXJyZW50Lm5leHQgdGhlbgorICAgICAgICAgICAgaWYgY3VycmVudCAvPSBjdXJyZW50LmFsbC5uZXh0IHRoZW4KICAgICAgICAgICAgICAgIENyZWF0ZSAoZiwgTmFtZSA9PiBkdW1wZmlsZSk7IC0tIFRPRE8gZXJyb3IgY2hlY2tpbmcKICAgICAgICAgICAgICAgIGlmIG5vdCBJc19PcGVuIChmKSB0aGVuCiAgICAgICAgICAgICAgICAgICByYWlzZSBDdXJzZXNfRXhjZXB0aW9uOwogICAgICAgICAgICAgICAgZW5kIGlmOwotICAgICAgICAgICAgICAgUHV0X1dpbmRvdyAoY3VycmVudC53aW5kLCBmKTsKKyAgICAgICAgICAgICAgIFB1dF9XaW5kb3cgKGN1cnJlbnQuYWxsLndpbmQsIGYpOwogICAgICAgICAgICAgICAgQ2xvc2UgKGYpOwogICAgICAgICAgICAgICAgY3VycmVudCA6PSBkZWxldGVfZnJhbWVkIChjdXJyZW50LCBUcnVlKTsKICAgICAgICAgICAgIGVuZCBpZjsKQEAgLTU2NSwxNSArNTYzLDE1IEBACiAgICAgICAgICAgICAgICBPcGVuIChmLCBNb2RlID0+IEluX0ZpbGUsIE5hbWUgPT4gZHVtcGZpbGUpOwogICAgICAgICAgICAgICAgbmV3dyA6PSBuZXcgRnJhbWUnKG51bGwsIG51bGwsIEZhbHNlLCBGYWxzZSwgTnVsbF9XaW5kb3cpOwogCi0gICAgICAgICAgICAgICBuZXd3Lm5leHQgOj0gY3VycmVudC5uZXh0OwotICAgICAgICAgICAgICAgbmV3dy5sYXN0IDo9IGN1cnJlbnQ7Ci0gICAgICAgICAgICAgICBuZXd3Lmxhc3QubmV4dCA6PSBuZXd3OwotICAgICAgICAgICAgICAgbmV3dy5uZXh0Lmxhc3QgOj0gbmV3dzsKKyAgICAgICAgICAgICAgIG5ld3cuYWxsLm5leHQgOj0gY3VycmVudC5hbGwubmV4dDsKKyAgICAgICAgICAgICAgIG5ld3cuYWxsLmxhc3QgOj0gY3VycmVudDsKKyAgICAgICAgICAgICAgIG5ld3cuYWxsLmxhc3QuYWxsLm5leHQgOj0gbmV3dzsKKyAgICAgICAgICAgICAgIG5ld3cuYWxsLm5leHQuYWxsLmxhc3QgOj0gbmV3dzsKIAotICAgICAgICAgICAgICAgbmV3dy53aW5kIDo9IEdldF9XaW5kb3cgKGYpOworICAgICAgICAgICAgICAgbmV3dy5hbGwud2luZCA6PSBHZXRfV2luZG93IChmKTsKICAgICAgICAgICAgICAgIENsb3NlIChmKTsKIAotICAgICAgICAgICAgICAgUmVmcmVzaCAobmV3dy53aW5kKTsKKyAgICAgICAgICAgICAgIFJlZnJlc2ggKG5ld3cuYWxsLndpbmQpOwogICAgICAgICAgICAgZW5kOwogICAgICAgICAgd2hlbiBDaGFyYWN0ZXInUG9zICgnWCcpIG1vZCAxNiMyMCMgPT4gLS0gIEN0cmwoJ1gnKQogICAgICAgICAgICAgaWYgY3VycmVudCAvPSBudWxsIHRoZW4KQEAgLTU4OSw3ICs1ODcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAidG8gbWFyayBuZXcgY29ybmVyIik7CiAgICAgICAgICAgICAgICAgICBSZWZyZXNoOwogCi0gICAgICAgICAgICAgICAgICBHZXRfV2luZG93X1Bvc2l0aW9uIChjdXJyZW50LndpbmQsIHVsLnksIHVsLngpOworICAgICAgICAgICAgICAgICAgR2V0X1dpbmRvd19Qb3NpdGlvbiAoY3VycmVudC5hbGwud2luZCwgdWwueSwgdWwueCk7CiAKICAgICAgICAgICAgICAgICAgIHNlbGVjdGNlbGwgKHVsLnksIHVsLngsIExpbmVzIC0gQm90bGluZXMgLSAyLCBDb2x1bW5zIC0gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCwgdG1wYm9vbCk7CkBAIC01OTcsNDMgKzU5NSw0MyBAQAogICAgICAgICAgICAgICAgICAgICAgLS0gIHRoZSBDIHZlcnNpb24gaGFkIGEgZ290by4gSSByZWZ1c2UgZ290b3MuCiAgICAgICAgICAgICAgICAgICAgICBCZWVwOwogICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgR2V0X1NpemUgKGN1cnJlbnQud2luZCwgbHIueSwgbHIueCk7CisgICAgICAgICAgICAgICAgICAgICBHZXRfU2l6ZSAoY3VycmVudC5hbGwud2luZCwgbHIueSwgbHIueCk7CiAgICAgICAgICAgICAgICAgICAgICBsci55IDo9IGxyLnkgKyB1bC55IC0gMTsKICAgICAgICAgICAgICAgICAgICAgIGxyLnggOj0gbHIueCArIHVsLnggLSAxOwogICAgICAgICAgICAgICAgICAgICAgT3V0ZXJib3ggKHVsLCBsciwgRmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgUmVmcmVzaF9XaXRob3V0X1VwZGF0ZTsKIAotICAgICAgICAgICAgICAgICAgICAgR2V0X1NpemUgKGN1cnJlbnQud2luZCwgbXksIG14KTsKKyAgICAgICAgICAgICAgICAgICAgIEdldF9TaXplIChjdXJyZW50LmFsbC53aW5kLCBteSwgbXgpOwogICAgICAgICAgICAgICAgICAgICAgaWYgbXkgPiB0bXAueSAtIHVsLnkgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgR2V0X0N1cnNvcl9Qb3NpdGlvbiAoY3VycmVudC53aW5kLCBsci55LCBsci54KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChjdXJyZW50LndpbmQsIHRtcC55IC0gdWwueSArIDEsIDApOwotICAgICAgICAgICAgICAgICAgICAgICAgQ2xlYXJfVG9fRW5kX09mX1NjcmVlbiAoY3VycmVudC53aW5kKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChjdXJyZW50LndpbmQsIGxyLnksIGxyLngpOworICAgICAgICAgICAgICAgICAgICAgICAgR2V0X0N1cnNvcl9Qb3NpdGlvbiAoY3VycmVudC5hbGwud2luZCwgbHIueSwgbHIueCk7CisgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlX0N1cnNvciAoY3VycmVudC5hbGwud2luZCwgdG1wLnkgLSB1bC55ICsgMSwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBDbGVhcl9Ub19FbmRfT2ZfU2NyZWVuIChjdXJyZW50LmFsbC53aW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChjdXJyZW50LmFsbC53aW5kLCBsci55LCBsci54KTsKICAgICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKICAgICAgICAgICAgICAgICAgICAgIGlmIG14ID4gdG1wLnggLSB1bC54IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIDAgLi4gbXkgLSAxIGxvb3AKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChjdXJyZW50LndpbmQsIGksIHRtcC54IC0gdWwueCArIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xlYXJfVG9fRW5kX09mX0xpbmUgKGN1cnJlbnQud2luZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlX0N1cnNvciAoY3VycmVudC5hbGwud2luZCwgaSwgdG1wLnggLSB1bC54ICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGVhcl9Ub19FbmRfT2ZfTGluZSAoY3VycmVudC5hbGwud2luZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgbG9vcDsKICAgICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKLSAgICAgICAgICAgICAgICAgICAgIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUgKGN1cnJlbnQud2luZCk7CisgICAgICAgICAgICAgICAgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlIChjdXJyZW50LmFsbC53aW5kKTsKIAogICAgICAgICAgICAgICAgICAgICAgbHIgOj0gdG1wOwogICAgICAgICAgICAgICAgICAgICAgLS0gIFRoZSBDIHZlcnNpb24gcGFzc2VzIGludmFsaWQgYXJncyB0byByZXNpemUKICAgICAgICAgICAgICAgICAgICAgIC0tICB3aGljaCByZXR1cm5zIGFuIEVSUi4gRm9yIEFkYSB3ZSBhdm9pZCB0aGUgZXhjZXB0aW9uLgogICAgICAgICAgICAgICAgICAgICAgaWYgbHIueSAvPSB1bC55IGFuZCBsci54IC89IHVsLnggdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgUmVzaXplIChjdXJyZW50LndpbmQsIGxyLnkgLSB1bC55ICsgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlc2l6ZSAoY3VycmVudC5hbGwud2luZCwgbHIueSAtIHVsLnkgKyAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsci54IC0gdWwueCArIDApOwogICAgICAgICAgICAgICAgICAgICAgZW5kIGlmOwogCi0gICAgICAgICAgICAgICAgICAgICBHZXRfV2luZG93X1Bvc2l0aW9uIChjdXJyZW50LndpbmQsIHVsLnksIHVsLngpOwotICAgICAgICAgICAgICAgICAgICAgR2V0X1NpemUgKGN1cnJlbnQud2luZCwgbHIueSwgbHIueCk7CisgICAgICAgICAgICAgICAgICAgICBHZXRfV2luZG93X1Bvc2l0aW9uIChjdXJyZW50LmFsbC53aW5kLCB1bC55LCB1bC54KTsKKyAgICAgICAgICAgICAgICAgICAgIEdldF9TaXplIChjdXJyZW50LmFsbC53aW5kLCBsci55LCBsci54KTsKICAgICAgICAgICAgICAgICAgICAgIGxyLnkgOj0gbHIueSArIHVsLnkgLSAxOwogICAgICAgICAgICAgICAgICAgICAgbHIueCA6PSBsci54ICsgdWwueCAtIDE7CiAgICAgICAgICAgICAgICAgICAgICBPdXRlcmJveCAodWwsIGxyLCBUcnVlKTsKICAgICAgICAgICAgICAgICAgICAgIFJlZnJlc2hfV2l0aG91dF9VcGRhdGU7CiAKLSAgICAgICAgICAgICAgICAgICAgIFJlZnJlc2hfV2l0aG91dF9VcGRhdGUgKGN1cnJlbnQud2luZCk7CisgICAgICAgICAgICAgICAgICAgICBSZWZyZXNoX1dpdGhvdXRfVXBkYXRlIChjdXJyZW50LmFsbC53aW5kKTsKICAgICAgICAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChMaW5lID0+IDAsIENvbHVtbiA9PiAwKTsKICAgICAgICAgICAgICAgICAgICAgIENsZWFyX1RvX0VuZF9PZl9MaW5lOwogICAgICAgICAgICAgICAgICAgICAgVXBkYXRlX1NjcmVlbjsKQEAgLTY0OSwzMCArNjQ3LDMwIEBACiAgICAgICAgICAgICAgICBSZWZyZXNoOwogICAgICAgICAgICAgZW5kOwogICAgICAgICAgd2hlbiBLZXlfQ3Vyc29yX1VwID0+Ci0gICAgICAgICAgICBuZXd3aW5fbW92ZSAoY3VycmVudC53aW5kLCAtMSwgMCk7CisgICAgICAgICAgICBuZXd3aW5fbW92ZSAoY3VycmVudC5hbGwud2luZCwgLTEsIDApOwogICAgICAgICAgd2hlbiBLZXlfQ3Vyc29yX0Rvd24gID0+Ci0gICAgICAgICAgICBuZXd3aW5fbW92ZSAoY3VycmVudC53aW5kLCAxLCAwKTsKKyAgICAgICAgICAgIG5ld3dpbl9tb3ZlIChjdXJyZW50LmFsbC53aW5kLCAxLCAwKTsKICAgICAgICAgIHdoZW4gS2V5X0N1cnNvcl9MZWZ0ICA9PgotICAgICAgICAgICAgbmV3d2luX21vdmUgKGN1cnJlbnQud2luZCwgMCwgLTEpOworICAgICAgICAgICAgbmV3d2luX21vdmUgKGN1cnJlbnQuYWxsLndpbmQsIDAsIC0xKTsKICAgICAgICAgIHdoZW4gS2V5X0N1cnNvcl9SaWdodCAgPT4KLSAgICAgICAgICAgIG5ld3dpbl9tb3ZlIChjdXJyZW50LndpbmQsIDAsIDEpOworICAgICAgICAgICAgbmV3d2luX21vdmUgKGN1cnJlbnQuYWxsLndpbmQsIDAsIDEpOwogICAgICAgICAgd2hlbiBLZXlfQmFja3NwYWNlIHwgS2V5X0RlbGV0ZV9DaGFyICA9PgogICAgICAgICAgICAgZGVjbGFyZQogICAgICAgICAgICAgICAgeSA6IExpbmVfUG9zaXRpb247CiAgICAgICAgICAgICAgICB4IDogQ29sdW1uX1Bvc2l0aW9uOwogICAgICAgICAgICAgICAgdG1wIDogTGluZV9Qb3NpdGlvbjsKICAgICAgICAgICAgIGJlZ2luCi0gICAgICAgICAgICAgICBHZXRfQ3Vyc29yX1Bvc2l0aW9uIChjdXJyZW50LndpbmQsIHksIHgpOworICAgICAgICAgICAgICAgR2V0X0N1cnNvcl9Qb3NpdGlvbiAoY3VycmVudC5hbGwud2luZCwgeSwgeCk7CiAgICAgICAgICAgICAgICAtLSAgeCA6PSB4IC0gMTsKICAgICAgICAgICAgICAgIC0tICBJIGdvdCB0cmlja2VkIGJ5IHRoZSAtMSA9IE1heF9OYXR1cmFsIC0gMSByZXN1bHQKICAgICAgICAgICAgICAgIC0tICB5IDo9IHkgLSAxOwogICAgICAgICAgICAgICAgaWYgbm90ICh4ID0gMCBhbmQgeSA9IDApIHRoZW4KICAgICAgICAgICAgICAgICAgIGlmIHggPSAwIHRoZW4KICAgICAgICAgICAgICAgICAgICAgIHkgOj0geSAtIDE7Ci0gICAgICAgICAgICAgICAgICAgICBHZXRfU2l6ZSAoY3VycmVudC53aW5kLCB0bXAsIHgpOworICAgICAgICAgICAgICAgICAgICAgR2V0X1NpemUgKGN1cnJlbnQuYWxsLndpbmQsIHRtcCwgeCk7CiAgICAgICAgICAgICAgICAgICBlbmQgaWY7CiAgICAgICAgICAgICAgICAgICB4IDo9IHggLSAxOwotICAgICAgICAgICAgICAgICAgRGVsZXRlX0NoYXJhY3RlciAoY3VycmVudC53aW5kLCB5LCB4KTsKKyAgICAgICAgICAgICAgICAgIERlbGV0ZV9DaGFyYWN0ZXIgKGN1cnJlbnQuYWxsLndpbmQsIHksIHgpOwogICAgICAgICAgICAgICAgZW5kIGlmOwogICAgICAgICAgICAgZW5kOwogICAgICAgICAgd2hlbiBvdGhlcnMgPT4KQEAgLTY4MCw3ICs2NzgsNyBAQAogICAgICAgICAgICAgaWYgY3VycmVudCAvPSBudWxsIHRoZW4KICAgICAgICAgICAgICAgIGRlY2xhcmUKICAgICAgICAgICAgICAgIGJlZ2luCi0gICAgICAgICAgICAgICAgICBBZGQgKGN1cnJlbnQud2luZCwgQ2ggPT4gQ29kZV9Ub19DaGFyIChjKSk7CisgICAgICAgICAgICAgICAgICBBZGQgKGN1cnJlbnQuYWxsLndpbmQsIENoID0+IENvZGVfVG9fQ2hhciAoYykpOwogICAgICAgICAgICAgICAgZXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICB3aGVuIEN1cnNlc19FeGNlcHRpb24gPT4gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgIC0tICB0aGlzIGhhcHBlbnMgaWYgd2UgYXJlIGF0IHRoZQpAQCAtNjkwLDkgKzY4OCw5IEBACiAgICAgICAgICAgICAgICBCZWVwOwogICAgICAgICAgICAgZW5kIGlmOwogICAgICAgZW5kIGNhc2U7Ci0gICAgICBuZXd3aW5fcmVwb3J0IChjdXJyZW50LndpbmQpOworICAgICAgbmV3d2luX3JlcG9ydCAoY3VycmVudC5hbGwud2luZCk7CiAgICAgICBpZiBjdXJyZW50IC89IG51bGwgdGhlbgotICAgICAgICAgdXNlc2NyIDo9IGN1cnJlbnQud2luZDsKKyAgICAgICAgIHVzZXNjciA6PSBjdXJyZW50LmFsbC53aW5kOwogICAgICAgZWxzZQogICAgICAgICAgdXNlc2NyIDo9IFN0YW5kYXJkX1dpbmRvdzsKICAgICAgIGVuZCBpZjsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItY29sb3JfZWRpdC5hZGIgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWNvbG9yX2VkaXQuYWRiCmluZGV4IGE2YTM1ZGUuLjA5OGY5OGQgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItY29sb3JfZWRpdC5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1jb2xvcl9lZGl0LmFkYgpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw4ICszNSw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAogLS0gIFZlcnNpb24gQ29udHJvbAotLS0gICRSZXZpc2lvbjogMS41ICQKLS0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDoyNDo0MCAkCistLSAgJFJldmlzaW9uOiAxLjYgJAorLS0gICREYXRlOiAyMDA5LzEyLzI2IDE3OjM4OjU4ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBuY3Vyc2VzMi51dGlsOyB1c2UgbmN1cnNlczIudXRpbDsKQEAgLTE3MSw3ICsxNzEsNyBAQAogICAgICAgICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzOwogICAgICAgICAgZW5kIGlmOwogICAgICAgICAgU2V0X0NoYXJhY3Rlcl9BdHRyaWJ1dGVzOwotICAgICAgICAgQWRkIChjaCA9PiAnKScpOworICAgICAgICAgQWRkIChDaCA9PiAnKScpOwogICAgICAgZW5kIGxvb3A7CiAgICAgICBBZGQgKExpbmUgPT4gTGluZV9Qb3NpdGlvbiAoTnVtYmVyX09mX0NvbG9ycyArIDMpLCBDb2x1bW4gPT4gMCwKICAgICAgICAgICAgU3RyID0+ICJVc2UgdXAvZG93biB0byBzZWxlY3QgYSBjb2xvciwgbGVmdC9yaWdodCB0byBjaGFuZ2UgIiAmCmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWRlbW9fZm9ybXMuYWRiIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX2Zvcm1zLmFkYgppbmRleCA3MTM3YWEwLi4wZWVlYjVlIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWRlbW9fZm9ybXMuYWRiCisrKyBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZGVtb19mb3Jtcy5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDExLDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuNSAkCi0tLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MjQ6NDAgJAorLS0gICRSZXZpc2lvbjogMS43ICQKKy0tICAkRGF0ZTogMjAxNC8wOS8xMyAxOToxMDoxOCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7CkBAIC0zMTcsOCArMzE3LDkgQEAKICAgIGZ1bmN0aW9uIG15X2Zvcm1fZHJpdmVyIChmIDogRm9ybTsgYyA6IEtleV9Db2RlKSByZXR1cm4gQm9vbGVhbiBpcwogICAgICAgZmxhZyA6IGNvbnN0YW50IERyaXZlcl9SZXN1bHQgOj0gRHJpdmVyIChmLCBGX1ZhbGlkYXRlX0ZpZWxkKTsKICAgIGJlZ2luCi0gICAgICBpZiBjID0gRm9ybV9SZXF1ZXN0X0NvZGUnTGFzdCArIDEKLSAgICAgICAgYW5kIGZsYWcgPSBGb3JtX09rIHRoZW4KKyAgICAgIGlmIGMgPSBGb3JtX1JlcXVlc3RfQ29kZSdMYXN0ICsgMSBhbmQKKyAgICAgICAgIGZsYWcgPSBGb3JtX09rCisgICAgICB0aGVuCiAgICAgICAgICByZXR1cm4gVHJ1ZTsKICAgICAgIGVsc2UKICAgICAgICAgIEJlZXA7CkBAIC00NTEsMTkgKzQ1MiwxOSBAQAogICAgUmVmcmVzaDsKIAogICAgLS0gIGRlc2NyaWJlIHRoZSBmb3JtCi0gICBmICgxKSA6PSBtYWtlX2xhYmVsICgwLCAxNSwgIlNhbXBsZSBGb3JtIik7Ci0gICBmICgyKSA6PSBtYWtlX2xhYmVsICgyLCAwLCAiTGFzdCBOYW1lIik7Ci0gICBmICgzKSA6PSBtYWtlX2ZpZWxkICgzLCAwLCAxLCAxOCwgRmFsc2UpOwotICAgZiAoNCkgOj0gbWFrZV9sYWJlbCAoMiwgMjAsICJGaXJzdCBOYW1lIik7Ci0gICBmICg1KSA6PSBtYWtlX2ZpZWxkICgzLCAyMCwgMSwgMTIsIEZhbHNlKTsKLSAgIGYgKDYpIDo9IG1ha2VfbGFiZWwgKDIsIDM0LCAiTWlkZGxlIE5hbWUiKTsKLSAgIGYgKDcpIDo9IG1ha2VfZmllbGQgKDMsIDM0LCAxLCAxMiwgRmFsc2UpOwotICAgZiAoOCkgOj0gbWFrZV9sYWJlbCAoNSwgMCwgIkNvbW1lbnRzIik7Ci0gICBmICg5KSA6PSBtYWtlX2ZpZWxkICg2LCAwLCA0LCA0NiwgRmFsc2UpOwotICAgZiAoMTApIDo9IG1ha2VfbGFiZWwgKDUsIDIwLCAiUGFzc3dvcmQ6Iik7Ci0gICBmICgxMSkgOj0gbWFrZV9maWVsZCAoNSwgMzAsIDEsIDksIFRydWUpOwotICAgc2VjdXJlIDo9IGYgKDExKTsKLSAgIGYgKDEyKSA6PSBOdWxsX0ZpZWxkOworICAgZi5hbGwgKDEpIDo9IG1ha2VfbGFiZWwgKDAsIDE1LCAiU2FtcGxlIEZvcm0iKTsKKyAgIGYuYWxsICgyKSA6PSBtYWtlX2xhYmVsICgyLCAwLCAiTGFzdCBOYW1lIik7CisgICBmLmFsbCAoMykgOj0gbWFrZV9maWVsZCAoMywgMCwgMSwgMTgsIEZhbHNlKTsKKyAgIGYuYWxsICg0KSA6PSBtYWtlX2xhYmVsICgyLCAyMCwgIkZpcnN0IE5hbWUiKTsKKyAgIGYuYWxsICg1KSA6PSBtYWtlX2ZpZWxkICgzLCAyMCwgMSwgMTIsIEZhbHNlKTsKKyAgIGYuYWxsICg2KSA6PSBtYWtlX2xhYmVsICgyLCAzNCwgIk1pZGRsZSBOYW1lIik7CisgICBmLmFsbCAoNykgOj0gbWFrZV9maWVsZCAoMywgMzQsIDEsIDEyLCBGYWxzZSk7CisgICBmLmFsbCAoOCkgOj0gbWFrZV9sYWJlbCAoNSwgMCwgIkNvbW1lbnRzIik7CisgICBmLmFsbCAoOSkgOj0gbWFrZV9maWVsZCAoNiwgMCwgNCwgNDYsIEZhbHNlKTsKKyAgIGYuYWxsICgxMCkgOj0gbWFrZV9sYWJlbCAoNSwgMjAsICJQYXNzd29yZDoiKTsKKyAgIGYuYWxsICgxMSkgOj0gbWFrZV9maWVsZCAoNSwgMzAsIDEsIDksIFRydWUpOworICAgc2VjdXJlIDo9IGYuYWxsICgxMSk7CisgICBmLmFsbCAoMTIpIDo9IE51bGxfRmllbGQ7CiAKICAgIG15Zm9ybSA6PSBOZXdfRm9ybSAoZik7CiAKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZGVtb19wYWQuYWRiIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhZC5hZGIKaW5kZXggODYyYjhiNy4uMDYyZWM1MyAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhZC5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhZC5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDExLDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuNyAkCi0tLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDc6MDYgJAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICAkRGF0ZTogMjAxNC8wOS8xMyAxOToxMDoxOCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7CkBAIC0xMjEsOCArMTIxLDggQEAKICAgICAgICAgIHJldHZhbC5zZWNvbmRzIDo9IDA7CiAgICAgICAgICByZXR2YWwubWljcm9zZWNvbmRzIDo9IDA7CiAgICAgICBlbHNlCi0gICAgICAgICByZXR2YWwuc2Vjb25kcyA6PSBJbnRlZ2VyICh0LnR2X3NlYyk7Ci0gICAgICAgICByZXR2YWwubWljcm9zZWNvbmRzIDo9IEludGVnZXIgKHQudHZfdXNlYyk7CisgICAgICAgICByZXR2YWwuc2Vjb25kcyA6PSBJbnRlZ2VyICh0LmFsbC50dl9zZWMpOworICAgICAgICAgcmV0dmFsLm1pY3Jvc2Vjb25kcyA6PSBJbnRlZ2VyICh0LmFsbC50dl91c2VjKTsKICAgICAgIGVuZCBpZjsKICAgICAgIHJldHVybiByZXR2YWw7CiAgICBlbmQgZ2V0dGltZTsKQEAgLTQzNyw3ICs0MzcsOCBAQAogICAgICAgICAgICAgICAgLS0gIHBhbiByaWdodHdhcmRzCiAgICAgICAgICAgICAgICAtLSAgaWYgKGJhc2V4ICsgcG9ydHggLSAocHltYXggPiBwb3J0eSkgPCBweG1heCkKICAgICAgICAgICAgICAgIGlmIGJhc2V4ICsgcG9ydHggLQotICAgICAgICAgICAgICAgICAgIENvbHVtbl9Qb3NpdGlvbiAoZ3JlYXRlciAocHltYXgsIHBvcnR5KSkgPCBweG1heCB0aGVuCisgICAgICAgICAgICAgICAgICAgQ29sdW1uX1Bvc2l0aW9uIChncmVhdGVyIChweW1heCwgcG9ydHkpKSA8IHB4bWF4CisgICAgICAgICAgICAgICB0aGVuCiAgICAgICAgICAgICAgICAgICAtLSAgaWYgYmFzZXggKyBwb3J0eCAgPCBweG1heCBvcgogICAgICAgICAgICAgICAgICAgLS0gICAgICAocHltYXggPiBwb3J0eSBhbmQgYmFzZXggKyBwb3J0eCAtIDEgPCBweG1heCkgdGhlbgogICAgICAgICAgICAgICAgICAgYmFzZXggOj0gYmFzZXggKyAxOwpAQCAtNDU3LDcgKzQ1OCw4IEBACiAgICAgICAgICAgICAgICAtLSAgcGFuIGRvd253YXJkcwogICAgICAgICAgICAgICAgLS0gIHNhbWUgYXMgaWYgKGJhc2V5ICsgcG9ydHkgLSAocHhtYXggPiBwb3J0eCkgPCBweW1heCkKICAgICAgICAgICAgICAgIGlmIGJhc2V5ICsgcG9ydHkgLQotICAgICAgICAgICAgICAgICAgIExpbmVfUG9zaXRpb24gKGdyZWF0ZXIgKHB4bWF4LCBwb3J0eCkpIDwgcHltYXggdGhlbgorICAgICAgICAgICAgICAgICAgIExpbmVfUG9zaXRpb24gKGdyZWF0ZXIgKHB4bWF4LCBwb3J0eCkpIDwgcHltYXgKKyAgICAgICAgICAgICAgIHRoZW4KICAgICAgICAgICAgICAgICAgIC0tICBpZiAoYmFzZXkgKyBwb3J0eSAgPCBweW1heCkgb3IKICAgICAgICAgICAgICAgICAgIC0tICAgICAgKHB4bWF4ID4gcG9ydHggYW5kIGJhc2V5ICsgcG9ydHkgLSAxIDwgcHltYXgpIHRoZW4KICAgICAgICAgICAgICAgICAgIGJhc2V5IDo9IGJhc2V5ICsgMTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZGVtb19wYW5lbHMuYWRiIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhbmVscy5hZGIKaW5kZXggZDI1NThlZC4uOTY5M2UxYSAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhbmVscy5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1kZW1vX3BhbmVscy5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA4LDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuNiAkCi0tLSAgJERhdGU6IDIwMDgvMDgvMzAgMjM6MzU6MDEgJAorLS0gICRSZXZpc2lvbjogMS43ICQKKy0tICAkRGF0ZTogMjAxMS8wMy8yMyAwMDo0NDoxMiAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7CkBAIC0xMzksNyArMTM5LDcgQEAKIAogICAgcHJvY2VkdXJlIGZpbGxfcGFuZWwgKHBhbiA6IFBhbmVsKSBpcwogICAgICAgd2luIDogY29uc3RhbnQgV2luZG93IDo9IFBhbmVsX1dpbmRvdyAocGFuKTsKLSAgICAgIG51bSA6IGNvbnN0YW50IENoYXJhY3RlciA6PSBHZXRfVXNlcl9EYXRhIChwYW4pICgyKTsKKyAgICAgIG51bSA6IGNvbnN0YW50IENoYXJhY3RlciA6PSBHZXRfVXNlcl9EYXRhIChwYW4pLmFsbCAoMik7CiAgICAgICB0bXA2IDogU3RyaW5nICgxIC4uIDYpIDo9ICItcGFueC0iOwogICAgICAgbWF4eSA6IExpbmVfQ291bnQ7CiAgICAgICBtYXh4IDogQ29sdW1uX0NvdW50OwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZW5lcmljcHV0cy5hZGIgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdlbmVyaWNwdXRzLmFkYgppbmRleCA2Y2E2NTgzLi44MjlkMDhkIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdlbmVyaWNwdXRzLmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdlbmVyaWNwdXRzLmFkYgpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDgsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw4ICszNSw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAogLS0gIFZlcnNpb24gQ29udHJvbAotLS0gICRSZXZpc2lvbjogMS4zICQKLS0tICAkRGF0ZTogMjAwOC8wNy8yNiAxODo0NjoxOCAkCistLSAgJFJldmlzaW9uOiAxLjQgJAorLS0gICREYXRlOiAyMDA5LzEyLzI2IDE3OjM4OjU4ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKQEAgLTQ0LDkgKzQ0LDkgQEAKIAogcGFja2FnZSBib2R5IG5jdXJzZXMyLmdlbmVyaWNQdXRzIGlzCiAKLSAgIHByb2NlZHVyZSBteUdldCAoV2luIDogaW4gIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICBwcm9jZWR1cmUgbXlHZXQgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CiAgICAgICAgICAgICAgICAgICAgIFN0ciA6IG91dCBCUy5Cb3VuZGVkX1N0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgTGVuIDogaW4gIEludGVnZXIgOj0gLTEpCisgICAgICAgICAgICAgICAgICAgIExlbiA6IEludGVnZXIgOj0gLTEpCiAgICBpcwogICAgICAgZnVuY3Rpb24gV2dldG5zdHIgKFdpbiA6IFdpbmRvdzsKICAgICAgICAgICAgICAgICAgICAgICAgICBTdHIgOiBjaGFyX2FycmF5OwpAQCAtNzQsNyArNzQsNyBAQAogCiAgICBwcm9jZWR1cmUgbXlQdXQgKFN0ciAgOiBvdXQgQlMuQm91bmRlZF9TdHJpbmc7CiAgICAgICAgICAgICAgICAgICAgIGkgICAgOiBJbnRlZ2VyOwotICAgICAgICAgICAgICAgICAgICBCYXNlIDogaW4gICAgIE51bWJlcl9CYXNlIDo9IDEwKSBpcworICAgICAgICAgICAgICAgICAgICBCYXNlIDogTnVtYmVyX0Jhc2UgOj0gMTApIGlzCiAgICAgICBwYWNrYWdlIEludF9JTyBpcyBuZXcgSW50ZWdlcl9JTyAoSW50ZWdlcik7IHVzZSBJbnRfSU87CiAgICAgICB0bXAgOiBTdHJpbmcgKDEgLi4gQlMuTWF4X0xlbmd0aCk7CiAgICBiZWdpbgpAQCAtODksNyArODksNyBAQAogICAgZW5kIG15QWRkOwogCiAgICAtLSAgZnJvbSBuY3Vyc2VzLWF1eAotICAgcHJvY2VkdXJlIEZpbGxfU3RyaW5nIChDcCAgOiBpbiAgY2hhcnNfcHRyOworICAgcHJvY2VkdXJlIEZpbGxfU3RyaW5nIChDcCAgOiBjaGFyc19wdHI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ciA6IG91dCBCUy5Cb3VuZGVkX1N0cmluZykKICAgIGlzCiAgICAgICAtLSAgRmlsbCB0aGUgc3RyaW5nIHdpdGggdGhlIGNoYXJhY3RlcnMgcmVmZXJlbmNlZCBieSB0aGUKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2VuZXJpY3B1dHMuYWRzIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZW5lcmljcHV0cy5hZHMKaW5kZXggMTYxNGExMS4uYWNjYzNjYyAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZW5lcmljcHV0cy5hZHMKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZW5lcmljcHV0cy5hZHMKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDIwMDAsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuMiAkCi0tLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MjQ6NDAgJAorLS0gICRSZXZpc2lvbjogMS4zICQKKy0tICAkRGF0ZTogMjAwOS8xMi8yNiAxNzozODo1OCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNTYsMTcgKzU2LDE3IEBACiAgICAgIEFkYS5TdHJpbmdzLkJvdW5kZWQuR2VuZXJpY19Cb3VuZGVkX0xlbmd0aCAoTWF4KTsKICAgIHVzZSBCUzsKIAotICAgcHJvY2VkdXJlIG15R2V0IChXaW4gOiBpbiAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5XaW5kb3cKLSAgICAgICAgICAgICAgICAgICAgICA6PSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlN0YW5kYXJkX1dpbmRvdzsKKyAgIHByb2NlZHVyZSBteUdldCAoV2luIDogVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5XaW5kb3cKKyAgICAgICAgICAgICAgICAgICAgICAgOj0gVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5TdGFuZGFyZF9XaW5kb3c7CiAgICAgICAgICAgICAgICAgICAgIFN0ciA6IG91dCBCUy5Cb3VuZGVkX1N0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgTGVuIDogaW4gIEludGVnZXIgOj0gLTEpOworICAgICAgICAgICAgICAgICAgICBMZW4gOiAgSW50ZWdlciA6PSAtMSk7CiAKLSAgIHByb2NlZHVyZSBteVB1dCAoU3RyIDogb3V0IEJTLkJvdW5kZWRfU3RyaW5nOwotICAgICAgICAgICAgICAgICAgICBpIDogSW50ZWdlcjsKLSAgICAgICAgICAgICAgICAgICAgQmFzZSA6IGluIE51bWJlcl9CYXNlIDo9IDEwKTsKKyAgIHByb2NlZHVyZSBteVB1dCAoU3RyICA6IG91dCBCUy5Cb3VuZGVkX1N0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgaSAgICA6IEludGVnZXI7CisgICAgICAgICAgICAgICAgICAgIEJhc2UgOiBOdW1iZXJfQmFzZSA6PSAxMCk7CiAgICAtLSAgdGhlIGRlZmF1bHQgc2hvdWxkIGJlIEFkYS5UZXh0X0lPLkludGVnZXJfSU8uRGVmYXVsdF9CYXNlCiAgICAtLSAgYnV0IERlZmF1bHRfQmFzZSBpcyBoaWRkZW4gaW4gdGhlIGdlbmVyaWMgc28gZG9lc24ndCBleGlzdCEKICAgIHByb2NlZHVyZSBteUFkZCAoU3RyIDogQlMuQm91bmRlZF9TdHJpbmcpOwogCi0gICBwcm9jZWR1cmUgRmlsbF9TdHJpbmcgKENwICA6IGluICBjaGFyc19wdHI7IFN0ciA6IG91dCBCUy5Cb3VuZGVkX1N0cmluZyk7CisgICBwcm9jZWR1cmUgRmlsbF9TdHJpbmcgKENwIDogY2hhcnNfcHRyOyBTdHIgOiBvdXQgQlMuQm91bmRlZF9TdHJpbmcpOwogZW5kIG5jdXJzZXMyLmdlbmVyaWNQdXRzOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRjaF90ZXN0LmFkYiBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2V0Y2hfdGVzdC5hZGIKaW5kZXggMTcyMzEyYy4uOGYwMjBlNyAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRjaF90ZXN0LmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdldGNoX3Rlc3QuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOSwyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDggKzM1LDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjcgJAotLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ2OjU4ICQKKy0tICAkUmV2aXNpb246IDEuOSAkCistLSAgJERhdGU6IDIwMTQvMDkvMTMgMTk6MTA6MTggJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQ2hhcmFjdGVyIGlucHV0IHRlc3QKQEAgLTIwNSwxMyArMjA1LDE1IEBACiAgICAgICAgICAgICAgICBBZGQgKFN0ciA9PiAiIEkgc2F3ICciKTsKICAgICAgICAgICAgICAgIG15QWRkIChTdHIgPT4gYm91bmRlZGJ1Zik7CiAgICAgICAgICAgICAgICBBZGQgKFN0ciA9PiAiJy4iKTsKLSAgICAgICAgICAgICAgIEFkZCAoY2ggPT4gbmV3bCk7CisgICAgICAgICAgICAgICBBZGQgKENoID0+IG5ld2wpOwogICAgICAgICAgICAgZW5kIGlmOwogICAgICAgICAgZW5kOwogICAgICAgZWxzaWYgYyA9IENoYXJhY3RlcidQb3MgKCdzJykgdGhlbgogICAgICAgICAgU2hlbGxPdXQgKFRydWUpOwotICAgICAgZWxzaWYgYyA9IENoYXJhY3RlcidQb3MgKCd4Jykgb3IgYyA9IENoYXJhY3RlcidQb3MgKCdxJykgb3IKLSAgICAgICAgKGMgPSBLZXlfTm9uZSBhbmQgYmxvY2tmbGFnID0gQmxvY2tpbmcpIHRoZW4KKyAgICAgIGVsc2lmIGMgPSBDaGFyYWN0ZXInUG9zICgneCcpIG9yCisgICAgICAgICAgICBjID0gQ2hhcmFjdGVyJ1BvcyAoJ3EnKSBvcgorICAgICAgICAgICAoYyA9IEtleV9Ob25lIGFuZCBibG9ja2ZsYWcgPSBCbG9ja2luZykKKyAgICAgIHRoZW4KICAgICAgICAgIGV4aXQ7CiAgICAgICBlbHNpZiBjID0gQ2hhcmFjdGVyJ1BvcyAoJz8nKSB0aGVuCiAgICAgICAgICBBZGQgKFN0ciA9PiAiVHlwZSBhbnkga2V5IHRvIHNlZSBpdHMga2V5cGFkIHZhbHVlLiAgQWxzbzoiKTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2V0b3B0LmFkYiBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItZ2V0b3B0LmFkYgppbmRleCAyMzhjNDM5Li4yOWYxZmVlIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLWdldG9wdC5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1nZXRvcHQuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOCwyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDggKzM1LDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjcgJAotLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ2OjQ0ICQKKy0tICAkUmV2aXNpb246IDEuOCAkCistLSAgJERhdGU6IDIwMTEvMDMvMTkgMTI6MDk6NTEgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQSBzaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlICBHTlUgZ2V0b3B0IGZ1bmN0aW9uCkBAIC01Niw3ICs1Niw3IEBACiAgICAtLSAgYWxzbyB0aGUgdXNlciBpcyBub3QgYWxsb3dlZCB0byBtb2RpZnkgYXJndiBvciBhcmdjCiAgICAtLSAgRG9pbmcgc28gaXMgRXJyb25lb3VzIGV4ZWN1dGlvbi4KIAotICAgLS0gIGxvbmdvcHRpb25zIGFyZSBub3QgaGFuZGxlZC4KKyAgIC0tICBsb25nIG9wdGlvbnMgYXJlIG5vdCBoYW5kbGVkLgogCiAgICBwcm9jZWR1cmUgUWdldG9wdCAocmV0dmFsIDogb3V0IEludGVnZXI7CiAgICAgICAgICAgICAgICAgICAgICAgYXJnYyA6IEludGVnZXI7CkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgaWdub3JlZCBmb3IgbmN1cnNlcywgbXVzdCBiZSBpbml0aWFsaXplZCB0byAxIGJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgdGhlIGNhbGxlcgogICAgICAgICAgICAgICAgICAgICAgIE9wdGFyZyA6IG91dCBzdHJpbmdhCi0gICAgICAgICAgICAgICAgICAgICAgICAtLSAgYSBnYXJiYWdlIGNvbGVjdG9yIHdvdWxkIGJlIHVzZWZ1bCBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgLS0gIGEgZ2FyYmFnZSBjb2xsZWN0b3Igd291bGQgYmUgdXNlZnVsIGhlcmUuCiAgICAgICAgICAgICAgICAgICAgICApIGlzCiAKICAgICAgIHBhY2thZ2UgQlMgaXMgbmV3IEFkYS5TdHJpbmdzLkJvdW5kZWQuR2VuZXJpY19Cb3VuZGVkX0xlbmd0aCAoMjAwKTsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItbWVudV90ZXN0LmFkYiBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItbWVudV90ZXN0LmFkYgppbmRleCBhNGM0ODA3Li5iY2U5NzgyIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLW1lbnVfdGVzdC5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1tZW51X3Rlc3QuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiwyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDggKzM1LDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogRXVnZW5lIFYuIE1lbGFyYWdubyA8YWxkb21lbEBpeC5uZXRjb20uY29tPiAyMDAwCiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjYgJAotLS0gICREYXRlOiAyMDA2LzA2LzI1IDE0OjI0OjQwICQKKy0tICAkUmV2aXNpb246IDEuOCAkCistLSAgJERhdGU6IDIwMTEvMDMvMjMgMDA6Mzk6MjggJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIG5jdXJzZXMyLnV0aWw7IHVzZSBuY3Vyc2VzMi51dGlsOwpAQCAtNDYsMTAgKzQ2LDEwIEBACiB3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuTW91c2U7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLk1vdXNlOwogCiBwcm9jZWR1cmUgbmN1cnNlczIubWVudV90ZXN0IGlzCi0gICBmdW5jdGlvbiBtZW51X3ZpcnR1YWxpemUgKGMgOiBLZXlfQ29kZSkgcmV0dXJuIE1lbnVfUmVxdWVzdF9Db2RlOworICAgZnVuY3Rpb24gbWVudV92aXJ0dWFsaXplIChjIDogS2V5X0NvZGUpIHJldHVybiBLZXlfQ29kZTsKICAgIHByb2NlZHVyZSB4QWRkIChsIDogTGluZV9Qb3NpdGlvbjsgYyA6IENvbHVtbl9Qb3NpdGlvbjsgcyA6IFN0cmluZyk7CiAKLSAgIGZ1bmN0aW9uIG1lbnVfdmlydHVhbGl6ZSAoYyA6IEtleV9Db2RlKSByZXR1cm4gTWVudV9SZXF1ZXN0X0NvZGUgaXMKKyAgIGZ1bmN0aW9uIG1lbnVfdmlydHVhbGl6ZSAoYyA6IEtleV9Db2RlKSByZXR1cm4gS2V5X0NvZGUgaXMKICAgIGJlZ2luCiAgICAgICBjYXNlIGMgaXMKICAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAobmV3bCkgfCBLZXlfRXhpdCA9PgpAQCAtMTEwLDcgKzExMCw3IEBACiAgICBjMSA6IEtleV9Db2RlOwogCiAgICBjIDogRHJpdmVyX1Jlc3VsdDsKLSAgIHIgOiBNZW51X1JlcXVlc3RfQ29kZTsKKyAgIHIgOiBLZXlfQ29kZTsKIGJlZ2luCiAgICB0bXAgOj0gU3RhcnRfTW91c2U7CiAgICB4QWRkICgwLCAwLCAiVGhpcyBpcyB0aGUgbWVudSB0ZXN0OiIpOwpAQCAtMTIxLDkgKzEyMSw5IEBACiAgICBSZWZyZXNoOwogCiAgICBmb3IgaSBpbiBhbmltYWxzJ1JhbmdlIGxvb3AKLSAgICAgIGl0ZW1zX2EgKGkpIDo9IE5ld19JdGVtIChhbmltYWxzIChpKS5hbGwpOworICAgICAgaXRlbXNfYS5hbGwgKGkpIDo9IE5ld19JdGVtIChhbmltYWxzIChpKS5hbGwpOwogICAgZW5kIGxvb3A7Ci0gICBpdGVtc19hIChhbmltYWxzJ0xhc3QgKyAxKSA6PSBOdWxsX0l0ZW07CisgICBpdGVtc19hLmFsbCAoYW5pbWFscydMYXN0ICsgMSkgOj0gTnVsbF9JdGVtOwogCiAgICBtIDo9IE5ld19NZW51IChpdGVtc19hKTsKIApkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1vdmVybGFwX3Rlc3QuYWRiIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1vdmVybGFwX3Rlc3QuYWRiCmluZGV4IDM3ZThkNGMuLjk0OGIyYjMgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItb3ZlcmxhcF90ZXN0LmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLW92ZXJsYXBfdGVzdC5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDIwMDAsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDE0LDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuNCAkCi0tLSAgJERhdGU6IDIwMDQvMDgvMjEgMjE6Mzc6MDAgJAorLS0gICRSZXZpc2lvbjogMS43ICQKKy0tICAkRGF0ZTogMjAxNS8wNy8yNSAyMzo0MzoxOSAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7CkBAIC03Miw4ICs3Miw5IEBACiAgICAgICBHZXRfU2l6ZSAod2luLCB5MSwgeDEpOwogICAgICAgZm9yIHkgaW4gMCAuLiB5MSAtIDEgbG9vcAogICAgICAgICAgZm9yIHggaW4gMCAuLiB4MSAtIDEgbG9vcAotICAgICAgICAgICAgaWYgKCh4ID4gKHgxIC0gMSkgLyAzKSBhbmQgKHggPD0gKDIgKiAoeDEgLSAxKSkgLyAzKSkKLSAgICAgICAgICAgICAgICBvciAoKCh5ID4gKHkxIC0gMSkgLyAzKSBhbmQgKHkgPD0gKDIgKiAoeTEgLSAxKSkgLyAzKSkpIHRoZW4KKyAgICAgICAgICAgIGlmICgoeCA+ICh4MSAtIDEpIC8gMykgYW5kICh4IDw9ICgyICogKHgxIC0gMSkpIC8gMykpIG9yCisgICAgICAgICAgICAgICAoKCh5ID4gKHkxIC0gMSkgLyAzKSBhbmQgKHkgPD0gKDIgKiAoeTEgLSAxKSkgLyAzKSkpCisgICAgICAgICAgICB0aGVuCiAgICAgICAgICAgICAgICBNb3ZlX0N1cnNvciAod2luLCB5LCB4KTsKICAgICAgICAgICAgICAgIEFkZCAod2luLCBDaCA9PiBjaCk7CiAgICAgICAgICAgICBlbmQgaWY7CkBAIC05Myw3ICs5NCw3IEBACiAgICBBZGQgKFN0ciA9PiAiVGhpcyB0ZXN0IHNob3dzIHRoZSBiZWhhdmlvciBvZiB3bm91dHJlZnJlc2goKSB3aXRoICIgJgogICAgICAgICAicmVzcGVjdCB0byIpOwogICAgQWRkIChDaCA9PiBuZXdsKTsKLSAgIEFkZCAoU3RyID0+ICJ0aGUgc2hhcmVkIHJlZ2lvbiBvZiB0d28gb3ZlcmxhcHBpbmcgd2luZG93cyBBIGFuZCBCLiAiJgorICAgQWRkIChTdHIgPT4gInRoZSBzaGFyZWQgcmVnaW9uIG9mIHR3byBvdmVybGFwcGluZyB3aW5kb3dzIEEgYW5kIEIuICIgJgogICAgICAgICAiVGhlIGNyb3NzIik7CiAgICBBZGQgKENoID0+IG5ld2wpOwogICAgQWRkIChTdHIgPT4gInBhdHRlcm4gaW4gZWFjaCB3aW5kb3cgZG9lcyBub3Qgb3ZlcmxhcCB0aGUgb3RoZXIuIik7CkBAIC0xMDEsNyArMTAyLDcgQEAKIAogICAgTW92ZV9DdXJzb3IgKExpbmUgPT4gMTgsIENvbHVtbiA9PiAwKTsKICAgIEFkZCAoU3RyID0+ICJhID0gcmVmcmVzaCBBLCB0aGVuIEIsIHRoZW4gZG91cGRhdGUuIGIgPSByZWZyZXNoIEIsICIgJgotICAgICAgICAidGhlbiBBLCB0aGVuIGRvdXBkYXV0ZSIpOworICAgICAgICAidGhlbiBBLCB0aGVuIGRvdXBkYXRlIik7CiAgICBBZGQgKENoID0+IG5ld2wpOwogICAgQWRkIChTdHIgPT4gImMgPSBmaWxsIHdpbmRvdyBBIHdpdGggbGV0dGVyIEEuICAgICAgZCA9IGZpbGwgd2luZG93IEIgIiAmCiAgICAgICAgICJ3aXRoIGxldHRlciBCLiIpOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi1zbGtfdGVzdC5hZGIgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXNsa190ZXN0LmFkYgppbmRleCA4YmZlZTRlLi5hYTM2OGJhIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXNsa190ZXN0LmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXNsa190ZXN0LmFkYgpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMjAwMC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDksMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw4ICszNSw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6IEV1Z2VuZSBWLiBNZWxhcmFnbm8gPGFsZG9tZWxAaXgubmV0Y29tLmNvbT4gMjAwMAogLS0gIFZlcnNpb24gQ29udHJvbAotLS0gICRSZXZpc2lvbjogMS43ICQKLS0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDoyNDo0MCAkCistLSAgJFJldmlzaW9uOiAxLjkgJAorLS0gICREYXRlOiAyMDExLzAzLzE5IDEyOjAzOjA4ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBuY3Vyc2VzMi51dGlsOyB1c2UgbmN1cnNlczIudXRpbDsKQEAgLTQ3LDEzICs0NywxMyBAQAogd2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKIAogcHJvY2VkdXJlIG5jdXJzZXMyLnNsa190ZXN0IGlzCi0gICBwcm9jZWR1cmUgbXlHZXQgKFdpbiA6IGluICBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OworICAgcHJvY2VkdXJlIG15R2V0IChXaW4gOiBXaW5kb3cgOj0gU3RhbmRhcmRfV2luZG93OwogICAgICAgICAgICAgICAgICAgICBTdHIgOiBvdXQgQWRhLlN0cmluZ3MuVW5ib3VuZGVkLlVuYm91bmRlZF9TdHJpbmc7Ci0gICAgICAgICAgICAgICAgICAgIExlbiA6IGluICBJbnRlZ2VyIDo9IC0xKTsKKyAgICAgICAgICAgICAgICAgICAgTGVuIDogSW50ZWdlciA6PSAtMSk7CiAKLSAgIHByb2NlZHVyZSBteUdldCAoV2luIDogaW4gIFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CisgICBwcm9jZWR1cmUgbXlHZXQgKFdpbiA6IFdpbmRvdyA6PSBTdGFuZGFyZF9XaW5kb3c7CiAgICAgICAgICAgICAgICAgICAgIFN0ciA6IG91dCBBZGEuU3RyaW5ncy5VbmJvdW5kZWQuVW5ib3VuZGVkX1N0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgTGVuIDogaW4gIEludGVnZXIgOj0gLTEpCisgICAgICAgICAgICAgICAgICAgIExlbiA6IEludGVnZXIgOj0gLTEpCiAgICBpcwogICAgICAgdXNlIEFkYS5TdHJpbmdzLlVuYm91bmRlZDsKICAgICAgIHVzZSBJbnRlcmZhY2VzLkM7CkBAIC0xNjEsNyArMTYxLDcgQEAKICAgICAgICAgIHdoZW4gJ3gnIHwgJ3EnID0+CiAgICAgICAgICAgICBleGl0OwogICAgICAgICAgICAgLS0gIHRoZSBDIHZlcnNpb24gbmVlZGVkIGEgZ290bywgaGEgaGEKLSAgICAgICAgICAgIC0tICBicmVha3MgZXhpdCB0aGUgY2FzZSBub3QgdGhlIGxvb3AgYmVjYXVzZSBmYWxsLXRocm91aAorICAgICAgICAgICAgLS0gIGJyZWFrcyBleGl0IHRoZSBjYXNlIG5vdCB0aGUgbG9vcCBiZWNhdXNlIGZhbGwtdGhyb3VnaAogICAgICAgICAgICAgLS0gIGhhcHBlbnMgaW4gQyEKICAgICAgICAgIHdoZW4gb3RoZXJzID0+CiAgICAgICAgICAgICBCZWVwOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi10cmFjZV9zZXQuYWRiIGIvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi10cmFjZV9zZXQuYWRiCmluZGV4IDFlMjcxNmUuLmRmNDQ2OGIgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdHJhY2Vfc2V0LmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXRyYWNlX3NldC5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMjAwMC0yMDExLDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuMyAkCi0tLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDY6MTggJAorLS0gICRSZXZpc2lvbjogMS42ICQKKy0tICAkRGF0ZTogMjAxNC8wOS8xMyAxOToxMDoxOCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggbmN1cnNlczIudXRpbDsgdXNlIG5jdXJzZXMyLnV0aWw7CkBAIC01MCwxNCArNTAsMTQgQEAKIAogcHJvY2VkdXJlIG5jdXJzZXMyLnRyYWNlX3NldCBpcwogCi0gICBmdW5jdGlvbiBtZW51X3ZpcnR1YWxpemUgKGMgOiBLZXlfQ29kZSkgcmV0dXJuIE1lbnVfUmVxdWVzdF9Db2RlOworICAgZnVuY3Rpb24gbWVudV92aXJ0dWFsaXplIChjIDogS2V5X0NvZGUpIHJldHVybiBLZXlfQ29kZTsKICAgIGZ1bmN0aW9uIHN1YnNldCAoc3VwZXIsIHN1YiA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQpIHJldHVybiBCb29sZWFuOwogICAgZnVuY3Rpb24gdHJhY2Vfb3IgKGEsIGIgOiBUcmFjZV9BdHRyaWJ1dGVfU2V0KSByZXR1cm4gVHJhY2VfQXR0cmlidXRlX1NldDsKICAgIGZ1bmN0aW9uIHRyYWNlX251bSAodGxldmVsIDogVHJhY2VfQXR0cmlidXRlX1NldCkgcmV0dXJuIFN0cmluZzsKICAgIGZ1bmN0aW9uIHRyYWNldHJhY2UgKHRsZXZlbCA6IFRyYWNlX0F0dHJpYnV0ZV9TZXQpIHJldHVybiBTdHJpbmc7CiAgICBmdW5jdGlvbiBydW5fdHJhY2VfbWVudSAobSA6IE1lbnU7IGNvdW50IDogSW50ZWdlcikgcmV0dXJuIEJvb2xlYW47CiAKLSAgIGZ1bmN0aW9uIG1lbnVfdmlydHVhbGl6ZSAoYyA6IEtleV9Db2RlKSByZXR1cm4gTWVudV9SZXF1ZXN0X0NvZGUgaXMKKyAgIGZ1bmN0aW9uIG1lbnVfdmlydHVhbGl6ZSAoYyA6IEtleV9Db2RlKSByZXR1cm4gS2V5X0NvZGUgaXMKICAgIGJlZ2luCiAgICAgICBjYXNlIGMgaXMKICAgICAgICAgIHdoZW4gQ2hhcmFjdGVyJ1BvcyAobmV3bCkgfCBLZXlfRXhpdCA9PgpAQCAtMTQxLDcgKzE0MSw4IEBACiAgICAgICAgIChzdXBlci5JbnRlcm5hbF9DYWxscyBvciBub3Qgc3ViLkludGVybmFsX0NhbGxzKSBhbmQKICAgICAgICAgKHN1cGVyLkNoYXJhY3Rlcl9DYWxscyBvciBub3Qgc3ViLkNoYXJhY3Rlcl9DYWxscykgYW5kCiAgICAgICAgIChzdXBlci5UZXJtY2FwX1Rlcm1JbmZvIG9yIG5vdCBzdWIuVGVybWNhcF9UZXJtSW5mbykgYW5kCi0gICAgICAgIFRydWUgdGhlbgorICAgICAgICBUcnVlCisgICAgICB0aGVuCiAgICAgICAgICByZXR1cm4gVHJ1ZTsKICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBGYWxzZTsKQEAgLTI1MCw5MyArMjUxLDEwNyBAQAogICAgICAgZWxzZQogCiAgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoVGltZXMgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSkgdGhlbgorICAgICAgICAgICAgICAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhUaW1lcyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpKQorICAgICAgICAgdGhlbgogICAgICAgICAgICAgQXBwZW5kIChidWYsICJUaW1lcyIpOwogICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOwogICAgICAgICAgZW5kIGlmOwogCiAgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoVHB1dHMgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSkgdGhlbgorICAgICAgICAgICAgICAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhUcHV0cyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpKQorICAgICAgICAgdGhlbgogICAgICAgICAgICAgQXBwZW5kIChidWYsICJUcHV0cyIpOwogICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOwogICAgICAgICAgZW5kIGlmOwogCiAgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoVXBkYXRlID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSkpIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoVXBkYXRlID0+IFRydWUsIG90aGVycyA9PiBGYWxzZSkpCisgICAgICAgICB0aGVuCiAgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIlVwZGF0ZSIpOwogICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOwogICAgICAgICAgZW5kIGlmOwogCiAgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoQ3Vyc29yX01vdmUgPT4gVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSkgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKQorICAgICAgICAgdGhlbgogICAgICAgICAgICAgQXBwZW5kIChidWYsICJDdXJzb3JfTW92ZSIpOwogICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOwogICAgICAgICAgZW5kIGlmOwogCiAgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoQ2hhcmFjdGVyX091dHB1dCA9PiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKSB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpCisgICAgICAgICB0aGVuCiAgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIkNoYXJhY3Rlcl9PdXRwdXQiKTsKICAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiLCAiKTsKICAgICAgICAgIGVuZCBpZjsKIAogICAgICAgICAgaWYgc3Vic2V0ICh0bGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgIFRyYWNlX09yZGluYXJ5KSB0aGVuCisgICAgICAgICAgICAgICAgICAgIFRyYWNlX09yZGluYXJ5KQorICAgICAgICAgdGhlbgogICAgICAgICAgICAgQXBwZW5kIChidWYsICJPcmRpbmFyeSIpOwogICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOwogICAgICAgICAgZW5kIGlmOwogCiAgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoQ2FsbHMgPT4gVHJ1ZSwgb3RoZXJzID0+IEZhbHNlKSkgdGhlbgorICAgICAgICAgICAgICAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhDYWxscyA9PiBUcnVlLCBvdGhlcnMgPT4gRmFsc2UpKQorICAgICAgICAgdGhlbgogICAgICAgICAgICAgQXBwZW5kIChidWYsICJDYWxscyIpOwogICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOwogICAgICAgICAgZW5kIGlmOwogCiAgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoVmlydHVhbF9QdXRzID0+IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSkKKyAgICAgICAgIHRoZW4KICAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiVmlydHVhbF9QdXRzIik7CiAgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIiwgIik7CiAgICAgICAgICBlbmQgaWY7CiAKICAgICAgICAgIGlmIHN1YnNldCAodGxldmVsLAogICAgICAgICAgICAgICAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhJbnB1dF9FdmVudHMgPT4gVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSkgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKQorICAgICAgICAgdGhlbgogICAgICAgICAgICAgQXBwZW5kIChidWYsICJJbnB1dF9FdmVudHMiKTsKICAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiLCAiKTsKICAgICAgICAgIGVuZCBpZjsKIAogICAgICAgICAgaWYgc3Vic2V0ICh0bGV2ZWwsCiAgICAgICAgICAgICAgICAgICAgIFRyYWNlX0F0dHJpYnV0ZV9TZXQnKFRUWV9TdGF0ZSA9PiBUcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKSB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpCisgICAgICAgICB0aGVuCiAgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIlRUWV9TdGF0ZSIpOwogICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOwogICAgICAgICAgZW5kIGlmOwogCiAgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoSW50ZXJuYWxfQ2FsbHMgPT4gVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSkgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcnMgPT4gRmFsc2UpKQorICAgICAgICAgdGhlbgogICAgICAgICAgICAgQXBwZW5kIChidWYsICJJbnRlcm5hbF9DYWxscyIpOwogICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOwogICAgICAgICAgZW5kIGlmOwogCiAgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgVHJhY2VfQXR0cmlidXRlX1NldCcoQ2hhcmFjdGVyX0NhbGxzID0+IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSkKKyAgICAgICAgIHRoZW4KICAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiQ2hhcmFjdGVyX0NhbGxzIik7CiAgICAgICAgICAgICBBcHBlbmQgKGJ1ZiwgIiwgIik7CiAgICAgICAgICBlbmQgaWY7CiAKICAgICAgICAgIGlmIHN1YnNldCAodGxldmVsLAogICAgICAgICAgICAgICAgICAgICBUcmFjZV9BdHRyaWJ1dGVfU2V0JyhUZXJtY2FwX1Rlcm1JbmZvID0+IFRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVycyA9PiBGYWxzZSkpIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJzID0+IEZhbHNlKSkKKyAgICAgICAgIHRoZW4KICAgICAgICAgICAgIEFwcGVuZCAoYnVmLCAiVGVybWNhcF9UZXJtSW5mbyIpOwogICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOwogICAgICAgICAgZW5kIGlmOwogCiAgICAgICAgICBpZiBzdWJzZXQgKHRsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgVHJhY2VfTWF4aW11bSkgdGhlbgorICAgICAgICAgICAgICAgICAgICBUcmFjZV9NYXhpbXVtKQorICAgICAgICAgdGhlbgogICAgICAgICAgICAgQXBwZW5kIChidWYsICJNYXhpbWl1bSIpOwogICAgICAgICAgICAgQXBwZW5kIChidWYsICIsICIpOwogICAgICAgICAgZW5kIGlmOwpAQCAtNDE2LDkgKzQzMSw5IEBACiAgICBSZWZyZXNoOwogCiAgICBmb3IgbiBpbiB0X3RibCdSYW5nZSBsb29wCi0gICAgICBpdGVtc19hIChuKSA6PSBOZXdfSXRlbSAodF90YmwgKG4pLm5hbWUuYWxsKTsKKyAgICAgIGl0ZW1zX2EuYWxsIChuKSA6PSBOZXdfSXRlbSAodF90YmwgKG4pLm5hbWUuYWxsKTsKICAgIGVuZCBsb29wOwotICAgaXRlbXNfYSAodF90YmwnTGFzdCArIDEpIDo9IE51bGxfSXRlbTsKKyAgIGl0ZW1zX2EuYWxsICh0X3RibCdMYXN0ICsgMSkgOj0gTnVsbF9JdGVtOwogCiAgICBtIDo9IE5ld19NZW51IChpdGVtc19hKTsKIApkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi11dGlsLmFkYiBiL0FkYTk1L3NhbXBsZXMvbmN1cnNlczItdXRpbC5hZGIKaW5kZXggOGFlMzI3Mi4uZTBmM2QzNSAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9uY3Vyc2VzMi11dGlsLmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL25jdXJzZXMyLXV0aWwuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwOCwyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDE2ICszNSwxMiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiBFdWdlbmUgVi4gTWVsYXJhZ25vIDxhbGRvbWVsQGl4Lm5ldGNvbS5jb20+IDIwMDAKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuNyAkCi0tLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NTE6MjAgJAorLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICAkRGF0ZTogMjAxNC8wNS8yNCAyMTozMjoxOCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggQWRhLlRleHRfSU87IHVzZSBBZGEuVGV4dF9JTzsKIAotcHJhZ21hIFdhcm5pbmdzIChPZmYpOwotd2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLkF1eDsKLXByYWdtYSBXYXJuaW5ncyAoT24pOwotCiB3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVHJhY2U7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRyYWNlOwogCiB3aXRoIEludGVyZmFjZXMuQzsKQEAgLTExNSw3ICsxMTEsNiBAQAogICAgcHJvY2VkdXJlIENhbm5vdCAocyA6IFN0cmluZykgaXMKICAgICAgIHVzZSBJbnRlcmZhY2VzLkM7CiAgICAgICB1c2UgSW50ZXJmYWNlcy5DLlN0cmluZ3M7Ci0gICAgICB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5BdXg7CiAgICAgICBmdW5jdGlvbiBnZXRlbnYgKHggOiBjaGFyX2FycmF5KSAgcmV0dXJuIGNoYXJzX3B0cjsKICAgICAgIHByYWdtYSBJbXBvcnQgKEMsIGdldGVudiwgImdldGVudiIpOwogICAgICAgdG1wMSA6IGNoYXJfYXJyYXkgKDAgLi4gMTApOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtY3Vyc2VzX2RlbW8uYWRiIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtY3Vyc2VzX2RlbW8uYWRiCmluZGV4IDcwMGRhNzYuLjRkZDk2YTcgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWN1cnNlc19kZW1vLmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1jdXJzZXNfZGVtby5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjE1ICQKLS0tICAkRGF0ZTogMjAwNC8wOC8yMSAyMTozNzowMCAkCistLSAgJFJldmlzaW9uOiAxLjE3ICQKKy0tICAkRGF0ZTogMjAxMS8wMy8yMyAwMDoyOTowNCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7CkBAIC02MSw3ICs2MSw3IEBACiAgICB0eXBlIFVzZXJfRGF0YV9BY2Nlc3MgaXMgYWNjZXNzIGFsbCBVc2VyX0RhdGE7CiAgICBwYWNrYWdlIFBVRCBpcyBuZXcgUGFuZWxzLlVzZXJfRGF0YSAoVXNlcl9EYXRhLCBVc2VyX0RhdGFfQWNjZXNzKTsKICAgIC0tICBXZSB1c2UgYWJvdmUgaW5zdGFudGlhdGlvbiBvZiB0aGUgZ2VuZXJpYyBVc2VyX0RhdGEgcGFja2FnZSB0bwotICAgLS0gIGRlbW9uc3RyYXRlIGFuZCB0ZXN0IHRoZSB1c2Ugb2YgdGhlIHVzZXIgZGF0YSBtYWVjaGFuaXNtLgorICAgLS0gIGRlbW9uc3RyYXRlIGFuZCB0ZXN0IHRoZSB1c2Ugb2YgdGhlIHVzZXIgZGF0YSBtZWNoYW5pc20uCiAKICAgIHByb2NlZHVyZSBEZW1vCiAgICBpcwpAQCAtMTIyLDkgKzEyMiw5IEBACiAgICAgICAgICBkZWNsYXJlCiAgICAgICAgICAgICBPIDogSXRlbV9PcHRpb25fU2V0OwogICAgICAgICAgYmVnaW4KLSAgICAgICAgICAgIEdldF9PcHRpb25zIChJdG0gKDIpLCBPKTsKKyAgICAgICAgICAgIEdldF9PcHRpb25zIChJdG0uYWxsICgyKSwgTyk7CiAgICAgICAgICAgICBPLlNlbGVjdGFibGUgOj0gRmFsc2U7Ci0gICAgICAgICAgICBTZXRfT3B0aW9ucyAoSXRtICgyKSwgTyk7CisgICAgICAgICAgICBTZXRfT3B0aW9ucyAoSXRtLmFsbCAoMiksIE8pOwogICAgICAgICAgZW5kOwogICAgICAgZW5kIGlmOwogCmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1leHBsYW5hdGlvbi5hZGIgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1leHBsYW5hdGlvbi5hZGIKaW5kZXggMTJhOGRlYi4uYTJkMTgyMiAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZXhwbGFuYXRpb24uYWRiCisrKyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWV4cGxhbmF0aW9uLmFkYgpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMTEsMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw4ICszNSw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuMjAgJAotLS0gICREYXRlOiAyMDA2LzA2LzI1IDE0OjMwOjIyICQKKy0tICAkUmV2aXNpb246IDEuMjcgJAorLS0gICREYXRlOiAyMDE0LzA5LzEzIDE5OjEwOjE4ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIFBvb3IgbWFucyBoZWxwIHN5c3RlbS4gVGhpcyBzY2FucyBhIHNlcXVlbnRpYWwgZmlsZSBmb3Iga2V5IGxpbmVzIGFuZApAQCAtNTgsNyArNTgsNyBAQAogICAgSGVscF9LZXlzIDogY29uc3RhbnQgU3RyaW5nIDo9ICJIRUxQS0VZUyI7CiAgICBJbl9IZWxwICAgOiBjb25zdGFudCBTdHJpbmcgOj0gIklOSEVMUCI7CiAKLSAgIEZpbGVfTmFtZSA6IGNvbnN0YW50IFN0cmluZyA6PSAiZXhwbGFpbi5tc2ciOworICAgRmlsZV9OYW1lIDogY29uc3RhbnQgU3RyaW5nIDo9ICJleHBsYWluLnR4dCI7CiAgICBGIDogRmlsZV9UeXBlOwogCiAgICB0eXBlIEhlbHBfTGluZTsKQEAgLTczLDggKzczLDggQEAKICAgICAgICAgIExpbmUgOiBTdHJpbmdfQWNjZXNzOwogICAgICAgZW5kIHJlY29yZDsKIAotICAgcHJvY2VkdXJlIEV4cGxhaW4gKEtleSA6IGluIFN0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBpbiBXaW5kb3cpOworICAgcHJvY2VkdXJlIEV4cGxhaW4gKEtleSA6IFN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBXaW5kb3cpOwogCiAgICBwcm9jZWR1cmUgUmVsZWFzZV9TdHJpbmcgaXMKICAgICAgbmV3IEFkYS5VbmNoZWNrZWRfRGVhbGxvY2F0aW9uIChTdHJpbmcsCkBAIC04NiwxNCArODYsMTYgQEAKICAgIGZ1bmN0aW9uIFNlYXJjaCAoS2V5IDogU3RyaW5nKSByZXR1cm4gSGVscF9MaW5lX0FjY2VzczsKICAgIHByb2NlZHVyZSBSZWxlYXNlX0hlbHAgKFJvb3QgOiBpbiBvdXQgSGVscF9MaW5lX0FjY2Vzcyk7CiAKLSAgIHByb2NlZHVyZSBFeHBsYWluIChLZXkgOiBpbiBTdHJpbmcpCisgICBmdW5jdGlvbiBDaGVja19GaWxlIChOYW1lIDogU3RyaW5nKSByZXR1cm4gQm9vbGVhbjsKKworICAgcHJvY2VkdXJlIEV4cGxhaW4gKEtleSA6IFN0cmluZykKICAgIGlzCiAgICBiZWdpbgogICAgICAgRXhwbGFpbiAoS2V5LCBOdWxsX1dpbmRvdyk7CiAgICBlbmQgRXhwbGFpbjsKIAotICAgcHJvY2VkdXJlIEV4cGxhaW4gKEtleSA6IGluIFN0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgICBXaW4gOiBpbiBXaW5kb3cpCisgICBwcm9jZWR1cmUgRXhwbGFpbiAoS2V5IDogU3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgIFdpbiA6IFdpbmRvdykKICAgIGlzCiAgICAgICAtLSAgUmV0cmlldmUgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoaXMga2V5IGFuZCBkaXNwbGF5IGl0IGluIHRoaXMKICAgICAgIC0tICB3aW5kb3cuIElmIG5vIHdpbmRvdyBhcmd1bWVudCBpcyBwYXNzZWQsIHRoZSByb3V0aW5lIHdpbGwgY3JlYXRlCkBAIC0xMjYsNyArMTI4LDcgQEAKICAgICAgICAgIEFkZCAoVywgS2V5KTsKICAgICAgICAgIEFkZCAoVywgIiBub3QgZm91bmQuIik7CiAgICAgICAgICBBZGQgKFcsIENoYXJhY3RlcidWYWwgKDEwKSk7Ci0gICAgICAgICBBZGQgKFcsICJQcmVzcyB0aGUgRnVuY3Rpb24ga2V5IGxhYmVsbGVkICdRdWl0JyBrZXkgdG8gY29udGludWUuIik7CisgICAgICAgICBBZGQgKFcsICJQcmVzcyB0aGUgRnVuY3Rpb24ga2V5IGxhYmVsZWQgJ1F1aXQnIGtleSB0byBjb250aW51ZS4iKTsKICAgICAgIGVuZCBVbmtub3duX0tleTsKIAogICAgICAgcHJvY2VkdXJlIFJlZG8KQEAgLTEzNSw5ICsxMzcsOSBAQAogICAgICAgYmVnaW4KICAgICAgICAgIGlmIFRvcF9MaW5lIC89IG51bGwgdGhlbgogICAgICAgICAgICAgZm9yIEwgaW4gMCAuLiAoSGVpZ2h0IC0gMSkgbG9vcAotICAgICAgICAgICAgICAgQWRkIChXLCBMLCAwLCBILkxpbmUuYWxsKTsKLSAgICAgICAgICAgICAgIGV4aXQgd2hlbiBILk5leHQgPSBudWxsOwotICAgICAgICAgICAgICAgSCA6PSBILk5leHQ7CisgICAgICAgICAgICAgICBBZGQgKFcsIEwsIDAsIEguYWxsLkxpbmUuYWxsKTsKKyAgICAgICAgICAgICAgIGV4aXQgd2hlbiBILmFsbC5OZXh0ID0gbnVsbDsKKyAgICAgICAgICAgICAgIEggOj0gSC5hbGwuTmV4dDsKICAgICAgICAgICAgIGVuZCBsb29wOwogICAgICAgICAgZWxzZQogICAgICAgICAgICAgVW5rbm93bl9LZXk7CkBAIC0xODEsMTIgKzE4MywxMiBAQAogICAgICAgICAgTCA6IExpbmVfUG9zaXRpb24gOj0gMDsKICAgICAgIGJlZ2luCiAgICAgICAgICBsb29wCi0gICAgICAgICAgICBBZGQgKFcsIEwsIDAsIEMuTGluZS5hbGwpOworICAgICAgICAgICAgQWRkIChXLCBMLCAwLCBDLmFsbC5MaW5lLmFsbCk7CiAgICAgICAgICAgICBMIDo9IEwgKyAxOwotICAgICAgICAgICAgZXhpdCB3aGVuIEMuTmV4dCA9IG51bGwgb3IgZWxzZSBMID0gSGVpZ2h0OwotICAgICAgICAgICAgQyA6PSBDLk5leHQ7CisgICAgICAgICAgICBleGl0IHdoZW4gQy5hbGwuTmV4dCA9IG51bGwgb3IgZWxzZSBMID0gSGVpZ2h0OworICAgICAgICAgICAgQyA6PSBDLmFsbC5OZXh0OwogICAgICAgICAgZW5kIGxvb3A7Ci0gICAgICAgICBpZiBDLk5leHQgLz0gbnVsbCB0aGVuCisgICAgICAgICBpZiBDLmFsbC5OZXh0IC89IG51bGwgdGhlbgogICAgICAgICAgICAgcHJhZ21hIEFzc2VydCAoTCA9IEhlaWdodCk7CiAgICAgICAgICAgICBNb3JlIDo9IFRydWU7CiAgICAgICAgICBlbHNlCkBAIC0yNDgsMjAgKzI1MCwyMCBAQAogICAgICAgICAgICAgICAgaWYgSyBpbiBTcGVjaWFsX0tleV9Db2RlJ1JhbmdlIHRoZW4KICAgICAgICAgICAgICAgICAgIGNhc2UgSyBpcwogICAgICAgICAgICAgICAgICAgICAgd2hlbiBLZXlfQ3Vyc29yX0Rvd24gPT4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIEN1cnJlbnQuTmV4dCAvPSBudWxsIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIEN1cnJlbnQuYWxsLk5leHQgLz0gbnVsbCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlX0N1cnNvciAoVywgSGVpZ2h0IC0gMSwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JvbGwgKFcsIDEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VycmVudCA6PSBDdXJyZW50Lk5leHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBUb3BfTGluZSA6PSBUb3BfTGluZS5OZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIChXLCBDdXJyZW50LkxpbmUuYWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnQgOj0gQ3VycmVudC5hbGwuTmV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvcF9MaW5lIDo9IFRvcF9MaW5lLmFsbC5OZXh0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIChXLCBDdXJyZW50LmFsbC5MaW5lLmFsbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgaWY7CiAgICAgICAgICAgICAgICAgICAgICB3aGVuIEtleV9DdXJzb3JfVXAgPT4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIFRvcF9MaW5lLlByZXYgLz0gbnVsbCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBUb3BfTGluZS5hbGwuUHJldiAvPSBudWxsIHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vdmVfQ3Vyc29yIChXLCAwLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbCAoVywgLTEpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgVG9wX0xpbmUgOj0gVG9wX0xpbmUuUHJldjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnQgOj0gQ3VycmVudC5QcmV2OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIChXLCBUb3BfTGluZS5MaW5lLmFsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBUb3BfTGluZSA6PSBUb3BfTGluZS5hbGwuUHJldjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnQgOj0gQ3VycmVudC5hbGwuUHJldjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCAoVywgVG9wX0xpbmUuYWxsLkxpbmUuYWxsKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKICAgICAgICAgICAgICAgICAgICAgIHdoZW4gUVVJVF9DT0RFID0+IGV4aXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIG90aGVycyA9PiBudWxsOwpAQCAtMzE5LDggKzMyMSwxMCBAQAogICAgICAgT3V0ZXIgOgogICAgICAgbG9vcAogICAgICAgICAgZXhpdCBPdXRlciB3aGVuIG5vdCBOZXh0X0xpbmU7Ci0gICAgICAgICBpZiBMYXN0ID0gKDEgKyBLZXknTGVuZ3RoKSBhbmQgdGhlbiBLZXkgPSBCdWZmZXIgKDIgLi4gTGFzdCkKLSAgICAgICAgICAgYW5kIHRoZW4gQnVmZmVyICgxKSA9ICcjJyB0aGVuCisgICAgICAgICBpZiBMYXN0ID0gKDEgKyBLZXknTGVuZ3RoKQorICAgICAgICAgICBhbmQgdGhlbiBLZXkgPSBCdWZmZXIgKDIgLi4gTGFzdCkKKyAgICAgICAgICAgYW5kIHRoZW4gQnVmZmVyICgxKSA9ICcjJworICAgICAgICAgdGhlbgogICAgICAgICAgICAgbG9vcAogICAgICAgICAgICAgICAgZXhpdCB3aGVuIG5vdCBOZXh0X0xpbmU7CiAgICAgICAgICAgICAgICBleGl0IHdoZW4gQnVmZmVyICgxKSA9ICcjJzsKQEAgLTMzMCw4ICszMzQsOCBAQAogICAgICAgICAgICAgICAgICAgUmVsZWFzZV9IZWxwIChSb290KTsKICAgICAgICAgICAgICAgICAgIFJvb3QgOj0gQ3VycmVudDsKICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIFRhaWwuTmV4dCA6PSBDdXJyZW50OwotICAgICAgICAgICAgICAgICAgQ3VycmVudC5QcmV2IDo9IFRhaWw7CisgICAgICAgICAgICAgICAgICBUYWlsLmFsbC5OZXh0IDo9IEN1cnJlbnQ7CisgICAgICAgICAgICAgICAgICBDdXJyZW50LmFsbC5QcmV2IDo9IFRhaWw7CiAgICAgICAgICAgICAgICBlbmQgaWY7CiAgICAgICAgICAgICAgICBUYWlsIDo9IEN1cnJlbnQ7CiAgICAgICAgICAgICBlbmQgbG9vcDsKQEAgLTM0Nyw4ICszNTEsOCBAQAogICAgYmVnaW4KICAgICAgIGxvb3AKICAgICAgICAgIGV4aXQgd2hlbiBSb290ID0gbnVsbDsKLSAgICAgICAgIE5leHQgOj0gUm9vdC5OZXh0OwotICAgICAgICAgUmVsZWFzZV9TdHJpbmcgKFJvb3QuTGluZSk7CisgICAgICAgICBOZXh0IDo9IFJvb3QuYWxsLk5leHQ7CisgICAgICAgICBSZWxlYXNlX1N0cmluZyAoUm9vdC5hbGwuTGluZSk7CiAgICAgICAgICBSZWxlYXNlX0hlbHBfTGluZSAoUm9vdCk7CiAgICAgICAgICBSb290IDo9IE5leHQ7CiAgICAgICBlbmQgbG9vcDsKQEAgLTM2MCw3ICszNjQsNyBAQAogICAgICAgRXhwbGFpbiAoQ29udGV4dCk7CiAgICBlbmQgRXhwbGFpbl9Db250ZXh0OwogCi0gICBwcm9jZWR1cmUgTm90ZXBhZCAoS2V5IDogaW4gU3RyaW5nKQorICAgcHJvY2VkdXJlIE5vdGVwYWQgKEtleSA6IFN0cmluZykKICAgIGlzCiAgICAgICBIIDogY29uc3RhbnQgSGVscF9MaW5lX0FjY2VzcyA6PSBTZWFyY2ggKEtleSk7CiAgICAgICBUIDogSGVscF9MaW5lX0FjY2VzcyA6PSBIOwpAQCAtMzcxLDcgKzM3NSw3IEBACiAgICBiZWdpbgogICAgICAgaWYgSCAvPSBudWxsIHRoZW4KICAgICAgICAgIGxvb3AKLSAgICAgICAgICAgIFQgOj0gVC5OZXh0OworICAgICAgICAgICAgVCA6PSBULmFsbC5OZXh0OwogICAgICAgICAgICAgZXhpdCB3aGVuIFQgPSBudWxsOwogICAgICAgICAgICAgTiA6PSBOICsgMTsKICAgICAgICAgIGVuZCBsb29wOwpAQCAtMzkxLDkgKzM5NSw5IEBACiAgICAgICAgICBQIDo9IE5ld19QYW5lbCAoVyk7CiAgICAgICAgICBUIDo9IEg7CiAgICAgICAgICBsb29wCi0gICAgICAgICAgICBBZGQgKFcsIEwgKyAxLCAxLCBULkxpbmUuYWxsLCBJbnRlZ2VyIChDb2x1bW5zIC0gMikpOworICAgICAgICAgICAgQWRkIChXLCBMICsgMSwgMSwgVC5hbGwuTGluZS5hbGwsIEludGVnZXIgKENvbHVtbnMgLSAyKSk7CiAgICAgICAgICAgICBMIDo9IEwgKyAxOwotICAgICAgICAgICAgVCA6PSBULk5leHQ7CisgICAgICAgICAgICBUIDo9IFQuYWxsLk5leHQ7CiAgICAgICAgICAgICBleGl0IHdoZW4gVCA9IG51bGw7CiAgICAgICAgICBlbmQgbG9vcDsKICAgICAgICAgIFQgOj0gSDsKQEAgLTQwMyw2ICs0MDcsMjYgQEAKICAgICAgIGVuZCBpZjsKICAgIGVuZCBOb3RlcGFkOwogCisgICBmdW5jdGlvbiBDaGVja19GaWxlIChOYW1lIDogU3RyaW5nKSByZXR1cm4gQm9vbGVhbiBpcworICAgICAgVGhlX0ZpbGUgOiBGaWxlX1R5cGU7CisgICBiZWdpbgorICAgICAgT3BlbiAoVGhlX0ZpbGUsIEluX0ZpbGUsIE5hbWUpOworICAgICAgQ2xvc2UgKFRoZV9GaWxlKTsKKyAgICAgIHJldHVybiBUcnVlOworICAgZXhjZXB0aW9uCisgICAgICB3aGVuIE5hbWVfRXJyb3IgPT4KKyAgICAgICAgIHJldHVybiBGYWxzZTsKKyAgIGVuZCBDaGVja19GaWxlOworCiBiZWdpbgotICAgT3BlbiAoRiwgSW5fRmlsZSwgRmlsZV9OYW1lKTsKKyAgIGlmIENoZWNrX0ZpbGUgKCIvdXNyL3NoYXJlL0FkYUN1cnNlcy8iICYgRmlsZV9OYW1lKSB0aGVuCisgICAgICBPcGVuIChGLCBJbl9GaWxlLCAiL3Vzci9zaGFyZS9BZGFDdXJzZXMvIiAmIEZpbGVfTmFtZSk7CisgICBlbHNpZiBDaGVja19GaWxlIChGaWxlX05hbWUpIHRoZW4KKyAgICAgIE9wZW4gKEYsIEluX0ZpbGUsIEZpbGVfTmFtZSk7CisgICBlbHNlCisgICAgICBQdXRfTGluZSAoU3RhbmRhcmRfRXJyb3IsCisgICAgICAgICAgICAgICAgIlRoZSBmaWxlIGV4cGxhaW4udHh0IHdhcyBub3QgZm91bmQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiIKKyAgICAgICAgICAgICAgICApOworICAgICAgcmFpc2UgTmFtZV9FcnJvcjsKKyAgIGVuZCBpZjsKIGVuZCBTYW1wbGUuRXhwbGFuYXRpb247CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1leHBsYW5hdGlvbi5hZHMgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1leHBsYW5hdGlvbi5hZHMKaW5kZXggMTg2MTdhYy4uNzI4ODI1ZSAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZXhwbGFuYXRpb24uYWRzCisrKyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWV4cGxhbmF0aW9uLmFkcwpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw3ICszNSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuMTAgJAorLS0gICRSZXZpc2lvbjogMS4xMSAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBQb29yIG1hbnMgaGVscCBzeXN0ZW0uIFRoaXMgc2NhbnMgYSBzZXF1ZW50aWFsIGZpbGUgZm9yIGtleSBsaW5lcyBhbmQKQEAgLTQ0LDEzICs0NCwxMyBAQAogLS0KIHBhY2thZ2UgU2FtcGxlLkV4cGxhbmF0aW9uIGlzCiAKLSAgIHByb2NlZHVyZSBFeHBsYWluIChLZXkgOiBpbiBTdHJpbmcpOworICAgcHJvY2VkdXJlIEV4cGxhaW4gKEtleSA6IFN0cmluZyk7CiAgICAtLSAgUmV0cmlldmUgdGhlIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoaXMga2V5IGFuZCBkaXNwbGF5IGl0LgogCiAgICBwcm9jZWR1cmUgRXhwbGFpbl9Db250ZXh0OwogICAgLS0gIEV4cGxhaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KIAotICAgcHJvY2VkdXJlIE5vdGVwYWQgKEtleSA6IGluIFN0cmluZyk7CisgICBwcm9jZWR1cmUgTm90ZXBhZCAoS2V5IDogU3RyaW5nKTsKICAgIC0tICBQdXQgYSBub3RlIG9uIHRoZSBzY3JlZW4gYW5kIG1haW50YWluIGl0IHdpdGggdGhlIGNvbnRleHQKIAogICAgRXhwbGFuYXRpb25fTm90X0ZvdW5kIDogZXhjZXB0aW9uOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLWF1eC5hZGIgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8tYXV4LmFkYgppbmRleCA4MWM5N2FkLi5hM2IwNDRkIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8tYXV4LmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8tYXV4LmFkYgpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw4ICszNSw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuMTYgJAotLS0gICREYXRlOiAyMDA0LzA4LzIxIDIxOjM3OjAwICQKKy0tICAkUmV2aXNpb246IDEuMTcgJAorLS0gICREYXRlOiAyMDA5LzEyLzI2IDE3OjM4OjU4ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBBZGEuQ2hhcmFjdGVycy5MYXRpbl8xOyB1c2UgQWRhLkNoYXJhY3RlcnMuTGF0aW5fMTsKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogcGFja2FnZSBib2R5IFNhbXBsZS5Gb3JtX0RlbW8uQXV4IGlzCiAKLSAgIHByb2NlZHVyZSBHZW9tZXRyeSAoRiAgOiBpbiAgRm9ybTsKKyAgIHByb2NlZHVyZSBHZW9tZXRyeSAoRiAgOiBGb3JtOwogICAgICAgICAgICAgICAgICAgICAgICBMICA6IG91dCBMaW5lX0NvdW50OyAgICAgICAgLS0gTGluZXMgdXNlZCBmb3IgbWVudQogICAgICAgICAgICAgICAgICAgICAgICBDICA6IG91dCBDb2x1bW5fQ291bnQ7ICAgICAgLS0gQ29sdW1ucyB1c2VkIGZvciBtZW51CiAgICAgICAgICAgICAgICAgICAgICAgIFkgIDogb3V0IExpbmVfUG9zaXRpb247ICAgICAtLSBQcm9wb3NlZCBMaW5lIGZvciBtZW51CkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICAgIHJldHVybiBQYW47CiAgICBlbmQgQ3JlYXRlOwogCi0gICBwcm9jZWR1cmUgRGVzdHJveSAoRiA6IGluIEZvcm07CisgICBwcm9jZWR1cmUgRGVzdHJveSAoRiA6IEZvcm07CiAgICAgICAgICAgICAgICAgICAgICAgUCA6IGluIG91dCBQYW5lbCkKICAgIGlzCiAgICAgICBXLCBTIDogV2luZG93OwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLWF1eC5hZHMgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8tYXV4LmFkcwppbmRleCAyMzE3ZTE0Li43ZTdmN2NkIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8tYXV4LmFkcworKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8tYXV4LmFkcwpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyBQIEUgQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDksMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw3ICszNSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuOSAkCistLSAgJFJldmlzaW9uOiAxLjExICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7CkBAIC00NCwxMiArNDQsMTIgQEAKIAogcGFja2FnZSBTYW1wbGUuRm9ybV9EZW1vLkF1eCBpcwogCi0gICBwcm9jZWR1cmUgR2VvbWV0cnkgKEYgIDogaW4gIEZvcm07CisgICBwcm9jZWR1cmUgR2VvbWV0cnkgKEYgIDogRm9ybTsKICAgICAgICAgICAgICAgICAgICAgICAgTCAgOiBvdXQgTGluZV9Db3VudDsKICAgICAgICAgICAgICAgICAgICAgICAgQyAgOiBvdXQgQ29sdW1uX0NvdW50OwogICAgICAgICAgICAgICAgICAgICAgICBZICA6IG91dCBMaW5lX1Bvc2l0aW9uOwogICAgICAgICAgICAgICAgICAgICAgICBYICA6IG91dCBDb2x1bW5fUG9zaXRpb24pOwotICAgLS0gIENhbGN1bGF0ZSB0aGUgZ2VvbWV0cnkgZm9yIGEgcGFuZWwgYmVlaW5nIGFibGUgdG8gYmUgdXNlZCB0byBkaXNwbGF5CisgICAtLSAgQ2FsY3VsYXRlIHRoZSBnZW9tZXRyeSBmb3IgYSBwYW5lbCBiZWluZyBhYmxlIHRvIGJlIHVzZWQgdG8gZGlzcGxheQogICAgLS0gIHRoZSBtZW51LgogCiAgICBmdW5jdGlvbiBDcmVhdGUgKEYgICAgIDogRm9ybTsKQEAgLTU5LDcgKzU5LDcgQEAKICAgIC0tICBDcmVhdGUgYSBwYW5lbCBkZWNvcmF0ZWQgd2l0aCBhIGZyYW1lIGFuZCB0aGUgdGl0bGUgYXQgdGhlIHNwZWNpZmllZAogICAgLS0gIHBvc2l0aW9uLiBUaGUgZGltZW5zaW9uIG9mIHRoZSBwYW5lbCBpcyBkZXJpdmVkIGZyb20gdGhlIG1lbnVzIGxheW91dC4KIAotICAgcHJvY2VkdXJlIERlc3Ryb3kgKEYgOiBpbiBGb3JtOworICAgcHJvY2VkdXJlIERlc3Ryb3kgKEYgOiBGb3JtOwogICAgICAgICAgICAgICAgICAgICAgIFAgOiBpbiBvdXQgUGFuZWwpOwogICAgLS0gIERlc3Ryb3kgYWxsIHRoZSB3aW5kb3dpbmcgc3RydWN0dXJlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBtZW51IGFuZAogICAgLS0gIHBhbmVsLgpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLWhhbmRsZXIuYWRiIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLWhhbmRsZXIuYWRiCmluZGV4IGFmZTg2ZjcuLmQ4NzFjMWMgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby1oYW5kbGVyLmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8taGFuZGxlci5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjEzICQKLS0tICAkRGF0ZTogMjAwNC8wOC8yMSAyMTozNzowMCAkCistLSAgJFJldmlzaW9uOiAxLjE0ICQKKy0tICAkRGF0ZTogMjAwOS8xMi8yNiAxNzozODo1OCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggU2FtcGxlLkZvcm1fRGVtby5BdXg7CkBAIC00NSw4ICs0NSw4IEBACiAKICAgIHBhY2thZ2UgQXV4IHJlbmFtZXMgU2FtcGxlLkZvcm1fRGVtby5BdXg7CiAKLSAgIHByb2NlZHVyZSBEcml2ZV9NZSAoRiAgICAgOiBpbiBGb3JtOwotICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IGluIFN0cmluZyA6PSAiIikKKyAgIHByb2NlZHVyZSBEcml2ZV9NZSAoRiAgICAgOiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IFN0cmluZyA6PSAiIikKICAgIGlzCiAgICAgICBMIDogTGluZV9Db3VudDsKICAgICAgIEMgOiBDb2x1bW5fQ291bnQ7CkBAIC01NywxMCArNTcsMTAgQEAKICAgICAgIERyaXZlX01lIChGLCBZLCBYLCBUaXRsZSk7CiAgICBlbmQgRHJpdmVfTWU7CiAKLSAgIHByb2NlZHVyZSBEcml2ZV9NZSAoRiAgICAgOiBpbiBGb3JtOwotICAgICAgICAgICAgICAgICAgICAgICBMaW4gICA6IGluIExpbmVfUG9zaXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgIENvbCAgIDogaW4gQ29sdW1uX1Bvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IGluIFN0cmluZyA6PSAiIikKKyAgIHByb2NlZHVyZSBEcml2ZV9NZSAoRiAgICAgOiBGb3JtOworICAgICAgICAgICAgICAgICAgICAgICBMaW4gICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIENvbCAgIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IFN0cmluZyA6PSAiIikKICAgIGlzCiAgICAgICBQYW4gOiBQYW5lbCA6PSBBdXguQ3JlYXRlIChGLCBUaXRsZSwgTGluLCBDb2wpOwogICAgICAgViAgIDogQ3Vyc29yX1Zpc2liaWxpdHkgOj0gTm9ybWFsOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLWhhbmRsZXIuYWRzIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLWhhbmRsZXIuYWRzCmluZGV4IDRhNTY0MTIuLjdkODc1YTAgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby1oYW5kbGVyLmFkcworKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8taGFuZGxlci5hZHMKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDAzLDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsNyArMzUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjkgJAorLS0gICRSZXZpc2lvbjogMS4xMCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKQEAgLTUxLDE0ICs1MSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYW4gOiBQYW5lbCkgcmV0dXJuIEJvb2xlYW47CiBwYWNrYWdlIFNhbXBsZS5Gb3JtX0RlbW8uSGFuZGxlciBpcwogCi0gICBwcm9jZWR1cmUgRHJpdmVfTWUgKEYgICAgIDogaW4gRm9ybTsKLSAgICAgICAgICAgICAgICAgICAgICAgTGluICAgOiBpbiBMaW5lX1Bvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgICAgICBDb2wgICA6IGluIENvbHVtbl9Qb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgOiBpbiBTdHJpbmcgOj0gIiIpOworICAgcHJvY2VkdXJlIERyaXZlX01lIChGICAgICA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgIExpbiAgIDogTGluZV9Qb3NpdGlvbjsKKyAgICAgICAgICAgICAgICAgICAgICAgQ29sICAgOiBDb2x1bW5fUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlIDogU3RyaW5nIDo9ICIiKTsKICAgIC0tICBQb3NpdGlvbiB0aGUgbWVudSBhdCB0aGUgZ2l2ZW4gcG9pbnQgYW5kIGRyaXZlIGl0LgogCi0gICBwcm9jZWR1cmUgRHJpdmVfTWUgKEYgICAgIDogaW4gRm9ybTsKLSAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgOiBpbiBTdHJpbmcgOj0gIiIpOworICAgcHJvY2VkdXJlIERyaXZlX01lIChGICAgICA6IEZvcm07CisgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlIDogU3RyaW5nIDo9ICIiKTsKICAgIC0tICBDZW50ZXIgbWVudSBhbmQgZHJpdmUgaXQuCiAKIGVuZCBTYW1wbGUuRm9ybV9EZW1vLkhhbmRsZXI7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8uYWRiIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZm9ybV9kZW1vLmFkYgppbmRleCBlMjZhNWQ5Li5lZDg0NTI2IDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mb3JtX2RlbW8uYWRiCisrKyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZvcm1fZGVtby5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjE1ICQKLS0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiAkCistLSAgJFJldmlzaW9uOiAxLjE2ICQKKy0tICAkRGF0ZTogMjAxMS8wMy8yMyAwMDo0NDoxMiAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7CkBAIC0xMDgsMTYgKzEwOCwxNiBAQAogICAgICAgTm90ZXBhZCAoIkZPUk0tUEFEMDAiKTsKICAgICAgIERlZmF1bHRfTGFiZWxzOwogCi0gICAgICBTZXRfRmllbGRfVHlwZSAoRkEgKDYpLCBFbnVtX0ZpZWxkKTsKLSAgICAgIFNldF9GaWVsZF9UeXBlIChGQSAoNyksIElfRik7Ci0gICAgICBTZXRfRmllbGRfVHlwZSAoRkEgKDgpLCBNZnQpOworICAgICAgU2V0X0ZpZWxkX1R5cGUgKEZBLmFsbCAoNiksIEVudW1fRmllbGQpOworICAgICAgU2V0X0ZpZWxkX1R5cGUgKEZBLmFsbCAoNyksIElfRik7CisgICAgICBTZXRfRmllbGRfVHlwZSAoRkEuYWxsICg4KSwgTWZ0KTsKIAogICAgICAgRjEgOj0gbmV3IFVzZXJfRGF0YScoRGF0YSA9PiA0NzExKTsKLSAgICAgIEZsZF9VLlNldF9Vc2VyX0RhdGEgKEZBICgxKSwgRjEpOworICAgICAgRmxkX1UuU2V0X1VzZXJfRGF0YSAoRkEuYWxsICgxKSwgRjEpOwogCiAgICAgICBGaC5Ecml2ZV9NZSAoRnJtKTsKIAotICAgICAgRmxkX1UuR2V0X1VzZXJfRGF0YSAoRkEgKDEpLCBGMik7CisgICAgICBGbGRfVS5HZXRfVXNlcl9EYXRhIChGQS5hbGwgKDEpLCBGMik7CiAgICAgICBwcmFnbWEgQXNzZXJ0IChGMSA9IEYyKTsKICAgICAgIHByYWdtYSBBc3NlcnQgKEYxLkRhdGEgPSBGMi5EYXRhKTsKIApkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZnVuY3Rpb25fa2V5X3NldHRpbmcuYWRiIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZnVuY3Rpb25fa2V5X3NldHRpbmcuYWRiCmluZGV4IGU0MGU0YTQuLjRmZjcwYmUgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZ1bmN0aW9uX2tleV9zZXR0aW5nLmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mdW5jdGlvbl9rZXlfc2V0dGluZy5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgsMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA5LDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjEzICQKLS0tICAkRGF0ZTogMjAwNC8wOC8yMSAyMTozNzowMCAkCistLSAgJFJldmlzaW9uOiAxLjE1ICQKKy0tICAkRGF0ZTogMjAxMS8wMy8yMyAwMDo0NDoxMiAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggQWRhLlVuY2hlY2tlZF9EZWFsbG9jYXRpb247CkBAIC04MSwyNSArODEsMjUgQEAKIAogICAgVG9wX09mX1N0YWNrIDogRW52X1B0ciA6PSBudWxsOwogCi0gICBwcm9jZWR1cmUgUHVzaF9FbnZpcm9ubWVudCAoS2V5ICAgOiBpbiBTdHJpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXQgOiBpbiBCb29sZWFuIDo9IFRydWUpCisgICBwcm9jZWR1cmUgUHVzaF9FbnZpcm9ubWVudCAoS2V5ICAgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXQgOiBCb29sZWFuIDo9IFRydWUpCiAgICBpcwogICAgICAgUCA6IGNvbnN0YW50IEVudl9QdHIgOj0gbmV3IEtleV9FbnZpcm9ubWVudCAoTnVtYmVyX09mX0tleXMpOwogICAgYmVnaW4KICAgICAgIC0tICBTdG9yZSB0aGUgY3VycmVudCBsYWJlbHMgaW4gdGhlIGVudmlyb25tZW50CiAgICAgICBmb3IgSSBpbiAxIC4uIE51bWJlcl9PZl9LZXlzIGxvb3AKLSAgICAgICAgIEdldF9Tb2Z0X0xhYmVsX0tleSAoSSwgUC5MYWJlbHMgKEkpKTsKKyAgICAgICAgIEdldF9Tb2Z0X0xhYmVsX0tleSAoSSwgUC5hbGwuTGFiZWxzIChJKSk7CiAgICAgICAgICBpZiBSZXNldCB0aGVuCiAgICAgICAgICAgICBTZXRfU29mdF9MYWJlbF9LZXkgKEksICIgIik7CiAgICAgICAgICBlbmQgaWY7CiAgICAgICBlbmQgbG9vcDsKLSAgICAgIFAuUHJldiA6PSBUb3BfT2ZfU3RhY2s7CisgICAgICBQLmFsbC5QcmV2IDo9IFRvcF9PZl9TdGFjazsKICAgICAgIC0tICBub3cgc3RvcmUgYWN0aXZlIGhlbHAgY29udGV4dCBhbmQgbm90ZXBhZAotICAgICAgUC5IZWxwIDo9IEFjdGl2ZV9Db250ZXh0OwotICAgICAgUC5Ob3RlcGFkIDo9IEFjdGl2ZV9Ob3RlcGFkOworICAgICAgUC5hbGwuSGVscCA6PSBBY3RpdmVfQ29udGV4dDsKKyAgICAgIFAuYWxsLk5vdGVwYWQgOj0gQWN0aXZlX05vdGVwYWQ7CiAgICAgICAtLSAgVGhlIG5vdGVwYWQgbXVzdCBub3cgdmFuaXNoIGFuZCB0aGUgbmV3IG5vdGVwYWQgaXMgZW1wdHkuCi0gICAgICBpZiBQLk5vdGVwYWQgLz0gTnVsbF9QYW5lbCB0aGVuCi0gICAgICAgICBIaWRlIChQLk5vdGVwYWQpOworICAgICAgaWYgUC5hbGwuTm90ZXBhZCAvPSBOdWxsX1BhbmVsIHRoZW4KKyAgICAgICAgIEhpZGUgKFAuYWxsLk5vdGVwYWQpOwogICAgICAgICAgVXBkYXRlX1BhbmVsczsKICAgICAgIGVuZCBpZjsKICAgICAgIEFjdGl2ZV9Ob3RlcGFkIDo9IE51bGxfUGFuZWw7CkBAIC0xMTksMTQgKzExOSwxNCBAQAogICAgICAgICAgcmFpc2UgRnVuY3Rpb25fS2V5X1N0YWNrX0Vycm9yOwogICAgICAgZWxzZQogICAgICAgICAgZm9yIEkgaW4gMSAuLiBOdW1iZXJfT2ZfS2V5cyBsb29wCi0gICAgICAgICAgICBTZXRfU29mdF9MYWJlbF9LZXkgKEksIFAuTGFiZWxzIChJKSwgSnVzdGlmaWNhdGlvbik7CisgICAgICAgICAgICBTZXRfU29mdF9MYWJlbF9LZXkgKEksIFAuYWxsLkxhYmVscyAoSSksIEp1c3RpZmljYXRpb24pOwogICAgICAgICAgZW5kIGxvb3A7CiAgICAgICAgICBwcmFnbWEgQXNzZXJ0IChBY3RpdmVfQ29udGV4dCAvPSBudWxsKTsKICAgICAgICAgIFJlbGVhc2VfU3RyaW5nIChBY3RpdmVfQ29udGV4dCk7Ci0gICAgICAgICBBY3RpdmVfQ29udGV4dCA6PSBQLkhlbHA7CisgICAgICAgICBBY3RpdmVfQ29udGV4dCA6PSBQLmFsbC5IZWxwOwogICAgICAgICAgUmVmcmVzaF9Tb2Z0X0xhYmVsX0tleXNfV2l0aG91dF9VcGRhdGU7Ci0gICAgICAgICBOb3RlcGFkX1RvX0NvbnRleHQgKFAuTm90ZXBhZCk7Ci0gICAgICAgICBUb3BfT2ZfU3RhY2sgOj0gUC5QcmV2OworICAgICAgICAgTm90ZXBhZF9Ub19Db250ZXh0IChQLmFsbC5Ob3RlcGFkKTsKKyAgICAgICAgIFRvcF9PZl9TdGFjayA6PSBQLmFsbC5QcmV2OwogICAgICAgICAgUmVsZWFzZV9FbnZpcm9ubWVudCAoUCk7CiAgICAgICBlbmQgaWY7CiAgICBlbmQgUG9wX0Vudmlyb25tZW50OwpAQCAtMTUwLDE3ICsxNTAsMTcgQEAKICAgICAgIGVsc2UKICAgICAgICAgIGxvb3AKICAgICAgICAgICAgIGV4aXQgd2hlbiBQID0gbnVsbDsKLSAgICAgICAgICAgIGlmIFAuSGVscC5hbGwgPSBLZXkgdGhlbgorICAgICAgICAgICAgaWYgUC5hbGwuSGVscC5hbGwgPSBLZXkgdGhlbgogICAgICAgICAgICAgICAgcmV0dXJuIFRydWU7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICBQIDo9IFAuUHJldjsKKyAgICAgICAgICAgICAgIFAgOj0gUC5hbGwuUHJldjsKICAgICAgICAgICAgIGVuZCBpZjsKICAgICAgICAgIGVuZCBsb29wOwogICAgICAgICAgcmV0dXJuIEZhbHNlOwogICAgICAgZW5kIGlmOwogICAgZW5kIEZpbmRfQ29udGV4dDsKIAotICAgcHJvY2VkdXJlIE5vdGVwYWRfVG9fQ29udGV4dCAoUGFuIDogaW4gUGFuZWwpCisgICBwcm9jZWR1cmUgTm90ZXBhZF9Ub19Db250ZXh0IChQYW4gOiBQYW5lbCkKICAgIGlzCiAgICAgICBXIDogV2luZG93OwogICAgYmVnaW4KZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZ1bmN0aW9uX2tleV9zZXR0aW5nLmFkcyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWZ1bmN0aW9uX2tleV9zZXR0aW5nLmFkcwppbmRleCBlMjBmNjE5Li40MTg4MTU4IDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1mdW5jdGlvbl9rZXlfc2V0dGluZy5hZHMKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtZnVuY3Rpb25fa2V5X3NldHRpbmcuYWRzCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwOSwyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDcgKzM1LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbAotLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICAkUmV2aXNpb246IDEuMTEgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOwpAQCAtNDUsOCArNDUsOCBAQAogLS0KIHBhY2thZ2UgU2FtcGxlLkZ1bmN0aW9uX0tleV9TZXR0aW5nIGlzCiAKLSAgIHByb2NlZHVyZSBQdXNoX0Vudmlyb25tZW50IChLZXkgICA6IGluIFN0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNldCA6IGluIEJvb2xlYW4gOj0gVHJ1ZSk7CisgICBwcm9jZWR1cmUgUHVzaF9FbnZpcm9ubWVudCAoS2V5ICAgOiBTdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXQgOiBCb29sZWFuIDo9IFRydWUpOwogICAgLS0gIFB1c2ggdGhlIGRlZmluaXRpb24gb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24ga2V5cyBvbiBhbiBpbnRlcm5hbAogICAgLS0gIHN0YWNrLiBJZiB0aGUgcmVzZXQgZmxhZyBpcyB0cnVlLCBhbGwgbGFiZWxzIGFyZSByZXNldCB3aGlsZQogICAgLS0gIHB1c2hlZCwgc28gdGhlIG5ldyBlbnZpcm9ubWVudCBjYW4gYXNzdW1lIGEgdGFidWxhIHJhc2EuCkBAIC02MiwxMyArNjIsMTMgQEAKICAgIC0tICBJbml0aWFsaXplIHRoZSBlbnZpcm9ubWVudAogCiAgICBmdW5jdGlvbiBDb250ZXh0IHJldHVybiBTdHJpbmc7Ci0gICAtLSAgUmV0dXJuIHRoZSBjdXJyZW50IGNvbnRleHQgaWRlbnRpdGZpZXIKKyAgIC0tICBSZXR1cm4gdGhlIGN1cnJlbnQgY29udGV4dCBpZGVudGlmaWVyCiAKICAgIGZ1bmN0aW9uIEZpbmRfQ29udGV4dCAoS2V5IDogU3RyaW5nKSByZXR1cm4gQm9vbGVhbjsKICAgIC0tICBMb29rIGZvciBhIGNvbnRleHQsIHJldHVybiB0cnVlIGlmIGl0IGlzIGluIHRoZSBzdGFjaywKICAgIC0tICBmYWxzZSBvdGhlcndpc2UuCiAKLSAgIHByb2NlZHVyZSBOb3RlcGFkX1RvX0NvbnRleHQgKFBhbiA6IGluIFBhbmVsKTsKKyAgIHByb2NlZHVyZSBOb3RlcGFkX1RvX0NvbnRleHQgKFBhbiA6IFBhbmVsKTsKICAgIC0tICBBZGQgYSBwYW5lbCByZXByZXNlbnRpbmcgYSBub3RlcGFkIHRvIHRoZSBjdXJyZW50IGNvbnRleHQuCiAKICAgIEZ1bmN0aW9uX0tleV9TdGFja19FcnJvciA6IGV4Y2VwdGlvbjsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlYWRlcl9oYW5kbGVyLmFkYiBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlYWRlcl9oYW5kbGVyLmFkYgppbmRleCBkMTk4ZDY2Li5mNTUyZTIwIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1oZWFkZXJfaGFuZGxlci5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtaGVhZGVyX2hhbmRsZXIuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAxMSwyMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDE0ICszNSwxNiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjE2ICQKLS0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiAkCistLSAgJFJldmlzaW9uOiAxLjIwICQKKy0tICAkRGF0ZTogMjAxNC8wOS8xMyAxOToxMDoxOCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggQWRhLkNhbGVuZGFyOyB1c2UgQWRhLkNhbGVuZGFyOwogd2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU8uSW50ZWdlcl9JTzsKIHdpdGggU2FtcGxlLk1hbmlmZXN0OyB1c2UgU2FtcGxlLk1hbmlmZXN0OwogCitwcmFnbWEgRWxhYm9yYXRlX0FsbCAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lvLkludGVnZXJfSU8pOworCiAtLSAgVGhpcyBwYWNrYWdlIGhhbmRsZXMgdGhlIHBhaW50aW5nIG9mIHRoZSBoZWFkZXIgbGluZSBvZiB0aGUgc2NyZWVuLgogLS0KIHBhY2thZ2UgYm9keSBTYW1wbGUuSGVhZGVyX0hhbmRsZXIgaXMKQEAgLTY1LDcgKzY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1ucyA6IENvbHVtbl9Db3VudCkgcmV0dXJuIEludGVnZXI7CiAgICBwcmFnbWEgQ29udmVudGlvbiAoQywgSW5pdF9IZWFkZXJfV2luZG93KTsKIAotICAgcHJvY2VkdXJlIEludGVybmFsX1VwZGF0ZV9IZWFkZXJfV2luZG93IChEb19VcGRhdGUgOiBpbiBCb29sZWFuKTsKKyAgIHByb2NlZHVyZSBJbnRlcm5hbF9VcGRhdGVfSGVhZGVyX1dpbmRvdyAoRG9fVXBkYXRlIDogQm9vbGVhbik7CiAKICAgIC0tICBUaGUgaW5pdGlhbGl6YXRpb24gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIEluaXRfU2NyZWVuLiBJdCBzdGVhbHMgdHdvCiAgICAtLSAgbGluZXMgZnJvbSB0aGUgdG9wIG9mIHRoZSBzY3JlZW4uCkBAIC03NSwxMSArNzcsMTEgQEAKICAgICAgIFJpcF9PZmZfTGluZXMgKDIsIEluaXRfSGVhZGVyX1dpbmRvdydBY2Nlc3MpOwogICAgZW5kIEluaXRfSGVhZGVyX0hhbmRsZXI7CiAKLSAgIHByb2NlZHVyZSBOX091dCAoTiA6IGluIEludGVnZXIpOworICAgcHJvY2VkdXJlIE5fT3V0IChOIDogSW50ZWdlcik7CiAKICAgIC0tICBFbWl0IGEgdHdvIGRpZ2l0IG51bWJlciBhbmQgZW5zdXJlIHRoYXQgYSBsZWFkaW5nIHplcm8gaXMgZ2VuZXJhdGVkIGlmCiAgICAtLSAgbmVjZXNzYXJ5LgotICAgcHJvY2VkdXJlIE5fT3V0IChOIDogaW4gSW50ZWdlcikKKyAgIHByb2NlZHVyZSBOX091dCAoTiA6IEludGVnZXIpCiAgICBpcwogICAgYmVnaW4KICAgICAgIGlmIE4gPCAxMCB0aGVuCkBAIC05Miw3ICs5NCw3IEBACiAKICAgIC0tICBQYWludCB0aGUgaGVhZGVyIHdpbmRvdy4gVGhlIGlucHV0IHBhcmFtZXRlciBpcyBhIGZsYWcgaW5kaWNhdGluZwogICAgLS0gIHdoZXRoZXIgb3Igbm90IHRoZSBzY3JlZW4gc2hvdWxkIGJlIHVwZGF0ZWQgcGh5c2ljYWxseSBhZnRlciBwYWludGluZy4KLSAgIHByb2NlZHVyZSBJbnRlcm5hbF9VcGRhdGVfSGVhZGVyX1dpbmRvdyAoRG9fVXBkYXRlIDogaW4gQm9vbGVhbikKKyAgIHByb2NlZHVyZSBJbnRlcm5hbF9VcGRhdGVfSGVhZGVyX1dpbmRvdyAoRG9fVXBkYXRlIDogQm9vbGVhbikKICAgIGlzCiAgICAgICB0eXBlIE1vbnRoX05hbWVfQXJyYXkgaXMKICAgICAgICAgIGFycmF5IChNb250aF9OdW1iZXInRmlyc3QgLi4gTW9udGhfTnVtYmVyJ0xhc3QpIG9mIFN0cmluZyAoMSAuLiA5KTsKQEAgLTExOSw4ICsxMjEsMTEgQEAKICAgICAgIEQgICAgICA6IGNvbnN0YW50IERheV9OdW1iZXIgICA6PSBEYXkgKE5vdyk7CiAgICBiZWdpbgogICAgICAgaWYgSGVhZGVyX1dpbmRvdyAvPSBOdWxsX1dpbmRvdyB0aGVuCi0gICAgICAgICBpZiBNaW51dGUgLz0gRGlzcGxheV9NaW4gb3IgZWxzZSBIb3VyIC89IERpc3BsYXlfSG91cgotICAgICAgICAgICBvciBlbHNlIERpc3BsYXlfRGF5IC89IEQgb3IgZWxzZSBEaXNwbGF5X01vbnRoIC89IE1vbiB0aGVuCisgICAgICAgICBpZiBNaW51dGUgLz0gRGlzcGxheV9NaW4KKyAgICAgICAgICAgb3IgZWxzZSBIb3VyIC89IERpc3BsYXlfSG91cgorICAgICAgICAgICBvciBlbHNlIERpc3BsYXlfRGF5IC89IEQKKyAgICAgICAgICAgb3IgZWxzZSBEaXNwbGF5X01vbnRoIC89IE1vbgorICAgICAgICAgdGhlbgogICAgICAgICAgICAgTW92ZV9DdXJzb3IgKEhlYWRlcl9XaW5kb3csIDAsIDApOwogICAgICAgICAgICAgTl9PdXQgKEQpOyBBZGQgKEhlYWRlcl9XaW5kb3csICcuJyk7CiAgICAgICAgICAgICBBZGQgKEhlYWRlcl9XaW5kb3csIE1vbnRoX05hbWVzIChNb24pKTsKQEAgLTE2OSw3ICsxNzQsNyBAQAogICAgICAgICAgUG9zIDo9IENvbHVtbnMgLSBDb2x1bW5fUG9zaXRpb24gKFRpdGxlJ0xlbmd0aCk7CiAgICAgICAgICBBZGQgKFdpbiwgMCwgUG9zIC8gMiwgVGl0bGUpOwogICAgICAgICAgLS0gIEluIHRoaXMgcGhhc2Ugd2UgbXVzdCBub3QgYWxsb3cgYSBwaHlzaWNhbCB1cGRhdGUsIGJlY2F1c2UKLSAgICAgICAgIC0tICBuY3Vyc2VzIGlzbrR0IHByb3Blcmx5IGluaXRpYWxpemVkIGF0IHRoaXMgcG9pbnQuCisgICAgICAgICAtLSAgbmN1cnNlcyBpcyBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQgYXQgdGhpcyBwb2ludC4KICAgICAgICAgIEludGVybmFsX1VwZGF0ZV9IZWFkZXJfV2luZG93IChGYWxzZSk7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgIGVsc2UKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlbHBlcnMuYWRiIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtaGVscGVycy5hZGIKaW5kZXggZDA0ODUzZS4uY2VlZjI2OCAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtaGVscGVycy5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtaGVscGVycy5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiwyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA5LDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsMTkgKzM1LDE5IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuMTIgJAotLS0gICREYXRlOiAyMDA4LzA3LzI2IDE4OjQ4OjA4ICQKKy0tICAkUmV2aXNpb246IDEuMTQgJAorLS0gICREYXRlOiAyMDExLzAzLzE5IDEyOjEzOjIxICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBTYW1wbGUuRXhwbGFuYXRpb247IHVzZSBTYW1wbGUuRXhwbGFuYXRpb247CiAKLS0tICBUaGlzIHBhY2thZ2UgY29udGFpbnMgc29tZSBjb252ZW5pYW50IGhlbHBlciByb3V0aW5lcyB1c2VkIHRocm91Z2hvdXQKKy0tICBUaGlzIHBhY2thZ2UgY29udGFpbnMgc29tZSBjb252ZW5pZW50IGhlbHBlciByb3V0aW5lcyB1c2VkIHRocm91Z2hvdXQKIC0tICB0aGlzIGV4YW1wbGUuCiAtLQogcGFja2FnZSBib2R5IFNhbXBsZS5IZWxwZXJzIGlzCiAKLSAgIHByb2NlZHVyZSBXaW5kb3dfVGl0bGUgKFdpbiAgIDogaW4gV2luZG93OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgOiBpbiBTdHJpbmcpCisgICBwcm9jZWR1cmUgV2luZG93X1RpdGxlIChXaW4gICA6IFdpbmRvdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlIDogU3RyaW5nKQogICAgaXMKICAgICAgIEhlaWdodCA6IExpbmVfQ291bnQ7CiAgICAgICBXaWR0aCAgOiBDb2x1bW5fQ291bnQ7CmRpZmYgLS1naXQgYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1oZWxwZXJzLmFkcyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlbHBlcnMuYWRzCmluZGV4IGMxYzhlNzkuLjI4ZTg5YmIgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlbHBlcnMuYWRzCisrKyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWhlbHBlcnMuYWRzCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwOSwyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDE4ICszNSwxOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjkgJAorLS0gICRSZXZpc2lvbjogMS4xMSAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7CiAKLS0tICBUaGlzIHBhY2thZ2UgY29udGFpbnMgc29tZSBjb252ZW5pYW50IGhlbHBlciByb3V0aW5lcyB1c2VkIHRocm91Z2hvdXQKKy0tICBUaGlzIHBhY2thZ2UgY29udGFpbnMgc29tZSBjb252ZW5pZW50IGhlbHBlciByb3V0aW5lcyB1c2VkIHRocm91Z2hvdXQKIC0tICB0aGlzIGV4YW1wbGUuCiAtLQogcGFja2FnZSBTYW1wbGUuSGVscGVycyBpcwogCi0gICBwcm9jZWR1cmUgV2luZG93X1RpdGxlIChXaW4gICA6IGluIFdpbmRvdzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlIDogaW4gU3RyaW5nKTsKKyAgIHByb2NlZHVyZSBXaW5kb3dfVGl0bGUgKFdpbiAgIDogV2luZG93OworICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGUgOiBTdHJpbmcpOwogICAgLS0gIFB1dCBhIHRpdGxlIHN0cmluZyBpbnRvIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB3aW5kb3cKIAogICAgcHJvY2VkdXJlIE5vdF9JbXBsZW1lbnRlZDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLWtleWJvYXJkX2hhbmRsZXIuYWRiIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUta2V5Ym9hcmRfaGFuZGxlci5hZGIKaW5kZXggZmRhYzA1NC4uMWQzZjIwYyAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUta2V5Ym9hcmRfaGFuZGxlci5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUta2V5Ym9hcmRfaGFuZGxlci5hZGIKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgTyBEIFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA2LDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjE0ICQKLS0tICAkRGF0ZTogMjAwNi8wNi8yNSAxNDozMDoyMiAkCistLSAgJFJldmlzaW9uOiAxLjE2ICQKKy0tICAkRGF0ZTogMjAxMS8wMy8yMyAwMDozNDoyNCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggQWRhLlN0cmluZ3M7IHVzZSBBZGEuU3RyaW5nczsKQEAgLTExMSw3ICsxMTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyIDogU3RyaW5nICgxIC4uIFBvc2l0aXZlIChDb2x1bW5zIC0gMTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIENtZGMgOiBTdHJpbmcgKDEgLi4gOCk7CiAgICAgICAgICAgICAgICAgICAgICBiZWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgR2V0X0J1ZmZlciAoRmxkID0+IEZBICgyKSwgU3RyID0+IEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgICAgICBHZXRfQnVmZmVyIChGbGQgPT4gRkEuYWxsICgyKSwgU3RyID0+IEJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBUcmltIChCdWZmZXIsIExlZnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgQnVmZmVyICgxKSAvPSAnICcgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ21kYyA6PSBUb19VcHBlciAoQnVmZmVyIChDbWRjJ1JhbmdlKSk7CkBAIC0xNTcsOCArMTU3LDggQEAKICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKICAgICAgICAgICAgICAgIGVuZCBsb29wOwogICAgICAgICAgICAgICAgRW51bV9GaWVsZCA6PSBDcmVhdGUgKEVudW1fSW5mbywgVHJ1ZSk7Ci0gICAgICAgICAgICAgICBTZXRfRmllbGRfVHlwZSAoRkEgKDIpLCBFbnVtX0ZpZWxkKTsKLSAgICAgICAgICAgICAgIFNldF9CYWNrZ3JvdW5kIChGQSAoMiksIE5vcm1hbF9WaWRlbyk7CisgICAgICAgICAgICAgICBTZXRfRmllbGRfVHlwZSAoRkEuYWxsICgyKSwgRW51bV9GaWVsZCk7CisgICAgICAgICAgICAgICBTZXRfQmFja2dyb3VuZCAoRkEuYWxsICgyKSwgTm9ybWFsX1ZpZGVvKTsKIAogICAgICAgICAgICAgICAgRmguRHJpdmVfTWUgKEZybSwgTGluZXMgLSAzLCAwKTsKICAgICAgICAgICAgICAgIERlbGV0ZSAoRnJtKTsKQEAgLTE3NCw3ICsxNzQsNyBAQAogICAgICAgU2V0X1RpbWVvdXRfTW9kZSAoV2luLCBEZWxheWVkLCAzMDAwMCk7CiAgICAgICBsb29wCiAgICAgICAgICBLIDo9IEdldF9LZXlzdHJva2UgKFdpbik7Ci0gICAgICAgICBpZiBLID0gS2V5X05vbmUgdGhlbiAgLS0gYSB0aW1lb3V0IG9jY3VyZWQKKyAgICAgICAgIGlmIEsgPSBLZXlfTm9uZSB0aGVuICAtLSBhIHRpbWVvdXQgb2NjdXJyZWQKICAgICAgICAgICAgIFVwZGF0ZV9IZWFkZXJfV2luZG93OwogICAgICAgICAgZWxzaWYgSyA9IDMgYW5kIHRoZW4gbm90IEluX0NvbW1hbmQgIHRoZW4gIC0tIENUUkwtQwogICAgICAgICAgICAgSyA6PSBDb21tYW5kOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWF1eC5hZGIgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8tYXV4LmFkYgppbmRleCBiOWIyMzdjLi4wOTFmMDhiIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8tYXV4LmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8tYXV4LmFkYgpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OCwyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSw4ICszNSw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC0tICBBdXRob3I6ICBKdWVyZ2VuIFBmZWlmZXIsIDE5OTYKIC0tICBWZXJzaW9uIENvbnRyb2wKLS0tICAkUmV2aXNpb246IDEuMTMgJAotLS0gICREYXRlOiAyMDA2LzA2LzI1IDE0OjMwOjIyICQKKy0tICAkUmV2aXNpb246IDEuMTQgJAorLS0gICREYXRlOiAyMDA5LzEyLzI2IDE3OjM4OjU4ICQKIC0tICBCaW5kaW5nIFZlcnNpb24gMDEuMDAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogd2l0aCBBZGEuQ2hhcmFjdGVycy5MYXRpbl8xOyB1c2UgQWRhLkNoYXJhY3RlcnMuTGF0aW5fMTsKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogcGFja2FnZSBib2R5IFNhbXBsZS5NZW51X0RlbW8uQXV4IGlzCiAKLSAgIHByb2NlZHVyZSBHZW9tZXRyeSAoTSAgOiBpbiAgTWVudTsKKyAgIHByb2NlZHVyZSBHZW9tZXRyeSAoTSAgOiBNZW51OwogICAgICAgICAgICAgICAgICAgICAgICBMICA6IG91dCBMaW5lX0NvdW50OwogICAgICAgICAgICAgICAgICAgICAgICBDICA6IG91dCBDb2x1bW5fQ291bnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIFkgIDogb3V0IExpbmVfUG9zaXRpb247CkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIEZ5IDogb3V0IExpbmVfUG9zaXRpb247CiAgICAgICAgICAgICAgICAgICAgICAgIEZ4IDogb3V0IENvbHVtbl9Qb3NpdGlvbik7CiAKLSAgIHByb2NlZHVyZSBHZW9tZXRyeSAoTSAgOiBpbiAgTWVudTsKKyAgIHByb2NlZHVyZSBHZW9tZXRyeSAoTSAgOiBNZW51OwogICAgICAgICAgICAgICAgICAgICAgICBMICA6IG91dCBMaW5lX0NvdW50OyAgICAgICAgLS0gTGluZXMgdXNlZCBmb3IgbWVudQogICAgICAgICAgICAgICAgICAgICAgICBDICA6IG91dCBDb2x1bW5fQ291bnQ7ICAgICAgLS0gQ29sdW1ucyB1c2VkIGZvciBtZW51CiAgICAgICAgICAgICAgICAgICAgICAgIFkgIDogb3V0IExpbmVfUG9zaXRpb247ICAgICAtLSBQcm9wb3NlZCBMaW5lIGZvciBtZW51CkBAIC04MiwxMSArODIsMTEgQEAKIAogICAgZW5kIEdlb21ldHJ5OwogCi0gICBwcm9jZWR1cmUgR2VvbWV0cnkgKE0gOiBpbiAgTWVudTsKKyAgIHByb2NlZHVyZSBHZW9tZXRyeSAoTSA6IE1lbnU7CiAgICAgICAgICAgICAgICAgICAgICAgIEwgOiBvdXQgTGluZV9Db3VudDsgICAgICAgIC0tIExpbmVzIHVzZWQgZm9yIG1lbnUKICAgICAgICAgICAgICAgICAgICAgICAgQyA6IG91dCBDb2x1bW5fQ291bnQ7ICAgICAgLS0gQ29sdW1ucyB1c2VkIGZvciBtZW51CiAgICAgICAgICAgICAgICAgICAgICAgIFkgOiBvdXQgTGluZV9Qb3NpdGlvbjsgICAgIC0tIFByb3Bvc2VkIExpbmUgZm9yIG1lbnUKLSAgICAgICAgICAgICAgICAgICAgICAgWCAgOiBvdXQgQ29sdW1uX1Bvc2l0aW9uKSAgLS0gUHJvcG9zZWQgQ29sdW1uIGZvciBtZW51CisgICAgICAgICAgICAgICAgICAgICAgIFggOiBvdXQgQ29sdW1uX1Bvc2l0aW9uKSAgIC0tIFByb3Bvc2VkIENvbHVtbiBmb3IgbWVudQogICAgaXMKICAgICAgIEZ5IDogTGluZV9Qb3NpdGlvbjsKICAgICAgIEZ4IDogQ29sdW1uX1Bvc2l0aW9uOwpAQCAtMTM0LDcgKzEzNCw3IEBACiAgICAgICByZXR1cm4gUGFuOwogICAgZW5kIENyZWF0ZTsKIAotICAgcHJvY2VkdXJlIERlc3Ryb3kgKE0gOiBpbiBNZW51OworICAgcHJvY2VkdXJlIERlc3Ryb3kgKE0gOiBNZW51OwogICAgICAgICAgICAgICAgICAgICAgIFAgOiBpbiBvdXQgUGFuZWwpCiAgICBpcwogICAgICAgVywgUyA6IFdpbmRvdzsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1hdXguYWRzIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWF1eC5hZHMKaW5kZXggOTY0ZTM4ZS4uZTgyYWVkZiAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWF1eC5hZHMKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWF1eC5hZHMKQEAgLTcsNyArNyw3IEBACiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgUCBFIEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBDb3B5cmlnaHQgKGMpIDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgLS0KKy0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA5LDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSAgLS0KIC0tIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgICAgICAgICAgICAtLQpAQCAtMzUsNyArMzUsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjkgJAorLS0gICRSZXZpc2lvbjogMS4xMSAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsgdXNlICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOwpAQCAtNDQsMTIgKzQ0LDEyIEBACiAKIHBhY2thZ2UgU2FtcGxlLk1lbnVfRGVtby5BdXggaXMKIAotICAgcHJvY2VkdXJlIEdlb21ldHJ5IChNICA6IGluICBNZW51OworICAgcHJvY2VkdXJlIEdlb21ldHJ5IChNICA6IE1lbnU7CiAgICAgICAgICAgICAgICAgICAgICAgIEwgIDogb3V0IExpbmVfQ291bnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIEMgIDogb3V0IENvbHVtbl9Db3VudDsKICAgICAgICAgICAgICAgICAgICAgICAgWSAgOiBvdXQgTGluZV9Qb3NpdGlvbjsKICAgICAgICAgICAgICAgICAgICAgICAgWCAgOiBvdXQgQ29sdW1uX1Bvc2l0aW9uKTsKLSAgIC0tICBDYWxjdWxhdGUgdGhlIGdlb21ldHJ5IGZvciBhIHBhbmVsIGJlZWluZyBhYmxlIHRvIGJlIHVzZWQgdG8gZGlzcGxheQorICAgLS0gIENhbGN1bGF0ZSB0aGUgZ2VvbWV0cnkgZm9yIGEgcGFuZWwgYmVpbmcgYWJsZSB0byBiZSB1c2VkIHRvIGRpc3BsYXkKICAgIC0tICB0aGUgbWVudS4KIAogICAgZnVuY3Rpb24gQ3JlYXRlIChNICAgICA6IE1lbnU7CkBAIC01OSw3ICs1OSw3IEBACiAgICAtLSAgQ3JlYXRlIGEgcGFuZWwgZGVjb3JhdGVkIHdpdGggYSBmcmFtZSBhbmQgdGhlIHRpdGxlIGF0IHRoZSBzcGVjaWZpZWQKICAgIC0tICBwb3NpdGlvbi4gVGhlIGRpbWVuc2lvbiBvZiB0aGUgcGFuZWwgaXMgZGVyaXZlZCBmcm9tIHRoZSBtZW51cyBsYXlvdXQuCiAKLSAgIHByb2NlZHVyZSBEZXN0cm95IChNIDogaW4gTWVudTsKKyAgIHByb2NlZHVyZSBEZXN0cm95IChNIDogTWVudTsKICAgICAgICAgICAgICAgICAgICAgICBQIDogaW4gb3V0IFBhbmVsKTsKICAgIC0tICBEZXN0cm95IGFsbCB0aGUgd2luZG93aW5nIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWVudSBhbmQKICAgIC0tICBwYW5lbC4KZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1oYW5kbGVyLmFkYiBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1oYW5kbGVyLmFkYgppbmRleCAxODc0N2U5Li44NGQyOWY2IDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8taGFuZGxlci5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWhhbmRsZXIuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNCwyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTE1LDcgKzE1LDcgQEAKIC0tIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgICAgICAtLQogLS0gZGlzdHJpYnV0ZSwgZGlzdHJpYnV0ZSB3aXRoIG1vZGlmaWNhdGlvbnMsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsICAgICAgIC0tCiAtLSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgICAgLS0KLS0tIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAtLQorLS0gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyA6ICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCAgLS0KIC0tIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLiAgICAgICAgICAgICAgICAgICAtLQpAQCAtMzUsOCArMzUsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAtLSAgQXV0aG9yOiAgSnVlcmdlbiBQZmVpZmVyLCAxOTk2CiAtLSAgVmVyc2lvbiBDb250cm9sCi0tLSAgJFJldmlzaW9uOiAxLjE1ICQKLS0tICAkRGF0ZTogMjAwNC8wOC8yMSAyMTozNzowMCAkCistLSAgJFJldmlzaW9uOiAxLjE2ICQKKy0tICAkRGF0ZTogMjAwOS8xMi8yNiAxNzozODo1OCAkCiAtLSAgQmluZGluZyBWZXJzaW9uIDAxLjAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHdpdGggU2FtcGxlLk1lbnVfRGVtby5BdXg7CkBAIC00Nyw4ICs0Nyw4IEBACiAKICAgIHBhY2thZ2UgQXV4IHJlbmFtZXMgU2FtcGxlLk1lbnVfRGVtby5BdXg7CiAKLSAgIHByb2NlZHVyZSBEcml2ZV9NZSAoTSAgICAgOiBpbiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IGluIFN0cmluZyA6PSAiIikKKyAgIHByb2NlZHVyZSBEcml2ZV9NZSAoTSAgICAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IFN0cmluZyA6PSAiIikKICAgIGlzCiAgICAgICBMIDogTGluZV9Db3VudDsKICAgICAgIEMgOiBDb2x1bW5fQ291bnQ7CkBAIC01OSwxMCArNTksMTAgQEAKICAgICAgIERyaXZlX01lIChNLCBZLCBYLCBUaXRsZSk7CiAgICBlbmQgRHJpdmVfTWU7CiAKLSAgIHByb2NlZHVyZSBEcml2ZV9NZSAoTSAgICAgOiBpbiBNZW51OwotICAgICAgICAgICAgICAgICAgICAgICBMaW4gICA6IGluIExpbmVfUG9zaXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgIENvbCAgIDogaW4gQ29sdW1uX1Bvc2l0aW9uOwotICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IGluIFN0cmluZyA6PSAiIikKKyAgIHByb2NlZHVyZSBEcml2ZV9NZSAoTSAgICAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICBMaW4gICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIENvbCAgIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IFN0cmluZyA6PSAiIikKICAgIGlzCiAgICAgICBNYXNrIDogRXZlbnRfTWFzayA6PSBOb19FdmVudHM7CiAgICAgICBPbGQgIDogRXZlbnRfTWFzazsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1oYW5kbGVyLmFkcyBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby1oYW5kbGVyLmFkcwppbmRleCAxYTgyZjlmLi5lOWVhYTZiIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8taGFuZGxlci5hZHMKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLWhhbmRsZXIuYWRzCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTIFAgRSBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMywyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDcgKzM1LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbAotLS0gICRSZXZpc2lvbjogMS45ICQKKy0tICAkUmV2aXNpb246IDEuMTAgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7CkBAIC01MSwxNCArNTEsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFuIDogUGFuZWwpIHJldHVybiBCb29sZWFuOwogcGFja2FnZSBTYW1wbGUuTWVudV9EZW1vLkhhbmRsZXIgaXMKIAotICAgcHJvY2VkdXJlIERyaXZlX01lIChNICAgICA6IGluIE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgIExpbiAgIDogaW4gTGluZV9Qb3NpdGlvbjsKLSAgICAgICAgICAgICAgICAgICAgICAgQ29sICAgOiBpbiBDb2x1bW5fUG9zaXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgIFRpdGxlIDogaW4gU3RyaW5nIDo9ICIiKTsKKyAgIHByb2NlZHVyZSBEcml2ZV9NZSAoTSAgICAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICBMaW4gICA6IExpbmVfUG9zaXRpb247CisgICAgICAgICAgICAgICAgICAgICAgIENvbCAgIDogQ29sdW1uX1Bvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IFN0cmluZyA6PSAiIik7CiAgICAtLSAgUG9zaXRpb24gdGhlIG1lbnUgYXQgdGhlIGdpdmVuIHBvaW50IGFuZCBkcml2ZSBpdC4KIAotICAgcHJvY2VkdXJlIERyaXZlX01lIChNICAgICA6IGluIE1lbnU7Ci0gICAgICAgICAgICAgICAgICAgICAgIFRpdGxlIDogaW4gU3RyaW5nIDo9ICIiKTsKKyAgIHByb2NlZHVyZSBEcml2ZV9NZSAoTSAgICAgOiBNZW51OworICAgICAgICAgICAgICAgICAgICAgICBUaXRsZSA6IFN0cmluZyA6PSAiIik7CiAgICAtLSAgQ2VudGVyIG1lbnUgYW5kIGRyaXZlIGl0LgogCiBlbmQgU2FtcGxlLk1lbnVfRGVtby5IYW5kbGVyOwpkaWZmIC0tZ2l0IGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLmFkYiBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLW1lbnVfZGVtby5hZGIKaW5kZXggMzg2NDY3NC4uODBjZDk0YiAxMDA2NDQKLS0tIGEvQWRhOTUvc2FtcGxlcy9zYW1wbGUtbWVudV9kZW1vLmFkYgorKysgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS1tZW51X2RlbW8uYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwOCwyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDggKzM1LDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbAotLS0gICRSZXZpc2lvbjogMS4xOCAkCi0tLSAgJERhdGU6IDIwMDgvMDcvMjYgMTg6NDg6MzAgJAorLS0gICRSZXZpc2lvbjogMS4xOSAkCistLSAgJERhdGU6IDIwMTEvMDMvMjMgMDA6NDQ6MTIgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOwpAQCAtMTU0LDcgKzE1NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBPIDogSXRlbV9PcHRpb25fU2V0OwogICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBKIGluIEknUmFuZ2UgbG9vcAotICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0X09wdGlvbnMgKEkgKEopLCBPKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldF9PcHRpb25zIChJLmFsbCAoSiksIE8pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgTy5TZWxlY3RhYmxlIDo9IFRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBIaWRlX0xvbmcgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBKIGlzCkBAIC0xNjMsNyArMTYzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gb3RoZXJzID0+IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgY2FzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBpZjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldF9PcHRpb25zIChJIChKKSwgTyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXRfT3B0aW9ucyAoSS5hbGwgKEopLCBPKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCBsb29wOwogICAgICAgICAgICAgICAgICAgICAgZW5kOwogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlOwpAQCAtMzc4LDE0ICszNzgsMTQgQEAKICAgICAgIFNldF9QYWRfQ2hhcmFjdGVyIChNLCAnfCcpOwogCiAgICAgICBNVUQuU2V0X1VzZXJfRGF0YSAoTSwgVTEpOwotICAgICAgSVVELlNldF9Vc2VyX0RhdGEgKEl0bSAoMSksIFUzKTsKKyAgICAgIElVRC5TZXRfVXNlcl9EYXRhIChJdG0uYWxsICgxKSwgVTMpOwogCiAgICAgICBNaC5Ecml2ZV9NZSAoTSk7CiAKICAgICAgIE1VRC5HZXRfVXNlcl9EYXRhIChNLCBVMik7CiAgICAgICBwcmFnbWEgQXNzZXJ0IChVMSA9IFUyIGFuZCBVMS5hbGwgPSA0NzExKTsKIAotICAgICAgSVVELkdldF9Vc2VyX0RhdGEgKEl0bSAoMSksIFU0KTsKKyAgICAgIElVRC5HZXRfVXNlcl9EYXRhIChJdG0uYWxsICgxKSwgVTQpOwogICAgICAgcHJhZ21hIEFzc2VydCAoVTMgPSBVNCBhbmQgVTMuYWxsID0gNDcxMik7CiAKICAgICAgIFBvcF9FbnZpcm9ubWVudDsKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLXRleHRfaW9fZGVtby5hZGIgYi9BZGE5NS9zYW1wbGVzL3NhbXBsZS10ZXh0X2lvX2RlbW8uYWRiCmluZGV4IDBiMzg1YzQuLmE0NThhMzcgMTAwNjQ0Ci0tLSBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLXRleHRfaW9fZGVtby5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUtdGV4dF9pb19kZW1vLmFkYgpAQCAtNyw3ICs3LDcgQEAKIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQiBPIEQgWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIENvcHlyaWdodCAoYykgMTk5OC0yMDA0LDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAtLQorLS0gQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYsMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhICAtLQogLS0gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAgICAgICAgICAgIC0tCkBAIC0zNSwxOCArMzUsMjQgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbAotLS0gICRSZXZpc2lvbjogMS4xNiAkCi0tLSAgJERhdGU6IDIwMDYvMDYvMjUgMTQ6MzA6MjIgJAorLS0gICRSZXZpc2lvbjogMS4xNyAkCistLSAgJERhdGU6IDIwMTEvMDMvMjMgMDA6NDQ6MTIgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIEFkYS5OdW1lcmljcy5HZW5lcmljX0VsZW1lbnRhcnlfRnVuY3Rpb25zOworCiB3aXRoIEFkYS5OdW1lcmljcy5Db21wbGV4X1R5cGVzOwogdXNlICBBZGEuTnVtZXJpY3MuQ29tcGxleF9UeXBlczsKIAotd2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzOyB1c2UgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKLXdpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7IHVzZSBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsKK3dpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKK3VzZSAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlczsKKword2l0aCBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlBhbmVsczsKK3VzZSAgVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5QYW5lbHM7CisKIHdpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPOwogdXNlICBUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSU87CisKIHdpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkludGVnZXJfSU87CiB3aXRoIFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9JTy5GbG9hdF9JTzsKIHdpdGggVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lPLkVudW1lcmF0aW9uX0lPOwpAQCAtNjAsNiArNjYsMTQgQEAKIHdpdGggU2FtcGxlLktleWJvYXJkX0hhbmRsZXI7IHVzZSBTYW1wbGUuS2V5Ym9hcmRfSGFuZGxlcjsKIHdpdGggU2FtcGxlLkV4cGxhbmF0aW9uOyB1c2UgU2FtcGxlLkV4cGxhbmF0aW9uOwogCitwcmFnbWEgRWxhYm9yYXRlX0FsbCAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lvLkNvbXBsZXhfSU8pOworcHJhZ21hIEVsYWJvcmF0ZV9BbGwgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9Jby5EZWNpbWFsX0lPKTsKK3ByYWdtYSBFbGFib3JhdGVfQWxsIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSW8uRW51bWVyYXRpb25fSU8pOworcHJhZ21hIEVsYWJvcmF0ZV9BbGwgKFRlcm1pbmFsX0ludGVyZmFjZS5DdXJzZXMuVGV4dF9Jby5GaXhlZF9JTyk7CitwcmFnbWEgRWxhYm9yYXRlX0FsbCAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lvLkZsb2F0X0lPKTsKK3ByYWdtYSBFbGFib3JhdGVfQWxsIChUZXJtaW5hbF9JbnRlcmZhY2UuQ3Vyc2VzLlRleHRfSW8uSW50ZWdlcl9JTyk7CitwcmFnbWEgRWxhYm9yYXRlX0FsbCAoVGVybWluYWxfSW50ZXJmYWNlLkN1cnNlcy5UZXh0X0lvLk1vZHVsYXJfSU8pOworCiBwYWNrYWdlIGJvZHkgU2FtcGxlLlRleHRfSU9fRGVtbyBpcwogCiAgICB0eXBlIFdlZWtkYXkgaXMgKFN1bmRheSwKZGlmZiAtLWdpdCBhL0FkYTk1L3NhbXBsZXMvc2FtcGxlLmFkYiBiL0FkYTk1L3NhbXBsZXMvc2FtcGxlLmFkYgppbmRleCA2NDgwMzZmLi45YjM3NTlmIDEwMDY0NAotLS0gYS9BZGE5NS9zYW1wbGVzL3NhbXBsZS5hZGIKKysrIGIvQWRhOTUvc2FtcGxlcy9zYW1wbGUuYWRiCkBAIC03LDcgKzcsNyBAQAogLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCIE8gRCBZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCiAtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gQ29weXJpZ2h0IChjKSAxOTk4LDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuICAgICAgICAgICAgICAgICAgIC0tCistLSBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwOCwyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiAgICAgICAgICAgICAgLS0KIC0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQogLS0gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgIC0tCiAtLSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICAgICAgICAgICAgLS0KQEAgLTM1LDggKzM1LDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLS0gIEF1dGhvcjogIEp1ZXJnZW4gUGZlaWZlciwgMTk5NgogLS0gIFZlcnNpb24gQ29udHJvbAotLS0gICRSZXZpc2lvbjogMS4xNyAkCi0tLSAgJERhdGU6IDIwMDgvMDkvMjcgMTQ6NDI6NDAgJAorLS0gICRSZXZpc2lvbjogMS4xOCAkCistLSAgJERhdGU6IDIwMTEvMDMvMjMgMDA6NDQ6MTIgJAogLS0gIEJpbmRpbmcgVmVyc2lvbiAwMS4wMAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiB3aXRoIFRleHRfSU87CkBAIC0xNDMsNyArMTQzLDcgQEAKICAgICAgICAgIFVkLlNldF9Vc2VyX0RhdGEgKE0sIEQxKTsKIAogICAgICAgICAgSTEgOj0gbmV3IFVzZXJfRGF0YScoRGF0YSA9PiAxMTc0KTsKLSAgICAgICAgIElkLlNldF9Vc2VyX0RhdGEgKEkgKDEpLCBJMSk7CisgICAgICAgICBJZC5TZXRfVXNlcl9EYXRhIChJLmFsbCAoMSksIEkxKTsKIAogICAgICAgICAgU2V0X1NwYWNpbmcgKE1lbiA9PiBNLCBSb3cgPT4gMik7CiAKQEAgLTE1Niw3ICsxNTYsNyBAQAogICAgICAgICAgcHJhZ21hIEFzc2VydCAoRDEgPSBEMik7CiAgICAgICAgICBwcmFnbWEgQXNzZXJ0IChEMS5EYXRhID0gRDIuRGF0YSk7CiAKLSAgICAgICAgIElkLkdldF9Vc2VyX0RhdGEgKEkgKDEpLCBJMik7CisgICAgICAgICBJZC5HZXRfVXNlcl9EYXRhIChJLmFsbCAoMSksIEkyKTsKICAgICAgICAgIHByYWdtYSBBc3NlcnQgKEkxID0gSTIpOwogICAgICAgICAgcHJhZ21hIEFzc2VydCAoSTEuRGF0YSA9IEkyLkRhdGEpOwogCg==