Name: series-workflownxpqh Phase: Failed StartedAt: 2026-09-14 19:45:54 +0000 UTC FinishedAt: 2026-09-14 20:07:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflownxpqh[0] Phase: Succeeded StartedAt: 2026-09-14 19:45:54 +0000 UTC FinishedAt: 2026-09-14 20:07:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflownxpqh[0].run-triage Phase: Succeeded StartedAt: 2026-09-14 19:45:54 +0000 UTC FinishedAt: 2026-09-14 20:07:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIFB5dGhvbiBzY3JpcHRzIGFuZCB0ZXN0cyB1bmRlciB0b29scy9saWIvcHl0aG9uL2tkb2MgYW5kIHRvb2xzL3VuaXR0ZXN0cy8gZm9yIGtlcm5lbC1kb2MgcGFyc2luZy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgbWFraW5nIHRoZW0gbm9uLWV4ZWN1dGFibGUgaW4gdGhlIGNvbnRleHQgb2Yga2VybmVsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzlkZDE1YTZjNWQ2Y2VhNWY2MTg3YmI4NTZlMjBkZTU0N2M3OGUxMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDIwOjA2OjU4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9weXRob24va2RvYy9rZG9jX3BhcnNlci5weSBiL3Rvb2xzL2xpYi9weXRob24va2RvYy9rZG9jX3BhcnNlci5weVxuaW5kZXggZDlhZDFkZGM4N2RkMS4uY2VkMDk1MDRmM2Q3YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9weXRob24va2RvYy9rZG9jX3BhcnNlci5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL3B5dGhvbi9rZG9jL2tkb2NfcGFyc2VyLnB5XG5AQCAtNjM1LDcgJiM0Mzs2MzUsOSBAQCBjbGFzcyBLZXJuZWxEb2M6XG4gICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgaWYgcGFyYW1fbmFtZS5zdGFydHN3aXRoKFwmIzM0O3t1bm5hbWVkX1wmIzM0Oyk6XG4gICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4tICAgICAgICAgICAgaWYgcGFyYW1fbmFtZSBpbiBzZWxmLmVudHJ5LnBhcmFtZXRlcmxpc3Q6XG4mIzQzOyAgICAgICAgICAgIGlmIHBhcmFtX25hbWUgaW4gc2VsZi5lbnRyeS5wYXJhbWV0ZXJsaXN0IG9yIFxcXG4mIzQzOyAgICAgICAgICAgICAgIGFueShhY3R1YWwuZW5kc3dpdGgoJiMzOTsuJiMzOTsgJiM0MzsgcGFyYW1fbmFtZSlcbiYjNDM7ICAgICAgICAgICAgICAgICAgIGZvciBhY3R1YWwgaW4gc2VsZi5lbnRyeS5wYXJhbWV0ZXJsaXN0KTpcbiAgICAgICAgICAgICAgICAgY29udGludWVcbiBcbiAgICAgICAgICAgICBoaW50ID0gc2VsZi5nZXRfc3VnZ2VzdGlvbnNfaGludChwYXJhbV9uYW1lLCBzZWxmLmVudHJ5LnBhcmFtZXRlcmxpc3QpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL3B5dGhvbi9rZG9jL3hmb3Jtc19saXN0cy5weSBiL3Rvb2xzL2xpYi9weXRob24va2RvYy94Zm9ybXNfbGlzdHMucHlcbmluZGV4IGUzZGRhMmZlOGE1MzcuLjllOGIzYTZiMWRhMTQgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvcHl0aG9uL2tkb2MveGZvcm1zX2xpc3RzLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvcHl0aG9uL2tkb2MveGZvcm1zX2xpc3RzLnB5XG5AQCAtNjAsNyAmIzQzOzYwLDcgQEAgY2xhc3MgQ1RyYW5zZm9ybXM6XG4gICAgICAgICAjXG4gICAgICAgICAoQ01hdGNoKFwmIzM0O3N0cnVjdF9ncm91cFwmIzM0OyksIHJcJiMzNDtzdHJ1Y3QgeyBcXDImIzQzOyB9O1wmIzM0OyksXG4gICAgICAgICAoQ01hdGNoKFwmIzM0O3N0cnVjdF9ncm91cF9hdHRyXCYjMzQ7KSwgclwmIzM0O3N0cnVjdCB7IFxcMyYjNDM7IH07XCYjMzQ7KSxcbi0gICAgICAgIChDTWF0Y2goXCYjMzQ7c3RydWN0X2dyb3VwX3RhZ2dlZFwmIzM0OyksIHJcJiMzNDtzdHJ1Y3QgeyBcXDMmIzQzOyB9O1wmIzM0OyksXG4mIzQzOyAgICAgICAgKENNYXRjaChcJiMzNDtzdHJ1Y3RfZ3JvdXBfdGFnZ2VkXCYjMzQ7KSwgclwmIzM0O3N0cnVjdCBcXDEgeyBcXDMmIzQzOyB9IFxcMjtcJiMzNDspLFxuICAgICAgICAgKENNYXRjaChcJiMzNDtfX3N0cnVjdF9ncm91cFwmIzM0OyksIHJcJiMzNDtzdHJ1Y3QgeyBcXDQmIzQzOyB9O1wmIzM0OyksXG4gICAgIF1cbiBcbmRpZmYgLS1naXQgYS90b29scy91bml0dGVzdHMvdGVzdF9rZG9jX3BhcnNlci5weSBiL3Rvb2xzL3VuaXR0ZXN0cy90ZXN0X2tkb2NfcGFyc2VyLnB5XG5pbmRleCBjNGE3NmVkMTNkYmM3Li4xYTgyODdlOTlmMmUwIDEwMDc1NVxuLS0tIGEvdG9vbHMvdW5pdHRlc3RzL3Rlc3Rfa2RvY19wYXJzZXIucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3VuaXR0ZXN0cy90ZXN0X2tkb2NfcGFyc2VyLnB5XG5AQCAtNDE4LDYgJiM0Mzs0MTgsNDMgQEAgY2xhc3MgVGVzdFNlbGZWYWxpZGF0ZShHZW5lcmF0ZUtkb2NJdGVtKTpcbiAgICAgICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuICAgICAgICAgc2VsZi5ydW5fdGVzdChzZWxmLlNPVVJDRSwgW3NlbGYuREVGQVVMVC5jb3B5KCldLCBzZWxmLkVYUE9SVFMpXG4gXG4mIzQzO1xuJiM0MztjbGFzcyBUZXN0U3RydWN0R3JvdXBUYWdnZWQoR2VuZXJhdGVLZG9jSXRlbSk6XG4mIzQzOyAgICBkZWYgdGVzdF9uZXN0ZWRfc3RydWN0X2dyb3VwX3RhZ2dlZF9tZW1iZXJzKHNlbGYpOlxuJiM0MzsgICAgICAgIHNvdXJjZSA9IFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgICAgICAgICAvKipcbiYjNDM7ICAgICAgICAgICAgICogc3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMgLSBwYWdlIHBvb2wgcGFyYW1ldGVyc1xuJiM0MzsgICAgICAgICAgICAgKiBAZmFzdDogRmFzdCBwYXRoIHBhcmFtZXRlcnMuXG4mIzQzOyAgICAgICAgICAgICAqIEBvcmRlcjogT3JkZXIgb2YgcGFnZXMuXG4mIzQzOyAgICAgICAgICAgICAqIEBwb29sX3NpemU6IE51bWJlciBvZiBwYWdlcy5cbiYjNDM7ICAgICAgICAgICAgICogQHNsb3c6IFNsb3cgcGF0aCBwYXJhbWV0ZXJzLlxuJiM0MzsgICAgICAgICAgICAgKiBAbmV0ZGV2OiBOZXQgZGV2aWNlIHBvaW50ZXIuXG4mIzQzOyAgICAgICAgICAgICAqIEBxdWV1ZV9pZHg6IFF1ZXVlIGluZGV4LlxuJiM0MzsgICAgICAgICAgICAgKiBAZmxhZ3M6IEZsYWdzLlxuJiM0MzsgICAgICAgICAgICAgKi9cbiYjNDM7ICAgICAgICAgICAgc3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMge1xuJiM0MzsgICAgICAgICAgICAgICAgc3RydWN0X2dyb3VwX3RhZ2dlZChwYWdlX3Bvb2xfcGFyYW1zX2Zhc3QsIGZhc3QsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvcmRlcjtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBvb2xfc2l6ZTtcbiYjNDM7ICAgICAgICAgICAgICAgICk7XG4mIzQzOyAgICAgICAgICAgICAgICBzdHJ1Y3RfZ3JvdXBfdGFnZ2VkKHBhZ2VfcG9vbF9wYXJhbXNfc2xvdywgc2xvdyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHF1ZXVlX2lkeDtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzO1xuJiM0MzsgICAgICAgICAgICAgICAgKTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICAgICAga2VybmVsX2RvYyA9IEtlcm5lbERvYyhzZWxmLmNvbmZpZywgXCYjMzQ7dGVzdC5jXCYjMzQ7LCBzZWxmLnhmb3JtcylcbiYjNDM7ICAgICAgICBwYXRjaGVyID0gcGF0Y2goJiMzOTtidWlsdGlucy5vcGVuJiMzOTssIG5ld19jYWxsYWJsZT1tb2NrX29wZW4sXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfZGF0YT1kZWRlbnQoc291cmNlKSlcbiYjNDM7ICAgICAgICB3aXRoIHBhdGNoZXI6XG4mIzQzOyAgICAgICAgICAgIF8sIGVudHJpZXMgPSBrZXJuZWxfZG9jLnBhcnNlX2tkb2MoKVxuJiM0MztcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbnRyaWVzKSwgMSlcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJpZXNbMF0ud2FybmluZ3MsIFtdKVxuJiM0MztcbiYjNDM7XG4gI1xuICMgQ2xhc3MgYW5kIGxvZ2ljIHRvIGNyZWF0ZSBkeW5hbWljIHRlc3RzIGZyb20gWUFNTFxuICNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgUHl0aG9uIHNjcmlwdHMgYW5kIHRlc3RzIHVuZGVyIHRvb2xzL2xpYi9weXRob24va2RvYyBhbmQgdG9vbHMvdW5pdHRlc3RzLyBmb3Iga2VybmVsLWRvYyBwYXJzaW5nLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBtYWtpbmcgdGhlbSBub24tZXhlY3V0YWJsZSBpbiB0aGUgY29udGV4dCBvZiBrZXJuZWwgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3OWRkMTVhNmM1ZDZjZWE1ZjYxODdiYjg1NmUyMGRlNTQ3Yzc4ZTEwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMjA6MDY6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy9saWIvcHl0aG9uL2tkb2Mva2RvY19wYXJzZXIucHkgYi90b29scy9saWIvcHl0aG9uL2tkb2Mva2RvY19wYXJzZXIucHkKaW5kZXggZDlhZDFkZGM4N2RkMS4uY2VkMDk1MDRmM2Q3YiAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL3B5dGhvbi9rZG9jL2tkb2NfcGFyc2VyLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9weXRob24va2RvYy9rZG9jX3BhcnNlci5weQpAQCAtNjM1LDcgJiM0Mzs2MzUsOSBAQCBjbGFzcyBLZXJuZWxEb2M6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIHBhcmFtX25hbWUuc3RhcnRzd2l0aCgmIzM0O3t1bm5hbWVkXyYjMzQ7KToKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgcGFyYW1fbmFtZSBpbiBzZWxmLmVudHJ5LnBhcmFtZXRlcmxpc3Q6CiYjNDM7ICAgICAgICAgICAgaWYgcGFyYW1fbmFtZSBpbiBzZWxmLmVudHJ5LnBhcmFtZXRlcmxpc3Qgb3IgXAomIzQzOyAgICAgICAgICAgICAgIGFueShhY3R1YWwuZW5kc3dpdGgoJiMzOTsuJiMzOTsgJiM0MzsgcGFyYW1fbmFtZSkKJiM0MzsgICAgICAgICAgICAgICAgICAgZm9yIGFjdHVhbCBpbiBzZWxmLmVudHJ5LnBhcmFtZXRlcmxpc3QpOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAgIGhpbnQgPSBzZWxmLmdldF9zdWdnZXN0aW9uc19oaW50KHBhcmFtX25hbWUsIHNlbGYuZW50cnkucGFyYW1ldGVybGlzdCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9weXRob24va2RvYy94Zm9ybXNfbGlzdHMucHkgYi90b29scy9saWIvcHl0aG9uL2tkb2MveGZvcm1zX2xpc3RzLnB5CmluZGV4IGUzZGRhMmZlOGE1MzcuLjllOGIzYTZiMWRhMTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9weXRob24va2RvYy94Zm9ybXNfbGlzdHMucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL3B5dGhvbi9rZG9jL3hmb3Jtc19saXN0cy5weQpAQCAtNjAsNyAmIzQzOzYwLDcgQEAgY2xhc3MgQ1RyYW5zZm9ybXM6CiAgICAgICAgICMKICAgICAgICAgKENNYXRjaCgmIzM0O3N0cnVjdF9ncm91cCYjMzQ7KSwgciYjMzQ7c3RydWN0IHsgXDImIzQzOyB9OyYjMzQ7KSwKICAgICAgICAgKENNYXRjaCgmIzM0O3N0cnVjdF9ncm91cF9hdHRyJiMzNDspLCByJiMzNDtzdHJ1Y3QgeyBcMyYjNDM7IH07JiMzNDspLAotICAgICAgICAoQ01hdGNoKCYjMzQ7c3RydWN0X2dyb3VwX3RhZ2dlZCYjMzQ7KSwgciYjMzQ7c3RydWN0IHsgXDMmIzQzOyB9OyYjMzQ7KSwKJiM0MzsgICAgICAgIChDTWF0Y2goJiMzNDtzdHJ1Y3RfZ3JvdXBfdGFnZ2VkJiMzNDspLCByJiMzNDtzdHJ1Y3QgXDEgeyBcMyYjNDM7IH0gXDI7JiMzNDspLAogICAgICAgICAoQ01hdGNoKCYjMzQ7X19zdHJ1Y3RfZ3JvdXAmIzM0OyksIHImIzM0O3N0cnVjdCB7IFw0JiM0MzsgfTsmIzM0OyksCiAgICAgXQogCmRpZmYgLS1naXQgYS90b29scy91bml0dGVzdHMvdGVzdF9rZG9jX3BhcnNlci5weSBiL3Rvb2xzL3VuaXR0ZXN0cy90ZXN0X2tkb2NfcGFyc2VyLnB5CmluZGV4IGM0YTc2ZWQxM2RiYzcuLjFhODI4N2U5OWYyZTAgMTAwNzU1Ci0tLSBhL3Rvb2xzL3VuaXR0ZXN0cy90ZXN0X2tkb2NfcGFyc2VyLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3VuaXR0ZXN0cy90ZXN0X2tkb2NfcGFyc2VyLnB5CkBAIC00MTgsNiAmIzQzOzQxOCw0MyBAQCBjbGFzcyBUZXN0U2VsZlZhbGlkYXRlKEdlbmVyYXRlS2RvY0l0ZW0pOgogICAgICAgICAmIzM0OyYjMzQ7JiMzNDsKICAgICAgICAgc2VsZi5ydW5fdGVzdChzZWxmLlNPVVJDRSwgW3NlbGYuREVGQVVMVC5jb3B5KCldLCBzZWxmLkVYUE9SVFMpCiAKJiM0MzsKJiM0MztjbGFzcyBUZXN0U3RydWN0R3JvdXBUYWdnZWQoR2VuZXJhdGVLZG9jSXRlbSk6CiYjNDM7ICAgIGRlZiB0ZXN0X25lc3RlZF9zdHJ1Y3RfZ3JvdXBfdGFnZ2VkX21lbWJlcnMoc2VsZik6CiYjNDM7ICAgICAgICBzb3VyY2UgPSAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgICAgICAvKioKJiM0MzsgICAgICAgICAgICAgKiBzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyAtIHBhZ2UgcG9vbCBwYXJhbWV0ZXJzCiYjNDM7ICAgICAgICAgICAgICogQGZhc3Q6IEZhc3QgcGF0aCBwYXJhbWV0ZXJzLgomIzQzOyAgICAgICAgICAgICAqIEBvcmRlcjogT3JkZXIgb2YgcGFnZXMuCiYjNDM7ICAgICAgICAgICAgICogQHBvb2xfc2l6ZTogTnVtYmVyIG9mIHBhZ2VzLgomIzQzOyAgICAgICAgICAgICAqIEBzbG93OiBTbG93IHBhdGggcGFyYW1ldGVycy4KJiM0MzsgICAgICAgICAgICAgKiBAbmV0ZGV2OiBOZXQgZGV2aWNlIHBvaW50ZXIuCiYjNDM7ICAgICAgICAgICAgICogQHF1ZXVlX2lkeDogUXVldWUgaW5kZXguCiYjNDM7ICAgICAgICAgICAgICogQGZsYWdzOiBGbGFncy4KJiM0MzsgICAgICAgICAgICAgKi8KJiM0MzsgICAgICAgICAgICBzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyB7CiYjNDM7ICAgICAgICAgICAgICAgIHN0cnVjdF9ncm91cF90YWdnZWQocGFnZV9wb29sX3BhcmFtc19mYXN0LCBmYXN0LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvcmRlcjsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcG9vbF9zaXplOwomIzQzOyAgICAgICAgICAgICAgICApOwomIzQzOyAgICAgICAgICAgICAgICBzdHJ1Y3RfZ3JvdXBfdGFnZ2VkKHBhZ2VfcG9vbF9wYXJhbXNfc2xvdywgc2xvdywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBxdWV1ZV9pZHg7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzOwomIzQzOyAgICAgICAgICAgICAgICApOwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgICAgIGtlcm5lbF9kb2MgPSBLZXJuZWxEb2Moc2VsZi5jb25maWcsICYjMzQ7dGVzdC5jJiMzNDssIHNlbGYueGZvcm1zKQomIzQzOyAgICAgICAgcGF0Y2hlciA9IHBhdGNoKCYjMzk7YnVpbHRpbnMub3BlbiYjMzk7LCBuZXdfY2FsbGFibGU9bW9ja19vcGVuLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfZGF0YT1kZWRlbnQoc291cmNlKSkKJiM0MzsgICAgICAgIHdpdGggcGF0Y2hlcjoKJiM0MzsgICAgICAgICAgICBfLCBlbnRyaWVzID0ga2VybmVsX2RvYy5wYXJzZV9rZG9jKCkKJiM0MzsKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVudHJpZXMpLCAxKQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyaWVzWzBdLndhcm5pbmdzLCBbXSkKJiM0MzsKJiM0MzsKICMKICMgQ2xhc3MgYW5kIGxvZ2ljIHRvIGNyZWF0ZSBkeW5hbWljIHRlc3RzIGZyb20gWUFNTAogIwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjc1CgkJCQkJCQlvdXRwdXQ6IDk2CgkJCQkJCQl0aG91Z2h0czogNTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IFdvcnRoRnV6emluZyA9IEZhbHNlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBkaWZmIGZvY3VzZXMgb24gdGhlc2UgZmlsZXM6IGB0b29scy9saWIvcHl0aG9uL2tkb2Mva2RvY19wYXJzZXIucHlgLCBgdG9vbHMvbGliL3B5dGhvbi9rZG9jL3hmb3Jtc19saXN0cy5weWAsIGFuZCBgdG9vbHMvdW5pdHRlc3RzL3Rlc3Rfa2RvY19wYXJzZXIucHlgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGd1aWRlbGluZXMgZm9yIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYC4gU2VjdGlvbiAyIGlzIHRoZSBrZXkgaGVyZS4gSXQgb3V0bGluZXMgdGhlICpuZWdhdGl2ZSogY3JpdGVyaWE6IGVzc2VudGlhbGx5LCB3aGVuIHdlICpkb24mIzM5O3QqIG5lZWQgdG8gZnV6ei4KCkxvb2tpbmcgYXQgdGhvc2UgY3JpdGVyaWEsIHRoZSBjaGFuZ2VzIGNsZWFybHkgZmFsbCB1bmRlciAmIzM0O1VzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMuLi4gdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7IFRoZXNlIGFyZSBQeXRob24gc2NyaXB0cyBhbmQgdW5pdCB0ZXN0cyB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeS4gVGhleSYjMzk7cmUgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8ga2VybmVsLWRvYyBkb2N1bWVudGF0aW9uIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuIFRoZXkmIzM5O3JlIG5vdCB0b3VjaGluZyBhbnkga2VybmVsLWNvbXBpbGVkIGNvZGUsIG5vIGtlcm5lbCBtb2R1bGVzLiBTbywgbm8gZGlyZWN0IGltcGFjdCBvbiB0aGUga2VybmVsIGltYWdlLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLiBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZSBkaWZmIHByb3ZpZGVkIGlzIGluZGVlZCB0aGUgY29tcGxldGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIEkgbWlnaHQgdXNlIGBncmVwcGVyYCBvciBjaGVjayB0aGUgYEhFQURgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgYnV0IHRoZSBpbml0aWFsIHJldmlldyBhcHBlYXJzIGNvbXBsZXRlLgoKQWxsIGNoYW5nZXMgYXJlIGRlZmluaXRpdmVseSB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgUHl0aG9uIGtlcm5lbC1kb2MgdG9vbGNoYWluLgoKVGhlcmVmb3JlLCB0aGUgcGFyYW1ldGVycyBmb3IgYHNldC1yZXN1bHRzYCB3aWxsIGJlOgoKKiAgIGBXb3J0aEZ1enppbmc6IGZhbHNlYAoqICAgYEVuYWJsZUNvbmZpZ3M6IFtdYAoqICAgYEZvY3VzU3ltYm9sczogW11gCiogICBgUmVhc29uaW5nOiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2UgUHl0aG9uIHRvb2xzIGFuZCB1bml0dGVzdHMgZm9yIGtlcm5lbC1kb2MgZG9jdW1lbnRhdGlvbiBwYXJzaW5nIHVuZGVyIHRvb2xzL2xpYi9weXRob24va2RvYy8gYW5kIHRvb2xzL3VuaXR0ZXN0cy8uIEl0IGRvZXMgbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4mIzM0O2AKClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIFB5dGhvbiBzY3JpcHRzIGFuZCB0ZXN0cyB1bmRlciB0b29scy9saWIvcHl0aG9uL2tkb2MgYW5kIHRvb2xzL3VuaXR0ZXN0cy8gZm9yIGtlcm5lbC1kb2MgcGFyc2luZy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgbWFraW5nIHRoZW0gbm9uLWV4ZWN1dGFibGUgaW4gdGhlIGNvbnRleHQgb2Yga2VybmVsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgUHl0aG9uIHNjcmlwdHMgYW5kIHRlc3RzIHVuZGVyIHRvb2xzL2xpYi9weXRob24va2RvYyBhbmQgdG9vbHMvdW5pdHRlc3RzLyBmb3Iga2VybmVsLWRvYyBwYXJzaW5nLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBtYWtpbmcgdGhlbSBub24tZXhlY3V0YWJsZSBpbiB0aGUgY29udGV4dCBvZiBrZXJuZWwgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjA2OjU4Ljk5MTM2Mzc0M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2OTM0MDY0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgUHl0aG9uIHNjcmlwdHMgYW5kIHRlc3RzIHVuZGVyIHRvb2xzL2xpYi9weXRob24va2RvYyBhbmQgdG9vbHMvdW5pdHRlc3RzLyBmb3Iga2VybmVsLWRvYyBwYXJzaW5nLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBtYWtpbmcgdGhlbSBub24tZXhlY3V0YWJsZSBpbiB0aGUgY29udGV4dCBvZiBrZXJuZWwgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjA2OjU4Ljk5MTM3MDg1NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg3Nzg2NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzlkZDE1YTZjNWQ2Y2VhNWY2MTg3YmI4NTZlMjBkZTU0N2M3OGUxMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCAxNCAyMDowNjo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy9saWIvcHl0aG9uL2tkb2Mva2RvY19wYXJzZXIucHkgYi90b29scy9saWIvcHl0aG9uL2tkb2Mva2RvY19wYXJzZXIucHlcXG5pbmRleCBkOWFkMWRkYzg3ZGQxLi5jZWQwOTUwNGYzZDdiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9weXRob24va2RvYy9rZG9jX3BhcnNlci5weVxcbisrKyBiL3Rvb2xzL2xpYi9weXRob24va2RvYy9rZG9jX3BhcnNlci5weVxcbkBAIC02MzUsNyArNjM1LDkgQEAgY2xhc3MgS2VybmVsRG9jOlxcbiAgICAgICAgICAgICAgICAgY29udGludWVcXG4gICAgICAgICAgICAgaWYgcGFyYW1fbmFtZS5zdGFydHN3aXRoKFxcXCJ7dW5uYW1lZF9cXFwiKTpcXG4gICAgICAgICAgICAgICAgIGNvbnRpbnVlXFxuLSAgICAgICAgICAgIGlmIHBhcmFtX25hbWUgaW4gc2VsZi5lbnRyeS5wYXJhbWV0ZXJsaXN0OlxcbisgICAgICAgICAgICBpZiBwYXJhbV9uYW1lIGluIHNlbGYuZW50cnkucGFyYW1ldGVybGlzdCBvciBcXFxcXFxuKyAgICAgICAgICAgICAgIGFueShhY3R1YWwuZW5kc3dpdGgoJy4nICsgcGFyYW1fbmFtZSlcXG4rICAgICAgICAgICAgICAgICAgIGZvciBhY3R1YWwgaW4gc2VsZi5lbnRyeS5wYXJhbWV0ZXJsaXN0KTpcXG4gICAgICAgICAgICAgICAgIGNvbnRpbnVlXFxuIFxcbiAgICAgICAgICAgICBoaW50ID0gc2VsZi5nZXRfc3VnZ2VzdGlvbnNfaGludChwYXJhbV9uYW1lLCBzZWxmLmVudHJ5LnBhcmFtZXRlcmxpc3QpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9weXRob24va2RvYy94Zm9ybXNfbGlzdHMucHkgYi90b29scy9saWIvcHl0aG9uL2tkb2MveGZvcm1zX2xpc3RzLnB5XFxuaW5kZXggZTNkZGEyZmU4YTUzNy4uOWU4YjNhNmIxZGExNCAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvcHl0aG9uL2tkb2MveGZvcm1zX2xpc3RzLnB5XFxuKysrIGIvdG9vbHMvbGliL3B5dGhvbi9rZG9jL3hmb3Jtc19saXN0cy5weVxcbkBAIC02MCw3ICs2MCw3IEBAIGNsYXNzIENUcmFuc2Zvcm1zOlxcbiAgICAgICAgICNcXG4gICAgICAgICAoQ01hdGNoKFxcXCJzdHJ1Y3RfZ3JvdXBcXFwiKSwgclxcXCJzdHJ1Y3QgeyBcXFxcMisgfTtcXFwiKSxcXG4gICAgICAgICAoQ01hdGNoKFxcXCJzdHJ1Y3RfZ3JvdXBfYXR0clxcXCIpLCByXFxcInN0cnVjdCB7IFxcXFwzKyB9O1xcXCIpLFxcbi0gICAgICAgIChDTWF0Y2goXFxcInN0cnVjdF9ncm91cF90YWdnZWRcXFwiKSwgclxcXCJzdHJ1Y3QgeyBcXFxcMysgfTtcXFwiKSxcXG4rICAgICAgICAoQ01hdGNoKFxcXCJzdHJ1Y3RfZ3JvdXBfdGFnZ2VkXFxcIiksIHJcXFwic3RydWN0IFxcXFwxIHsgXFxcXDMrIH0gXFxcXDI7XFxcIiksXFxuICAgICAgICAgKENNYXRjaChcXFwiX19zdHJ1Y3RfZ3JvdXBcXFwiKSwgclxcXCJzdHJ1Y3QgeyBcXFxcNCsgfTtcXFwiKSxcXG4gICAgIF1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3VuaXR0ZXN0cy90ZXN0X2tkb2NfcGFyc2VyLnB5IGIvdG9vbHMvdW5pdHRlc3RzL3Rlc3Rfa2RvY19wYXJzZXIucHlcXG5pbmRleCBjNGE3NmVkMTNkYmM3Li4xYTgyODdlOTlmMmUwIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3VuaXR0ZXN0cy90ZXN0X2tkb2NfcGFyc2VyLnB5XFxuKysrIGIvdG9vbHMvdW5pdHRlc3RzL3Rlc3Rfa2RvY19wYXJzZXIucHlcXG5AQCAtNDE4LDYgKzQxOCw0MyBAQCBjbGFzcyBUZXN0U2VsZlZhbGlkYXRlKEdlbmVyYXRlS2RvY0l0ZW0pOlxcbiAgICAgICAgIFxcXCJcXFwiXFxcIlxcbiAgICAgICAgIHNlbGYucnVuX3Rlc3Qoc2VsZi5TT1VSQ0UsIFtzZWxmLkRFRkFVTFQuY29weSgpXSwgc2VsZi5FWFBPUlRTKVxcbiBcXG4rXFxuK2NsYXNzIFRlc3RTdHJ1Y3RHcm91cFRhZ2dlZChHZW5lcmF0ZUtkb2NJdGVtKTpcXG4rICAgIGRlZiB0ZXN0X25lc3RlZF9zdHJ1Y3RfZ3JvdXBfdGFnZ2VkX21lbWJlcnMoc2VsZik6XFxuKyAgICAgICAgc291cmNlID0gXFxcIlxcXCJcXFwiXFxuKyAgICAgICAgICAgIC8qKlxcbisgICAgICAgICAgICAgKiBzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyAtIHBhZ2UgcG9vbCBwYXJhbWV0ZXJzXFxuKyAgICAgICAgICAgICAqIEBmYXN0OiBGYXN0IHBhdGggcGFyYW1ldGVycy5cXG4rICAgICAgICAgICAgICogQG9yZGVyOiBPcmRlciBvZiBwYWdlcy5cXG4rICAgICAgICAgICAgICogQHBvb2xfc2l6ZTogTnVtYmVyIG9mIHBhZ2VzLlxcbisgICAgICAgICAgICAgKiBAc2xvdzogU2xvdyBwYXRoIHBhcmFtZXRlcnMuXFxuKyAgICAgICAgICAgICAqIEBuZXRkZXY6IE5ldCBkZXZpY2UgcG9pbnRlci5cXG4rICAgICAgICAgICAgICogQHF1ZXVlX2lkeDogUXVldWUgaW5kZXguXFxuKyAgICAgICAgICAgICAqIEBmbGFnczogRmxhZ3MuXFxuKyAgICAgICAgICAgICAqL1xcbisgICAgICAgICAgICBzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyB7XFxuKyAgICAgICAgICAgICAgICBzdHJ1Y3RfZ3JvdXBfdGFnZ2VkKHBhZ2VfcG9vbF9wYXJhbXNfZmFzdCwgZmFzdCxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9yZGVyO1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcG9vbF9zaXplO1xcbisgICAgICAgICAgICAgICAgKTtcXG4rICAgICAgICAgICAgICAgIHN0cnVjdF9ncm91cF90YWdnZWQocGFnZV9wb29sX3BhcmFtc19zbG93LCBzbG93LFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcXVldWVfaWR4O1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7XFxuKyAgICAgICAgICAgICAgICApO1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIFxcXCJcXFwiXFxcIlxcbitcXG4rICAgICAgICBrZXJuZWxfZG9jID0gS2VybmVsRG9jKHNlbGYuY29uZmlnLCBcXFwidGVzdC5jXFxcIiwgc2VsZi54Zm9ybXMpXFxuKyAgICAgICAgcGF0Y2hlciA9IHBhdGNoKCdidWlsdGlucy5vcGVuJywgbmV3X2NhbGxhYmxlPW1vY2tfb3BlbixcXG4rICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9kYXRhPWRlZGVudChzb3VyY2UpKVxcbisgICAgICAgIHdpdGggcGF0Y2hlcjpcXG4rICAgICAgICAgICAgXywgZW50cmllcyA9IGtlcm5lbF9kb2MucGFyc2Vfa2RvYygpXFxuK1xcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVudHJpZXMpLCAxKVxcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cmllc1swXS53YXJuaW5ncywgW10pXFxuK1xcbitcXG4gI1xcbiAjIENsYXNzIGFuZCBsb2dpYyB0byBjcmVhdGUgZHluYW1pYyB0ZXN0cyBmcm9tIFlBTUxcXG4gI1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDowNjo1OS41ODAyNjcxNjVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjgxMDQ0OTIyMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBQeXRob24gc2NyaXB0cyBhbmQgdGVzdHMgdW5kZXIgdG9vbHMvbGliL3B5dGhvbi9rZG9jIGFuZCB0b29scy91bml0dGVzdHMvIGZvciBrZXJuZWwtZG9jIHBhcnNpbmcuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBhbnkga2VybmVsIG1vZHVsZXMsIG1ha2luZyB0aGVtIG5vbi1leGVjdXRhYmxlIGluIHRoZSBjb250ZXh0IG9mIGtlcm5lbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OWRkMTVhNmM1ZDZjZWE1ZjYxODdiYjg1NmUyMGRlNTQ3Yzc4ZTEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjA6MDY6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9saWIvcHl0aG9uL2tkb2Mva2RvY19wYXJzZXIucHkgYi90b29scy9saWIvcHl0aG9uL2tkb2Mva2RvY19wYXJzZXIucHlcbmluZGV4IGQ5YWQxZGRjODdkZDEuLmNlZDA5NTA0ZjNkN2IgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvcHl0aG9uL2tkb2Mva2RvY19wYXJzZXIucHlcbisrKyBiL3Rvb2xzL2xpYi9weXRob24va2RvYy9rZG9jX3BhcnNlci5weVxuQEAgLTYzNSw3ICs2MzUsOSBAQCBjbGFzcyBLZXJuZWxEb2M6XG4gICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgaWYgcGFyYW1fbmFtZS5zdGFydHN3aXRoKFwie3VubmFtZWRfXCIpOlxuICAgICAgICAgICAgICAgICBjb250aW51ZVxuLSAgICAgICAgICAgIGlmIHBhcmFtX25hbWUgaW4gc2VsZi5lbnRyeS5wYXJhbWV0ZXJsaXN0OlxuKyAgICAgICAgICAgIGlmIHBhcmFtX25hbWUgaW4gc2VsZi5lbnRyeS5wYXJhbWV0ZXJsaXN0IG9yIFxcXG4rICAgICAgICAgICAgICAgYW55KGFjdHVhbC5lbmRzd2l0aCgnLicgKyBwYXJhbV9uYW1lKVxuKyAgICAgICAgICAgICAgICAgICBmb3IgYWN0dWFsIGluIHNlbGYuZW50cnkucGFyYW1ldGVybGlzdCk6XG4gICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gXG4gICAgICAgICAgICAgaGludCA9IHNlbGYuZ2V0X3N1Z2dlc3Rpb25zX2hpbnQocGFyYW1fbmFtZSwgc2VsZi5lbnRyeS5wYXJhbWV0ZXJsaXN0KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9weXRob24va2RvYy94Zm9ybXNfbGlzdHMucHkgYi90b29scy9saWIvcHl0aG9uL2tkb2MveGZvcm1zX2xpc3RzLnB5XG5pbmRleCBlM2RkYTJmZThhNTM3Li45ZThiM2E2YjFkYTE0IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL3B5dGhvbi9rZG9jL3hmb3Jtc19saXN0cy5weVxuKysrIGIvdG9vbHMvbGliL3B5dGhvbi9rZG9jL3hmb3Jtc19saXN0cy5weVxuQEAgLTYwLDcgKzYwLDcgQEAgY2xhc3MgQ1RyYW5zZm9ybXM6XG4gICAgICAgICAjXG4gICAgICAgICAoQ01hdGNoKFwic3RydWN0X2dyb3VwXCIpLCByXCJzdHJ1Y3QgeyBcXDIrIH07XCIpLFxuICAgICAgICAgKENNYXRjaChcInN0cnVjdF9ncm91cF9hdHRyXCIpLCByXCJzdHJ1Y3QgeyBcXDMrIH07XCIpLFxuLSAgICAgICAgKENNYXRjaChcInN0cnVjdF9ncm91cF90YWdnZWRcIiksIHJcInN0cnVjdCB7IFxcMysgfTtcIiksXG4rICAgICAgICAoQ01hdGNoKFwic3RydWN0X2dyb3VwX3RhZ2dlZFwiKSwgclwic3RydWN0IFxcMSB7IFxcMysgfSBcXDI7XCIpLFxuICAgICAgICAgKENNYXRjaChcIl9fc3RydWN0X2dyb3VwXCIpLCByXCJzdHJ1Y3QgeyBcXDQrIH07XCIpLFxuICAgICBdXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdW5pdHRlc3RzL3Rlc3Rfa2RvY19wYXJzZXIucHkgYi90b29scy91bml0dGVzdHMvdGVzdF9rZG9jX3BhcnNlci5weVxuaW5kZXggYzRhNzZlZDEzZGJjNy4uMWE4Mjg3ZTk5ZjJlMCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3VuaXR0ZXN0cy90ZXN0X2tkb2NfcGFyc2VyLnB5XG4rKysgYi90b29scy91bml0dGVzdHMvdGVzdF9rZG9jX3BhcnNlci5weVxuQEAgLTQxOCw2ICs0MTgsNDMgQEAgY2xhc3MgVGVzdFNlbGZWYWxpZGF0ZShHZW5lcmF0ZUtkb2NJdGVtKTpcbiAgICAgICAgIFwiXCJcIlxuICAgICAgICAgc2VsZi5ydW5fdGVzdChzZWxmLlNPVVJDRSwgW3NlbGYuREVGQVVMVC5jb3B5KCldLCBzZWxmLkVYUE9SVFMpXG4gXG4rXG4rY2xhc3MgVGVzdFN0cnVjdEdyb3VwVGFnZ2VkKEdlbmVyYXRlS2RvY0l0ZW0pOlxuKyAgICBkZWYgdGVzdF9uZXN0ZWRfc3RydWN0X2dyb3VwX3RhZ2dlZF9tZW1iZXJzKHNlbGYpOlxuKyAgICAgICAgc291cmNlID0gXCJcIlwiXG4rICAgICAgICAgICAgLyoqXG4rICAgICAgICAgICAgICogc3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMgLSBwYWdlIHBvb2wgcGFyYW1ldGVyc1xuKyAgICAgICAgICAgICAqIEBmYXN0OiBGYXN0IHBhdGggcGFyYW1ldGVycy5cbisgICAgICAgICAgICAgKiBAb3JkZXI6IE9yZGVyIG9mIHBhZ2VzLlxuKyAgICAgICAgICAgICAqIEBwb29sX3NpemU6IE51bWJlciBvZiBwYWdlcy5cbisgICAgICAgICAgICAgKiBAc2xvdzogU2xvdyBwYXRoIHBhcmFtZXRlcnMuXG4rICAgICAgICAgICAgICogQG5ldGRldjogTmV0IGRldmljZSBwb2ludGVyLlxuKyAgICAgICAgICAgICAqIEBxdWV1ZV9pZHg6IFF1ZXVlIGluZGV4LlxuKyAgICAgICAgICAgICAqIEBmbGFnczogRmxhZ3MuXG4rICAgICAgICAgICAgICovXG4rICAgICAgICAgICAgc3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMge1xuKyAgICAgICAgICAgICAgICBzdHJ1Y3RfZ3JvdXBfdGFnZ2VkKHBhZ2VfcG9vbF9wYXJhbXNfZmFzdCwgZmFzdCxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXI7XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBvb2xfc2l6ZTtcbisgICAgICAgICAgICAgICAgKTtcbisgICAgICAgICAgICAgICAgc3RydWN0X2dyb3VwX3RhZ2dlZChwYWdlX3Bvb2xfcGFyYW1zX3Nsb3csIHNsb3csXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcXVldWVfaWR4O1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncztcbisgICAgICAgICAgICAgICAgKTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgXCJcIlwiXG4rXG4rICAgICAgICBrZXJuZWxfZG9jID0gS2VybmVsRG9jKHNlbGYuY29uZmlnLCBcInRlc3QuY1wiLCBzZWxmLnhmb3JtcylcbisgICAgICAgIHBhdGNoZXIgPSBwYXRjaCgnYnVpbHRpbnMub3BlbicsIG5ld19jYWxsYWJsZT1tb2NrX29wZW4sXG4rICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9kYXRhPWRlZGVudChzb3VyY2UpKVxuKyAgICAgICAgd2l0aCBwYXRjaGVyOlxuKyAgICAgICAgICAgIF8sIGVudHJpZXMgPSBrZXJuZWxfZG9jLnBhcnNlX2tkb2MoKVxuK1xuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZW50cmllcyksIDEpXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJpZXNbMF0ud2FybmluZ3MsIFtdKVxuK1xuK1xuICNcbiAjIENsYXNzIGFuZCBsb2dpYyB0byBjcmVhdGUgZHluYW1pYyB0ZXN0cyBmcm9tIFlBTUxcbiAjXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDowNjo1OS41ODAyNzAwOTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MTA0NDYxOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IFdvcnRoRnV6emluZyA9IEZhbHNlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZGlmZiBmb2N1c2VzIG9uIHRoZXNlIGZpbGVzOiBgdG9vbHMvbGliL3B5dGhvbi9rZG9jL2tkb2NfcGFyc2VyLnB5YCwgYHRvb2xzL2xpYi9weXRob24va2RvYy94Zm9ybXNfbGlzdHMucHlgLCBhbmQgYHRvb2xzL3VuaXR0ZXN0cy90ZXN0X2tkb2NfcGFyc2VyLnB5YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBndWlkZWxpbmVzIGZvciBzZXR0aW5nIGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuIFNlY3Rpb24gMiBpcyB0aGUga2V5IGhlcmUuIEl0IG91dGxpbmVzIHRoZSAqbmVnYXRpdmUqIGNyaXRlcmlhOiBlc3NlbnRpYWxseSwgd2hlbiB3ZSAqZG9uJ3QqIG5lZWQgdG8gZnV6ei5cblxuTG9va2luZyBhdCB0aG9zZSBjcml0ZXJpYSwgdGhlIGNoYW5nZXMgY2xlYXJseSBmYWxsIHVuZGVyIFwiVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cy4uLiB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIgVGhlc2UgYXJlIFB5dGhvbiBzY3JpcHRzIGFuZCB1bml0IHRlc3RzIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LiBUaGV5J3JlIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGtlcm5lbC1kb2MgZG9jdW1lbnRhdGlvbiBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLiBUaGV5J3JlIG5vdCB0b3VjaGluZyBhbnkga2VybmVsLWNvbXBpbGVkIGNvZGUsIG5vIGtlcm5lbCBtb2R1bGVzLiBTbywgbm8gZGlyZWN0IGltcGFjdCBvbiB0aGUga2VybmVsIGltYWdlLlxuXG5JJ20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudCwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLiBJJ2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlIGRpZmYgcHJvdmlkZWQgaXMgaW5kZWVkIHRoZSBjb21wbGV0ZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gSSBtaWdodCB1c2UgYGdyZXBwZXJgIG9yIGNoZWNrIHRoZSBgSEVBRGAgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBidXQgdGhlIGluaXRpYWwgcmV2aWV3IGFwcGVhcnMgY29tcGxldGUuXG5cbkFsbCBjaGFuZ2VzIGFyZSBkZWZpbml0aXZlbHkgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFB5dGhvbiBrZXJuZWwtZG9jIHRvb2xjaGFpbi5cblxuVGhlcmVmb3JlLCB0aGUgcGFyYW1ldGVycyBmb3IgYHNldC1yZXN1bHRzYCB3aWxsIGJlOlxuXG4qICAgYFdvcnRoRnV6emluZzogZmFsc2VgXG4qICAgYEVuYWJsZUNvbmZpZ3M6IFtdYFxuKiAgIGBGb2N1c1N5bWJvbHM6IFtdYFxuKiAgIGBSZWFzb25pbmc6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSBQeXRob24gdG9vbHMgYW5kIHVuaXR0ZXN0cyBmb3Iga2VybmVsLWRvYyBkb2N1bWVudGF0aW9uIHBhcnNpbmcgdW5kZXIgdG9vbHMvbGliL3B5dGhvbi9rZG9jLyBhbmQgdG9vbHMvdW5pdHRlc3RzLy4gSXQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiYFxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY3NSwiT3V0cHV0VG9rZW5zIjo5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjA3OjA3LjY4NDczNDIyM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIFB5dGhvbiBzY3JpcHRzIGFuZCB0ZXN0cyB1bmRlciB0b29scy9saWIvcHl0aG9uL2tkb2MgYW5kIHRvb2xzL3VuaXR0ZXN0cy8gZm9yIGtlcm5lbC1kb2MgcGFyc2luZy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgbWFraW5nIHRoZW0gbm9uLWV4ZWN1dGFibGUgaW4gdGhlIGNvbnRleHQgb2Yga2VybmVsIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgUHl0aG9uIHNjcmlwdHMgYW5kIHRlc3RzIHVuZGVyIHRvb2xzL2xpYi9weXRob24va2RvYyBhbmQgdG9vbHMvdW5pdHRlc3RzLyBmb3Iga2VybmVsLWRvYyBwYXJzaW5nLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBtYWtpbmcgdGhlbSBub24tZXhlY3V0YWJsZSBpbiB0aGUgY29udGV4dCBvZiBrZXJuZWwgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjA3OjA3LjY4NDc2MTUwM1oiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownxpqh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-14 19:45:54 +0000 UTC FinishedAt: 2026-09-14 20:07:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIFB5dGhvbiBzY3JpcHRzIGFuZCB0ZXN0cyB1bmRlciB0b29scy9saWIvcHl0aG9uL2tkb2MgYW5kIHRvb2xzL3VuaXR0ZXN0cy8gZm9yIGtlcm5lbC1kb2MgcGFyc2luZy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgbWFraW5nIHRoZW0gbm9uLWV4ZWN1dGFibGUgaW4gdGhlIGNvbnRleHQgb2Yga2VybmVsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzlkZDE1YTZjNWQ2Y2VhNWY2MTg3YmI4NTZlMjBkZTU0N2M3OGUxMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDE0IDIwOjA2OjU4IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9weXRob24va2RvYy9rZG9jX3BhcnNlci5weSBiL3Rvb2xzL2xpYi9weXRob24va2RvYy9rZG9jX3BhcnNlci5weVxuaW5kZXggZDlhZDFkZGM4N2RkMS4uY2VkMDk1MDRmM2Q3YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL2xpYi9weXRob24va2RvYy9rZG9jX3BhcnNlci5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL3B5dGhvbi9rZG9jL2tkb2NfcGFyc2VyLnB5XG5AQCAtNjM1LDcgJiM0Mzs2MzUsOSBAQCBjbGFzcyBLZXJuZWxEb2M6XG4gICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgaWYgcGFyYW1fbmFtZS5zdGFydHN3aXRoKFwmIzM0O3t1bm5hbWVkX1wmIzM0Oyk6XG4gICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4tICAgICAgICAgICAgaWYgcGFyYW1fbmFtZSBpbiBzZWxmLmVudHJ5LnBhcmFtZXRlcmxpc3Q6XG4mIzQzOyAgICAgICAgICAgIGlmIHBhcmFtX25hbWUgaW4gc2VsZi5lbnRyeS5wYXJhbWV0ZXJsaXN0IG9yIFxcXG4mIzQzOyAgICAgICAgICAgICAgIGFueShhY3R1YWwuZW5kc3dpdGgoJiMzOTsuJiMzOTsgJiM0MzsgcGFyYW1fbmFtZSlcbiYjNDM7ICAgICAgICAgICAgICAgICAgIGZvciBhY3R1YWwgaW4gc2VsZi5lbnRyeS5wYXJhbWV0ZXJsaXN0KTpcbiAgICAgICAgICAgICAgICAgY29udGludWVcbiBcbiAgICAgICAgICAgICBoaW50ID0gc2VsZi5nZXRfc3VnZ2VzdGlvbnNfaGludChwYXJhbV9uYW1lLCBzZWxmLmVudHJ5LnBhcmFtZXRlcmxpc3QpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvbGliL3B5dGhvbi9rZG9jL3hmb3Jtc19saXN0cy5weSBiL3Rvb2xzL2xpYi9weXRob24va2RvYy94Zm9ybXNfbGlzdHMucHlcbmluZGV4IGUzZGRhMmZlOGE1MzcuLjllOGIzYTZiMWRhMTQgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvcHl0aG9uL2tkb2MveGZvcm1zX2xpc3RzLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy9saWIvcHl0aG9uL2tkb2MveGZvcm1zX2xpc3RzLnB5XG5AQCAtNjAsNyAmIzQzOzYwLDcgQEAgY2xhc3MgQ1RyYW5zZm9ybXM6XG4gICAgICAgICAjXG4gICAgICAgICAoQ01hdGNoKFwmIzM0O3N0cnVjdF9ncm91cFwmIzM0OyksIHJcJiMzNDtzdHJ1Y3QgeyBcXDImIzQzOyB9O1wmIzM0OyksXG4gICAgICAgICAoQ01hdGNoKFwmIzM0O3N0cnVjdF9ncm91cF9hdHRyXCYjMzQ7KSwgclwmIzM0O3N0cnVjdCB7IFxcMyYjNDM7IH07XCYjMzQ7KSxcbi0gICAgICAgIChDTWF0Y2goXCYjMzQ7c3RydWN0X2dyb3VwX3RhZ2dlZFwmIzM0OyksIHJcJiMzNDtzdHJ1Y3QgeyBcXDMmIzQzOyB9O1wmIzM0OyksXG4mIzQzOyAgICAgICAgKENNYXRjaChcJiMzNDtzdHJ1Y3RfZ3JvdXBfdGFnZ2VkXCYjMzQ7KSwgclwmIzM0O3N0cnVjdCBcXDEgeyBcXDMmIzQzOyB9IFxcMjtcJiMzNDspLFxuICAgICAgICAgKENNYXRjaChcJiMzNDtfX3N0cnVjdF9ncm91cFwmIzM0OyksIHJcJiMzNDtzdHJ1Y3QgeyBcXDQmIzQzOyB9O1wmIzM0OyksXG4gICAgIF1cbiBcbmRpZmYgLS1naXQgYS90b29scy91bml0dGVzdHMvdGVzdF9rZG9jX3BhcnNlci5weSBiL3Rvb2xzL3VuaXR0ZXN0cy90ZXN0X2tkb2NfcGFyc2VyLnB5XG5pbmRleCBjNGE3NmVkMTNkYmM3Li4xYTgyODdlOTlmMmUwIDEwMDc1NVxuLS0tIGEvdG9vbHMvdW5pdHRlc3RzL3Rlc3Rfa2RvY19wYXJzZXIucHlcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3VuaXR0ZXN0cy90ZXN0X2tkb2NfcGFyc2VyLnB5XG5AQCAtNDE4LDYgJiM0Mzs0MTgsNDMgQEAgY2xhc3MgVGVzdFNlbGZWYWxpZGF0ZShHZW5lcmF0ZUtkb2NJdGVtKTpcbiAgICAgICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuICAgICAgICAgc2VsZi5ydW5fdGVzdChzZWxmLlNPVVJDRSwgW3NlbGYuREVGQVVMVC5jb3B5KCldLCBzZWxmLkVYUE9SVFMpXG4gXG4mIzQzO1xuJiM0MztjbGFzcyBUZXN0U3RydWN0R3JvdXBUYWdnZWQoR2VuZXJhdGVLZG9jSXRlbSk6XG4mIzQzOyAgICBkZWYgdGVzdF9uZXN0ZWRfc3RydWN0X2dyb3VwX3RhZ2dlZF9tZW1iZXJzKHNlbGYpOlxuJiM0MzsgICAgICAgIHNvdXJjZSA9IFwmIzM0O1wmIzM0O1wmIzM0O1xuJiM0MzsgICAgICAgICAgICAvKipcbiYjNDM7ICAgICAgICAgICAgICogc3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMgLSBwYWdlIHBvb2wgcGFyYW1ldGVyc1xuJiM0MzsgICAgICAgICAgICAgKiBAZmFzdDogRmFzdCBwYXRoIHBhcmFtZXRlcnMuXG4mIzQzOyAgICAgICAgICAgICAqIEBvcmRlcjogT3JkZXIgb2YgcGFnZXMuXG4mIzQzOyAgICAgICAgICAgICAqIEBwb29sX3NpemU6IE51bWJlciBvZiBwYWdlcy5cbiYjNDM7ICAgICAgICAgICAgICogQHNsb3c6IFNsb3cgcGF0aCBwYXJhbWV0ZXJzLlxuJiM0MzsgICAgICAgICAgICAgKiBAbmV0ZGV2OiBOZXQgZGV2aWNlIHBvaW50ZXIuXG4mIzQzOyAgICAgICAgICAgICAqIEBxdWV1ZV9pZHg6IFF1ZXVlIGluZGV4LlxuJiM0MzsgICAgICAgICAgICAgKiBAZmxhZ3M6IEZsYWdzLlxuJiM0MzsgICAgICAgICAgICAgKi9cbiYjNDM7ICAgICAgICAgICAgc3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMge1xuJiM0MzsgICAgICAgICAgICAgICAgc3RydWN0X2dyb3VwX3RhZ2dlZChwYWdlX3Bvb2xfcGFyYW1zX2Zhc3QsIGZhc3QsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvcmRlcjtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBvb2xfc2l6ZTtcbiYjNDM7ICAgICAgICAgICAgICAgICk7XG4mIzQzOyAgICAgICAgICAgICAgICBzdHJ1Y3RfZ3JvdXBfdGFnZ2VkKHBhZ2VfcG9vbF9wYXJhbXNfc2xvdywgc2xvdyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHF1ZXVlX2lkeDtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzO1xuJiM0MzsgICAgICAgICAgICAgICAgKTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7ICAgICAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICAgICAga2VybmVsX2RvYyA9IEtlcm5lbERvYyhzZWxmLmNvbmZpZywgXCYjMzQ7dGVzdC5jXCYjMzQ7LCBzZWxmLnhmb3JtcylcbiYjNDM7ICAgICAgICBwYXRjaGVyID0gcGF0Y2goJiMzOTtidWlsdGlucy5vcGVuJiMzOTssIG5ld19jYWxsYWJsZT1tb2NrX29wZW4sXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfZGF0YT1kZWRlbnQoc291cmNlKSlcbiYjNDM7ICAgICAgICB3aXRoIHBhdGNoZXI6XG4mIzQzOyAgICAgICAgICAgIF8sIGVudHJpZXMgPSBrZXJuZWxfZG9jLnBhcnNlX2tkb2MoKVxuJiM0MztcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbnRyaWVzKSwgMSlcbiYjNDM7ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJpZXNbMF0ud2FybmluZ3MsIFtdKVxuJiM0MztcbiYjNDM7XG4gI1xuICMgQ2xhc3MgYW5kIGxvZ2ljIHRvIGNyZWF0ZSBkeW5hbWljIHRlc3RzIGZyb20gWUFNTFxuICNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgUHl0aG9uIHNjcmlwdHMgYW5kIHRlc3RzIHVuZGVyIHRvb2xzL2xpYi9weXRob24va2RvYyBhbmQgdG9vbHMvdW5pdHRlc3RzLyBmb3Iga2VybmVsLWRvYyBwYXJzaW5nLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBtYWtpbmcgdGhlbSBub24tZXhlY3V0YWJsZSBpbiB0aGUgY29udGV4dCBvZiBrZXJuZWwgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3OWRkMTVhNmM1ZDZjZWE1ZjYxODdiYjg1NmUyMGRlNTQ3Yzc4ZTEwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgMTQgMjA6MDY6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy9saWIvcHl0aG9uL2tkb2Mva2RvY19wYXJzZXIucHkgYi90b29scy9saWIvcHl0aG9uL2tkb2Mva2RvY19wYXJzZXIucHkKaW5kZXggZDlhZDFkZGM4N2RkMS4uY2VkMDk1MDRmM2Q3YiAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL3B5dGhvbi9rZG9jL2tkb2NfcGFyc2VyLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL2xpYi9weXRob24va2RvYy9rZG9jX3BhcnNlci5weQpAQCAtNjM1LDcgJiM0Mzs2MzUsOSBAQCBjbGFzcyBLZXJuZWxEb2M6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIHBhcmFtX25hbWUuc3RhcnRzd2l0aCgmIzM0O3t1bm5hbWVkXyYjMzQ7KToKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgcGFyYW1fbmFtZSBpbiBzZWxmLmVudHJ5LnBhcmFtZXRlcmxpc3Q6CiYjNDM7ICAgICAgICAgICAgaWYgcGFyYW1fbmFtZSBpbiBzZWxmLmVudHJ5LnBhcmFtZXRlcmxpc3Qgb3IgXAomIzQzOyAgICAgICAgICAgICAgIGFueShhY3R1YWwuZW5kc3dpdGgoJiMzOTsuJiMzOTsgJiM0MzsgcGFyYW1fbmFtZSkKJiM0MzsgICAgICAgICAgICAgICAgICAgZm9yIGFjdHVhbCBpbiBzZWxmLmVudHJ5LnBhcmFtZXRlcmxpc3QpOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgICAgIGhpbnQgPSBzZWxmLmdldF9zdWdnZXN0aW9uc19oaW50KHBhcmFtX25hbWUsIHNlbGYuZW50cnkucGFyYW1ldGVybGlzdCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9weXRob24va2RvYy94Zm9ybXNfbGlzdHMucHkgYi90b29scy9saWIvcHl0aG9uL2tkb2MveGZvcm1zX2xpc3RzLnB5CmluZGV4IGUzZGRhMmZlOGE1MzcuLjllOGIzYTZiMWRhMTQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9weXRob24va2RvYy94Zm9ybXNfbGlzdHMucHkKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvbGliL3B5dGhvbi9rZG9jL3hmb3Jtc19saXN0cy5weQpAQCAtNjAsNyAmIzQzOzYwLDcgQEAgY2xhc3MgQ1RyYW5zZm9ybXM6CiAgICAgICAgICMKICAgICAgICAgKENNYXRjaCgmIzM0O3N0cnVjdF9ncm91cCYjMzQ7KSwgciYjMzQ7c3RydWN0IHsgXDImIzQzOyB9OyYjMzQ7KSwKICAgICAgICAgKENNYXRjaCgmIzM0O3N0cnVjdF9ncm91cF9hdHRyJiMzNDspLCByJiMzNDtzdHJ1Y3QgeyBcMyYjNDM7IH07JiMzNDspLAotICAgICAgICAoQ01hdGNoKCYjMzQ7c3RydWN0X2dyb3VwX3RhZ2dlZCYjMzQ7KSwgciYjMzQ7c3RydWN0IHsgXDMmIzQzOyB9OyYjMzQ7KSwKJiM0MzsgICAgICAgIChDTWF0Y2goJiMzNDtzdHJ1Y3RfZ3JvdXBfdGFnZ2VkJiMzNDspLCByJiMzNDtzdHJ1Y3QgXDEgeyBcMyYjNDM7IH0gXDI7JiMzNDspLAogICAgICAgICAoQ01hdGNoKCYjMzQ7X19zdHJ1Y3RfZ3JvdXAmIzM0OyksIHImIzM0O3N0cnVjdCB7IFw0JiM0MzsgfTsmIzM0OyksCiAgICAgXQogCmRpZmYgLS1naXQgYS90b29scy91bml0dGVzdHMvdGVzdF9rZG9jX3BhcnNlci5weSBiL3Rvb2xzL3VuaXR0ZXN0cy90ZXN0X2tkb2NfcGFyc2VyLnB5CmluZGV4IGM0YTc2ZWQxM2RiYzcuLjFhODI4N2U5OWYyZTAgMTAwNzU1Ci0tLSBhL3Rvb2xzL3VuaXR0ZXN0cy90ZXN0X2tkb2NfcGFyc2VyLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3VuaXR0ZXN0cy90ZXN0X2tkb2NfcGFyc2VyLnB5CkBAIC00MTgsNiAmIzQzOzQxOCw0MyBAQCBjbGFzcyBUZXN0U2VsZlZhbGlkYXRlKEdlbmVyYXRlS2RvY0l0ZW0pOgogICAgICAgICAmIzM0OyYjMzQ7JiMzNDsKICAgICAgICAgc2VsZi5ydW5fdGVzdChzZWxmLlNPVVJDRSwgW3NlbGYuREVGQVVMVC5jb3B5KCldLCBzZWxmLkVYUE9SVFMpCiAKJiM0MzsKJiM0MztjbGFzcyBUZXN0U3RydWN0R3JvdXBUYWdnZWQoR2VuZXJhdGVLZG9jSXRlbSk6CiYjNDM7ICAgIGRlZiB0ZXN0X25lc3RlZF9zdHJ1Y3RfZ3JvdXBfdGFnZ2VkX21lbWJlcnMoc2VsZik6CiYjNDM7ICAgICAgICBzb3VyY2UgPSAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgICAgICAgICAvKioKJiM0MzsgICAgICAgICAgICAgKiBzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyAtIHBhZ2UgcG9vbCBwYXJhbWV0ZXJzCiYjNDM7ICAgICAgICAgICAgICogQGZhc3Q6IEZhc3QgcGF0aCBwYXJhbWV0ZXJzLgomIzQzOyAgICAgICAgICAgICAqIEBvcmRlcjogT3JkZXIgb2YgcGFnZXMuCiYjNDM7ICAgICAgICAgICAgICogQHBvb2xfc2l6ZTogTnVtYmVyIG9mIHBhZ2VzLgomIzQzOyAgICAgICAgICAgICAqIEBzbG93OiBTbG93IHBhdGggcGFyYW1ldGVycy4KJiM0MzsgICAgICAgICAgICAgKiBAbmV0ZGV2OiBOZXQgZGV2aWNlIHBvaW50ZXIuCiYjNDM7ICAgICAgICAgICAgICogQHF1ZXVlX2lkeDogUXVldWUgaW5kZXguCiYjNDM7ICAgICAgICAgICAgICogQGZsYWdzOiBGbGFncy4KJiM0MzsgICAgICAgICAgICAgKi8KJiM0MzsgICAgICAgICAgICBzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyB7CiYjNDM7ICAgICAgICAgICAgICAgIHN0cnVjdF9ncm91cF90YWdnZWQocGFnZV9wb29sX3BhcmFtc19mYXN0LCBmYXN0LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvcmRlcjsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcG9vbF9zaXplOwomIzQzOyAgICAgICAgICAgICAgICApOwomIzQzOyAgICAgICAgICAgICAgICBzdHJ1Y3RfZ3JvdXBfdGFnZ2VkKHBhZ2VfcG9vbF9wYXJhbXNfc2xvdywgc2xvdywKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBxdWV1ZV9pZHg7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzOwomIzQzOyAgICAgICAgICAgICAgICApOwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsKJiM0MzsgICAgICAgIGtlcm5lbF9kb2MgPSBLZXJuZWxEb2Moc2VsZi5jb25maWcsICYjMzQ7dGVzdC5jJiMzNDssIHNlbGYueGZvcm1zKQomIzQzOyAgICAgICAgcGF0Y2hlciA9IHBhdGNoKCYjMzk7YnVpbHRpbnMub3BlbiYjMzk7LCBuZXdfY2FsbGFibGU9bW9ja19vcGVuLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfZGF0YT1kZWRlbnQoc291cmNlKSkKJiM0MzsgICAgICAgIHdpdGggcGF0Y2hlcjoKJiM0MzsgICAgICAgICAgICBfLCBlbnRyaWVzID0ga2VybmVsX2RvYy5wYXJzZV9rZG9jKCkKJiM0MzsKJiM0MzsgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVudHJpZXMpLCAxKQomIzQzOyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyaWVzWzBdLndhcm5pbmdzLCBbXSkKJiM0MzsKJiM0MzsKICMKICMgQ2xhc3MgYW5kIGxvZ2ljIHRvIGNyZWF0ZSBkeW5hbWljIHRlc3RzIGZyb20gWUFNTAogIwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNCAyMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjc1CgkJCQkJCQlvdXRwdXQ6IDk2CgkJCQkJCQl0aG91Z2h0czogNTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IFdvcnRoRnV6emluZyA9IEZhbHNlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBkaWZmIGZvY3VzZXMgb24gdGhlc2UgZmlsZXM6IGB0b29scy9saWIvcHl0aG9uL2tkb2Mva2RvY19wYXJzZXIucHlgLCBgdG9vbHMvbGliL3B5dGhvbi9rZG9jL3hmb3Jtc19saXN0cy5weWAsIGFuZCBgdG9vbHMvdW5pdHRlc3RzL3Rlc3Rfa2RvY19wYXJzZXIucHlgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGd1aWRlbGluZXMgZm9yIHNldHRpbmcgYFdvcnRoRnV6emluZ2AgdG8gYGZhbHNlYC4gU2VjdGlvbiAyIGlzIHRoZSBrZXkgaGVyZS4gSXQgb3V0bGluZXMgdGhlICpuZWdhdGl2ZSogY3JpdGVyaWE6IGVzc2VudGlhbGx5LCB3aGVuIHdlICpkb24mIzM5O3QqIG5lZWQgdG8gZnV6ei4KCkxvb2tpbmcgYXQgdGhvc2UgY3JpdGVyaWEsIHRoZSBjaGFuZ2VzIGNsZWFybHkgZmFsbCB1bmRlciAmIzM0O1VzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMuLi4gdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLiYjMzQ7IFRoZXNlIGFyZSBQeXRob24gc2NyaXB0cyBhbmQgdW5pdCB0ZXN0cyB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeS4gVGhleSYjMzk7cmUgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8ga2VybmVsLWRvYyBkb2N1bWVudGF0aW9uIGdlbmVyYXRpb24gYW5kIHBhcnNpbmcuIFRoZXkmIzM5O3JlIG5vdCB0b3VjaGluZyBhbnkga2VybmVsLWNvbXBpbGVkIGNvZGUsIG5vIGtlcm5lbCBtb2R1bGVzLiBTbywgbm8gZGlyZWN0IGltcGFjdCBvbiB0aGUga2VybmVsIGltYWdlLgoKSSYjMzk7bSBjb25maWRlbnQgaW4gdGhpcyBhc3Nlc3NtZW50LCBidXQgaXQmIzM5O3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLiBJJiMzOTtsbCBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZSBkaWZmIHByb3ZpZGVkIGlzIGluZGVlZCB0aGUgY29tcGxldGUgc2NvcGUgb2YgdGhlIGNoYW5nZXMuIEkgbWlnaHQgdXNlIGBncmVwcGVyYCBvciBjaGVjayB0aGUgYEhFQURgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgYnV0IHRoZSBpbml0aWFsIHJldmlldyBhcHBlYXJzIGNvbXBsZXRlLgoKQWxsIGNoYW5nZXMgYXJlIGRlZmluaXRpdmVseSB3aXRoaW4gdGhlIGB0b29scy9gIGRpcmVjdG9yeSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgUHl0aG9uIGtlcm5lbC1kb2MgdG9vbGNoYWluLgoKVGhlcmVmb3JlLCB0aGUgcGFyYW1ldGVycyBmb3IgYHNldC1yZXN1bHRzYCB3aWxsIGJlOgoKKiAgIGBXb3J0aEZ1enppbmc6IGZhbHNlYAoqICAgYEVuYWJsZUNvbmZpZ3M6IFtdYAoqICAgYEZvY3VzU3ltYm9sczogW11gCiogICBgUmVhc29uaW5nOiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBvbmx5IHVzZXItc3BhY2UgUHl0aG9uIHRvb2xzIGFuZCB1bml0dGVzdHMgZm9yIGtlcm5lbC1kb2MgZG9jdW1lbnRhdGlvbiBwYXJzaW5nIHVuZGVyIHRvb2xzL2xpYi9weXRob24va2RvYy8gYW5kIHRvb2xzL3VuaXR0ZXN0cy8uIEl0IGRvZXMgbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4mIzM0O2AKClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE0IDIwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIFB5dGhvbiBzY3JpcHRzIGFuZCB0ZXN0cyB1bmRlciB0b29scy9saWIvcHl0aG9uL2tkb2MgYW5kIHRvb2xzL3VuaXR0ZXN0cy8gZm9yIGtlcm5lbC1kb2MgcGFyc2luZy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgbWFraW5nIHRoZW0gbm9uLWV4ZWN1dGFibGUgaW4gdGhlIGNvbnRleHQgb2Yga2VybmVsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgUHl0aG9uIHNjcmlwdHMgYW5kIHRlc3RzIHVuZGVyIHRvb2xzL2xpYi9weXRob24va2RvYyBhbmQgdG9vbHMvdW5pdHRlc3RzLyBmb3Iga2VybmVsLWRvYyBwYXJzaW5nLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBtYWtpbmcgdGhlbSBub24tZXhlY3V0YWJsZSBpbiB0aGUgY29udGV4dCBvZiBrZXJuZWwgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTQgMjA6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjA2OjU4Ljk5MTM2Mzc0M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2OTM0MDY0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgUHl0aG9uIHNjcmlwdHMgYW5kIHRlc3RzIHVuZGVyIHRvb2xzL2xpYi9weXRob24va2RvYyBhbmQgdG9vbHMvdW5pdHRlc3RzLyBmb3Iga2VybmVsLWRvYyBwYXJzaW5nLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBtYWtpbmcgdGhlbSBub24tZXhlY3V0YWJsZSBpbiB0aGUgY29udGV4dCBvZiBrZXJuZWwgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjA2OjU4Ljk5MTM3MDg1NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg3Nzg2NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzlkZDE1YTZjNWQ2Y2VhNWY2MTg3YmI4NTZlMjBkZTU0N2M3OGUxMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCAxNCAyMDowNjo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy9saWIvcHl0aG9uL2tkb2Mva2RvY19wYXJzZXIucHkgYi90b29scy9saWIvcHl0aG9uL2tkb2Mva2RvY19wYXJzZXIucHlcXG5pbmRleCBkOWFkMWRkYzg3ZGQxLi5jZWQwOTUwNGYzZDdiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2xpYi9weXRob24va2RvYy9rZG9jX3BhcnNlci5weVxcbisrKyBiL3Rvb2xzL2xpYi9weXRob24va2RvYy9rZG9jX3BhcnNlci5weVxcbkBAIC02MzUsNyArNjM1LDkgQEAgY2xhc3MgS2VybmVsRG9jOlxcbiAgICAgICAgICAgICAgICAgY29udGludWVcXG4gICAgICAgICAgICAgaWYgcGFyYW1fbmFtZS5zdGFydHN3aXRoKFxcXCJ7dW5uYW1lZF9cXFwiKTpcXG4gICAgICAgICAgICAgICAgIGNvbnRpbnVlXFxuLSAgICAgICAgICAgIGlmIHBhcmFtX25hbWUgaW4gc2VsZi5lbnRyeS5wYXJhbWV0ZXJsaXN0OlxcbisgICAgICAgICAgICBpZiBwYXJhbV9uYW1lIGluIHNlbGYuZW50cnkucGFyYW1ldGVybGlzdCBvciBcXFxcXFxuKyAgICAgICAgICAgICAgIGFueShhY3R1YWwuZW5kc3dpdGgoJy4nICsgcGFyYW1fbmFtZSlcXG4rICAgICAgICAgICAgICAgICAgIGZvciBhY3R1YWwgaW4gc2VsZi5lbnRyeS5wYXJhbWV0ZXJsaXN0KTpcXG4gICAgICAgICAgICAgICAgIGNvbnRpbnVlXFxuIFxcbiAgICAgICAgICAgICBoaW50ID0gc2VsZi5nZXRfc3VnZ2VzdGlvbnNfaGludChwYXJhbV9uYW1lLCBzZWxmLmVudHJ5LnBhcmFtZXRlcmxpc3QpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9weXRob24va2RvYy94Zm9ybXNfbGlzdHMucHkgYi90b29scy9saWIvcHl0aG9uL2tkb2MveGZvcm1zX2xpc3RzLnB5XFxuaW5kZXggZTNkZGEyZmU4YTUzNy4uOWU4YjNhNmIxZGExNCAxMDA2NDRcXG4tLS0gYS90b29scy9saWIvcHl0aG9uL2tkb2MveGZvcm1zX2xpc3RzLnB5XFxuKysrIGIvdG9vbHMvbGliL3B5dGhvbi9rZG9jL3hmb3Jtc19saXN0cy5weVxcbkBAIC02MCw3ICs2MCw3IEBAIGNsYXNzIENUcmFuc2Zvcm1zOlxcbiAgICAgICAgICNcXG4gICAgICAgICAoQ01hdGNoKFxcXCJzdHJ1Y3RfZ3JvdXBcXFwiKSwgclxcXCJzdHJ1Y3QgeyBcXFxcMisgfTtcXFwiKSxcXG4gICAgICAgICAoQ01hdGNoKFxcXCJzdHJ1Y3RfZ3JvdXBfYXR0clxcXCIpLCByXFxcInN0cnVjdCB7IFxcXFwzKyB9O1xcXCIpLFxcbi0gICAgICAgIChDTWF0Y2goXFxcInN0cnVjdF9ncm91cF90YWdnZWRcXFwiKSwgclxcXCJzdHJ1Y3QgeyBcXFxcMysgfTtcXFwiKSxcXG4rICAgICAgICAoQ01hdGNoKFxcXCJzdHJ1Y3RfZ3JvdXBfdGFnZ2VkXFxcIiksIHJcXFwic3RydWN0IFxcXFwxIHsgXFxcXDMrIH0gXFxcXDI7XFxcIiksXFxuICAgICAgICAgKENNYXRjaChcXFwiX19zdHJ1Y3RfZ3JvdXBcXFwiKSwgclxcXCJzdHJ1Y3QgeyBcXFxcNCsgfTtcXFwiKSxcXG4gICAgIF1cXG4gXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3VuaXR0ZXN0cy90ZXN0X2tkb2NfcGFyc2VyLnB5IGIvdG9vbHMvdW5pdHRlc3RzL3Rlc3Rfa2RvY19wYXJzZXIucHlcXG5pbmRleCBjNGE3NmVkMTNkYmM3Li4xYTgyODdlOTlmMmUwIDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3VuaXR0ZXN0cy90ZXN0X2tkb2NfcGFyc2VyLnB5XFxuKysrIGIvdG9vbHMvdW5pdHRlc3RzL3Rlc3Rfa2RvY19wYXJzZXIucHlcXG5AQCAtNDE4LDYgKzQxOCw0MyBAQCBjbGFzcyBUZXN0U2VsZlZhbGlkYXRlKEdlbmVyYXRlS2RvY0l0ZW0pOlxcbiAgICAgICAgIFxcXCJcXFwiXFxcIlxcbiAgICAgICAgIHNlbGYucnVuX3Rlc3Qoc2VsZi5TT1VSQ0UsIFtzZWxmLkRFRkFVTFQuY29weSgpXSwgc2VsZi5FWFBPUlRTKVxcbiBcXG4rXFxuK2NsYXNzIFRlc3RTdHJ1Y3RHcm91cFRhZ2dlZChHZW5lcmF0ZUtkb2NJdGVtKTpcXG4rICAgIGRlZiB0ZXN0X25lc3RlZF9zdHJ1Y3RfZ3JvdXBfdGFnZ2VkX21lbWJlcnMoc2VsZik6XFxuKyAgICAgICAgc291cmNlID0gXFxcIlxcXCJcXFwiXFxuKyAgICAgICAgICAgIC8qKlxcbisgICAgICAgICAgICAgKiBzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyAtIHBhZ2UgcG9vbCBwYXJhbWV0ZXJzXFxuKyAgICAgICAgICAgICAqIEBmYXN0OiBGYXN0IHBhdGggcGFyYW1ldGVycy5cXG4rICAgICAgICAgICAgICogQG9yZGVyOiBPcmRlciBvZiBwYWdlcy5cXG4rICAgICAgICAgICAgICogQHBvb2xfc2l6ZTogTnVtYmVyIG9mIHBhZ2VzLlxcbisgICAgICAgICAgICAgKiBAc2xvdzogU2xvdyBwYXRoIHBhcmFtZXRlcnMuXFxuKyAgICAgICAgICAgICAqIEBuZXRkZXY6IE5ldCBkZXZpY2UgcG9pbnRlci5cXG4rICAgICAgICAgICAgICogQHF1ZXVlX2lkeDogUXVldWUgaW5kZXguXFxuKyAgICAgICAgICAgICAqIEBmbGFnczogRmxhZ3MuXFxuKyAgICAgICAgICAgICAqL1xcbisgICAgICAgICAgICBzdHJ1Y3QgcGFnZV9wb29sX3BhcmFtcyB7XFxuKyAgICAgICAgICAgICAgICBzdHJ1Y3RfZ3JvdXBfdGFnZ2VkKHBhZ2VfcG9vbF9wYXJhbXNfZmFzdCwgZmFzdCxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9yZGVyO1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcG9vbF9zaXplO1xcbisgICAgICAgICAgICAgICAgKTtcXG4rICAgICAgICAgICAgICAgIHN0cnVjdF9ncm91cF90YWdnZWQocGFnZV9wb29sX3BhcmFtc19zbG93LCBzbG93LFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcXVldWVfaWR4O1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7XFxuKyAgICAgICAgICAgICAgICApO1xcbisgICAgICAgICAgICB9O1xcbisgICAgICAgIFxcXCJcXFwiXFxcIlxcbitcXG4rICAgICAgICBrZXJuZWxfZG9jID0gS2VybmVsRG9jKHNlbGYuY29uZmlnLCBcXFwidGVzdC5jXFxcIiwgc2VsZi54Zm9ybXMpXFxuKyAgICAgICAgcGF0Y2hlciA9IHBhdGNoKCdidWlsdGlucy5vcGVuJywgbmV3X2NhbGxhYmxlPW1vY2tfb3BlbixcXG4rICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9kYXRhPWRlZGVudChzb3VyY2UpKVxcbisgICAgICAgIHdpdGggcGF0Y2hlcjpcXG4rICAgICAgICAgICAgXywgZW50cmllcyA9IGtlcm5lbF9kb2MucGFyc2Vfa2RvYygpXFxuK1xcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVudHJpZXMpLCAxKVxcbisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cmllc1swXS53YXJuaW5ncywgW10pXFxuK1xcbitcXG4gI1xcbiAjIENsYXNzIGFuZCBsb2dpYyB0byBjcmVhdGUgZHluYW1pYyB0ZXN0cyBmcm9tIFlBTUxcXG4gI1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDowNjo1OS41ODAyNjcxNjVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjgxMDQ0OTIyMDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBQeXRob24gc2NyaXB0cyBhbmQgdGVzdHMgdW5kZXIgdG9vbHMvbGliL3B5dGhvbi9rZG9jIGFuZCB0b29scy91bml0dGVzdHMvIGZvciBrZXJuZWwtZG9jIHBhcnNpbmcuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBhbnkga2VybmVsIG1vZHVsZXMsIG1ha2luZyB0aGVtIG5vbi1leGVjdXRhYmxlIGluIHRoZSBjb250ZXh0IG9mIGtlcm5lbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3OWRkMTVhNmM1ZDZjZWE1ZjYxODdiYjg1NmUyMGRlNTQ3Yzc4ZTEwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgMTQgMjA6MDY6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9saWIvcHl0aG9uL2tkb2Mva2RvY19wYXJzZXIucHkgYi90b29scy9saWIvcHl0aG9uL2tkb2Mva2RvY19wYXJzZXIucHlcbmluZGV4IGQ5YWQxZGRjODdkZDEuLmNlZDA5NTA0ZjNkN2IgMTAwNjQ0XG4tLS0gYS90b29scy9saWIvcHl0aG9uL2tkb2Mva2RvY19wYXJzZXIucHlcbisrKyBiL3Rvb2xzL2xpYi9weXRob24va2RvYy9rZG9jX3BhcnNlci5weVxuQEAgLTYzNSw3ICs2MzUsOSBAQCBjbGFzcyBLZXJuZWxEb2M6XG4gICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgaWYgcGFyYW1fbmFtZS5zdGFydHN3aXRoKFwie3VubmFtZWRfXCIpOlxuICAgICAgICAgICAgICAgICBjb250aW51ZVxuLSAgICAgICAgICAgIGlmIHBhcmFtX25hbWUgaW4gc2VsZi5lbnRyeS5wYXJhbWV0ZXJsaXN0OlxuKyAgICAgICAgICAgIGlmIHBhcmFtX25hbWUgaW4gc2VsZi5lbnRyeS5wYXJhbWV0ZXJsaXN0IG9yIFxcXG4rICAgICAgICAgICAgICAgYW55KGFjdHVhbC5lbmRzd2l0aCgnLicgKyBwYXJhbV9uYW1lKVxuKyAgICAgICAgICAgICAgICAgICBmb3IgYWN0dWFsIGluIHNlbGYuZW50cnkucGFyYW1ldGVybGlzdCk6XG4gICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gXG4gICAgICAgICAgICAgaGludCA9IHNlbGYuZ2V0X3N1Z2dlc3Rpb25zX2hpbnQocGFyYW1fbmFtZSwgc2VsZi5lbnRyeS5wYXJhbWV0ZXJsaXN0KVxuZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9weXRob24va2RvYy94Zm9ybXNfbGlzdHMucHkgYi90b29scy9saWIvcHl0aG9uL2tkb2MveGZvcm1zX2xpc3RzLnB5XG5pbmRleCBlM2RkYTJmZThhNTM3Li45ZThiM2E2YjFkYTE0IDEwMDY0NFxuLS0tIGEvdG9vbHMvbGliL3B5dGhvbi9rZG9jL3hmb3Jtc19saXN0cy5weVxuKysrIGIvdG9vbHMvbGliL3B5dGhvbi9rZG9jL3hmb3Jtc19saXN0cy5weVxuQEAgLTYwLDcgKzYwLDcgQEAgY2xhc3MgQ1RyYW5zZm9ybXM6XG4gICAgICAgICAjXG4gICAgICAgICAoQ01hdGNoKFwic3RydWN0X2dyb3VwXCIpLCByXCJzdHJ1Y3QgeyBcXDIrIH07XCIpLFxuICAgICAgICAgKENNYXRjaChcInN0cnVjdF9ncm91cF9hdHRyXCIpLCByXCJzdHJ1Y3QgeyBcXDMrIH07XCIpLFxuLSAgICAgICAgKENNYXRjaChcInN0cnVjdF9ncm91cF90YWdnZWRcIiksIHJcInN0cnVjdCB7IFxcMysgfTtcIiksXG4rICAgICAgICAoQ01hdGNoKFwic3RydWN0X2dyb3VwX3RhZ2dlZFwiKSwgclwic3RydWN0IFxcMSB7IFxcMysgfSBcXDI7XCIpLFxuICAgICAgICAgKENNYXRjaChcIl9fc3RydWN0X2dyb3VwXCIpLCByXCJzdHJ1Y3QgeyBcXDQrIH07XCIpLFxuICAgICBdXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdW5pdHRlc3RzL3Rlc3Rfa2RvY19wYXJzZXIucHkgYi90b29scy91bml0dGVzdHMvdGVzdF9rZG9jX3BhcnNlci5weVxuaW5kZXggYzRhNzZlZDEzZGJjNy4uMWE4Mjg3ZTk5ZjJlMCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3VuaXR0ZXN0cy90ZXN0X2tkb2NfcGFyc2VyLnB5XG4rKysgYi90b29scy91bml0dGVzdHMvdGVzdF9rZG9jX3BhcnNlci5weVxuQEAgLTQxOCw2ICs0MTgsNDMgQEAgY2xhc3MgVGVzdFNlbGZWYWxpZGF0ZShHZW5lcmF0ZUtkb2NJdGVtKTpcbiAgICAgICAgIFwiXCJcIlxuICAgICAgICAgc2VsZi5ydW5fdGVzdChzZWxmLlNPVVJDRSwgW3NlbGYuREVGQVVMVC5jb3B5KCldLCBzZWxmLkVYUE9SVFMpXG4gXG4rXG4rY2xhc3MgVGVzdFN0cnVjdEdyb3VwVGFnZ2VkKEdlbmVyYXRlS2RvY0l0ZW0pOlxuKyAgICBkZWYgdGVzdF9uZXN0ZWRfc3RydWN0X2dyb3VwX3RhZ2dlZF9tZW1iZXJzKHNlbGYpOlxuKyAgICAgICAgc291cmNlID0gXCJcIlwiXG4rICAgICAgICAgICAgLyoqXG4rICAgICAgICAgICAgICogc3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMgLSBwYWdlIHBvb2wgcGFyYW1ldGVyc1xuKyAgICAgICAgICAgICAqIEBmYXN0OiBGYXN0IHBhdGggcGFyYW1ldGVycy5cbisgICAgICAgICAgICAgKiBAb3JkZXI6IE9yZGVyIG9mIHBhZ2VzLlxuKyAgICAgICAgICAgICAqIEBwb29sX3NpemU6IE51bWJlciBvZiBwYWdlcy5cbisgICAgICAgICAgICAgKiBAc2xvdzogU2xvdyBwYXRoIHBhcmFtZXRlcnMuXG4rICAgICAgICAgICAgICogQG5ldGRldjogTmV0IGRldmljZSBwb2ludGVyLlxuKyAgICAgICAgICAgICAqIEBxdWV1ZV9pZHg6IFF1ZXVlIGluZGV4LlxuKyAgICAgICAgICAgICAqIEBmbGFnczogRmxhZ3MuXG4rICAgICAgICAgICAgICovXG4rICAgICAgICAgICAgc3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMge1xuKyAgICAgICAgICAgICAgICBzdHJ1Y3RfZ3JvdXBfdGFnZ2VkKHBhZ2VfcG9vbF9wYXJhbXNfZmFzdCwgZmFzdCxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXI7XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBvb2xfc2l6ZTtcbisgICAgICAgICAgICAgICAgKTtcbisgICAgICAgICAgICAgICAgc3RydWN0X2dyb3VwX3RhZ2dlZChwYWdlX3Bvb2xfcGFyYW1zX3Nsb3csIHNsb3csXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcXVldWVfaWR4O1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFncztcbisgICAgICAgICAgICAgICAgKTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgXCJcIlwiXG4rXG4rICAgICAgICBrZXJuZWxfZG9jID0gS2VybmVsRG9jKHNlbGYuY29uZmlnLCBcInRlc3QuY1wiLCBzZWxmLnhmb3JtcylcbisgICAgICAgIHBhdGNoZXIgPSBwYXRjaCgnYnVpbHRpbnMub3BlbicsIG5ld19jYWxsYWJsZT1tb2NrX29wZW4sXG4rICAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9kYXRhPWRlZGVudChzb3VyY2UpKVxuKyAgICAgICAgd2l0aCBwYXRjaGVyOlxuKyAgICAgICAgICAgIF8sIGVudHJpZXMgPSBrZXJuZWxfZG9jLnBhcnNlX2tkb2MoKVxuK1xuKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZW50cmllcyksIDEpXG4rICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJpZXNbMF0ud2FybmluZ3MsIFtdKVxuK1xuK1xuICNcbiAjIENsYXNzIGFuZCBsb2dpYyB0byBjcmVhdGUgZHluYW1pYyB0ZXN0cyBmcm9tIFlBTUxcbiAjXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNFQyMDowNjo1OS41ODAyNzAwOTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MTA0NDYxOTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IFdvcnRoRnV6emluZyA9IEZhbHNlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgZGlmZiBmb2N1c2VzIG9uIHRoZXNlIGZpbGVzOiBgdG9vbHMvbGliL3B5dGhvbi9rZG9jL2tkb2NfcGFyc2VyLnB5YCwgYHRvb2xzL2xpYi9weXRob24va2RvYy94Zm9ybXNfbGlzdHMucHlgLCBhbmQgYHRvb2xzL3VuaXR0ZXN0cy90ZXN0X2tkb2NfcGFyc2VyLnB5YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBndWlkZWxpbmVzIGZvciBzZXR0aW5nIGBXb3J0aEZ1enppbmdgIHRvIGBmYWxzZWAuIFNlY3Rpb24gMiBpcyB0aGUga2V5IGhlcmUuIEl0IG91dGxpbmVzIHRoZSAqbmVnYXRpdmUqIGNyaXRlcmlhOiBlc3NlbnRpYWxseSwgd2hlbiB3ZSAqZG9uJ3QqIG5lZWQgdG8gZnV6ei5cblxuTG9va2luZyBhdCB0aG9zZSBjcml0ZXJpYSwgdGhlIGNoYW5nZXMgY2xlYXJseSBmYWxsIHVuZGVyIFwiVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cy4uLiB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXCIgVGhlc2UgYXJlIFB5dGhvbiBzY3JpcHRzIGFuZCB1bml0IHRlc3RzIHdpdGhpbiB0aGUgYHRvb2xzL2AgZGlyZWN0b3J5LiBUaGV5J3JlIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGtlcm5lbC1kb2MgZG9jdW1lbnRhdGlvbiBnZW5lcmF0aW9uIGFuZCBwYXJzaW5nLiBUaGV5J3JlIG5vdCB0b3VjaGluZyBhbnkga2VybmVsLWNvbXBpbGVkIGNvZGUsIG5vIGtlcm5lbCBtb2R1bGVzLiBTbywgbm8gZGlyZWN0IGltcGFjdCBvbiB0aGUga2VybmVsIGltYWdlLlxuXG5JJ20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudCwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrLiBJJ2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlIGRpZmYgcHJvdmlkZWQgaXMgaW5kZWVkIHRoZSBjb21wbGV0ZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gSSBtaWdodCB1c2UgYGdyZXBwZXJgIG9yIGNoZWNrIHRoZSBgSEVBRGAgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBidXQgdGhlIGluaXRpYWwgcmV2aWV3IGFwcGVhcnMgY29tcGxldGUuXG5cbkFsbCBjaGFuZ2VzIGFyZSBkZWZpbml0aXZlbHkgd2l0aGluIHRoZSBgdG9vbHMvYCBkaXJlY3RvcnksIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFB5dGhvbiBrZXJuZWwtZG9jIHRvb2xjaGFpbi5cblxuVGhlcmVmb3JlLCB0aGUgcGFyYW1ldGVycyBmb3IgYHNldC1yZXN1bHRzYCB3aWxsIGJlOlxuXG4qICAgYFdvcnRoRnV6emluZzogZmFsc2VgXG4qICAgYEVuYWJsZUNvbmZpZ3M6IFtdYFxuKiAgIGBGb2N1c1N5bWJvbHM6IFtdYFxuKiAgIGBSZWFzb25pbmc6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG9ubHkgdXNlci1zcGFjZSBQeXRob24gdG9vbHMgYW5kIHVuaXR0ZXN0cyBmb3Iga2VybmVsLWRvYyBkb2N1bWVudGF0aW9uIHBhcnNpbmcgdW5kZXIgdG9vbHMvbGliL3B5dGhvbi9rZG9jLyBhbmQgdG9vbHMvdW5pdHRlc3RzLy4gSXQgZG9lcyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlwiYFxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzY3NSwiT3V0cHV0VG9rZW5zIjo5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjA3OjA3LjY4NDczNDIyM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIFB5dGhvbiBzY3JpcHRzIGFuZCB0ZXN0cyB1bmRlciB0b29scy9saWIvcHl0aG9uL2tkb2MgYW5kIHRvb2xzL3VuaXR0ZXN0cy8gZm9yIGtlcm5lbC1kb2MgcGFyc2luZy4gVGhlc2UgY2hhbmdlcyBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGFueSBrZXJuZWwgbW9kdWxlcywgbWFraW5nIHRoZW0gbm9uLWV4ZWN1dGFibGUgaW4gdGhlIGNvbnRleHQgb2Yga2VybmVsIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2UgUHl0aG9uIHNjcmlwdHMgYW5kIHRlc3RzIHVuZGVyIHRvb2xzL2xpYi9weXRob24va2RvYyBhbmQgdG9vbHMvdW5pdHRlc3RzLyBmb3Iga2VybmVsLWRvYyBwYXJzaW5nLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3IgYW55IGtlcm5lbCBtb2R1bGVzLCBtYWtpbmcgdGhlbSBub24tZXhlY3V0YWJsZSBpbiB0aGUgY29udGV4dCBvZiBrZXJuZWwgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE0VDIwOjA3OjA3LjY4NDc2MTUwM1oiLCJTZXEiOjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownxpqh[1] Phase: Running StartedAt: 2026-09-14 20:07:18 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownxpqh[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-14 20:07:18 +0000 UTC FinishedAt: 2026-09-14 20:07:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}