Name: series-workflownc27f Phase: Failed StartedAt: 2026-09-08 21:00:08 +0000 UTC FinishedAt: 2026-09-08 21:02:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflownc27f[0] Phase: Succeeded StartedAt: 2026-09-08 21:00:08 +0000 UTC FinishedAt: 2026-09-08 21:02:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflownc27f[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 21:00:08 +0000 UTC FinishedAt: 2026-09-08 21:02:07 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGxpZmllcyByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcygpIGluIG1tL21lbWJsb2NrLmMuIFRoaXMgZnVuY3Rpb24gaXMgbWFya2VkIF9faW5pdCBhbmQgY2FsbGVkIHNvbGVseSBkdXJpbmcgZWFybHkgYm9vdCBmcm9tIG1tX2NvcmVfaW5pdCgpIC1cdTAwM2UgbWVtYmxvY2tfZnJlZV9hbGwoKS4gQWxsIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyBpbiB0aGUgX19pbml0IHNlY3Rpb24gYW5kIGlzIGZyZWVkIGJlZm9yZSB1c2Vyc3BhY2UgaW5pdGlhbGl6ZXMsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSB0byBydW50aW1lIGZ1enppbmcgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA3NTBjNmE3NTVlNmQ3MTQ5MTMwNjMwMTU5OGE0ZWVhOGQxMmQ5OWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDIxOjAxOjI0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jXG5pbmRleCA0MzAyZmI0YWI4NWM3Li5lZDY5MzdiZThkOWZhIDEwMDY0NFxuLS0tIGEvbW0vbWVtYmxvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtYmxvY2suY1xuQEAgLTI0NjUsMjIgJiM0MzsyNDY1LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBmcmVlX2xvd19tZW1vcnlfY29yZV9lYXJseSh2b2lkKVxuIFx0cmV0dXJuIGNvdW50O1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX2luaXQgcmVzZXRfbm9kZV9tYW5hZ2VkX3BhZ2VzKHBnX2RhdGFfdCAqcGdkYXQpXG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKVxuIHtcbiBcdHN0cnVjdCB6b25lICp6O1xuIFxuLVx0Zm9yICh6ID0gcGdkYXQtXHUwMDNlbm9kZV96b25lczsgeiBcdTAwM2MgcGdkYXQtXHUwMDNlbm9kZV96b25lcyAmIzQzOyBNQVhfTlJfWk9ORVM7IHomIzQzOyYjNDM7KVxuJiM0MztcdGZvcl9lYWNoX3pvbmUoeilcbiBcdFx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNnotXHUwMDNlbWFuYWdlZF9wYWdlcywgMCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9faW5pdCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKVxuLXtcbi1cdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7XG4tXG4tXHRmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpXG4tXHRcdHJlc2V0X25vZGVfbWFuYWdlZF9wYWdlcyhwZ2RhdCk7XG4tfVxuLVxuIC8qKlxuICAqIG1lbWJsb2NrX2ZyZWVfYWxsIC0gcmVsZWFzZSBmcmVlIHBhZ2VzIHRvIHRoZSBidWRkeSBhbGxvY2F0b3JcbiAgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIHJlc2V0X2FsbF96b25lc19tYW5hZ2VkX3BhZ2VzKCkgaW4gbW0vbWVtYmxvY2suYy4gVGhpcyBmdW5jdGlvbiBpcyBtYXJrZWQgX19pbml0IGFuZCBjYWxsZWQgc29sZWx5IGR1cmluZyBlYXJseSBib290IGZyb20gbW1fY29yZV9pbml0KCkgLVx1MDAzZSBtZW1ibG9ja19mcmVlX2FsbCgpLiBBbGwgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIHRoZSBfX2luaXQgc2VjdGlvbiBhbmQgaXMgZnJlZWQgYmVmb3JlIHVzZXJzcGFjZSBpbml0aWFsaXplcywgbWFraW5nIGl0IHVucmVhY2hhYmxlIHRvIHJ1bnRpbWUgZnV6emluZyBieSBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDc1MGM2YTc1NWU2ZDcxNDkxMzA2MzAxNTk4YTRlZWE4ZDEyZDk5YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMjE6MDE6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suYwppbmRleCA0MzAyZmI0YWI4NWM3Li5lZDY5MzdiZThkOWZhIDEwMDY0NAotLS0gYS9tbS9tZW1ibG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWJsb2NrLmMKQEAgLTI0NjUsMjIgJiM0MzsyNDY1LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBmcmVlX2xvd19tZW1vcnlfY29yZV9lYXJseSh2b2lkKQogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHJlc2V0X25vZGVfbWFuYWdlZF9wYWdlcyhwZ19kYXRhX3QgKnBnZGF0KQomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKQogewogCXN0cnVjdCB6b25lICp6OwogCi0JZm9yICh6ID0gcGdkYXQtJmd0O25vZGVfem9uZXM7IHogJmx0OyBwZ2RhdC0mZ3Q7bm9kZV96b25lcyAmIzQzOyBNQVhfTlJfWk9ORVM7IHomIzQzOyYjNDM7KQomIzQzOwlmb3JfZWFjaF96b25lKHopCiAJCWF0b21pY19sb25nX3NldCgmYW1wO3otJmd0O21hbmFnZWRfcGFnZXMsIDApOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXModm9pZCkKLXsKLQlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0OwotCi0JZm9yX2VhY2hfb25saW5lX3BnZGF0KHBnZGF0KQotCQlyZXNldF9ub2RlX21hbmFnZWRfcGFnZXMocGdkYXQpOwotfQotCiAvKioKICAqIG1lbWJsb2NrX2ZyZWVfYWxsIC0gcmVsZWFzZSBmcmVlIHBhZ2VzIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IKICAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTg4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggdG8gYG1tL21lbWJsb2NrLmNgLiBUaGUgYGRpZmZgIHNob3dzIGEgY29kZSBjaGFuZ2UsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYW5hbHl6ZSB0aGUgY29udGV4dCBvZiBgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXNgIGFuZCBob3cgaXQgcmVsYXRlcyB0byBgbWVtYmxvY2tfZnJlZV9hbGxgLiBTZWVtcyBsaWtlIHdlJiMzOTtyZSBvcHRpbWl6aW5nIGhvdyB0aGUgc3lzdGVtIG1hbmFnZXMgZnJlZSBwYWdlcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLgoKVGhlIG9yaWdpbmFsIGNvZGUgaXRlcmF0ZXMgdGhyb3VnaCBlYWNoIG5vZGUmIzM5O3Mgem9uZXMgdG8gcmVzZXQgYG1hbmFnZWRfcGFnZXNgLiBUaGUgcGF0Y2ggbm93IHNpbXBsaWZpZXMgdGhpcy4gVGhlIHByZXZpb3VzIGNvZGUgY29udGFpbmVkIGEgZnVuY3Rpb24gYHJlc2V0X25vZGVfbWFuYWdlZF9wYWdlc2Agd2hpY2ggd2FzIGNhbGxlZCBmb3IgZWFjaCBwZ2RhdCwgYnV0IG5vdyBpdCBzZWVtcyB0aGF0IHRoZSBuZXcgaW1wbGVtZW50YXRpb24gaXMgaXRlcmF0aW5nIGFjcm9zcyBhbGwgem9uZXMgaW5zdGVhZCBvZiBhIHNwZWNpZmljIG5vZGUmIzM5O3Mgem9uZXMuIFRoZSByZW1vdmVkIGNvZGUgbWFrZXMgdGhlIGNvZGUgc2xpZ2h0bHkgZWFzaWVyIHRvIHJlYWQuCgpNeSBuZXh0IHN0ZXAgd291bGQgYmUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHdpdGggYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSSYjMzk7bGwgZm9jdXMgb24gaG93IGBtZW1ibG9ja19mcmVlX2FsbGAgaW50ZXJhY3RzIHdpdGggYHJlc2V0X2FsbF96b25lc19tYW5hZ2VkX3BhZ2VzYCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgYW5kIGhvdyB0aGUgYG1hbmFnZWRfcGFnZXNgIHZhcmlhYmxlIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIG1lbW9yeSBpcyAmIzM0O2ZyZWUmIzM0Oy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtkIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHByb2Nlc3MsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvci4gSXQgc2VlbXMgbGlrZSB0aGUgZ29hbCBpcyB0byBvcHRpbWl6ZSBob3cgdGhlIHN5c3RlbSB0cmFja3MgYW5kIGluaXRpYWxpemVzIGZyZWUgbWVtb3J5IGF0IGJvb3QsIG1ha2luZyBtZW1vcnkgYXZhaWxhYmxlIHRvIHRoZSBrZXJuZWwgZWFybGllci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWJsb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0NjA6XHRcdCAqL1xuMjQ2MTpcdFx0Zm9yX2VhY2hfZnJlZV9tZW1fcmFuZ2UoaSwgTlVNQV9OT19OT0RFLCBNRU1CTE9DS19OT05FLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kLFxuMjQ2MjpcdFx0XHRcdFx0TlVMTClcbjI0NjM6XHRcdFx0Y291bnQgJiM0Mzs9IF9fZnJlZV9tZW1vcnlfY29yZShzdGFydCwgZW5kKTtcbjI0NjQ6XHRcbjI0NjU6XHRcdHJldHVybiBjb3VudDtcbjI0NjY6XHR9XG4yNDY3Olx0XG4yNDY4Olx0c3RhdGljIHZvaWQgX19pbml0IHJlc2V0X2FsbF96b25lc19tYW5hZ2VkX3BhZ2VzKHZvaWQpXG4yNDY5Olx0e1xuMjQ3MDpcdFx0c3RydWN0IHpvbmUgKno7XG4yNDcxOlx0XG4yNDcyOlx0XHRmb3JfZWFjaF96b25lKHopXG4yNDczOlx0XHRcdGF0b21pY19sb25nX3NldChcdTAwMjZ6LVx1MDAzZW1hbmFnZWRfcGFnZXMsIDApO1xuMjQ3NDpcdH1cbjI0NzU6XHRcbjI0NzY6XHQvKipcbjI0Nzc6XHQgKiBtZW1ibG9ja19mcmVlX2FsbCAtIHJlbGVhc2UgZnJlZSBwYWdlcyB0byB0aGUgYnVkZHkgYWxsb2NhdG9yXG4yNDc4Olx0ICovXG4yNDc5Olx0dm9pZCBfX2luaXQgbWVtYmxvY2tfZnJlZV9hbGwodm9pZClcbjI0ODA6XHR7XG4yNDgxOlx0XHR1bnNpZ25lZCBsb25nIHBhZ2VzO1xuMjQ4MjpcdFxuMjQ4MzpcdFx0ZnJlZV91bnVzZWRfbWVtbWFwKCk7XG4yNDg0Olx0XHRyZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcygpO1xuMjQ4NTpcdFxuMjQ4NjpcdFx0bWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2hfb25seSgpO1xuMjQ4NzpcdFx0cGFnZXMgPSBmcmVlX2xvd19tZW1vcnlfY29yZV9lYXJseSgpO1xuMjQ4ODpcdFx0dG90YWxyYW1fcGFnZXNfYWRkKHBhZ2VzKTtcbjI0ODk6XHR9XG4yNDkwOlx0XG4yNDkxOlx0LyogS2VlcCBhIHRhYmxlIHRvIHJlc2VydmUgbmFtZWQgbWVtb3J5ICovXG4yNDkyOlx0I2RlZmluZSBSRVNFUlZFX01FTV9NQVhfRU5UUklFU1x0XHQ4XG4yNDkzOlx0I2RlZmluZSBSRVNFUlZFX01FTV9OQU1FX1NJWkVcdFx0MTZcbjI0OTQ6XHRzdHJ1Y3QgcmVzZXJ2ZV9tZW1fdGFibGUge1xuMjQ5NTpcdFx0Y2hhclx0XHRcdG5hbWVbUkVTRVJWRV9NRU1fTkFNRV9TSVpFXTtcbjI0OTY6XHRcdHBoeXNfYWRkcl90XHRcdHN0YXJ0O1xuMjQ5NzpcdFx0cGh5c19hZGRyX3RcdFx0c2l6ZTtcbjI0OTg6XHR9O1xuMjQ5OTpcdHN0YXRpYyBzdHJ1Y3QgcmVzZXJ2ZV9tZW1fdGFibGUgcmVzZXJ2ZWRfbWVtX3RhYmxlW1JFU0VSVkVfTUVNX01BWF9FTlRSSUVTXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzEzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbnMqKgoKTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlc2AgaXMgZmxhZ2dlZCBhcyBhbiBgX19pbml0YCBmdW5jdGlvbiBhbmQsIGludHJpZ3VpbmdseSwgaXQmIzM5O3MgY2FsbGVkIGJ5IGBtZW1ibG9ja19mcmVlX2FsbGAsIHdoaWNoIGlzICphbHNvKiBtYXJrZWQgYXMgYW4gYF9faW5pdGAgZnVuY3Rpb24uIFRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlYXJseSBpbml0aWFsaXphdGlvbiBvciBjbGVhbnVwIHJvdXRpbmVzIHJlbGF0ZWQgdG8gbWVtb3J5IGJsb2Nrcy4gVGhlIGZhY3QgdGhhdCB0aGV5IGFyZSBib3RoIGBfX2luaXRgIGZ1bmN0aW9ucyB0ZWxscyBtZSB0aGV5IGxpa2VseSBzZXQgdXAgbWVtb3J5IHJlZ2lvbnMgYXQgc3RhcnR1cCwgb3IgcmVsZWFzZSB0aGVtIGF0IHNodXRkb3duLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgcXVlc3Rpb24gaXM6IHdoZXJlIGVsc2UgZG9lcyBgbWVtYmxvY2tfZnJlZV9hbGxgIGNvbWUgaW50byBwbGF5PyBUbyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyB1c2FnZSwgYSBxdWljayBzZWFyY2ggd2l0aCBgZ3JlcHBlcmAgc2hvdWxkIHJldmVhbCBhbGwgaXRzIGNhbGwgc2l0ZXMgYW5kIGhlbHAgcGFpbnQgYSBicm9hZGVyIHBpY3R1cmUgb2YgdGhpcyBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWJsb2NrX2ZyZWVfYWxsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdD00ND1jYWxsIDpjOmZ1bmM6YGZyZWVfYXJlYV9pbml0YCBmdW5jdGlvbi4gWWV0LCB0aGUgbWFwcGluZ3MgYXJyYXkgaXMgbm90XG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q6NDU6dXNhYmxlIHVudGlsIHRoZSBjYWxsIHRvIDpjOmZ1bmM6YG1lbWJsb2NrX2ZyZWVfYWxsYCB0aGF0IGhhbmRzIGFsbCB0aGVcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdC00Ni1tZW1vcnkgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3Q9MzQ9RkxBVE1FTVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtNDQt5Li65LqG5YiG6YWNIGBtZW1fbWFwYCDmlbDnu4TvvIzmnrbmnoTnibnlrprnmoTorr7nva7ku6PnoIHlupTor6XosIPnlKhmcmVlX2FyZWFfaW5pdCgp5Ye95pWw44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0OjQ1OueEtuiAjO+8jOWcqOiwg+eUqG1lbWJsb2NrX2ZyZWVfYWxsKCnlh73mlbDkuYvliY3vvIzmmKDlsITmlbDnu4TmmK/kuI3og73kvb/nlKjnmoTvvIzor6Xlh73mlbBcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtNDYt5bCG5omA5pyJ55qE5YaF5a2Y5Lqk57uZ6aG15YiG6YWN5Zmo44CCXG4tLVxuYXJjaC94ODYveGVuL21tdV9wdi5jPTg1NT1zdGF0aWMgdm9pZCBfX2luaXQgeGVuX21hcmtfcGlubmVkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmMtODY0LSAqIHRoZSBib29rLWtlZXBpbmcgbm93IG9uY2Ugc3RydWN0IHBhZ2VzIGZvciBhbGxvY2F0ZWQgcGFnZXMgYXJlXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmM6ODY1OiAqIGluaXRpYWxpemVkLiBUaGlzIGhhcHBlbnMgb25seSBhZnRlciBtZW1ibG9ja19mcmVlX2FsbCgpIGlzIGNhbGxlZC5cbmFyY2gveDg2L3hlbi9tbXVfcHYuYy04NjYtICovXG4tLVxubW0vbWVtYmxvY2suYz0xNTU5PXBoeXNfYWRkcl90IF9faW5pdCBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQocGh5c19hZGRyX3Qgc2l6ZSxcbi0tXG5tbS9tZW1ibG9jay5jLTE1NjktXHQgKiB0aGlzIG1vbWVudCBtZW1ibG9jayBtYXkgYmUgZGVpbml0aWFsaXplZCBhbHJlYWR5IGFuZCBpdHNcbm1tL21lbWJsb2NrLmM6MTU3MDpcdCAqIGludGVybmFsIGRhdGEgbWF5IGJlIGRlc3Ryb3llZCAoYWZ0ZXIgZXhlY3V0aW9uIG9mIG1lbWJsb2NrX2ZyZWVfYWxsKVxubW0vbWVtYmxvY2suYy0xNTcxLVx0ICovXG4tLVxubW0vbWVtYmxvY2suYz0yNDY4PXN0YXRpYyB2b2lkIF9faW5pdCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKVxuLS1cbm1tL21lbWJsb2NrLmMtMjQ3Ni0vKipcbm1tL21lbWJsb2NrLmM6MjQ3NzogKiBtZW1ibG9ja19mcmVlX2FsbCAtIHJlbGVhc2UgZnJlZSBwYWdlcyB0byB0aGUgYnVkZHkgYWxsb2NhdG9yXG5tbS9tZW1ibG9jay5jLTI0NzgtICovXG5tbS9tZW1ibG9jay5jOjI0Nzk6dm9pZCBfX2luaXQgbWVtYmxvY2tfZnJlZV9hbGwodm9pZClcbm1tL21lbWJsb2NrLmMtMjQ4MC17XG4tLVxubW0vbW1faW5pdC5jPTgyMD1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sXG4tLVxubW0vbW1faW5pdC5jLTgzOS0gKiBJbml0aWFsbHkgYWxsIHBhZ2VzIGFyZSByZXNlcnZlZCAtIGZyZWUgb25lcyBhcmUgZnJlZWRcbm1tL21tX2luaXQuYzo4NDA6ICogdXAgYnkgbWVtYmxvY2tfZnJlZV9hbGwoKSBvbmNlIHRoZSBlYXJseSBib290IHByb2Nlc3MgaXNcbm1tL21tX2luaXQuYy04NDEtICogZG9uZS4gTm9uLWF0b21pYyBpbml0aWFsaXphdGlvbiwgc2luZ2xlLXBhc3MuXG4tLVxubW0vbW1faW5pdC5jPTI2MzM9dm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTI2NTktXG5tbS9tbV9pbml0LmM6MjY2MDpcdG1lbWJsb2NrX2ZyZWVfYWxsKCk7XG5tbS9tbV9pbml0LmMtMjY2MS1cdG1lbV9pbml0KCk7XG4tLVxubW0vbW1faW5pdC5oPTExND1ib29sIG1lbWJsb2NrX2hhc19taXJyb3Iodm9pZCk7XG5tbS9tbV9pbml0Lmg6MTE1OnZvaWQgbWVtYmxvY2tfZnJlZV9hbGwodm9pZCk7XG5tbS9tbV9pbml0LmgtMTE2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NTAKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA4NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEVhcmx5IEJvb3QgYW5kIFN5emthbGxlciBSZWFjaGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGVhcmx5IGJvb3QvaW5pdCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlc2AuIEkgc2VlIHRoYXQgaXQmIzM5O3MgYSBgc3RhdGljIF9faW5pdCB2b2lkYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGNhbGxlZCBleGNsdXNpdmVseSBieSBgbWVtYmxvY2tfZnJlZV9hbGxgLCB3aGljaCBpcyBhbHNvIGEgYF9faW5pdCB2b2lkYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzaywgaXMgdGhpcyBjb2RlIHJlYWNoYWJsZSBieSBzeXprYWxsZXI/IGBtZW1ibG9ja19mcmVlX2FsbGAgZ2V0cyBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3Qgd2l0aGluIGBtbV9jb3JlX2luaXRgLCBhbmQgdGhhdCYjMzk7cyBhbGwgZHJpdmVuIGZyb20gYHN0YXJ0X2tlcm5lbGAuIEJ1dCBoYW5nIG9uIOKAkyBhZnRlciBib290LCB0aGF0IHdob2xlIGAuaW5pdC50ZXh0YCBzZWN0aW9uIGdldHMgZnJlZWQgd2l0aCBgZnJlZV9pbml0bWVtKClgLgoKVGhlIHF1ZXN0aW9uIGlzLCBjYW4gc3l6a2FsbGVyIGZ1enogdGhpcyB0eXBlIG9mIGNvZGU/IFN5emthbGxlciBydW5zICphZnRlciogdGhlIGtlcm5lbCBoYXMgYm9vdGVkIHVwIGFuZCBpcyBydW5uaW5nIHVzZXJsYW5kIHByb2Nlc3Nlcy4gU28sIHdoYXQmIzM5O3MgdGhlIHRyaWFnZSBzdGFuY2Ugb24gcmVhY2hhYmlsaXR5IHJlZ2FyZGluZyBgX19pbml0YCBjb2RlIGFuZCBlYXJseSBib290IHN0dWZmPwoKUmlnaHQsIGxldCYjMzk7cyBjaGVjazogJiMzNDtSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURS4uLiYjMzQ7LiBJZiBpdCYjMzk7cyBub3QgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQsIG5vIGZ1enppbmcgaXMgbmVlZGVkLiBXYWl0LCB3aGF0IGFib3V0IGBfX2luaXRgPyBTeXprYWxsZXIgZnV6emVzIGJ5IHN5c2NhbGxzIGFuZCB0ZXN0IHByb2dyYW1zIGluIHVzZXJzcGFjZS4gSXQgZXhlY3V0ZXMgYWZ0ZXIgYm9vdCwgKmFmdGVyKiBgZnJlZV9pbml0bWVtKClgLiBTbywgdGhlIGBfX2luaXRgIGNvZGUgaXMgaW5hY2Nlc3NpYmxlLgoKTGV0JiMzOTtzIHJldmlldyB0aGUgaW5zdHJ1Y3Rpb25zIGFnYWluOiBtb2RpZmljYXRpb25zIHRvIGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBzY3JpcHRzIHRoYXQgZG9uJiMzOTt0IGFmZmVjdCB0aGUga2VybmVsIGltYWdlLCBhbmQgZGVjb3JhdGl2ZSBsb2dnaW5nIGFyZSBvZmYgdGhlIHRhYmxlLiBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUgYW5kIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyAobGlrZSBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzKSBhbHNvIGRvbiYjMzk7dCBnZXQgZnV6emVkLgoKU28sIHRoaW5raW5nIGFib3V0IGBfX2luaXRgIGNvZGUgaW4gZ2VuZXJhbCwgdGhhdCBzdHVmZiBvbmx5IHJ1bnMgb25jZSwgYmVmb3JlIHN5emthbGxlciBhbmQgdXNlcnNwYWNlLCBhbmQgaXMgdGhlbiBmcmVlZC4gU3l6a2FsbGVyIGNhbm5vdCByZWFjaCBpdC4gQ291bGQgc3l6a2FsbGVyIGZ1enogYm9vdCBwYXJhbWV0ZXJzPyBObywgc3l6a2FsbGVyIGZ1enplcyBkdXJpbmcgcnVudGltZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlc2AsIGBtZW1ibG9ja19mcmVlX2FsbGAgb3IgYW55IG90aGVyIGNhbGxlciBpcyBuZXZlciBjYWxsZWQgYXQgcnVudGltZS4gSSBuZWVkIHRvIGNoZWNrIGBmb3JfZWFjaF96b25lYCBhZ2FpbnN0IGBmb3JfZWFjaF9vbmxpbmVfcGdkYXRgIGFuZCBhbHNvIGByZXNldF9ub2RlX21hbmFnZWRfcGFnZXNgLiBJJiMzOTtsbCBydW4gYSBncmVwIGFjcm9zcyB0aGUgd2hvbGUga2VybmVsIGZvciBgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXNgIGFuZCBgcmVzZXRfbm9kZV9tYW5hZ2VkX3BhZ2VzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXNldF8oYWxsX3pvbmVzfG5vZGUpX21hbmFnZWRfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtYmxvY2suYz0yNDQ2PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBmcmVlX2xvd19tZW1vcnlfY29yZV9lYXJseSh2b2lkKVxuLS1cbm1tL21lbWJsb2NrLmMtMjQ2Ny1cbm1tL21lbWJsb2NrLmM6MjQ2ODpzdGF0aWMgdm9pZCBfX2luaXQgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXModm9pZClcbm1tL21lbWJsb2NrLmMtMjQ2OS17XG4tLVxubW0vbWVtYmxvY2suYz0yNDc5PXZvaWQgX19pbml0IG1lbWJsb2NrX2ZyZWVfYWxsKHZvaWQpXG4tLVxubW0vbWVtYmxvY2suYy0yNDgzLVx0ZnJlZV91bnVzZWRfbWVtbWFwKCk7XG5tbS9tZW1ibG9jay5jOjI0ODQ6XHRyZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcygpO1xubW0vbWVtYmxvY2suYy0yNDg1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMzIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYHJlc2V0X2FsbF96b25lc19tYW5hZ2VkX3BhZ2VzYCBDYWxsIENoYWluKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRoIG9mIGByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlc2AgYW5kIHNlZSB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkLiBSaWdodCBub3csIG15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCYjMzk7cyAqb25seSogYmVpbmcgY2FsbGVkIGJ5IGBtZW1ibG9ja19mcmVlX2FsbGAuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBBbmQgYG1lbWJsb2NrX2ZyZWVfYWxsYCwgYXMgZmFyIGFzIEkga25vdywgaXMgKm9ubHkqIGNhbGxlZCBieSBgbW1fY29yZV9pbml0YCwgd2hpY2ggaXRzZWxmIGlzIG9ubHkgY2FsbGVkIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgc3RhcnRfa2VybmVsYCByb3V0aW5lLiBCdXQgbGV0JiMzOTtzIHZlcmlmeSB0aGF0LgoKVG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoYXQgYG1lbWJsb2NrX2ZyZWVfYWxsYCBkb2VzbiYjMzk7dCBoYXZlIGFueSB1bmV4cGVjdGVkIGNhbGwgc2l0ZXMuIFNvIEkmIzM5O2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGBtbV9pbml0LmNgIGZpbGUgYW5kIGxvb2sgYXQgdGhlIGBtbV9jb3JlX2luaXRgIGZ1bmN0aW9uLgoKTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhlIGNhbGxlcnMgb2YgYG1tX2NvcmVfaW5pdGAgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBiZWhhdmluZyBhcyBleHBlY3RlZCBhbmQgbm90IGNyZWF0aW5nIHVuZXhwZWN0ZWQgbWVtb3J5IGxlYWtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbV9jb3JlX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbS5oPTQ5PXZvaWQgYXJjaF9tbV9wcmVpbml0KHZvaWQpO1xuaW5jbHVkZS9saW51eC9tbS5oOjUwOnZvaWQgbW1fY29yZV9pbml0X2Vhcmx5KHZvaWQpO1xuaW5jbHVkZS9saW51eC9tbS5oOjUxOnZvaWQgbW1fY29yZV9pbml0KHZvaWQpO1xuaW5jbHVkZS9saW51eC9tbS5oLTUyLXZvaWQgaW5pdF9tbV9pbnRlcm5hbHModm9pZCk7XG4tLVxuaW5pdC9tYWluLmM9OTgyPXZvaWQgc3RhcnRfa2VybmVsKHZvaWQpXG4tLVxuaW5pdC9tYWluLmMtMTAwNC1cdHNldHVwX2FyY2goXHUwMDI2Y29tbWFuZF9saW5lKTtcbmluaXQvbWFpbi5jOjEwMDU6XHRtbV9jb3JlX2luaXRfZWFybHkoKTtcbmluaXQvbWFpbi5jLTEwMDYtXHQvKiBTdGF0aWMga2V5cyBhbmQgc3RhdGljIGNhbGxzIGFyZSBuZWVkZWQgYnkgTFNNcyAqL1xuLS1cbmluaXQvbWFpbi5jLTEwNDMtXHR0cmFwX2luaXQoKTtcbmluaXQvbWFpbi5jOjEwNDQ6XHRtbV9jb3JlX2luaXQoKTtcbmluaXQvbWFpbi5jLTEwNDUtXHRtYXBsZV90cmVlX2luaXQoKTtcbi0tXG5tbS9rbWVtbGVhay5jPTY2Mz1zdGF0aWMgbm9pbmxpbmUgZGVwb3Rfc3RhY2tfaGFuZGxlX3Qgc2V0X3RyYWNrX3ByZXBhcmUodm9pZClcbi0tXG5tbS9rbWVtbGVhay5jLTY3MS1cdCAqIGJlZW4gaW52b2tlZC4gc3RhY2tfZGVwb3RfZWFybHlfaW5pdCgpIGlzIGNhbGxlZCBiZWZvcmVcbm1tL2ttZW1sZWFrLmM6NjcyOlx0ICoga21lbWxlYWtfaW5pdCgpIGluIG1tX2NvcmVfaW5pdCgpLlxubW0va21lbWxlYWsuYy02NzMtXHQgKi9cbi0tXG5tbS9tbV9pbml0LmM9MjYxMz12b2lkIF9faW5pdCBfX3dlYWsgbWVtX2luaXQodm9pZClcbi0tXG5tbS9tbV9pbml0LmMtMjYxNi1cbm1tL21tX2luaXQuYzoyNjE3OnZvaWQgX19pbml0IG1tX2NvcmVfaW5pdF9lYXJseSh2b2lkKVxubW0vbW1faW5pdC5jLTI2MTgte1xuLS1cbm1tL21tX2luaXQuYy0yNjMyLSAqL1xubW0vbW1faW5pdC5jOjI2MzM6dm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpXG5tbS9tbV9pbml0LmMtMjYzNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4ODkKCQkJCQkJCW91dHB1dDogMTA4CgkJCQkJCQl0aG91Z2h0czogNDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFVuZnV6emFibGUgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhhdCBpdCYjMzk7cyAqbm90KiBzb21ldGhpbmcgU3l6a2FsbGVyIG5lZWRzIHRvIHdvcnJ5IGFib3V0LiBNeSB0cmFpbiBvZiB0aG91Z2h0IHdlbnQgbGlrZSB0aGlzOgoKRmlyc3QsIEkgcmVhbGl6ZWQgdGhhdCBgbW1fY29yZV9pbml0YCwgYG1lbWJsb2NrX2ZyZWVfYWxsYCwgYW5kIGByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlc2AgYXJlIGFsbCBgX19pbml0YCBmdW5jdGlvbnMuIFRoZXkmIzM5O3JlIGV4ZWN1dGVkIGVhcmx5LCBkdXJpbmcgYHN0YXJ0X2tlcm5lbCgpYC4gQ3J1Y2lhbGx5LCBieSB0aGUgdGltZSB1c2VyLXNwYWNlIGlzIHVwIGFuZCBydW5uaW5nIChhbmQgU3l6a2FsbGVyIHN0YXJ0cyBkb2luZyBpdHMgdGhpbmcgd2l0aCBzeXNjYWxscyksIHRoZSBzeXN0ZW0gaGFzIGFscmVhZHkgcnVuIGBmcmVlX2luaXRtZW0oKWAgYW5kIGNsZWFuZWQgdXAgYWxsIHRoZSBgX19pbml0YCBzdHVmZi4gVGhpcyBtZWFucywgc3RydWN0dXJhbGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZSBhdCBydW50aW1lLgoKSSB3YW50ZWQgdG8gbWFrZSBzdXJlLCBzbyBJIHdlbnQgdGhyb3VnaCBpdCBzdGVwLWJ5LXN0ZXA6CgoxLiAgVGhlIGNoYW5nZSB3YXMgdGhlIHJlbW92YWwgb2YgdGhlIGhlbHBlciBmdW5jdGlvbiBgcmVzZXRfbm9kZV9tYW5hZ2VkX3BhZ2VzYCBhbmQgYSBzaW1wbGlmaWNhdGlvbiBvZiBgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXNgLiBUaGUgbGF0dGVyIG5vdyB1c2VzIGBmb3JfZWFjaF96b25lKHopYCBpbnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoIGBwZ2RhdC0mZ3Q7bm9kZV96b25lc2AuCjIuICBCb3RoIHRoZSBvcmlnaW5hbCBhbmQgdGhlIG5ldyB2ZXJzaW9ucyBvZiB0aGUgZnVuY3Rpb25zIGFyZSBgc3RhdGljIHZvaWQgX19pbml0YC4KMy4gIFRoZXkmIzM5O3JlIG9ubHkgY2FsbGVkIHZpYSBgbWVtYmxvY2tfZnJlZV9hbGwoKWAsIHdoaWNoIGlzIGFsc28gYHZvaWQgX19pbml0YC4KNC4gIGBtZW1ibG9ja19mcmVlX2FsbCgpYCBpcyAqb25seSogY2FsbGVkIGR1cmluZyBlYXJseSBib290LCB3aXRoaW4gYG1tX2NvcmVfaW5pdCgpYCBpbiBgaW5pdC9tYWluLmNgLgo1LiAgQWZ0ZXIgdGhlIHN5c3RlbSBib290cywgYWxsIHRob3NlIGBfX2luaXRgIHNlY3Rpb25zIGdldCBkaXNjYXJkZWQuIFRoZXkgYXJlIHVubWFwcGVkIGFuZCB0aGUgbWVtb3J5IGlzIGZyZWVkLgo2LiAgU3l6a2FsbGVyIGNhbiYjMzk7dCBnZXQgdG8gYW55IG9mIHRoaXMgc3R1ZmYgdGhyb3VnaCBzeXNjYWxscyBvciBhbnkgcnVudGltZSBvcGVyYXRpb24uIEl0JiMzOTtzIHNpbXBseSBub3QgdGhlcmUgYW55bW9yZS4KNy4gIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuCgpOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBmb3JtYXR0aW5nIHRoaXMgY29ycmVjdGx5IGZvciBgc2V0LXJlc3VsdHNgLiBJdCBuZWVkczoKCiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAgKGVtcHR5IGxpc3QpCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgKGVtcHR5IGxpc3QpCiogICBgUmVhc29uaW5nYDogQW5kIHRoaXMgaXMga2V5IC0gYSBjb25jaXNlIGV4cGxhbmF0aW9uIGxpa2UsICYjMzQ7VGhlIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyB3aXRoaW4gZWFybHkgYm9vdCBgX19pbml0YCBmdW5jdGlvbnMgZXhlY3V0ZWQgZHVyaW5nIHN5c3RlbSBpbml0aWFsaXphdGlvbiBiZWZvcmUgdXNlcnNwYWNlIHJ1bnMuIEl0IGlzIGRpc2NhcmRlZCBmcm9tIG1lbW9yeSBhZnRlciBib290LCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgYnkgdGhlIGZ1enplci4mIzM0OwoKT2theSwgdGhhdCBzZWVtcyByaWdodC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGZvcm1hdHRlZCBpbnRvIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGxpZmllcyByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcygpIGluIG1tL21lbWJsb2NrLmMuIFRoaXMgZnVuY3Rpb24gaXMgbWFya2VkIF9faW5pdCBhbmQgY2FsbGVkIHNvbGVseSBkdXJpbmcgZWFybHkgYm9vdCBmcm9tIG1tX2NvcmVfaW5pdCgpIC1cdTAwM2UgbWVtYmxvY2tfZnJlZV9hbGwoKS4gQWxsIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyBpbiB0aGUgX19pbml0IHNlY3Rpb24gYW5kIGlzIGZyZWVkIGJlZm9yZSB1c2Vyc3BhY2UgaW5pdGlhbGl6ZXMsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSB0byBydW50aW1lIGZ1enppbmcgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGxpZmllcyByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcygpIGluIG1tL21lbWJsb2NrLmMuIFRoaXMgZnVuY3Rpb24gaXMgbWFya2VkIF9faW5pdCBhbmQgY2FsbGVkIHNvbGVseSBkdXJpbmcgZWFybHkgYm9vdCBmcm9tIG1tX2NvcmVfaW5pdCgpIC1cdTAwM2UgbWVtYmxvY2tfZnJlZV9hbGwoKS4gQWxsIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyBpbiB0aGUgX19pbml0IHNlY3Rpb24gYW5kIGlzIGZyZWVkIGJlZm9yZSB1c2Vyc3BhY2UgaW5pdGlhbGl6ZXMsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSB0byBydW50aW1lIGZ1enppbmcgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjAxOjI2LjEzNzc2NjIyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNDc4OTI2MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGxpZmllcyByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcygpIGluIG1tL21lbWJsb2NrLmMuIFRoaXMgZnVuY3Rpb24gaXMgbWFya2VkIF9faW5pdCBhbmQgY2FsbGVkIHNvbGVseSBkdXJpbmcgZWFybHkgYm9vdCBmcm9tIG1tX2NvcmVfaW5pdCgpIC1cXHUwMDNlIG1lbWJsb2NrX2ZyZWVfYWxsKCkuIEFsbCBtb2RpZmllZCBjb2RlIHJlc2lkZXMgaW4gdGhlIF9faW5pdCBzZWN0aW9uIGFuZCBpcyBmcmVlZCBiZWZvcmUgdXNlcnNwYWNlIGluaXRpYWxpemVzLCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgdG8gcnVudGltZSBmdXp6aW5nIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjAxOjI2LjEzNzc3MTAwNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NjE1NTQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA3NTBjNmE3NTVlNmQ3MTQ5MTMwNjMwMTU5OGE0ZWVhOGQxMmQ5OWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMTowMToyNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suY1xcbmluZGV4IDQzMDJmYjRhYjg1YzcuLmVkNjkzN2JlOGQ5ZmEgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtYmxvY2suY1xcbisrKyBiL21tL21lbWJsb2NrLmNcXG5AQCAtMjQ2NSwyMiArMjQ2NSwxNCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgZnJlZV9sb3dfbWVtb3J5X2NvcmVfZWFybHkodm9pZClcXG4gXFx0cmV0dXJuIGNvdW50O1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBfX2luaXQgcmVzZXRfbm9kZV9tYW5hZ2VkX3BhZ2VzKHBnX2RhdGFfdCAqcGdkYXQpXFxuK3N0YXRpYyB2b2lkIF9faW5pdCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCB6b25lICp6O1xcbiBcXG4tXFx0Zm9yICh6ID0gcGdkYXQtXFx1MDAzZW5vZGVfem9uZXM7IHogXFx1MDAzYyBwZ2RhdC1cXHUwMDNlbm9kZV96b25lcyArIE1BWF9OUl9aT05FUzsgeisrKVxcbitcXHRmb3JfZWFjaF96b25lKHopXFxuIFxcdFxcdGF0b21pY19sb25nX3NldChcXHUwMDI2ei1cXHUwMDNlbWFuYWdlZF9wYWdlcywgMCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIF9faW5pdCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKVxcbi17XFxuLVxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7XFxuLVxcbi1cXHRmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpXFxuLVxcdFxcdHJlc2V0X25vZGVfbWFuYWdlZF9wYWdlcyhwZ2RhdCk7XFxuLX1cXG4tXFxuIC8qKlxcbiAgKiBtZW1ibG9ja19mcmVlX2FsbCAtIHJlbGVhc2UgZnJlZSBwYWdlcyB0byB0aGUgYnVkZHkgYWxsb2NhdG9yXFxuICAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTowMToyNy41ODQ2MjUzMjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5MDMyMDUyNTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbGlmaWVzIHJlc2V0X2FsbF96b25lc19tYW5hZ2VkX3BhZ2VzKCkgaW4gbW0vbWVtYmxvY2suYy4gVGhpcyBmdW5jdGlvbiBpcyBtYXJrZWQgX19pbml0IGFuZCBjYWxsZWQgc29sZWx5IGR1cmluZyBlYXJseSBib290IGZyb20gbW1fY29yZV9pbml0KCkgLVxcdTAwM2UgbWVtYmxvY2tfZnJlZV9hbGwoKS4gQWxsIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyBpbiB0aGUgX19pbml0IHNlY3Rpb24gYW5kIGlzIGZyZWVkIGJlZm9yZSB1c2Vyc3BhY2UgaW5pdGlhbGl6ZXMsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSB0byBydW50aW1lIGZ1enppbmcgYnkgc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNzUwYzZhNzU1ZTZkNzE0OTEzMDYzMDE1OThhNGVlYThkMTJkOTliXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMTowMToyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jXG5pbmRleCA0MzAyZmI0YWI4NWM3Li5lZDY5MzdiZThkOWZhIDEwMDY0NFxuLS0tIGEvbW0vbWVtYmxvY2suY1xuKysrIGIvbW0vbWVtYmxvY2suY1xuQEAgLTI0NjUsMjIgKzI0NjUsMTQgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGZyZWVfbG93X21lbW9yeV9jb3JlX2Vhcmx5KHZvaWQpXG4gXHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9faW5pdCByZXNldF9ub2RlX21hbmFnZWRfcGFnZXMocGdfZGF0YV90ICpwZ2RhdClcbitzdGF0aWMgdm9pZCBfX2luaXQgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXModm9pZClcbiB7XG4gXHRzdHJ1Y3Qgem9uZSAqejtcbiBcbi1cdGZvciAoeiA9IHBnZGF0LVx1MDAzZW5vZGVfem9uZXM7IHogXHUwMDNjIHBnZGF0LVx1MDAzZW5vZGVfem9uZXMgKyBNQVhfTlJfWk9ORVM7IHorKylcbitcdGZvcl9lYWNoX3pvbmUoeilcbiBcdFx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNnotXHUwMDNlbWFuYWdlZF9wYWdlcywgMCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9faW5pdCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKVxuLXtcbi1cdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7XG4tXG4tXHRmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpXG4tXHRcdHJlc2V0X25vZGVfbWFuYWdlZF9wYWdlcyhwZ2RhdCk7XG4tfVxuLVxuIC8qKlxuICAqIG1lbWJsb2NrX2ZyZWVfYWxsIC0gcmVsZWFzZSBmcmVlIHBhZ2VzIHRvIHRoZSBidWRkeSBhbGxvY2F0b3JcbiAgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjAxOjI3LjU4NDYyNjc2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkwMzkzNjE2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggdG8gYG1tL21lbWJsb2NrLmNgLiBUaGUgYGRpZmZgIHNob3dzIGEgY29kZSBjaGFuZ2UsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYW5hbHl6ZSB0aGUgY29udGV4dCBvZiBgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXNgIGFuZCBob3cgaXQgcmVsYXRlcyB0byBgbWVtYmxvY2tfZnJlZV9hbGxgLiBTZWVtcyBsaWtlIHdlJ3JlIG9wdGltaXppbmcgaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyBmcmVlIHBhZ2VzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IuXG5cblRoZSBvcmlnaW5hbCBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggZWFjaCBub2RlJ3Mgem9uZXMgdG8gcmVzZXQgYG1hbmFnZWRfcGFnZXNgLiBUaGUgcGF0Y2ggbm93IHNpbXBsaWZpZXMgdGhpcy4gVGhlIHByZXZpb3VzIGNvZGUgY29udGFpbmVkIGEgZnVuY3Rpb24gYHJlc2V0X25vZGVfbWFuYWdlZF9wYWdlc2Agd2hpY2ggd2FzIGNhbGxlZCBmb3IgZWFjaCBwZ2RhdCwgYnV0IG5vdyBpdCBzZWVtcyB0aGF0IHRoZSBuZXcgaW1wbGVtZW50YXRpb24gaXMgaXRlcmF0aW5nIGFjcm9zcyBhbGwgem9uZXMgaW5zdGVhZCBvZiBhIHNwZWNpZmljIG5vZGUncyB6b25lcy4gVGhlIHJlbW92ZWQgY29kZSBtYWtlcyB0aGUgY29kZSBzbGlnaHRseSBlYXNpZXIgdG8gcmVhZC5cblxuTXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB3aXRoIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEknbGwgZm9jdXMgb24gaG93IGBtZW1ibG9ja19mcmVlX2FsbGAgaW50ZXJhY3RzIHdpdGggYHJlc2V0X2FsbF96b25lc19tYW5hZ2VkX3BhZ2VzYCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgYW5kIGhvdyB0aGUgYG1hbmFnZWRfcGFnZXNgIHZhcmlhYmxlIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIG1lbW9yeSBpcyBcImZyZWVcIi4gU3BlY2lmaWNhbGx5LCBJJ2QgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBhZmZlY3RzIHRoZSBvdmVyYWxsIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gcHJvY2VzcywgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLiBJdCBzZWVtcyBsaWtlIHRoZSBnb2FsIGlzIHRvIG9wdGltaXplIGhvdyB0aGUgc3lzdGVtIHRyYWNrcyBhbmQgaW5pdGlhbGl6ZXMgZnJlZSBtZW1vcnkgYXQgYm9vdCwgbWFraW5nIG1lbW9yeSBhdmFpbGFibGUgdG8gdGhlIGtlcm5lbCBlYXJsaWVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDE6MzYuNjIzOTkxMjE5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWJsb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQ2MDpcXHRcXHQgKi9cXG4yNDYxOlxcdFxcdGZvcl9lYWNoX2ZyZWVfbWVtX3JhbmdlKGksIE5VTUFfTk9fTk9ERSwgTUVNQkxPQ0tfTk9ORSwgXFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kLFxcbjI0NjI6XFx0XFx0XFx0XFx0XFx0TlVMTClcXG4yNDYzOlxcdFxcdFxcdGNvdW50ICs9IF9fZnJlZV9tZW1vcnlfY29yZShzdGFydCwgZW5kKTtcXG4yNDY0OlxcdFxcbjI0NjU6XFx0XFx0cmV0dXJuIGNvdW50O1xcbjI0NjY6XFx0fVxcbjI0Njc6XFx0XFxuMjQ2ODpcXHRzdGF0aWMgdm9pZCBfX2luaXQgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXModm9pZClcXG4yNDY5OlxcdHtcXG4yNDcwOlxcdFxcdHN0cnVjdCB6b25lICp6O1xcbjI0NzE6XFx0XFxuMjQ3MjpcXHRcXHRmb3JfZWFjaF96b25lKHopXFxuMjQ3MzpcXHRcXHRcXHRhdG9taWNfbG9uZ19zZXQoXFx1MDAyNnotXFx1MDAzZW1hbmFnZWRfcGFnZXMsIDApO1xcbjI0NzQ6XFx0fVxcbjI0NzU6XFx0XFxuMjQ3NjpcXHQvKipcXG4yNDc3OlxcdCAqIG1lbWJsb2NrX2ZyZWVfYWxsIC0gcmVsZWFzZSBmcmVlIHBhZ2VzIHRvIHRoZSBidWRkeSBhbGxvY2F0b3JcXG4yNDc4OlxcdCAqL1xcbjI0Nzk6XFx0dm9pZCBfX2luaXQgbWVtYmxvY2tfZnJlZV9hbGwodm9pZClcXG4yNDgwOlxcdHtcXG4yNDgxOlxcdFxcdHVuc2lnbmVkIGxvbmcgcGFnZXM7XFxuMjQ4MjpcXHRcXG4yNDgzOlxcdFxcdGZyZWVfdW51c2VkX21lbW1hcCgpO1xcbjI0ODQ6XFx0XFx0cmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXMoKTtcXG4yNDg1OlxcdFxcbjI0ODY6XFx0XFx0bWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2hfb25seSgpO1xcbjI0ODc6XFx0XFx0cGFnZXMgPSBmcmVlX2xvd19tZW1vcnlfY29yZV9lYXJseSgpO1xcbjI0ODg6XFx0XFx0dG90YWxyYW1fcGFnZXNfYWRkKHBhZ2VzKTtcXG4yNDg5OlxcdH1cXG4yNDkwOlxcdFxcbjI0OTE6XFx0LyogS2VlcCBhIHRhYmxlIHRvIHJlc2VydmUgbmFtZWQgbWVtb3J5ICovXFxuMjQ5MjpcXHQjZGVmaW5lIFJFU0VSVkVfTUVNX01BWF9FTlRSSUVTXFx0XFx0OFxcbjI0OTM6XFx0I2RlZmluZSBSRVNFUlZFX01FTV9OQU1FX1NJWkVcXHRcXHQxNlxcbjI0OTQ6XFx0c3RydWN0IHJlc2VydmVfbWVtX3RhYmxlIHtcXG4yNDk1OlxcdFxcdGNoYXJcXHRcXHRcXHRuYW1lW1JFU0VSVkVfTUVNX05BTUVfU0laRV07XFxuMjQ5NjpcXHRcXHRwaHlzX2FkZHJfdFxcdFxcdHN0YXJ0O1xcbjI0OTc6XFx0XFx0cGh5c19hZGRyX3RcXHRcXHRzaXplO1xcbjI0OTg6XFx0fTtcXG4yNDk5OlxcdHN0YXRpYyBzdHJ1Y3QgcmVzZXJ2ZV9tZW1fdGFibGUgcmVzZXJ2ZWRfbWVtX3RhYmxlW1JFU0VSVkVfTUVNX01BWF9FTlRSSUVTXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDE6MzYuNjI0MTM2NjI5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgyOTMwMjUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbnMqKlxuXG5NeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYHJlc2V0X2FsbF96b25lc19tYW5hZ2VkX3BhZ2VzYCBpcyBmbGFnZ2VkIGFzIGFuIGBfX2luaXRgIGZ1bmN0aW9uIGFuZCwgaW50cmlndWluZ2x5LCBpdCdzIGNhbGxlZCBieSBgbWVtYmxvY2tfZnJlZV9hbGxgLCB3aGljaCBpcyAqYWxzbyogbWFya2VkIGFzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLiBUaGlzIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBlYXJseSBpbml0aWFsaXphdGlvbiBvciBjbGVhbnVwIHJvdXRpbmVzIHJlbGF0ZWQgdG8gbWVtb3J5IGJsb2Nrcy4gVGhlIGZhY3QgdGhhdCB0aGV5IGFyZSBib3RoIGBfX2luaXRgIGZ1bmN0aW9ucyB0ZWxscyBtZSB0aGV5IGxpa2VseSBzZXQgdXAgbWVtb3J5IHJlZ2lvbnMgYXQgc3RhcnR1cCwgb3IgcmVsZWFzZSB0aGVtIGF0IHNodXRkb3duLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgcXVlc3Rpb24gaXM6IHdoZXJlIGVsc2UgZG9lcyBgbWVtYmxvY2tfZnJlZV9hbGxgIGNvbWUgaW50byBwbGF5PyBUbyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyB1c2FnZSwgYSBxdWljayBzZWFyY2ggd2l0aCBgZ3JlcHBlcmAgc2hvdWxkIHJldmVhbCBhbGwgaXRzIGNhbGwgc2l0ZXMgYW5kIGhlbHAgcGFpbnQgYSBicm9hZGVyIHBpY3R1cmUgb2YgdGhpcyBmdW5jdGlvbidzIHB1cnBvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjAxOjM4LjQ1MzQ0MTg2M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIxMDgzNDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWJsb2NrX2ZyZWVfYWxsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdD00ND1jYWxsIDpjOmZ1bmM6YGZyZWVfYXJlYV9pbml0YCBmdW5jdGlvbi4gWWV0LCB0aGUgbWFwcGluZ3MgYXJyYXkgaXMgbm90XFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0OjQ1OnVzYWJsZSB1bnRpbCB0aGUgY2FsbCB0byA6YzpmdW5jOmBtZW1ibG9ja19mcmVlX2FsbGAgdGhhdCBoYW5kcyBhbGwgdGhlXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0LTQ2LW1lbW9yeSB0byB0aGUgcGFnZSBhbGxvY2F0b3IuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0PTM0PUZMQVRNRU1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtNDQt5Li65LqG5YiG6YWNIGBtZW1fbWFwYCDmlbDnu4TvvIzmnrbmnoTnibnlrprnmoTorr7nva7ku6PnoIHlupTor6XosIPnlKhmcmVlX2FyZWFfaW5pdCgp5Ye95pWw44CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdDo0NTrnhLbogIzvvIzlnKjosIPnlKhtZW1ibG9ja19mcmVlX2FsbCgp5Ye95pWw5LmL5YmN77yM5pig5bCE5pWw57uE5piv5LiN6IO95L2/55So55qE77yM6K+l5Ye95pWwXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC00Ni3lsIbmiYDmnInnmoTlhoXlrZjkuqTnu5npobXliIbphY3lmajjgIJcXG4tLVxcbmFyY2gveDg2L3hlbi9tbXVfcHYuYz04NTU9c3RhdGljIHZvaWQgX19pbml0IHhlbl9tYXJrX3Bpbm5lZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmMtODY0LSAqIHRoZSBib29rLWtlZXBpbmcgbm93IG9uY2Ugc3RydWN0IHBhZ2VzIGZvciBhbGxvY2F0ZWQgcGFnZXMgYXJlXFxuYXJjaC94ODYveGVuL21tdV9wdi5jOjg2NTogKiBpbml0aWFsaXplZC4gVGhpcyBoYXBwZW5zIG9ubHkgYWZ0ZXIgbWVtYmxvY2tfZnJlZV9hbGwoKSBpcyBjYWxsZWQuXFxuYXJjaC94ODYveGVuL21tdV9wdi5jLTg2Ni0gKi9cXG4tLVxcbm1tL21lbWJsb2NrLmM9MTU1OT1waHlzX2FkZHJfdCBfX2luaXQgbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHBoeXNfYWRkcl90IHNpemUsXFxuLS1cXG5tbS9tZW1ibG9jay5jLTE1NjktXFx0ICogdGhpcyBtb21lbnQgbWVtYmxvY2sgbWF5IGJlIGRlaW5pdGlhbGl6ZWQgYWxyZWFkeSBhbmQgaXRzXFxubW0vbWVtYmxvY2suYzoxNTcwOlxcdCAqIGludGVybmFsIGRhdGEgbWF5IGJlIGRlc3Ryb3llZCAoYWZ0ZXIgZXhlY3V0aW9uIG9mIG1lbWJsb2NrX2ZyZWVfYWxsKVxcbm1tL21lbWJsb2NrLmMtMTU3MS1cXHQgKi9cXG4tLVxcbm1tL21lbWJsb2NrLmM9MjQ2OD1zdGF0aWMgdm9pZCBfX2luaXQgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXModm9pZClcXG4tLVxcbm1tL21lbWJsb2NrLmMtMjQ3Ni0vKipcXG5tbS9tZW1ibG9jay5jOjI0Nzc6ICogbWVtYmxvY2tfZnJlZV9hbGwgLSByZWxlYXNlIGZyZWUgcGFnZXMgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvclxcbm1tL21lbWJsb2NrLmMtMjQ3OC0gKi9cXG5tbS9tZW1ibG9jay5jOjI0Nzk6dm9pZCBfX2luaXQgbWVtYmxvY2tfZnJlZV9hbGwodm9pZClcXG5tbS9tZW1ibG9jay5jLTI0ODAte1xcbi0tXFxubW0vbW1faW5pdC5jPTgyMD1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sXFxuLS1cXG5tbS9tbV9pbml0LmMtODM5LSAqIEluaXRpYWxseSBhbGwgcGFnZXMgYXJlIHJlc2VydmVkIC0gZnJlZSBvbmVzIGFyZSBmcmVlZFxcbm1tL21tX2luaXQuYzo4NDA6ICogdXAgYnkgbWVtYmxvY2tfZnJlZV9hbGwoKSBvbmNlIHRoZSBlYXJseSBib290IHByb2Nlc3MgaXNcXG5tbS9tbV9pbml0LmMtODQxLSAqIGRvbmUuIE5vbi1hdG9taWMgaW5pdGlhbGl6YXRpb24sIHNpbmdsZS1wYXNzLlxcbi0tXFxubW0vbW1faW5pdC5jPTI2MzM9dm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpXFxuLS1cXG5tbS9tbV9pbml0LmMtMjY1OS1cXG5tbS9tbV9pbml0LmM6MjY2MDpcXHRtZW1ibG9ja19mcmVlX2FsbCgpO1xcbm1tL21tX2luaXQuYy0yNjYxLVxcdG1lbV9pbml0KCk7XFxuLS1cXG5tbS9tbV9pbml0Lmg9MTE0PWJvb2wgbWVtYmxvY2tfaGFzX21pcnJvcih2b2lkKTtcXG5tbS9tbV9pbml0Lmg6MTE1OnZvaWQgbWVtYmxvY2tfZnJlZV9hbGwodm9pZCk7XFxubW0vbW1faW5pdC5oLTExNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDE6NDAuMDc0NTMxMTcxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU1OTM2ODk2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRWFybHkgQm9vdCBhbmQgU3l6a2FsbGVyIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGVhcmx5IGJvb3QvaW5pdCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlc2AuIEkgc2VlIHRoYXQgaXQncyBhIGBzdGF0aWMgX19pbml0IHZvaWRgIGZ1bmN0aW9uLCBhbmQgaXQncyBjYWxsZWQgZXhjbHVzaXZlbHkgYnkgYG1lbWJsb2NrX2ZyZWVfYWxsYCwgd2hpY2ggaXMgYWxzbyBhIGBfX2luaXQgdm9pZGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc2ssIGlzIHRoaXMgY29kZSByZWFjaGFibGUgYnkgc3l6a2FsbGVyPyBgbWVtYmxvY2tfZnJlZV9hbGxgIGdldHMgY2FsbGVkIGR1cmluZyBlYXJseSBib290IHdpdGhpbiBgbW1fY29yZV9pbml0YCwgYW5kIHRoYXQncyBhbGwgZHJpdmVuIGZyb20gYHN0YXJ0X2tlcm5lbGAuIEJ1dCBoYW5nIG9uIOKAkyBhZnRlciBib290LCB0aGF0IHdob2xlIGAuaW5pdC50ZXh0YCBzZWN0aW9uIGdldHMgZnJlZWQgd2l0aCBgZnJlZV9pbml0bWVtKClgLlxuXG5UaGUgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgZnV6eiB0aGlzIHR5cGUgb2YgY29kZT8gU3l6a2FsbGVyIHJ1bnMgKmFmdGVyKiB0aGUga2VybmVsIGhhcyBib290ZWQgdXAgYW5kIGlzIHJ1bm5pbmcgdXNlcmxhbmQgcHJvY2Vzc2VzLiBTbywgd2hhdCdzIHRoZSB0cmlhZ2Ugc3RhbmNlIG9uIHJlYWNoYWJpbGl0eSByZWdhcmRpbmcgYF9faW5pdGAgY29kZSBhbmQgZWFybHkgYm9vdCBzdHVmZj9cblxuUmlnaHQsIGxldCdzIGNoZWNrOiBcIlJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFLi4uXCIuIElmIGl0J3Mgbm90IHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LCBubyBmdXp6aW5nIGlzIG5lZWRlZC4gV2FpdCwgd2hhdCBhYm91dCBgX19pbml0YD8gU3l6a2FsbGVyIGZ1enplcyBieSBzeXNjYWxscyBhbmQgdGVzdCBwcm9ncmFtcyBpbiB1c2Vyc3BhY2UuIEl0IGV4ZWN1dGVzIGFmdGVyIGJvb3QsICphZnRlciogYGZyZWVfaW5pdG1lbSgpYC4gU28sIHRoZSBgX19pbml0YCBjb2RlIGlzIGluYWNjZXNzaWJsZS5cblxuTGV0J3MgcmV2aWV3IHRoZSBpbnN0cnVjdGlvbnMgYWdhaW46IG1vZGlmaWNhdGlvbnMgdG8gZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIHNjcmlwdHMgdGhhdCBkb24ndCBhZmZlY3QgdGhlIGtlcm5lbCBpbWFnZSwgYW5kIGRlY29yYXRpdmUgbG9nZ2luZyBhcmUgb2ZmIHRoZSB0YWJsZS4gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlIGFuZCB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgKGxpa2UgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcykgYWxzbyBkb24ndCBnZXQgZnV6emVkLlxuXG5TbywgdGhpbmtpbmcgYWJvdXQgYF9faW5pdGAgY29kZSBpbiBnZW5lcmFsLCB0aGF0IHN0dWZmIG9ubHkgcnVucyBvbmNlLCBiZWZvcmUgc3l6a2FsbGVyIGFuZCB1c2Vyc3BhY2UsIGFuZCBpcyB0aGVuIGZyZWVkLiBTeXprYWxsZXIgY2Fubm90IHJlYWNoIGl0LiBDb3VsZCBzeXprYWxsZXIgZnV6eiBib290IHBhcmFtZXRlcnM/IE5vLCBzeXprYWxsZXIgZnV6emVzIGR1cmluZyBydW50aW1lLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlc2AsIGBtZW1ibG9ja19mcmVlX2FsbGAgb3IgYW55IG90aGVyIGNhbGxlciBpcyBuZXZlciBjYWxsZWQgYXQgcnVudGltZS4gSSBuZWVkIHRvIGNoZWNrIGBmb3JfZWFjaF96b25lYCBhZ2FpbnN0IGBmb3JfZWFjaF9vbmxpbmVfcGdkYXRgIGFuZCBhbHNvIGByZXNldF9ub2RlX21hbmFnZWRfcGFnZXNgLiBJJ2xsIHJ1biBhIGdyZXAgYWNyb3NzIHRoZSB3aG9sZSBrZXJuZWwgZm9yIGByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlc2AgYW5kIGByZXNldF9ub2RlX21hbmFnZWRfcGFnZXNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDUwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjAxOjQ1LjYzMzkwMjgxMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzUyNjk5MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlc2V0XyhhbGxfem9uZXN8bm9kZSlfbWFuYWdlZF9wYWdlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1ibG9jay5jPTI0NDY9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGZyZWVfbG93X21lbW9yeV9jb3JlX2Vhcmx5KHZvaWQpXFxuLS1cXG5tbS9tZW1ibG9jay5jLTI0NjctXFxubW0vbWVtYmxvY2suYzoyNDY4OnN0YXRpYyB2b2lkIF9faW5pdCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKVxcbm1tL21lbWJsb2NrLmMtMjQ2OS17XFxuLS1cXG5tbS9tZW1ibG9jay5jPTI0Nzk9dm9pZCBfX2luaXQgbWVtYmxvY2tfZnJlZV9hbGwodm9pZClcXG4tLVxcbm1tL21lbWJsb2NrLmMtMjQ4My1cXHRmcmVlX3VudXNlZF9tZW1tYXAoKTtcXG5tbS9tZW1ibG9jay5jOjI0ODQ6XFx0cmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXMoKTtcXG5tbS9tZW1ibG9jay5jLTI0ODUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjAxOjQ3Ljk4NjYwNzEyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMwODAwNzY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXNgIENhbGwgQ2hhaW4qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aCBvZiBgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXNgIGFuZCBzZWUgd2hlcmUgaXQncyBiZWluZyB1c2VkLiBSaWdodCBub3csIG15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCdzICpvbmx5KiBiZWluZyBjYWxsZWQgYnkgYG1lbWJsb2NrX2ZyZWVfYWxsYC4gVGhhdCdzIGltcG9ydGFudC4gQW5kIGBtZW1ibG9ja19mcmVlX2FsbGAsIGFzIGZhciBhcyBJIGtub3csIGlzICpvbmx5KiBjYWxsZWQgYnkgYG1tX2NvcmVfaW5pdGAsIHdoaWNoIGl0c2VsZiBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHN0YXJ0X2tlcm5lbGAgcm91dGluZS4gQnV0IGxldCdzIHZlcmlmeSB0aGF0LlxuXG5UbyBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBtZW1ibG9ja19mcmVlX2FsbGAgZG9lc24ndCBoYXZlIGFueSB1bmV4cGVjdGVkIGNhbGwgc2l0ZXMuIFNvIEknbGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgYG1tX2luaXQuY2AgZmlsZSBhbmQgbG9vayBhdCB0aGUgYG1tX2NvcmVfaW5pdGAgZnVuY3Rpb24uXG5cbk5vdywgbGV0J3MgdHJhY2UgdGhlIGNhbGxlcnMgb2YgYG1tX2NvcmVfaW5pdGAgYW5kIG1ha2Ugc3VyZSBpdCdzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIGFuZCBub3QgY3JlYXRpbmcgdW5leHBlY3RlZCBtZW1vcnkgbGVha3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMzIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDE6NTAuMjk0NjE3MjY3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkwNzA5MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tX2NvcmVfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tLmg9NDk9dm9pZCBhcmNoX21tX3ByZWluaXQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9tbS5oOjUwOnZvaWQgbW1fY29yZV9pbml0X2Vhcmx5KHZvaWQpO1xcbmluY2x1ZGUvbGludXgvbW0uaDo1MTp2b2lkIG1tX2NvcmVfaW5pdCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtNTItdm9pZCBpbml0X21tX2ludGVybmFscyh2b2lkKTtcXG4tLVxcbmluaXQvbWFpbi5jPTk4Mj12b2lkIHN0YXJ0X2tlcm5lbCh2b2lkKVxcbi0tXFxuaW5pdC9tYWluLmMtMTAwNC1cXHRzZXR1cF9hcmNoKFxcdTAwMjZjb21tYW5kX2xpbmUpO1xcbmluaXQvbWFpbi5jOjEwMDU6XFx0bW1fY29yZV9pbml0X2Vhcmx5KCk7XFxuaW5pdC9tYWluLmMtMTAwNi1cXHQvKiBTdGF0aWMga2V5cyBhbmQgc3RhdGljIGNhbGxzIGFyZSBuZWVkZWQgYnkgTFNNcyAqL1xcbi0tXFxuaW5pdC9tYWluLmMtMTA0My1cXHR0cmFwX2luaXQoKTtcXG5pbml0L21haW4uYzoxMDQ0OlxcdG1tX2NvcmVfaW5pdCgpO1xcbmluaXQvbWFpbi5jLTEwNDUtXFx0bWFwbGVfdHJlZV9pbml0KCk7XFxuLS1cXG5tbS9rbWVtbGVhay5jPTY2Mz1zdGF0aWMgbm9pbmxpbmUgZGVwb3Rfc3RhY2tfaGFuZGxlX3Qgc2V0X3RyYWNrX3ByZXBhcmUodm9pZClcXG4tLVxcbm1tL2ttZW1sZWFrLmMtNjcxLVxcdCAqIGJlZW4gaW52b2tlZC4gc3RhY2tfZGVwb3RfZWFybHlfaW5pdCgpIGlzIGNhbGxlZCBiZWZvcmVcXG5tbS9rbWVtbGVhay5jOjY3MjpcXHQgKiBrbWVtbGVha19pbml0KCkgaW4gbW1fY29yZV9pbml0KCkuXFxubW0va21lbWxlYWsuYy02NzMtXFx0ICovXFxuLS1cXG5tbS9tbV9pbml0LmM9MjYxMz12b2lkIF9faW5pdCBfX3dlYWsgbWVtX2luaXQodm9pZClcXG4tLVxcbm1tL21tX2luaXQuYy0yNjE2LVxcbm1tL21tX2luaXQuYzoyNjE3OnZvaWQgX19pbml0IG1tX2NvcmVfaW5pdF9lYXJseSh2b2lkKVxcbm1tL21tX2luaXQuYy0yNjE4LXtcXG4tLVxcbm1tL21tX2luaXQuYy0yNjMyLSAqL1xcbm1tL21tX2luaXQuYzoyNjMzOnZvaWQgX19pbml0IG1tX2NvcmVfaW5pdCh2b2lkKVxcbm1tL21tX2luaXQuYy0yNjM0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDE6NTEuNzg1MzM1NDQ2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MzEzMTA2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgVW5mdXp6YWJsZSBDb2RlKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJJ20gcHJldHR5IGNvbmZpZGVudCB0aGF0IGl0J3MgKm5vdCogc29tZXRoaW5nIFN5emthbGxlciBuZWVkcyB0byB3b3JyeSBhYm91dC4gTXkgdHJhaW4gb2YgdGhvdWdodCB3ZW50IGxpa2UgdGhpczpcblxuRmlyc3QsIEkgcmVhbGl6ZWQgdGhhdCBgbW1fY29yZV9pbml0YCwgYG1lbWJsb2NrX2ZyZWVfYWxsYCwgYW5kIGByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlc2AgYXJlIGFsbCBgX19pbml0YCBmdW5jdGlvbnMuIFRoZXkncmUgZXhlY3V0ZWQgZWFybHksIGR1cmluZyBgc3RhcnRfa2VybmVsKClgLiBDcnVjaWFsbHksIGJ5IHRoZSB0aW1lIHVzZXItc3BhY2UgaXMgdXAgYW5kIHJ1bm5pbmcgKGFuZCBTeXprYWxsZXIgc3RhcnRzIGRvaW5nIGl0cyB0aGluZyB3aXRoIHN5c2NhbGxzKSwgdGhlIHN5c3RlbSBoYXMgYWxyZWFkeSBydW4gYGZyZWVfaW5pdG1lbSgpYCBhbmQgY2xlYW5lZCB1cCBhbGwgdGhlIGBfX2luaXRgIHN0dWZmLiBUaGlzIG1lYW5zLCBzdHJ1Y3R1cmFsbHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGF0IHJ1bnRpbWUuXG5cbkkgd2FudGVkIHRvIG1ha2Ugc3VyZSwgc28gSSB3ZW50IHRocm91Z2ggaXQgc3RlcC1ieS1zdGVwOlxuXG4xLiAgVGhlIGNoYW5nZSB3YXMgdGhlIHJlbW92YWwgb2YgdGhlIGhlbHBlciBmdW5jdGlvbiBgcmVzZXRfbm9kZV9tYW5hZ2VkX3BhZ2VzYCBhbmQgYSBzaW1wbGlmaWNhdGlvbiBvZiBgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXNgLiBUaGUgbGF0dGVyIG5vdyB1c2VzIGBmb3JfZWFjaF96b25lKHopYCBpbnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoIGBwZ2RhdC1cdTAwM2Vub2RlX3pvbmVzYC5cbjIuICBCb3RoIHRoZSBvcmlnaW5hbCBhbmQgdGhlIG5ldyB2ZXJzaW9ucyBvZiB0aGUgZnVuY3Rpb25zIGFyZSBgc3RhdGljIHZvaWQgX19pbml0YC5cbjMuICBUaGV5J3JlIG9ubHkgY2FsbGVkIHZpYSBgbWVtYmxvY2tfZnJlZV9hbGwoKWAsIHdoaWNoIGlzIGFsc28gYHZvaWQgX19pbml0YC5cbjQuICBgbWVtYmxvY2tfZnJlZV9hbGwoKWAgaXMgKm9ubHkqIGNhbGxlZCBkdXJpbmcgZWFybHkgYm9vdCwgd2l0aGluIGBtbV9jb3JlX2luaXQoKWAgaW4gYGluaXQvbWFpbi5jYC5cbjUuICBBZnRlciB0aGUgc3lzdGVtIGJvb3RzLCBhbGwgdGhvc2UgYF9faW5pdGAgc2VjdGlvbnMgZ2V0IGRpc2NhcmRlZC4gVGhleSBhcmUgdW5tYXBwZWQgYW5kIHRoZSBtZW1vcnkgaXMgZnJlZWQuXG42LiAgU3l6a2FsbGVyIGNhbid0IGdldCB0byBhbnkgb2YgdGhpcyBzdHVmZiB0aHJvdWdoIHN5c2NhbGxzIG9yIGFueSBydW50aW1lIG9wZXJhdGlvbi4gSXQncyBzaW1wbHkgbm90IHRoZXJlIGFueW1vcmUuXG43LiAgVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC5cblxuTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBmb3JtYXR0aW5nIHRoaXMgY29ycmVjdGx5IGZvciBgc2V0LXJlc3VsdHNgLiBJdCBuZWVkczpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAgKGVtcHR5IGxpc3QpXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gIChlbXB0eSBsaXN0KVxuKiAgIGBSZWFzb25pbmdgOiBBbmQgdGhpcyBpcyBrZXkgLSBhIGNvbmNpc2UgZXhwbGFuYXRpb24gbGlrZSwgXCJUaGUgbW9kaWZpZWQgY29kZSByZXNpZGVzIHdpdGhpbiBlYXJseSBib290IGBfX2luaXRgIGZ1bmN0aW9ucyBleGVjdXRlZCBkdXJpbmcgc3lzdGVtIGluaXRpYWxpemF0aW9uIGJlZm9yZSB1c2Vyc3BhY2UgcnVucy4gSXQgaXMgZGlzY2FyZGVkIGZyb20gbWVtb3J5IGFmdGVyIGJvb3QsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBieSB0aGUgZnV6emVyLlwiXG5cbk9rYXksIHRoYXQgc2VlbXMgcmlnaHQuIExldCdzIG1ha2Ugc3VyZSB0aGF0J3MgZm9ybWF0dGVkIGludG8gdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg4OSwiT3V0cHV0VG9rZW5zIjoxMDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDE6NTYuNjE2NjQ5MTc0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGxpZmllcyByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcygpIGluIG1tL21lbWJsb2NrLmMuIFRoaXMgZnVuY3Rpb24gaXMgbWFya2VkIF9faW5pdCBhbmQgY2FsbGVkIHNvbGVseSBkdXJpbmcgZWFybHkgYm9vdCBmcm9tIG1tX2NvcmVfaW5pdCgpIC1cXHUwMDNlIG1lbWJsb2NrX2ZyZWVfYWxsKCkuIEFsbCBtb2RpZmllZCBjb2RlIHJlc2lkZXMgaW4gdGhlIF9faW5pdCBzZWN0aW9uIGFuZCBpcyBmcmVlZCBiZWZvcmUgdXNlcnNwYWNlIGluaXRpYWxpemVzLCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgdG8gcnVudGltZSBmdXp6aW5nIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXMoKSBpbiBtbS9tZW1ibG9jay5jLiBUaGlzIGZ1bmN0aW9uIGlzIG1hcmtlZCBfX2luaXQgYW5kIGNhbGxlZCBzb2xlbHkgZHVyaW5nIGVhcmx5IGJvb3QgZnJvbSBtbV9jb3JlX2luaXQoKSAtXFx1MDAzZSBtZW1ibG9ja19mcmVlX2FsbCgpLiBBbGwgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIHRoZSBfX2luaXQgc2VjdGlvbiBhbmQgaXMgZnJlZWQgYmVmb3JlIHVzZXJzcGFjZSBpbml0aWFsaXplcywgbWFraW5nIGl0IHVucmVhY2hhYmxlIHRvIHJ1bnRpbWUgZnV6emluZyBieSBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTowMTo1Ni42MTY2ODAxNjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflownc27f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 21:00:08 +0000 UTC FinishedAt: 2026-09-08 21:01:57 +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+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGxpZmllcyByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcygpIGluIG1tL21lbWJsb2NrLmMuIFRoaXMgZnVuY3Rpb24gaXMgbWFya2VkIF9faW5pdCBhbmQgY2FsbGVkIHNvbGVseSBkdXJpbmcgZWFybHkgYm9vdCBmcm9tIG1tX2NvcmVfaW5pdCgpIC1cdTAwM2UgbWVtYmxvY2tfZnJlZV9hbGwoKS4gQWxsIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyBpbiB0aGUgX19pbml0IHNlY3Rpb24gYW5kIGlzIGZyZWVkIGJlZm9yZSB1c2Vyc3BhY2UgaW5pdGlhbGl6ZXMsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSB0byBydW50aW1lIGZ1enppbmcgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDA3NTBjNmE3NTVlNmQ3MTQ5MTMwNjMwMTU5OGE0ZWVhOGQxMmQ5OWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDIxOjAxOjI0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jXG5pbmRleCA0MzAyZmI0YWI4NWM3Li5lZDY5MzdiZThkOWZhIDEwMDY0NFxuLS0tIGEvbW0vbWVtYmxvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtYmxvY2suY1xuQEAgLTI0NjUsMjIgJiM0MzsyNDY1LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBmcmVlX2xvd19tZW1vcnlfY29yZV9lYXJseSh2b2lkKVxuIFx0cmV0dXJuIGNvdW50O1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX2luaXQgcmVzZXRfbm9kZV9tYW5hZ2VkX3BhZ2VzKHBnX2RhdGFfdCAqcGdkYXQpXG4mIzQzO3N0YXRpYyB2b2lkIF9faW5pdCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKVxuIHtcbiBcdHN0cnVjdCB6b25lICp6O1xuIFxuLVx0Zm9yICh6ID0gcGdkYXQtXHUwMDNlbm9kZV96b25lczsgeiBcdTAwM2MgcGdkYXQtXHUwMDNlbm9kZV96b25lcyAmIzQzOyBNQVhfTlJfWk9ORVM7IHomIzQzOyYjNDM7KVxuJiM0MztcdGZvcl9lYWNoX3pvbmUoeilcbiBcdFx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNnotXHUwMDNlbWFuYWdlZF9wYWdlcywgMCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9faW5pdCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKVxuLXtcbi1cdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7XG4tXG4tXHRmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpXG4tXHRcdHJlc2V0X25vZGVfbWFuYWdlZF9wYWdlcyhwZ2RhdCk7XG4tfVxuLVxuIC8qKlxuICAqIG1lbWJsb2NrX2ZyZWVfYWxsIC0gcmVsZWFzZSBmcmVlIHBhZ2VzIHRvIHRoZSBidWRkeSBhbGxvY2F0b3JcbiAgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzaW1wbGlmaWVzIHJlc2V0X2FsbF96b25lc19tYW5hZ2VkX3BhZ2VzKCkgaW4gbW0vbWVtYmxvY2suYy4gVGhpcyBmdW5jdGlvbiBpcyBtYXJrZWQgX19pbml0IGFuZCBjYWxsZWQgc29sZWx5IGR1cmluZyBlYXJseSBib290IGZyb20gbW1fY29yZV9pbml0KCkgLVx1MDAzZSBtZW1ibG9ja19mcmVlX2FsbCgpLiBBbGwgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIHRoZSBfX2luaXQgc2VjdGlvbiBhbmQgaXMgZnJlZWQgYmVmb3JlIHVzZXJzcGFjZSBpbml0aWFsaXplcywgbWFraW5nIGl0IHVucmVhY2hhYmxlIHRvIHJ1bnRpbWUgZnV6emluZyBieSBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDc1MGM2YTc1NWU2ZDcxNDkxMzA2MzAxNTk4YTRlZWE4ZDEyZDk5YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMjE6MDE6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suYwppbmRleCA0MzAyZmI0YWI4NWM3Li5lZDY5MzdiZThkOWZhIDEwMDY0NAotLS0gYS9tbS9tZW1ibG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWJsb2NrLmMKQEAgLTI0NjUsMjIgJiM0MzsyNDY1LDE0IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBmcmVlX2xvd19tZW1vcnlfY29yZV9lYXJseSh2b2lkKQogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHJlc2V0X25vZGVfbWFuYWdlZF9wYWdlcyhwZ19kYXRhX3QgKnBnZGF0KQomIzQzO3N0YXRpYyB2b2lkIF9faW5pdCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKQogewogCXN0cnVjdCB6b25lICp6OwogCi0JZm9yICh6ID0gcGdkYXQtJmd0O25vZGVfem9uZXM7IHogJmx0OyBwZ2RhdC0mZ3Q7bm9kZV96b25lcyAmIzQzOyBNQVhfTlJfWk9ORVM7IHomIzQzOyYjNDM7KQomIzQzOwlmb3JfZWFjaF96b25lKHopCiAJCWF0b21pY19sb25nX3NldCgmYW1wO3otJmd0O21hbmFnZWRfcGFnZXMsIDApOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXModm9pZCkKLXsKLQlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0OwotCi0JZm9yX2VhY2hfb25saW5lX3BnZGF0KHBnZGF0KQotCQlyZXNldF9ub2RlX21hbmFnZWRfcGFnZXMocGdkYXQpOwotfQotCiAvKioKICAqIG1lbWJsb2NrX2ZyZWVfYWxsIC0gcmVsZWFzZSBmcmVlIHBhZ2VzIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IKICAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTg4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggdG8gYG1tL21lbWJsb2NrLmNgLiBUaGUgYGRpZmZgIHNob3dzIGEgY29kZSBjaGFuZ2UsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYW5hbHl6ZSB0aGUgY29udGV4dCBvZiBgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXNgIGFuZCBob3cgaXQgcmVsYXRlcyB0byBgbWVtYmxvY2tfZnJlZV9hbGxgLiBTZWVtcyBsaWtlIHdlJiMzOTtyZSBvcHRpbWl6aW5nIGhvdyB0aGUgc3lzdGVtIG1hbmFnZXMgZnJlZSBwYWdlcywgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLgoKVGhlIG9yaWdpbmFsIGNvZGUgaXRlcmF0ZXMgdGhyb3VnaCBlYWNoIG5vZGUmIzM5O3Mgem9uZXMgdG8gcmVzZXQgYG1hbmFnZWRfcGFnZXNgLiBUaGUgcGF0Y2ggbm93IHNpbXBsaWZpZXMgdGhpcy4gVGhlIHByZXZpb3VzIGNvZGUgY29udGFpbmVkIGEgZnVuY3Rpb24gYHJlc2V0X25vZGVfbWFuYWdlZF9wYWdlc2Agd2hpY2ggd2FzIGNhbGxlZCBmb3IgZWFjaCBwZ2RhdCwgYnV0IG5vdyBpdCBzZWVtcyB0aGF0IHRoZSBuZXcgaW1wbGVtZW50YXRpb24gaXMgaXRlcmF0aW5nIGFjcm9zcyBhbGwgem9uZXMgaW5zdGVhZCBvZiBhIHNwZWNpZmljIG5vZGUmIzM5O3Mgem9uZXMuIFRoZSByZW1vdmVkIGNvZGUgbWFrZXMgdGhlIGNvZGUgc2xpZ2h0bHkgZWFzaWVyIHRvIHJlYWQuCgpNeSBuZXh0IHN0ZXAgd291bGQgYmUgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb2RlIHdpdGggYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSSYjMzk7bGwgZm9jdXMgb24gaG93IGBtZW1ibG9ja19mcmVlX2FsbGAgaW50ZXJhY3RzIHdpdGggYHJlc2V0X2FsbF96b25lc19tYW5hZ2VkX3BhZ2VzYCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgYW5kIGhvdyB0aGUgYG1hbmFnZWRfcGFnZXNgIHZhcmlhYmxlIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIG1lbW9yeSBpcyAmIzM0O2ZyZWUmIzM0Oy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtkIG5lZWQgdG8gY29uc2lkZXIgaG93IHRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHByb2Nlc3MsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvci4gSXQgc2VlbXMgbGlrZSB0aGUgZ29hbCBpcyB0byBvcHRpbWl6ZSBob3cgdGhlIHN5c3RlbSB0cmFja3MgYW5kIGluaXRpYWxpemVzIGZyZWUgbWVtb3J5IGF0IGJvb3QsIG1ha2luZyBtZW1vcnkgYXZhaWxhYmxlIHRvIHRoZSBrZXJuZWwgZWFybGllci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWJsb2NrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI0NjA6XHRcdCAqL1xuMjQ2MTpcdFx0Zm9yX2VhY2hfZnJlZV9tZW1fcmFuZ2UoaSwgTlVNQV9OT19OT0RFLCBNRU1CTE9DS19OT05FLCBcdTAwMjZzdGFydCwgXHUwMDI2ZW5kLFxuMjQ2MjpcdFx0XHRcdFx0TlVMTClcbjI0NjM6XHRcdFx0Y291bnQgJiM0Mzs9IF9fZnJlZV9tZW1vcnlfY29yZShzdGFydCwgZW5kKTtcbjI0NjQ6XHRcbjI0NjU6XHRcdHJldHVybiBjb3VudDtcbjI0NjY6XHR9XG4yNDY3Olx0XG4yNDY4Olx0c3RhdGljIHZvaWQgX19pbml0IHJlc2V0X2FsbF96b25lc19tYW5hZ2VkX3BhZ2VzKHZvaWQpXG4yNDY5Olx0e1xuMjQ3MDpcdFx0c3RydWN0IHpvbmUgKno7XG4yNDcxOlx0XG4yNDcyOlx0XHRmb3JfZWFjaF96b25lKHopXG4yNDczOlx0XHRcdGF0b21pY19sb25nX3NldChcdTAwMjZ6LVx1MDAzZW1hbmFnZWRfcGFnZXMsIDApO1xuMjQ3NDpcdH1cbjI0NzU6XHRcbjI0NzY6XHQvKipcbjI0Nzc6XHQgKiBtZW1ibG9ja19mcmVlX2FsbCAtIHJlbGVhc2UgZnJlZSBwYWdlcyB0byB0aGUgYnVkZHkgYWxsb2NhdG9yXG4yNDc4Olx0ICovXG4yNDc5Olx0dm9pZCBfX2luaXQgbWVtYmxvY2tfZnJlZV9hbGwodm9pZClcbjI0ODA6XHR7XG4yNDgxOlx0XHR1bnNpZ25lZCBsb25nIHBhZ2VzO1xuMjQ4MjpcdFxuMjQ4MzpcdFx0ZnJlZV91bnVzZWRfbWVtbWFwKCk7XG4yNDg0Olx0XHRyZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcygpO1xuMjQ4NTpcdFxuMjQ4NjpcdFx0bWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2hfb25seSgpO1xuMjQ4NzpcdFx0cGFnZXMgPSBmcmVlX2xvd19tZW1vcnlfY29yZV9lYXJseSgpO1xuMjQ4ODpcdFx0dG90YWxyYW1fcGFnZXNfYWRkKHBhZ2VzKTtcbjI0ODk6XHR9XG4yNDkwOlx0XG4yNDkxOlx0LyogS2VlcCBhIHRhYmxlIHRvIHJlc2VydmUgbmFtZWQgbWVtb3J5ICovXG4yNDkyOlx0I2RlZmluZSBSRVNFUlZFX01FTV9NQVhfRU5UUklFU1x0XHQ4XG4yNDkzOlx0I2RlZmluZSBSRVNFUlZFX01FTV9OQU1FX1NJWkVcdFx0MTZcbjI0OTQ6XHRzdHJ1Y3QgcmVzZXJ2ZV9tZW1fdGFibGUge1xuMjQ5NTpcdFx0Y2hhclx0XHRcdG5hbWVbUkVTRVJWRV9NRU1fTkFNRV9TSVpFXTtcbjI0OTY6XHRcdHBoeXNfYWRkcl90XHRcdHN0YXJ0O1xuMjQ5NzpcdFx0cGh5c19hZGRyX3RcdFx0c2l6ZTtcbjI0OTg6XHR9O1xuMjQ5OTpcdHN0YXRpYyBzdHJ1Y3QgcmVzZXJ2ZV9tZW1fdGFibGUgcmVzZXJ2ZWRfbWVtX3RhYmxlW1JFU0VSVkVfTUVNX01BWF9FTlRSSUVTXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzEzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbnMqKgoKTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlc2AgaXMgZmxhZ2dlZCBhcyBhbiBgX19pbml0YCBmdW5jdGlvbiBhbmQsIGludHJpZ3VpbmdseSwgaXQmIzM5O3MgY2FsbGVkIGJ5IGBtZW1ibG9ja19mcmVlX2FsbGAsIHdoaWNoIGlzICphbHNvKiBtYXJrZWQgYXMgYW4gYF9faW5pdGAgZnVuY3Rpb24uIFRoaXMgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBlYXJseSBpbml0aWFsaXphdGlvbiBvciBjbGVhbnVwIHJvdXRpbmVzIHJlbGF0ZWQgdG8gbWVtb3J5IGJsb2Nrcy4gVGhlIGZhY3QgdGhhdCB0aGV5IGFyZSBib3RoIGBfX2luaXRgIGZ1bmN0aW9ucyB0ZWxscyBtZSB0aGV5IGxpa2VseSBzZXQgdXAgbWVtb3J5IHJlZ2lvbnMgYXQgc3RhcnR1cCwgb3IgcmVsZWFzZSB0aGVtIGF0IHNodXRkb3duLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgcXVlc3Rpb24gaXM6IHdoZXJlIGVsc2UgZG9lcyBgbWVtYmxvY2tfZnJlZV9hbGxgIGNvbWUgaW50byBwbGF5PyBUbyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyB1c2FnZSwgYSBxdWljayBzZWFyY2ggd2l0aCBgZ3JlcHBlcmAgc2hvdWxkIHJldmVhbCBhbGwgaXRzIGNhbGwgc2l0ZXMgYW5kIGhlbHAgcGFpbnQgYSBicm9hZGVyIHBpY3R1cmUgb2YgdGhpcyBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbWJsb2NrX2ZyZWVfYWxsJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdD00ND1jYWxsIDpjOmZ1bmM6YGZyZWVfYXJlYV9pbml0YCBmdW5jdGlvbi4gWWV0LCB0aGUgbWFwcGluZ3MgYXJyYXkgaXMgbm90XG5Eb2N1bWVudGF0aW9uL21tL21lbW9yeS1tb2RlbC5yc3Q6NDU6dXNhYmxlIHVudGlsIHRoZSBjYWxsIHRvIDpjOmZ1bmM6YG1lbWJsb2NrX2ZyZWVfYWxsYCB0aGF0IGhhbmRzIGFsbCB0aGVcbkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdC00Ni1tZW1vcnkgdG8gdGhlIHBhZ2UgYWxsb2NhdG9yLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3Q9MzQ9RkxBVE1FTVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtNDQt5Li65LqG5YiG6YWNIGBtZW1fbWFwYCDmlbDnu4TvvIzmnrbmnoTnibnlrprnmoTorr7nva7ku6PnoIHlupTor6XosIPnlKhmcmVlX2FyZWFfaW5pdCgp5Ye95pWw44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0OjQ1OueEtuiAjO+8jOWcqOiwg+eUqG1lbWJsb2NrX2ZyZWVfYWxsKCnlh73mlbDkuYvliY3vvIzmmKDlsITmlbDnu4TmmK/kuI3og73kvb/nlKjnmoTvvIzor6Xlh73mlbBcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtNDYt5bCG5omA5pyJ55qE5YaF5a2Y5Lqk57uZ6aG15YiG6YWN5Zmo44CCXG4tLVxuYXJjaC94ODYveGVuL21tdV9wdi5jPTg1NT1zdGF0aWMgdm9pZCBfX2luaXQgeGVuX21hcmtfcGlubmVkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmMtODY0LSAqIHRoZSBib29rLWtlZXBpbmcgbm93IG9uY2Ugc3RydWN0IHBhZ2VzIGZvciBhbGxvY2F0ZWQgcGFnZXMgYXJlXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmM6ODY1OiAqIGluaXRpYWxpemVkLiBUaGlzIGhhcHBlbnMgb25seSBhZnRlciBtZW1ibG9ja19mcmVlX2FsbCgpIGlzIGNhbGxlZC5cbmFyY2gveDg2L3hlbi9tbXVfcHYuYy04NjYtICovXG4tLVxubW0vbWVtYmxvY2suYz0xNTU5PXBoeXNfYWRkcl90IF9faW5pdCBtZW1ibG9ja19hbGxvY19yYW5nZV9uaWQocGh5c19hZGRyX3Qgc2l6ZSxcbi0tXG5tbS9tZW1ibG9jay5jLTE1NjktXHQgKiB0aGlzIG1vbWVudCBtZW1ibG9jayBtYXkgYmUgZGVpbml0aWFsaXplZCBhbHJlYWR5IGFuZCBpdHNcbm1tL21lbWJsb2NrLmM6MTU3MDpcdCAqIGludGVybmFsIGRhdGEgbWF5IGJlIGRlc3Ryb3llZCAoYWZ0ZXIgZXhlY3V0aW9uIG9mIG1lbWJsb2NrX2ZyZWVfYWxsKVxubW0vbWVtYmxvY2suYy0xNTcxLVx0ICovXG4tLVxubW0vbWVtYmxvY2suYz0yNDY4PXN0YXRpYyB2b2lkIF9faW5pdCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKVxuLS1cbm1tL21lbWJsb2NrLmMtMjQ3Ni0vKipcbm1tL21lbWJsb2NrLmM6MjQ3NzogKiBtZW1ibG9ja19mcmVlX2FsbCAtIHJlbGVhc2UgZnJlZSBwYWdlcyB0byB0aGUgYnVkZHkgYWxsb2NhdG9yXG5tbS9tZW1ibG9jay5jLTI0NzgtICovXG5tbS9tZW1ibG9jay5jOjI0Nzk6dm9pZCBfX2luaXQgbWVtYmxvY2tfZnJlZV9hbGwodm9pZClcbm1tL21lbWJsb2NrLmMtMjQ4MC17XG4tLVxubW0vbW1faW5pdC5jPTgyMD1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sXG4tLVxubW0vbW1faW5pdC5jLTgzOS0gKiBJbml0aWFsbHkgYWxsIHBhZ2VzIGFyZSByZXNlcnZlZCAtIGZyZWUgb25lcyBhcmUgZnJlZWRcbm1tL21tX2luaXQuYzo4NDA6ICogdXAgYnkgbWVtYmxvY2tfZnJlZV9hbGwoKSBvbmNlIHRoZSBlYXJseSBib290IHByb2Nlc3MgaXNcbm1tL21tX2luaXQuYy04NDEtICogZG9uZS4gTm9uLWF0b21pYyBpbml0aWFsaXphdGlvbiwgc2luZ2xlLXBhc3MuXG4tLVxubW0vbW1faW5pdC5jPTI2MzM9dm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpXG4tLVxubW0vbW1faW5pdC5jLTI2NTktXG5tbS9tbV9pbml0LmM6MjY2MDpcdG1lbWJsb2NrX2ZyZWVfYWxsKCk7XG5tbS9tbV9pbml0LmMtMjY2MS1cdG1lbV9pbml0KCk7XG4tLVxubW0vbW1faW5pdC5oPTExND1ib29sIG1lbWJsb2NrX2hhc19taXJyb3Iodm9pZCk7XG5tbS9tbV9pbml0Lmg6MTE1OnZvaWQgbWVtYmxvY2tfZnJlZV9hbGwodm9pZCk7XG5tbS9tbV9pbml0LmgtMTE2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NTAKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA4NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEVhcmx5IEJvb3QgYW5kIFN5emthbGxlciBSZWFjaGFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGVhcmx5IGJvb3QvaW5pdCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlc2AuIEkgc2VlIHRoYXQgaXQmIzM5O3MgYSBgc3RhdGljIF9faW5pdCB2b2lkYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGNhbGxlZCBleGNsdXNpdmVseSBieSBgbWVtYmxvY2tfZnJlZV9hbGxgLCB3aGljaCBpcyBhbHNvIGEgYF9faW5pdCB2b2lkYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzaywgaXMgdGhpcyBjb2RlIHJlYWNoYWJsZSBieSBzeXprYWxsZXI/IGBtZW1ibG9ja19mcmVlX2FsbGAgZ2V0cyBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3Qgd2l0aGluIGBtbV9jb3JlX2luaXRgLCBhbmQgdGhhdCYjMzk7cyBhbGwgZHJpdmVuIGZyb20gYHN0YXJ0X2tlcm5lbGAuIEJ1dCBoYW5nIG9uIOKAkyBhZnRlciBib290LCB0aGF0IHdob2xlIGAuaW5pdC50ZXh0YCBzZWN0aW9uIGdldHMgZnJlZWQgd2l0aCBgZnJlZV9pbml0bWVtKClgLgoKVGhlIHF1ZXN0aW9uIGlzLCBjYW4gc3l6a2FsbGVyIGZ1enogdGhpcyB0eXBlIG9mIGNvZGU/IFN5emthbGxlciBydW5zICphZnRlciogdGhlIGtlcm5lbCBoYXMgYm9vdGVkIHVwIGFuZCBpcyBydW5uaW5nIHVzZXJsYW5kIHByb2Nlc3Nlcy4gU28sIHdoYXQmIzM5O3MgdGhlIHRyaWFnZSBzdGFuY2Ugb24gcmVhY2hhYmlsaXR5IHJlZ2FyZGluZyBgX19pbml0YCBjb2RlIGFuZCBlYXJseSBib290IHN0dWZmPwoKUmlnaHQsIGxldCYjMzk7cyBjaGVjazogJiMzNDtSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURS4uLiYjMzQ7LiBJZiBpdCYjMzk7cyBub3QgcmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQsIG5vIGZ1enppbmcgaXMgbmVlZGVkLiBXYWl0LCB3aGF0IGFib3V0IGBfX2luaXRgPyBTeXprYWxsZXIgZnV6emVzIGJ5IHN5c2NhbGxzIGFuZCB0ZXN0IHByb2dyYW1zIGluIHVzZXJzcGFjZS4gSXQgZXhlY3V0ZXMgYWZ0ZXIgYm9vdCwgKmFmdGVyKiBgZnJlZV9pbml0bWVtKClgLiBTbywgdGhlIGBfX2luaXRgIGNvZGUgaXMgaW5hY2Nlc3NpYmxlLgoKTGV0JiMzOTtzIHJldmlldyB0aGUgaW5zdHJ1Y3Rpb25zIGFnYWluOiBtb2RpZmljYXRpb25zIHRvIGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBzY3JpcHRzIHRoYXQgZG9uJiMzOTt0IGFmZmVjdCB0aGUga2VybmVsIGltYWdlLCBhbmQgZGVjb3JhdGl2ZSBsb2dnaW5nIGFyZSBvZmYgdGhlIHRhYmxlLiBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUgYW5kIHVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRocyAobGlrZSBkcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzKSBhbHNvIGRvbiYjMzk7dCBnZXQgZnV6emVkLgoKU28sIHRoaW5raW5nIGFib3V0IGBfX2luaXRgIGNvZGUgaW4gZ2VuZXJhbCwgdGhhdCBzdHVmZiBvbmx5IHJ1bnMgb25jZSwgYmVmb3JlIHN5emthbGxlciBhbmQgdXNlcnNwYWNlLCBhbmQgaXMgdGhlbiBmcmVlZC4gU3l6a2FsbGVyIGNhbm5vdCByZWFjaCBpdC4gQ291bGQgc3l6a2FsbGVyIGZ1enogYm9vdCBwYXJhbWV0ZXJzPyBObywgc3l6a2FsbGVyIGZ1enplcyBkdXJpbmcgcnVudGltZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlc2AsIGBtZW1ibG9ja19mcmVlX2FsbGAgb3IgYW55IG90aGVyIGNhbGxlciBpcyBuZXZlciBjYWxsZWQgYXQgcnVudGltZS4gSSBuZWVkIHRvIGNoZWNrIGBmb3JfZWFjaF96b25lYCBhZ2FpbnN0IGBmb3JfZWFjaF9vbmxpbmVfcGdkYXRgIGFuZCBhbHNvIGByZXNldF9ub2RlX21hbmFnZWRfcGFnZXNgLiBJJiMzOTtsbCBydW4gYSBncmVwIGFjcm9zcyB0aGUgd2hvbGUga2VybmVsIGZvciBgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXNgIGFuZCBgcmVzZXRfbm9kZV9tYW5hZ2VkX3BhZ2VzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXNldF8oYWxsX3pvbmVzfG5vZGUpX21hbmFnZWRfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtYmxvY2suYz0yNDQ2PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBmcmVlX2xvd19tZW1vcnlfY29yZV9lYXJseSh2b2lkKVxuLS1cbm1tL21lbWJsb2NrLmMtMjQ2Ny1cbm1tL21lbWJsb2NrLmM6MjQ2ODpzdGF0aWMgdm9pZCBfX2luaXQgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXModm9pZClcbm1tL21lbWJsb2NrLmMtMjQ2OS17XG4tLVxubW0vbWVtYmxvY2suYz0yNDc5PXZvaWQgX19pbml0IG1lbWJsb2NrX2ZyZWVfYWxsKHZvaWQpXG4tLVxubW0vbWVtYmxvY2suYy0yNDgzLVx0ZnJlZV91bnVzZWRfbWVtbWFwKCk7XG5tbS9tZW1ibG9jay5jOjI0ODQ6XHRyZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcygpO1xubW0vbWVtYmxvY2suYy0yNDg1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwMzIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYHJlc2V0X2FsbF96b25lc19tYW5hZ2VkX3BhZ2VzYCBDYWxsIENoYWluKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRoIG9mIGByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlc2AgYW5kIHNlZSB3aGVyZSBpdCYjMzk7cyBiZWluZyB1c2VkLiBSaWdodCBub3csIG15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCYjMzk7cyAqb25seSogYmVpbmcgY2FsbGVkIGJ5IGBtZW1ibG9ja19mcmVlX2FsbGAuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBBbmQgYG1lbWJsb2NrX2ZyZWVfYWxsYCwgYXMgZmFyIGFzIEkga25vdywgaXMgKm9ubHkqIGNhbGxlZCBieSBgbW1fY29yZV9pbml0YCwgd2hpY2ggaXRzZWxmIGlzIG9ubHkgY2FsbGVkIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgc3RhcnRfa2VybmVsYCByb3V0aW5lLiBCdXQgbGV0JiMzOTtzIHZlcmlmeSB0aGF0LgoKVG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHRoYXQgYG1lbWJsb2NrX2ZyZWVfYWxsYCBkb2VzbiYjMzk7dCBoYXZlIGFueSB1bmV4cGVjdGVkIGNhbGwgc2l0ZXMuIFNvIEkmIzM5O2xsIGdvIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGBtbV9pbml0LmNgIGZpbGUgYW5kIGxvb2sgYXQgdGhlIGBtbV9jb3JlX2luaXRgIGZ1bmN0aW9uLgoKTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhlIGNhbGxlcnMgb2YgYG1tX2NvcmVfaW5pdGAgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBiZWhhdmluZyBhcyBleHBlY3RlZCBhbmQgbm90IGNyZWF0aW5nIHVuZXhwZWN0ZWQgbWVtb3J5IGxlYWtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbV9jb3JlX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbS5oPTQ5PXZvaWQgYXJjaF9tbV9wcmVpbml0KHZvaWQpO1xuaW5jbHVkZS9saW51eC9tbS5oOjUwOnZvaWQgbW1fY29yZV9pbml0X2Vhcmx5KHZvaWQpO1xuaW5jbHVkZS9saW51eC9tbS5oOjUxOnZvaWQgbW1fY29yZV9pbml0KHZvaWQpO1xuaW5jbHVkZS9saW51eC9tbS5oLTUyLXZvaWQgaW5pdF9tbV9pbnRlcm5hbHModm9pZCk7XG4tLVxuaW5pdC9tYWluLmM9OTgyPXZvaWQgc3RhcnRfa2VybmVsKHZvaWQpXG4tLVxuaW5pdC9tYWluLmMtMTAwNC1cdHNldHVwX2FyY2goXHUwMDI2Y29tbWFuZF9saW5lKTtcbmluaXQvbWFpbi5jOjEwMDU6XHRtbV9jb3JlX2luaXRfZWFybHkoKTtcbmluaXQvbWFpbi5jLTEwMDYtXHQvKiBTdGF0aWMga2V5cyBhbmQgc3RhdGljIGNhbGxzIGFyZSBuZWVkZWQgYnkgTFNNcyAqL1xuLS1cbmluaXQvbWFpbi5jLTEwNDMtXHR0cmFwX2luaXQoKTtcbmluaXQvbWFpbi5jOjEwNDQ6XHRtbV9jb3JlX2luaXQoKTtcbmluaXQvbWFpbi5jLTEwNDUtXHRtYXBsZV90cmVlX2luaXQoKTtcbi0tXG5tbS9rbWVtbGVhay5jPTY2Mz1zdGF0aWMgbm9pbmxpbmUgZGVwb3Rfc3RhY2tfaGFuZGxlX3Qgc2V0X3RyYWNrX3ByZXBhcmUodm9pZClcbi0tXG5tbS9rbWVtbGVhay5jLTY3MS1cdCAqIGJlZW4gaW52b2tlZC4gc3RhY2tfZGVwb3RfZWFybHlfaW5pdCgpIGlzIGNhbGxlZCBiZWZvcmVcbm1tL2ttZW1sZWFrLmM6NjcyOlx0ICoga21lbWxlYWtfaW5pdCgpIGluIG1tX2NvcmVfaW5pdCgpLlxubW0va21lbWxlYWsuYy02NzMtXHQgKi9cbi0tXG5tbS9tbV9pbml0LmM9MjYxMz12b2lkIF9faW5pdCBfX3dlYWsgbWVtX2luaXQodm9pZClcbi0tXG5tbS9tbV9pbml0LmMtMjYxNi1cbm1tL21tX2luaXQuYzoyNjE3OnZvaWQgX19pbml0IG1tX2NvcmVfaW5pdF9lYXJseSh2b2lkKVxubW0vbW1faW5pdC5jLTI2MTgte1xuLS1cbm1tL21tX2luaXQuYy0yNjMyLSAqL1xubW0vbW1faW5pdC5jOjI2MzM6dm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpXG5tbS9tbV9pbml0LmMtMjYzNC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4ODkKCQkJCQkJCW91dHB1dDogMTA4CgkJCQkJCQl0aG91Z2h0czogNDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFVuZnV6emFibGUgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJJiMzOTttIHByZXR0eSBjb25maWRlbnQgdGhhdCBpdCYjMzk7cyAqbm90KiBzb21ldGhpbmcgU3l6a2FsbGVyIG5lZWRzIHRvIHdvcnJ5IGFib3V0LiBNeSB0cmFpbiBvZiB0aG91Z2h0IHdlbnQgbGlrZSB0aGlzOgoKRmlyc3QsIEkgcmVhbGl6ZWQgdGhhdCBgbW1fY29yZV9pbml0YCwgYG1lbWJsb2NrX2ZyZWVfYWxsYCwgYW5kIGByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlc2AgYXJlIGFsbCBgX19pbml0YCBmdW5jdGlvbnMuIFRoZXkmIzM5O3JlIGV4ZWN1dGVkIGVhcmx5LCBkdXJpbmcgYHN0YXJ0X2tlcm5lbCgpYC4gQ3J1Y2lhbGx5LCBieSB0aGUgdGltZSB1c2VyLXNwYWNlIGlzIHVwIGFuZCBydW5uaW5nIChhbmQgU3l6a2FsbGVyIHN0YXJ0cyBkb2luZyBpdHMgdGhpbmcgd2l0aCBzeXNjYWxscyksIHRoZSBzeXN0ZW0gaGFzIGFscmVhZHkgcnVuIGBmcmVlX2luaXRtZW0oKWAgYW5kIGNsZWFuZWQgdXAgYWxsIHRoZSBgX19pbml0YCBzdHVmZi4gVGhpcyBtZWFucywgc3RydWN0dXJhbGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyB1bnJlYWNoYWJsZSBhdCBydW50aW1lLgoKSSB3YW50ZWQgdG8gbWFrZSBzdXJlLCBzbyBJIHdlbnQgdGhyb3VnaCBpdCBzdGVwLWJ5LXN0ZXA6CgoxLiAgVGhlIGNoYW5nZSB3YXMgdGhlIHJlbW92YWwgb2YgdGhlIGhlbHBlciBmdW5jdGlvbiBgcmVzZXRfbm9kZV9tYW5hZ2VkX3BhZ2VzYCBhbmQgYSBzaW1wbGlmaWNhdGlvbiBvZiBgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXNgLiBUaGUgbGF0dGVyIG5vdyB1c2VzIGBmb3JfZWFjaF96b25lKHopYCBpbnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoIGBwZ2RhdC0mZ3Q7bm9kZV96b25lc2AuCjIuICBCb3RoIHRoZSBvcmlnaW5hbCBhbmQgdGhlIG5ldyB2ZXJzaW9ucyBvZiB0aGUgZnVuY3Rpb25zIGFyZSBgc3RhdGljIHZvaWQgX19pbml0YC4KMy4gIFRoZXkmIzM5O3JlIG9ubHkgY2FsbGVkIHZpYSBgbWVtYmxvY2tfZnJlZV9hbGwoKWAsIHdoaWNoIGlzIGFsc28gYHZvaWQgX19pbml0YC4KNC4gIGBtZW1ibG9ja19mcmVlX2FsbCgpYCBpcyAqb25seSogY2FsbGVkIGR1cmluZyBlYXJseSBib290LCB3aXRoaW4gYG1tX2NvcmVfaW5pdCgpYCBpbiBgaW5pdC9tYWluLmNgLgo1LiAgQWZ0ZXIgdGhlIHN5c3RlbSBib290cywgYWxsIHRob3NlIGBfX2luaXRgIHNlY3Rpb25zIGdldCBkaXNjYXJkZWQuIFRoZXkgYXJlIHVubWFwcGVkIGFuZCB0aGUgbWVtb3J5IGlzIGZyZWVkLgo2LiAgU3l6a2FsbGVyIGNhbiYjMzk7dCBnZXQgdG8gYW55IG9mIHRoaXMgc3R1ZmYgdGhyb3VnaCBzeXNjYWxscyBvciBhbnkgcnVudGltZSBvcGVyYXRpb24uIEl0JiMzOTtzIHNpbXBseSBub3QgdGhlcmUgYW55bW9yZS4KNy4gIFRoZXJlZm9yZSwgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGBmYWxzZWAuCgpOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBmb3JtYXR0aW5nIHRoaXMgY29ycmVjdGx5IGZvciBgc2V0LXJlc3VsdHNgLiBJdCBuZWVkczoKCiogICBgV29ydGhGdXp6aW5nYDogYGZhbHNlYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAgKGVtcHR5IGxpc3QpCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgKGVtcHR5IGxpc3QpCiogICBgUmVhc29uaW5nYDogQW5kIHRoaXMgaXMga2V5IC0gYSBjb25jaXNlIGV4cGxhbmF0aW9uIGxpa2UsICYjMzQ7VGhlIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyB3aXRoaW4gZWFybHkgYm9vdCBgX19pbml0YCBmdW5jdGlvbnMgZXhlY3V0ZWQgZHVyaW5nIHN5c3RlbSBpbml0aWFsaXphdGlvbiBiZWZvcmUgdXNlcnNwYWNlIHJ1bnMuIEl0IGlzIGRpc2NhcmRlZCBmcm9tIG1lbW9yeSBhZnRlciBib290LCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgYnkgdGhlIGZ1enplci4mIzM0OwoKT2theSwgdGhhdCBzZWVtcyByaWdodC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIGZvcm1hdHRlZCBpbnRvIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDIxOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGxpZmllcyByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcygpIGluIG1tL21lbWJsb2NrLmMuIFRoaXMgZnVuY3Rpb24gaXMgbWFya2VkIF9faW5pdCBhbmQgY2FsbGVkIHNvbGVseSBkdXJpbmcgZWFybHkgYm9vdCBmcm9tIG1tX2NvcmVfaW5pdCgpIC1cdTAwM2UgbWVtYmxvY2tfZnJlZV9hbGwoKS4gQWxsIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyBpbiB0aGUgX19pbml0IHNlY3Rpb24gYW5kIGlzIGZyZWVkIGJlZm9yZSB1c2Vyc3BhY2UgaW5pdGlhbGl6ZXMsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSB0byBydW50aW1lIGZ1enppbmcgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2ltcGxpZmllcyByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcygpIGluIG1tL21lbWJsb2NrLmMuIFRoaXMgZnVuY3Rpb24gaXMgbWFya2VkIF9faW5pdCBhbmQgY2FsbGVkIHNvbGVseSBkdXJpbmcgZWFybHkgYm9vdCBmcm9tIG1tX2NvcmVfaW5pdCgpIC1cdTAwM2UgbWVtYmxvY2tfZnJlZV9hbGwoKS4gQWxsIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyBpbiB0aGUgX19pbml0IHNlY3Rpb24gYW5kIGlzIGZyZWVkIGJlZm9yZSB1c2Vyc3BhY2UgaW5pdGlhbGl6ZXMsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSB0byBydW50aW1lIGZ1enppbmcgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMjE6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjAxOjI2LjEzNzc2NjIyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNDc4OTI2MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGxpZmllcyByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcygpIGluIG1tL21lbWJsb2NrLmMuIFRoaXMgZnVuY3Rpb24gaXMgbWFya2VkIF9faW5pdCBhbmQgY2FsbGVkIHNvbGVseSBkdXJpbmcgZWFybHkgYm9vdCBmcm9tIG1tX2NvcmVfaW5pdCgpIC1cXHUwMDNlIG1lbWJsb2NrX2ZyZWVfYWxsKCkuIEFsbCBtb2RpZmllZCBjb2RlIHJlc2lkZXMgaW4gdGhlIF9faW5pdCBzZWN0aW9uIGFuZCBpcyBmcmVlZCBiZWZvcmUgdXNlcnNwYWNlIGluaXRpYWxpemVzLCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgdG8gcnVudGltZSBmdXp6aW5nIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjAxOjI2LjEzNzc3MTAwNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0NjE1NTQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA3NTBjNmE3NTVlNmQ3MTQ5MTMwNjMwMTU5OGE0ZWVhOGQxMmQ5OWJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMTowMToyNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suY1xcbmluZGV4IDQzMDJmYjRhYjg1YzcuLmVkNjkzN2JlOGQ5ZmEgMTAwNjQ0XFxuLS0tIGEvbW0vbWVtYmxvY2suY1xcbisrKyBiL21tL21lbWJsb2NrLmNcXG5AQCAtMjQ2NSwyMiArMjQ2NSwxNCBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgZnJlZV9sb3dfbWVtb3J5X2NvcmVfZWFybHkodm9pZClcXG4gXFx0cmV0dXJuIGNvdW50O1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBfX2luaXQgcmVzZXRfbm9kZV9tYW5hZ2VkX3BhZ2VzKHBnX2RhdGFfdCAqcGdkYXQpXFxuK3N0YXRpYyB2b2lkIF9faW5pdCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKVxcbiB7XFxuIFxcdHN0cnVjdCB6b25lICp6O1xcbiBcXG4tXFx0Zm9yICh6ID0gcGdkYXQtXFx1MDAzZW5vZGVfem9uZXM7IHogXFx1MDAzYyBwZ2RhdC1cXHUwMDNlbm9kZV96b25lcyArIE1BWF9OUl9aT05FUzsgeisrKVxcbitcXHRmb3JfZWFjaF96b25lKHopXFxuIFxcdFxcdGF0b21pY19sb25nX3NldChcXHUwMDI2ei1cXHUwMDNlbWFuYWdlZF9wYWdlcywgMCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIF9faW5pdCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKVxcbi17XFxuLVxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7XFxuLVxcbi1cXHRmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpXFxuLVxcdFxcdHJlc2V0X25vZGVfbWFuYWdlZF9wYWdlcyhwZ2RhdCk7XFxuLX1cXG4tXFxuIC8qKlxcbiAgKiBtZW1ibG9ja19mcmVlX2FsbCAtIHJlbGVhc2UgZnJlZSBwYWdlcyB0byB0aGUgYnVkZHkgYWxsb2NhdG9yXFxuICAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTowMToyNy41ODQ2MjUzMjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI5MDMyMDUyNTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzaW1wbGlmaWVzIHJlc2V0X2FsbF96b25lc19tYW5hZ2VkX3BhZ2VzKCkgaW4gbW0vbWVtYmxvY2suYy4gVGhpcyBmdW5jdGlvbiBpcyBtYXJrZWQgX19pbml0IGFuZCBjYWxsZWQgc29sZWx5IGR1cmluZyBlYXJseSBib290IGZyb20gbW1fY29yZV9pbml0KCkgLVxcdTAwM2UgbWVtYmxvY2tfZnJlZV9hbGwoKS4gQWxsIG1vZGlmaWVkIGNvZGUgcmVzaWRlcyBpbiB0aGUgX19pbml0IHNlY3Rpb24gYW5kIGlzIGZyZWVkIGJlZm9yZSB1c2Vyc3BhY2UgaW5pdGlhbGl6ZXMsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSB0byBydW50aW1lIGZ1enppbmcgYnkgc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAwNzUwYzZhNzU1ZTZkNzE0OTEzMDYzMDE1OThhNGVlYThkMTJkOTliXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAyMTowMToyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jXG5pbmRleCA0MzAyZmI0YWI4NWM3Li5lZDY5MzdiZThkOWZhIDEwMDY0NFxuLS0tIGEvbW0vbWVtYmxvY2suY1xuKysrIGIvbW0vbWVtYmxvY2suY1xuQEAgLTI0NjUsMjIgKzI0NjUsMTQgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGZyZWVfbG93X21lbW9yeV9jb3JlX2Vhcmx5KHZvaWQpXG4gXHRyZXR1cm4gY291bnQ7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9faW5pdCByZXNldF9ub2RlX21hbmFnZWRfcGFnZXMocGdfZGF0YV90ICpwZ2RhdClcbitzdGF0aWMgdm9pZCBfX2luaXQgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXModm9pZClcbiB7XG4gXHRzdHJ1Y3Qgem9uZSAqejtcbiBcbi1cdGZvciAoeiA9IHBnZGF0LVx1MDAzZW5vZGVfem9uZXM7IHogXHUwMDNjIHBnZGF0LVx1MDAzZW5vZGVfem9uZXMgKyBNQVhfTlJfWk9ORVM7IHorKylcbitcdGZvcl9lYWNoX3pvbmUoeilcbiBcdFx0YXRvbWljX2xvbmdfc2V0KFx1MDAyNnotXHUwMDNlbWFuYWdlZF9wYWdlcywgMCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9faW5pdCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKVxuLXtcbi1cdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQ7XG4tXG4tXHRmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpXG4tXHRcdHJlc2V0X25vZGVfbWFuYWdlZF9wYWdlcyhwZ2RhdCk7XG4tfVxuLVxuIC8qKlxuICAqIG1lbWJsb2NrX2ZyZWVfYWxsIC0gcmVsZWFzZSBmcmVlIHBhZ2VzIHRvIHRoZSBidWRkeSBhbGxvY2F0b3JcbiAgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjAxOjI3LjU4NDYyNjc2MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkwMzkzNjE2ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggdG8gYG1tL21lbWJsb2NrLmNgLiBUaGUgYGRpZmZgIHNob3dzIGEgY29kZSBjaGFuZ2UsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYW5hbHl6ZSB0aGUgY29udGV4dCBvZiBgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXNgIGFuZCBob3cgaXQgcmVsYXRlcyB0byBgbWVtYmxvY2tfZnJlZV9hbGxgLiBTZWVtcyBsaWtlIHdlJ3JlIG9wdGltaXppbmcgaG93IHRoZSBzeXN0ZW0gbWFuYWdlcyBmcmVlIHBhZ2VzLCBhbmQgaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBidWRkeSBhbGxvY2F0b3IuXG5cblRoZSBvcmlnaW5hbCBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggZWFjaCBub2RlJ3Mgem9uZXMgdG8gcmVzZXQgYG1hbmFnZWRfcGFnZXNgLiBUaGUgcGF0Y2ggbm93IHNpbXBsaWZpZXMgdGhpcy4gVGhlIHByZXZpb3VzIGNvZGUgY29udGFpbmVkIGEgZnVuY3Rpb24gYHJlc2V0X25vZGVfbWFuYWdlZF9wYWdlc2Agd2hpY2ggd2FzIGNhbGxlZCBmb3IgZWFjaCBwZ2RhdCwgYnV0IG5vdyBpdCBzZWVtcyB0aGF0IHRoZSBuZXcgaW1wbGVtZW50YXRpb24gaXMgaXRlcmF0aW5nIGFjcm9zcyBhbGwgem9uZXMgaW5zdGVhZCBvZiBhIHNwZWNpZmljIG5vZGUncyB6b25lcy4gVGhlIHJlbW92ZWQgY29kZSBtYWtlcyB0aGUgY29kZSBzbGlnaHRseSBlYXNpZXIgdG8gcmVhZC5cblxuTXkgbmV4dCBzdGVwIHdvdWxkIGJlIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSB3aXRoIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEknbGwgZm9jdXMgb24gaG93IGBtZW1ibG9ja19mcmVlX2FsbGAgaW50ZXJhY3RzIHdpdGggYHJlc2V0X2FsbF96b25lc19tYW5hZ2VkX3BhZ2VzYCB0byBnZXQgYSBiZXR0ZXIgc2Vuc2Ugb2YgdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgYW5kIGhvdyB0aGUgYG1hbmFnZWRfcGFnZXNgIHZhcmlhYmxlIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIG1lbW9yeSBpcyBcImZyZWVcIi4gU3BlY2lmaWNhbGx5LCBJJ2QgbmVlZCB0byBjb25zaWRlciBob3cgdGhpcyBhZmZlY3RzIHRoZSBvdmVyYWxsIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gcHJvY2VzcywgZXNwZWNpYWxseSBpbiByZWxhdGlvbiB0byB0aGUgYnVkZHkgYWxsb2NhdG9yLiBJdCBzZWVtcyBsaWtlIHRoZSBnb2FsIGlzIHRvIG9wdGltaXplIGhvdyB0aGUgc3lzdGVtIHRyYWNrcyBhbmQgaW5pdGlhbGl6ZXMgZnJlZSBtZW1vcnkgYXQgYm9vdCwgbWFraW5nIG1lbW9yeSBhdmFpbGFibGUgdG8gdGhlIGtlcm5lbCBlYXJsaWVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTg4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDE6MzYuNjIzOTkxMjE5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWJsb2NrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjQ2MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQ2MDpcXHRcXHQgKi9cXG4yNDYxOlxcdFxcdGZvcl9lYWNoX2ZyZWVfbWVtX3JhbmdlKGksIE5VTUFfTk9fTk9ERSwgTUVNQkxPQ0tfTk9ORSwgXFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kLFxcbjI0NjI6XFx0XFx0XFx0XFx0XFx0TlVMTClcXG4yNDYzOlxcdFxcdFxcdGNvdW50ICs9IF9fZnJlZV9tZW1vcnlfY29yZShzdGFydCwgZW5kKTtcXG4yNDY0OlxcdFxcbjI0NjU6XFx0XFx0cmV0dXJuIGNvdW50O1xcbjI0NjY6XFx0fVxcbjI0Njc6XFx0XFxuMjQ2ODpcXHRzdGF0aWMgdm9pZCBfX2luaXQgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXModm9pZClcXG4yNDY5OlxcdHtcXG4yNDcwOlxcdFxcdHN0cnVjdCB6b25lICp6O1xcbjI0NzE6XFx0XFxuMjQ3MjpcXHRcXHRmb3JfZWFjaF96b25lKHopXFxuMjQ3MzpcXHRcXHRcXHRhdG9taWNfbG9uZ19zZXQoXFx1MDAyNnotXFx1MDAzZW1hbmFnZWRfcGFnZXMsIDApO1xcbjI0NzQ6XFx0fVxcbjI0NzU6XFx0XFxuMjQ3NjpcXHQvKipcXG4yNDc3OlxcdCAqIG1lbWJsb2NrX2ZyZWVfYWxsIC0gcmVsZWFzZSBmcmVlIHBhZ2VzIHRvIHRoZSBidWRkeSBhbGxvY2F0b3JcXG4yNDc4OlxcdCAqL1xcbjI0Nzk6XFx0dm9pZCBfX2luaXQgbWVtYmxvY2tfZnJlZV9hbGwodm9pZClcXG4yNDgwOlxcdHtcXG4yNDgxOlxcdFxcdHVuc2lnbmVkIGxvbmcgcGFnZXM7XFxuMjQ4MjpcXHRcXG4yNDgzOlxcdFxcdGZyZWVfdW51c2VkX21lbW1hcCgpO1xcbjI0ODQ6XFx0XFx0cmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXMoKTtcXG4yNDg1OlxcdFxcbjI0ODY6XFx0XFx0bWVtYmxvY2tfY2xlYXJfa2hvX3NjcmF0Y2hfb25seSgpO1xcbjI0ODc6XFx0XFx0cGFnZXMgPSBmcmVlX2xvd19tZW1vcnlfY29yZV9lYXJseSgpO1xcbjI0ODg6XFx0XFx0dG90YWxyYW1fcGFnZXNfYWRkKHBhZ2VzKTtcXG4yNDg5OlxcdH1cXG4yNDkwOlxcdFxcbjI0OTE6XFx0LyogS2VlcCBhIHRhYmxlIHRvIHJlc2VydmUgbmFtZWQgbWVtb3J5ICovXFxuMjQ5MjpcXHQjZGVmaW5lIFJFU0VSVkVfTUVNX01BWF9FTlRSSUVTXFx0XFx0OFxcbjI0OTM6XFx0I2RlZmluZSBSRVNFUlZFX01FTV9OQU1FX1NJWkVcXHRcXHQxNlxcbjI0OTQ6XFx0c3RydWN0IHJlc2VydmVfbWVtX3RhYmxlIHtcXG4yNDk1OlxcdFxcdGNoYXJcXHRcXHRcXHRuYW1lW1JFU0VSVkVfTUVNX05BTUVfU0laRV07XFxuMjQ5NjpcXHRcXHRwaHlzX2FkZHJfdFxcdFxcdHN0YXJ0O1xcbjI0OTc6XFx0XFx0cGh5c19hZGRyX3RcXHRcXHRzaXplO1xcbjI0OTg6XFx0fTtcXG4yNDk5OlxcdHN0YXRpYyBzdHJ1Y3QgcmVzZXJ2ZV9tZW1fdGFibGUgcmVzZXJ2ZWRfbWVtX3RhYmxlW1JFU0VSVkVfTUVNX01BWF9FTlRSSUVTXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDE6MzYuNjI0MTM2NjI5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgyOTMwMjUzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbnMqKlxuXG5NeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYHJlc2V0X2FsbF96b25lc19tYW5hZ2VkX3BhZ2VzYCBpcyBmbGFnZ2VkIGFzIGFuIGBfX2luaXRgIGZ1bmN0aW9uIGFuZCwgaW50cmlndWluZ2x5LCBpdCdzIGNhbGxlZCBieSBgbWVtYmxvY2tfZnJlZV9hbGxgLCB3aGljaCBpcyAqYWxzbyogbWFya2VkIGFzIGFuIGBfX2luaXRgIGZ1bmN0aW9uLiBUaGlzIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBlYXJseSBpbml0aWFsaXphdGlvbiBvciBjbGVhbnVwIHJvdXRpbmVzIHJlbGF0ZWQgdG8gbWVtb3J5IGJsb2Nrcy4gVGhlIGZhY3QgdGhhdCB0aGV5IGFyZSBib3RoIGBfX2luaXRgIGZ1bmN0aW9ucyB0ZWxscyBtZSB0aGV5IGxpa2VseSBzZXQgdXAgbWVtb3J5IHJlZ2lvbnMgYXQgc3RhcnR1cCwgb3IgcmVsZWFzZSB0aGVtIGF0IHNodXRkb3duLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgcXVlc3Rpb24gaXM6IHdoZXJlIGVsc2UgZG9lcyBgbWVtYmxvY2tfZnJlZV9hbGxgIGNvbWUgaW50byBwbGF5PyBUbyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyB1c2FnZSwgYSBxdWljayBzZWFyY2ggd2l0aCBgZ3JlcHBlcmAgc2hvdWxkIHJldmVhbCBhbGwgaXRzIGNhbGwgc2l0ZXMgYW5kIGhlbHAgcGFpbnQgYSBicm9hZGVyIHBpY3R1cmUgb2YgdGhpcyBmdW5jdGlvbidzIHB1cnBvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjAxOjM4LjQ1MzQ0MTg2M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIxMDgzNDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWJsb2NrX2ZyZWVfYWxsXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbW0vbWVtb3J5LW1vZGVsLnJzdD00ND1jYWxsIDpjOmZ1bmM6YGZyZWVfYXJlYV9pbml0YCBmdW5jdGlvbi4gWWV0LCB0aGUgbWFwcGluZ3MgYXJyYXkgaXMgbm90XFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0OjQ1OnVzYWJsZSB1bnRpbCB0aGUgY2FsbCB0byA6YzpmdW5jOmBtZW1ibG9ja19mcmVlX2FsbGAgdGhhdCBoYW5kcyBhbGwgdGhlXFxuRG9jdW1lbnRhdGlvbi9tbS9tZW1vcnktbW9kZWwucnN0LTQ2LW1lbW9yeSB0byB0aGUgcGFnZSBhbGxvY2F0b3IuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9tZW1vcnktbW9kZWwucnN0PTM0PUZMQVRNRU1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL21lbW9yeS1tb2RlbC5yc3QtNDQt5Li65LqG5YiG6YWNIGBtZW1fbWFwYCDmlbDnu4TvvIzmnrbmnoTnibnlrprnmoTorr7nva7ku6PnoIHlupTor6XosIPnlKhmcmVlX2FyZWFfaW5pdCgp5Ye95pWw44CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdDo0NTrnhLbogIzvvIzlnKjosIPnlKhtZW1ibG9ja19mcmVlX2FsbCgp5Ye95pWw5LmL5YmN77yM5pig5bCE5pWw57uE5piv5LiN6IO95L2/55So55qE77yM6K+l5Ye95pWwXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vbWVtb3J5LW1vZGVsLnJzdC00Ni3lsIbmiYDmnInnmoTlhoXlrZjkuqTnu5npobXliIbphY3lmajjgIJcXG4tLVxcbmFyY2gveDg2L3hlbi9tbXVfcHYuYz04NTU9c3RhdGljIHZvaWQgX19pbml0IHhlbl9tYXJrX3Bpbm5lZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5hcmNoL3g4Ni94ZW4vbW11X3B2LmMtODY0LSAqIHRoZSBib29rLWtlZXBpbmcgbm93IG9uY2Ugc3RydWN0IHBhZ2VzIGZvciBhbGxvY2F0ZWQgcGFnZXMgYXJlXFxuYXJjaC94ODYveGVuL21tdV9wdi5jOjg2NTogKiBpbml0aWFsaXplZC4gVGhpcyBoYXBwZW5zIG9ubHkgYWZ0ZXIgbWVtYmxvY2tfZnJlZV9hbGwoKSBpcyBjYWxsZWQuXFxuYXJjaC94ODYveGVuL21tdV9wdi5jLTg2Ni0gKi9cXG4tLVxcbm1tL21lbWJsb2NrLmM9MTU1OT1waHlzX2FkZHJfdCBfX2luaXQgbWVtYmxvY2tfYWxsb2NfcmFuZ2VfbmlkKHBoeXNfYWRkcl90IHNpemUsXFxuLS1cXG5tbS9tZW1ibG9jay5jLTE1NjktXFx0ICogdGhpcyBtb21lbnQgbWVtYmxvY2sgbWF5IGJlIGRlaW5pdGlhbGl6ZWQgYWxyZWFkeSBhbmQgaXRzXFxubW0vbWVtYmxvY2suYzoxNTcwOlxcdCAqIGludGVybmFsIGRhdGEgbWF5IGJlIGRlc3Ryb3llZCAoYWZ0ZXIgZXhlY3V0aW9uIG9mIG1lbWJsb2NrX2ZyZWVfYWxsKVxcbm1tL21lbWJsb2NrLmMtMTU3MS1cXHQgKi9cXG4tLVxcbm1tL21lbWJsb2NrLmM9MjQ2OD1zdGF0aWMgdm9pZCBfX2luaXQgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXModm9pZClcXG4tLVxcbm1tL21lbWJsb2NrLmMtMjQ3Ni0vKipcXG5tbS9tZW1ibG9jay5jOjI0Nzc6ICogbWVtYmxvY2tfZnJlZV9hbGwgLSByZWxlYXNlIGZyZWUgcGFnZXMgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvclxcbm1tL21lbWJsb2NrLmMtMjQ3OC0gKi9cXG5tbS9tZW1ibG9jay5jOjI0Nzk6dm9pZCBfX2luaXQgbWVtYmxvY2tfZnJlZV9hbGwodm9pZClcXG5tbS9tZW1ibG9jay5jLTI0ODAte1xcbi0tXFxubW0vbW1faW5pdC5jPTgyMD1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF91bmF2YWlsYWJsZV9yYW5nZSh1bnNpZ25lZCBsb25nIHNwZm4sXFxuLS1cXG5tbS9tbV9pbml0LmMtODM5LSAqIEluaXRpYWxseSBhbGwgcGFnZXMgYXJlIHJlc2VydmVkIC0gZnJlZSBvbmVzIGFyZSBmcmVlZFxcbm1tL21tX2luaXQuYzo4NDA6ICogdXAgYnkgbWVtYmxvY2tfZnJlZV9hbGwoKSBvbmNlIHRoZSBlYXJseSBib290IHByb2Nlc3MgaXNcXG5tbS9tbV9pbml0LmMtODQxLSAqIGRvbmUuIE5vbi1hdG9taWMgaW5pdGlhbGl6YXRpb24sIHNpbmdsZS1wYXNzLlxcbi0tXFxubW0vbW1faW5pdC5jPTI2MzM9dm9pZCBfX2luaXQgbW1fY29yZV9pbml0KHZvaWQpXFxuLS1cXG5tbS9tbV9pbml0LmMtMjY1OS1cXG5tbS9tbV9pbml0LmM6MjY2MDpcXHRtZW1ibG9ja19mcmVlX2FsbCgpO1xcbm1tL21tX2luaXQuYy0yNjYxLVxcdG1lbV9pbml0KCk7XFxuLS1cXG5tbS9tbV9pbml0Lmg9MTE0PWJvb2wgbWVtYmxvY2tfaGFzX21pcnJvcih2b2lkKTtcXG5tbS9tbV9pbml0Lmg6MTE1OnZvaWQgbWVtYmxvY2tfZnJlZV9hbGwodm9pZCk7XFxubW0vbW1faW5pdC5oLTExNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDE6NDAuMDc0NTMxMTcxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTU1OTM2ODk2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRWFybHkgQm9vdCBhbmQgU3l6a2FsbGVyIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGVhcmx5IGJvb3QvaW5pdCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlc2AuIEkgc2VlIHRoYXQgaXQncyBhIGBzdGF0aWMgX19pbml0IHZvaWRgIGZ1bmN0aW9uLCBhbmQgaXQncyBjYWxsZWQgZXhjbHVzaXZlbHkgYnkgYG1lbWJsb2NrX2ZyZWVfYWxsYCwgd2hpY2ggaXMgYWxzbyBhIGBfX2luaXQgdm9pZGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhc2ssIGlzIHRoaXMgY29kZSByZWFjaGFibGUgYnkgc3l6a2FsbGVyPyBgbWVtYmxvY2tfZnJlZV9hbGxgIGdldHMgY2FsbGVkIGR1cmluZyBlYXJseSBib290IHdpdGhpbiBgbW1fY29yZV9pbml0YCwgYW5kIHRoYXQncyBhbGwgZHJpdmVuIGZyb20gYHN0YXJ0X2tlcm5lbGAuIEJ1dCBoYW5nIG9uIOKAkyBhZnRlciBib290LCB0aGF0IHdob2xlIGAuaW5pdC50ZXh0YCBzZWN0aW9uIGdldHMgZnJlZWQgd2l0aCBgZnJlZV9pbml0bWVtKClgLlxuXG5UaGUgcXVlc3Rpb24gaXMsIGNhbiBzeXprYWxsZXIgZnV6eiB0aGlzIHR5cGUgb2YgY29kZT8gU3l6a2FsbGVyIHJ1bnMgKmFmdGVyKiB0aGUga2VybmVsIGhhcyBib290ZWQgdXAgYW5kIGlzIHJ1bm5pbmcgdXNlcmxhbmQgcHJvY2Vzc2VzLiBTbywgd2hhdCdzIHRoZSB0cmlhZ2Ugc3RhbmNlIG9uIHJlYWNoYWJpbGl0eSByZWdhcmRpbmcgYF9faW5pdGAgY29kZSBhbmQgZWFybHkgYm9vdCBzdHVmZj9cblxuUmlnaHQsIGxldCdzIGNoZWNrOiBcIlJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFLi4uXCIuIElmIGl0J3Mgbm90IHJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LCBubyBmdXp6aW5nIGlzIG5lZWRlZC4gV2FpdCwgd2hhdCBhYm91dCBgX19pbml0YD8gU3l6a2FsbGVyIGZ1enplcyBieSBzeXNjYWxscyBhbmQgdGVzdCBwcm9ncmFtcyBpbiB1c2Vyc3BhY2UuIEl0IGV4ZWN1dGVzIGFmdGVyIGJvb3QsICphZnRlciogYGZyZWVfaW5pdG1lbSgpYC4gU28sIHRoZSBgX19pbml0YCBjb2RlIGlzIGluYWNjZXNzaWJsZS5cblxuTGV0J3MgcmV2aWV3IHRoZSBpbnN0cnVjdGlvbnMgYWdhaW46IG1vZGlmaWNhdGlvbnMgdG8gZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIHNjcmlwdHMgdGhhdCBkb24ndCBhZmZlY3QgdGhlIGtlcm5lbCBpbWFnZSwgYW5kIGRlY29yYXRpdmUgbG9nZ2luZyBhcmUgb2ZmIHRoZSB0YWJsZS4gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlIGFuZCB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMgKGxpa2UgZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcykgYWxzbyBkb24ndCBnZXQgZnV6emVkLlxuXG5TbywgdGhpbmtpbmcgYWJvdXQgYF9faW5pdGAgY29kZSBpbiBnZW5lcmFsLCB0aGF0IHN0dWZmIG9ubHkgcnVucyBvbmNlLCBiZWZvcmUgc3l6a2FsbGVyIGFuZCB1c2Vyc3BhY2UsIGFuZCBpcyB0aGVuIGZyZWVkLiBTeXprYWxsZXIgY2Fubm90IHJlYWNoIGl0LiBDb3VsZCBzeXprYWxsZXIgZnV6eiBib290IHBhcmFtZXRlcnM/IE5vLCBzeXprYWxsZXIgZnV6emVzIGR1cmluZyBydW50aW1lLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IGByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlc2AsIGBtZW1ibG9ja19mcmVlX2FsbGAgb3IgYW55IG90aGVyIGNhbGxlciBpcyBuZXZlciBjYWxsZWQgYXQgcnVudGltZS4gSSBuZWVkIHRvIGNoZWNrIGBmb3JfZWFjaF96b25lYCBhZ2FpbnN0IGBmb3JfZWFjaF9vbmxpbmVfcGdkYXRgIGFuZCBhbHNvIGByZXNldF9ub2RlX21hbmFnZWRfcGFnZXNgLiBJJ2xsIHJ1biBhIGdyZXAgYWNyb3NzIHRoZSB3aG9sZSBrZXJuZWwgZm9yIGByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlc2AgYW5kIGByZXNldF9ub2RlX21hbmFnZWRfcGFnZXNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDUwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjAxOjQ1LjYzMzkwMjgxMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzUyNjk5MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlc2V0XyhhbGxfem9uZXN8bm9kZSlfbWFuYWdlZF9wYWdlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1ibG9jay5jPTI0NDY9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGZyZWVfbG93X21lbW9yeV9jb3JlX2Vhcmx5KHZvaWQpXFxuLS1cXG5tbS9tZW1ibG9jay5jLTI0NjctXFxubW0vbWVtYmxvY2suYzoyNDY4OnN0YXRpYyB2b2lkIF9faW5pdCByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcyh2b2lkKVxcbm1tL21lbWJsb2NrLmMtMjQ2OS17XFxuLS1cXG5tbS9tZW1ibG9jay5jPTI0Nzk9dm9pZCBfX2luaXQgbWVtYmxvY2tfZnJlZV9hbGwodm9pZClcXG4tLVxcbm1tL21lbWJsb2NrLmMtMjQ4My1cXHRmcmVlX3VudXNlZF9tZW1tYXAoKTtcXG5tbS9tZW1ibG9jay5jOjI0ODQ6XFx0cmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXMoKTtcXG5tbS9tZW1ibG9jay5jLTI0ODUtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDIxOjAxOjQ3Ljk4NjYwNzEyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjMwODAwNzY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXNgIENhbGwgQ2hhaW4qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aCBvZiBgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXNgIGFuZCBzZWUgd2hlcmUgaXQncyBiZWluZyB1c2VkLiBSaWdodCBub3csIG15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCdzICpvbmx5KiBiZWluZyBjYWxsZWQgYnkgYG1lbWJsb2NrX2ZyZWVfYWxsYC4gVGhhdCdzIGltcG9ydGFudC4gQW5kIGBtZW1ibG9ja19mcmVlX2FsbGAsIGFzIGZhciBhcyBJIGtub3csIGlzICpvbmx5KiBjYWxsZWQgYnkgYG1tX2NvcmVfaW5pdGAsIHdoaWNoIGl0c2VsZiBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHN0YXJ0X2tlcm5lbGAgcm91dGluZS4gQnV0IGxldCdzIHZlcmlmeSB0aGF0LlxuXG5UbyBiZSB0aG9yb3VnaCwgSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayB0aGF0IGBtZW1ibG9ja19mcmVlX2FsbGAgZG9lc24ndCBoYXZlIGFueSB1bmV4cGVjdGVkIGNhbGwgc2l0ZXMuIFNvIEknbGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgYG1tX2luaXQuY2AgZmlsZSBhbmQgbG9vayBhdCB0aGUgYG1tX2NvcmVfaW5pdGAgZnVuY3Rpb24uXG5cbk5vdywgbGV0J3MgdHJhY2UgdGhlIGNhbGxlcnMgb2YgYG1tX2NvcmVfaW5pdGAgYW5kIG1ha2Ugc3VyZSBpdCdzIGJlaGF2aW5nIGFzIGV4cGVjdGVkIGFuZCBub3QgY3JlYXRpbmcgdW5leHBlY3RlZCBtZW1vcnkgbGVha3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMzIsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDE6NTAuMjk0NjE3MjY3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkwNzA5MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tX2NvcmVfaW5pdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21tLmg9NDk9dm9pZCBhcmNoX21tX3ByZWluaXQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9tbS5oOjUwOnZvaWQgbW1fY29yZV9pbml0X2Vhcmx5KHZvaWQpO1xcbmluY2x1ZGUvbGludXgvbW0uaDo1MTp2b2lkIG1tX2NvcmVfaW5pdCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtNTItdm9pZCBpbml0X21tX2ludGVybmFscyh2b2lkKTtcXG4tLVxcbmluaXQvbWFpbi5jPTk4Mj12b2lkIHN0YXJ0X2tlcm5lbCh2b2lkKVxcbi0tXFxuaW5pdC9tYWluLmMtMTAwNC1cXHRzZXR1cF9hcmNoKFxcdTAwMjZjb21tYW5kX2xpbmUpO1xcbmluaXQvbWFpbi5jOjEwMDU6XFx0bW1fY29yZV9pbml0X2Vhcmx5KCk7XFxuaW5pdC9tYWluLmMtMTAwNi1cXHQvKiBTdGF0aWMga2V5cyBhbmQgc3RhdGljIGNhbGxzIGFyZSBuZWVkZWQgYnkgTFNNcyAqL1xcbi0tXFxuaW5pdC9tYWluLmMtMTA0My1cXHR0cmFwX2luaXQoKTtcXG5pbml0L21haW4uYzoxMDQ0OlxcdG1tX2NvcmVfaW5pdCgpO1xcbmluaXQvbWFpbi5jLTEwNDUtXFx0bWFwbGVfdHJlZV9pbml0KCk7XFxuLS1cXG5tbS9rbWVtbGVhay5jPTY2Mz1zdGF0aWMgbm9pbmxpbmUgZGVwb3Rfc3RhY2tfaGFuZGxlX3Qgc2V0X3RyYWNrX3ByZXBhcmUodm9pZClcXG4tLVxcbm1tL2ttZW1sZWFrLmMtNjcxLVxcdCAqIGJlZW4gaW52b2tlZC4gc3RhY2tfZGVwb3RfZWFybHlfaW5pdCgpIGlzIGNhbGxlZCBiZWZvcmVcXG5tbS9rbWVtbGVhay5jOjY3MjpcXHQgKiBrbWVtbGVha19pbml0KCkgaW4gbW1fY29yZV9pbml0KCkuXFxubW0va21lbWxlYWsuYy02NzMtXFx0ICovXFxuLS1cXG5tbS9tbV9pbml0LmM9MjYxMz12b2lkIF9faW5pdCBfX3dlYWsgbWVtX2luaXQodm9pZClcXG4tLVxcbm1tL21tX2luaXQuYy0yNjE2LVxcbm1tL21tX2luaXQuYzoyNjE3OnZvaWQgX19pbml0IG1tX2NvcmVfaW5pdF9lYXJseSh2b2lkKVxcbm1tL21tX2luaXQuYy0yNjE4LXtcXG4tLVxcbm1tL21tX2luaXQuYy0yNjMyLSAqL1xcbm1tL21tX2luaXQuYzoyNjMzOnZvaWQgX19pbml0IG1tX2NvcmVfaW5pdCh2b2lkKVxcbm1tL21tX2luaXQuYy0yNjM0LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDE6NTEuNzg1MzM1NDQ2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MzEzMTA2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgVW5mdXp6YWJsZSBDb2RlKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJJ20gcHJldHR5IGNvbmZpZGVudCB0aGF0IGl0J3MgKm5vdCogc29tZXRoaW5nIFN5emthbGxlciBuZWVkcyB0byB3b3JyeSBhYm91dC4gTXkgdHJhaW4gb2YgdGhvdWdodCB3ZW50IGxpa2UgdGhpczpcblxuRmlyc3QsIEkgcmVhbGl6ZWQgdGhhdCBgbW1fY29yZV9pbml0YCwgYG1lbWJsb2NrX2ZyZWVfYWxsYCwgYW5kIGByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlc2AgYXJlIGFsbCBgX19pbml0YCBmdW5jdGlvbnMuIFRoZXkncmUgZXhlY3V0ZWQgZWFybHksIGR1cmluZyBgc3RhcnRfa2VybmVsKClgLiBDcnVjaWFsbHksIGJ5IHRoZSB0aW1lIHVzZXItc3BhY2UgaXMgdXAgYW5kIHJ1bm5pbmcgKGFuZCBTeXprYWxsZXIgc3RhcnRzIGRvaW5nIGl0cyB0aGluZyB3aXRoIHN5c2NhbGxzKSwgdGhlIHN5c3RlbSBoYXMgYWxyZWFkeSBydW4gYGZyZWVfaW5pdG1lbSgpYCBhbmQgY2xlYW5lZCB1cCBhbGwgdGhlIGBfX2luaXRgIHN0dWZmLiBUaGlzIG1lYW5zLCBzdHJ1Y3R1cmFsbHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHVucmVhY2hhYmxlIGF0IHJ1bnRpbWUuXG5cbkkgd2FudGVkIHRvIG1ha2Ugc3VyZSwgc28gSSB3ZW50IHRocm91Z2ggaXQgc3RlcC1ieS1zdGVwOlxuXG4xLiAgVGhlIGNoYW5nZSB3YXMgdGhlIHJlbW92YWwgb2YgdGhlIGhlbHBlciBmdW5jdGlvbiBgcmVzZXRfbm9kZV9tYW5hZ2VkX3BhZ2VzYCBhbmQgYSBzaW1wbGlmaWNhdGlvbiBvZiBgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXNgLiBUaGUgbGF0dGVyIG5vdyB1c2VzIGBmb3JfZWFjaF96b25lKHopYCBpbnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoIGBwZ2RhdC1cdTAwM2Vub2RlX3pvbmVzYC5cbjIuICBCb3RoIHRoZSBvcmlnaW5hbCBhbmQgdGhlIG5ldyB2ZXJzaW9ucyBvZiB0aGUgZnVuY3Rpb25zIGFyZSBgc3RhdGljIHZvaWQgX19pbml0YC5cbjMuICBUaGV5J3JlIG9ubHkgY2FsbGVkIHZpYSBgbWVtYmxvY2tfZnJlZV9hbGwoKWAsIHdoaWNoIGlzIGFsc28gYHZvaWQgX19pbml0YC5cbjQuICBgbWVtYmxvY2tfZnJlZV9hbGwoKWAgaXMgKm9ubHkqIGNhbGxlZCBkdXJpbmcgZWFybHkgYm9vdCwgd2l0aGluIGBtbV9jb3JlX2luaXQoKWAgaW4gYGluaXQvbWFpbi5jYC5cbjUuICBBZnRlciB0aGUgc3lzdGVtIGJvb3RzLCBhbGwgdGhvc2UgYF9faW5pdGAgc2VjdGlvbnMgZ2V0IGRpc2NhcmRlZC4gVGhleSBhcmUgdW5tYXBwZWQgYW5kIHRoZSBtZW1vcnkgaXMgZnJlZWQuXG42LiAgU3l6a2FsbGVyIGNhbid0IGdldCB0byBhbnkgb2YgdGhpcyBzdHVmZiB0aHJvdWdoIHN5c2NhbGxzIG9yIGFueSBydW50aW1lIG9wZXJhdGlvbi4gSXQncyBzaW1wbHkgbm90IHRoZXJlIGFueW1vcmUuXG43LiAgVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC5cblxuTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBmb3JtYXR0aW5nIHRoaXMgY29ycmVjdGx5IGZvciBgc2V0LXJlc3VsdHNgLiBJdCBuZWVkczpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAgKGVtcHR5IGxpc3QpXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gIChlbXB0eSBsaXN0KVxuKiAgIGBSZWFzb25pbmdgOiBBbmQgdGhpcyBpcyBrZXkgLSBhIGNvbmNpc2UgZXhwbGFuYXRpb24gbGlrZSwgXCJUaGUgbW9kaWZpZWQgY29kZSByZXNpZGVzIHdpdGhpbiBlYXJseSBib290IGBfX2luaXRgIGZ1bmN0aW9ucyBleGVjdXRlZCBkdXJpbmcgc3lzdGVtIGluaXRpYWxpemF0aW9uIGJlZm9yZSB1c2Vyc3BhY2UgcnVucy4gSXQgaXMgZGlzY2FyZGVkIGZyb20gbWVtb3J5IGFmdGVyIGJvb3QsIG1ha2luZyBpdCB1bnJlYWNoYWJsZSBieSB0aGUgZnV6emVyLlwiXG5cbk9rYXksIHRoYXQgc2VlbXMgcmlnaHQuIExldCdzIG1ha2Ugc3VyZSB0aGF0J3MgZm9ybWF0dGVkIGludG8gdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg4OSwiT3V0cHV0VG9rZW5zIjoxMDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMjE6MDE6NTYuNjE2NjQ5MTc0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjc0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2ltcGxpZmllcyByZXNldF9hbGxfem9uZXNfbWFuYWdlZF9wYWdlcygpIGluIG1tL21lbWJsb2NrLmMuIFRoaXMgZnVuY3Rpb24gaXMgbWFya2VkIF9faW5pdCBhbmQgY2FsbGVkIHNvbGVseSBkdXJpbmcgZWFybHkgYm9vdCBmcm9tIG1tX2NvcmVfaW5pdCgpIC1cXHUwMDNlIG1lbWJsb2NrX2ZyZWVfYWxsKCkuIEFsbCBtb2RpZmllZCBjb2RlIHJlc2lkZXMgaW4gdGhlIF9faW5pdCBzZWN0aW9uIGFuZCBpcyBmcmVlZCBiZWZvcmUgdXNlcnNwYWNlIGluaXRpYWxpemVzLCBtYWtpbmcgaXQgdW5yZWFjaGFibGUgdG8gcnVudGltZSBmdXp6aW5nIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNpbXBsaWZpZXMgcmVzZXRfYWxsX3pvbmVzX21hbmFnZWRfcGFnZXMoKSBpbiBtbS9tZW1ibG9jay5jLiBUaGlzIGZ1bmN0aW9uIGlzIG1hcmtlZCBfX2luaXQgYW5kIGNhbGxlZCBzb2xlbHkgZHVyaW5nIGVhcmx5IGJvb3QgZnJvbSBtbV9jb3JlX2luaXQoKSAtXFx1MDAzZSBtZW1ibG9ja19mcmVlX2FsbCgpLiBBbGwgbW9kaWZpZWQgY29kZSByZXNpZGVzIGluIHRoZSBfX2luaXQgc2VjdGlvbiBhbmQgaXMgZnJlZWQgYmVmb3JlIHVzZXJzcGFjZSBpbml0aWFsaXplcywgbWFraW5nIGl0IHVucmVhY2hhYmxlIHRvIHJ1bnRpbWUgZnV6emluZyBieSBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQyMTowMTo1Ni42MTY2ODAxNjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflownc27f[1] Phase: Running StartedAt: 2026-09-08 21:02:07 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownc27f[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-08 21:02:07 +0000 UTC FinishedAt: 2026-09-08 21:02:12 +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,}