Name: series-workflowk4rr6 Phase: Failed StartedAt: 2026-06-26 18:05:49 +0000 UTC FinishedAt: 2026-06-26 18:16:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4rr6[0] Phase: Succeeded StartedAt: 2026-06-26 18:05:49 +0000 UTC FinishedAt: 2026-06-26 18:16:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4rr6[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 18:05:49 +0000 UTC FinishedAt: 2026-06-26 18:16:12 +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+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBidWlsZC10aW1lIGZlYXR1cmUgdG8gcmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gQWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUga2VybmVsIGFyZSBjb25maW5lZCB0byBgX19pbml0YCBmdW5jdGlvbnMgKGUuZy4sIGBzZXR1cF9hcmNoYCwgYHNldHVwX2Jvb3RfY29uZmlnYCwgYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgKSwgd2hpY2ggcnVuIG9ubHkgb25jZSBkdXJpbmcgZWFybHkgYm9vdCB3aXRoIHN0YXRpYyBpbnB1dHMgKGNvbXBpbGUtdGltZSBlbWJlZGRlZCBmaWxlcyBhbmQgdGhlIGJvb3Rsb2FkZXIgY29tbWFuZCBsaW5lKS4gU3l6a2FsbGVyIGNhbm5vdCBtdXRhdGUgdGhlc2UgaW5wdXRzIG9yIHJlYWNoIHRoaXMgY29kZSBkdXJpbmcgcnVudGltZSBzeXNjYWxsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTE4MWQzMDFjOWJkMDc2Y2VhYjYzNWE0NzM3ZThiZjVjNmEyNDVlMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDE4OjE1OjI2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0XG5pbmRleCBmNzEyNzU4NDcyZDVjNi4uM2Q2NDEyNDU4YzhiNjkgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0XG5AQCAtMjM0LDYgJiM0MzsyMzQsODcgQEAgS2NvbmZpZyBvcHRpb24gc2VsZWN0ZWQuXG4gTm90ZSB0aGF0IGV2ZW4gaWYgeW91IHNldCB0aGlzIG9wdGlvbiwgeW91IGNhbiBvdmVycmlkZSB0aGUgZW1iZWRkZWRcbiBib290Y29uZmlnIGJ5IGFub3RoZXIgYm9vdGNvbmZpZyB3aGljaCBhdHRhY2hlZCB0byB0aGUgaW5pdHJkLlxuIFxuJiM0MztSZW5kZXJpbmcgRW1iZWRkZWQga2VybmVsLiogS2V5cyBhdCBCdWlsZCBUaW1lXG4mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzO0J5IGRlZmF1bHQsIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIChgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRD15YGApIGlzXG4mIzQzO3BhcnNlZCBhdCBydW50aW1lLCBhZnRlciBgYHBhcnNlX2Vhcmx5X3BhcmFtKClgYCBoYXMgYWxyZWFkeSBydW4uIEVhcmx5XG4mIzQzO3BhcmFtZXRlciBoYW5kbGVycyAoYGBtZW09YGAsIGBgZWFybHljb249YGAsIGBgbG9nbGV2ZWw9YGAsIC4uLikgdGhlcmVmb3JlXG4mIzQzO2Nhbm5vdCBzZWUgdmFsdWVzIHN1cHBsaWVkIHZpYSB0aGUgZW1iZWRkZWQgYGBrZXJuZWxgYCBzdWJ0cmVlLlxuJiM0MztcbiYjNDM7YGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgYCByZXNvbHZlcyB0aGlzIGJ5IHJlbmRlcmluZyB0aGVcbiYjNDM7YGBrZXJuZWxgYCBzdWJ0cmVlIG9mIGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEX0ZJTEVgYCBpbnRvIGEgZmxhdCBjbWRsaW5lXG4mIzQzO3N0cmluZyBhdCBrZXJuZWwgYnVpbGQgdGltZSAodmlhIGBgdG9vbHMvYm9vdGNvbmZpZyAtQ2BgKSBhbmQgcHJlcGVuZGluZ1xuJiM0MztpdCB0byBgYGJvb3RfY29tbWFuZF9saW5lYGAgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cCwgc28gdGhlIGtleXNcbiYjNDM7YXJlIHZpc2libGUgdG8gYGBwYXJzZV9lYXJseV9wYXJhbSgpYGAuXG4mIzQzO1xuJiM0MztUaGUgb3B0aW9uIHJlcXVpcmVzIGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEPXlgYCwgYSBub24tZW1wdHlcbiYjNDM7YGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURfRklMRWBgLCBgYENPTkZJR19DTURMSU5FYGAgdG8gYmUgZW1wdHksIGFuZFxuJiM0MzthbiBhcmNoaXRlY3R1cmUgdGhhdCBzZWxlY3RzIGBgQ09ORklHX0FSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgYC5cbiYjNDM7Q3VycmVudGx5IG9ubHkgeDg2IHNlbGVjdHMgaXQ7IG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgdGhlIGVtYmVkZGVkXG4mIzQzO2Jvb3Rjb25maWcgc3RpbGwgd29ya3MsIGJ1dCBvbmx5IHRocm91Z2ggdGhlIGxhdGUgcnVudGltZSBwYXJzZXIuXG4mIzQzO1xuJiM0MztUaGUgc2FtZSBgYGJvb3Rjb25maWdgYCBvcHQtaW4gYXBwbGllcyBhcyBlbHNld2hlcmU6IHRoZSByZW5kZXJlZCBrZXlzXG4mIzQzO2FyZSBwcmVwZW5kZWQgb25seSB3aGVuIGBgYm9vdGNvbmZpZ2BgIChpbiBhbnkgZm9ybSkgYXBwZWFycyBvbiB0aGVcbiYjNDM7a2VybmVsIGNvbW1hbmQgbGluZSwgb3Igd2hlbiBgYENPTkZJR19CT09UX0NPTkZJR19GT1JDRWBgIGlzIHNldCwgd2hpY2hcbiYjNDM7ZGVmYXVsdHMgdG8gYGB5YGAgd2hlbiBgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRGBgIGlzIHNldC5cbiYjNDM7XG4mIzQzO0ZvciBleGFtcGxlLCBnaXZlbjo6XG4mIzQzO1xuJiM0Mzsga2VybmVsIHtcbiYjNDM7ICAgbG9nbGV2ZWwgPSA3XG4mIzQzOyAgIG1lbSA9IDRHXG4mIzQzOyB9XG4mIzQzO1xuJiM0Mzt0aGUga2VybmVsIGJvb3RzIGFzIGlmIGBgbG9nbGV2ZWw9NyBtZW09NEdgYCBoYWQgYmVlbiBwcmVwZW5kZWQgdG8gdGhlXG4mIzQzO2Jvb3Rsb2FkZXIgY29tbWFuZCBsaW5lLCB3aXRoIHRoZSB2YWx1ZXMgdmlzaWJsZSB0byBlYXJseS1wYXJzZWRcbiYjNDM7aGFuZGxlcnMuIENvbW1hLXNlcGFyYXRlZCB2YWx1ZXMgYXJlIHN0aWxsIGV4cGFuZGVkIGludG8gbXVsdGlwbGVcbiYjNDM7Y21kbGluZSBlbnRyaWVzIHBlciB0aGUgYm9vdGNvbmZpZyBhcnJheSBjb252ZW50aW9uIC0tIHRoZSBlbWJlZGRlZFxuJiM0MztgYGtlcm5lbC5lYXJseWNvbiA9IFwmIzM0O3VhcnQ4MjUwLGlvLDB4M2Y4XCYjMzQ7YGAgbXVzdCBiZSBxdW90ZWQgdG8gbGFuZCBhcyBhXG4mIzQzO3NpbmdsZSBgYGVhcmx5Y29uPWBgIGVudHJ5LCBleGFjdGx5IGFzIGZvciB0aGUgcnVudGltZSBwYXJzZXIuXG4mIzQzO1xuJiM0MztJZiB0aGUgcmVuZGVyZWQgc3RyaW5nIHdvdWxkIG5vdCBmaXQgaW4gYGBDT01NQU5EX0xJTkVfU0laRWBgIHRvZ2V0aGVyXG4mIzQzO3dpdGggdGhlIGV4aXN0aW5nIGNvbW1hbmQgbGluZSwgdGhlIHByZXBlbmQgaXMgc2tpcHBlZCBhbmQgYW4gZXJyb3IgaXNcbiYjNDM7bG9nZ2VkLCBzbyBhbiBvdmVyc2l6ZWQgZW1iZWRkZWQgYm9vdGNvbmZpZyBjYW5ub3QgYnJpY2sgYSBib290LlxuJiM0MztcbiYjNDM7SW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21tYW5kIGxpbmUgYW5kIGJvb3Rjb25maWcgc291cmNlc1xuJiM0Mzt+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XG4mIzQzO1xuJiM0MztXaXRoIGBgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHPXlgYCB0aGUgcmVuZGVyZWQgYGBrZXJuZWxgYFxuJiM0MztzdWJ0cmVlIGJlaGF2ZXMgbGlrZSBhIGJ1aWxkLXRpbWUgY29tbWFuZCBsaW5lIChzaW1pbGFyIHRvXG4mIzQzO2BgQ09ORklHX0NNRExJTkVgYCksIG5vdCBsaWtlIGEgYm9vdGNvbmZpZyBzb3VyY2UuIEl0IGlzIHByZXBlbmRlZCB0b1xuJiM0MztgYGJvb3RfY29tbWFuZF9saW5lYGAgaW4gYGBzZXR1cF9hcmNoKClgYCwgYmVmb3JlIGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgXG4mIzQzO2FuZCBsb25nIGJlZm9yZSB0aGUgcnVudGltZSBwYXJzZXIgbG9va3MgYXQgYW4gaW5pdHJkLiBPcHRpb25zIGNhbiByZWFjaFxuJiM0Mzt0aGUga2VybmVsIGZyb20gdXAgdG8gZm91ciBwbGFjZXM6XG4mIzQzO1xuJiM0MzstIEJvb3Rsb2FkZXIgY29tbWFuZCBsaW5lOiB0aGUgYXJndW1lbnRzIHRoZSBib290IGxvYWRlciBwYXNzZXMuIFRoZVxuJiM0MzsgIGVtYmVkZGVkIGNtZGxpbmUgaXMgcHJlcGVuZGVkIGluIGZyb250IG9mIHRoZW0sIHNvIGZvciBsYXN0LW9uZS13aW5zXG4mIzQzOyAgcGFyYW1ldGVycyBhIGJvb3Rsb2FkZXIgb3B0aW9uIHN0aWxsIG92ZXJyaWRlcyB0aGUgZW1iZWRkZWQgdmFsdWUuXG4mIzQzOyAgVmlzaWJsZSBpbiAvcHJvYy9jbWRsaW5lLlxuJiM0MzstIEVtYmVkZGVkIGNtZGxpbmUgKHRoaXMgb3B0aW9uKTogdGhlIHJlbmRlcmVkIGBga2VybmVsYGAgc3VidHJlZSxcbiYjNDM7ICBwcmVwZW5kZWQgZWFybHkgc28gaXQgaXMgc2VlbiBieSBgYHBhcnNlX2Vhcmx5X3BhcmFtKClgYC4gVmlzaWJsZSBpblxuJiM0MzsgIC9wcm9jL2NtZGxpbmUuXG4mIzQzOy0gSW5pdHJkIGJvb3Rjb25maWc6IHBhcnNlZCBsYXRlIGluIGBgc2V0dXBfYm9vdF9jb25maWcoKWBgOyBpdHNcbiYjNDM7ICBgYGtlcm5lbGBgIGtleXMgYXJlIHBsYWNlZCBhaGVhZCBvZiBgYGJvb3RfY29tbWFuZF9saW5lYGAsIGkuZS4gYmVmb3JlXG4mIzQzOyAgdGhlIGVtYmVkZGVkIGNtZGxpbmUsIHNvIGxhc3Qtd2lucyBmYXZvcnMgdGhlIGVtYmVkZGVkIHZhbHVlcy4gQXMgYVxuJiM0MzsgIGJvb3Rjb25maWcgc291cmNlLCBhbiBpbml0cmQgYm9vdGNvbmZpZyBzdGlsbCByZXBsYWNlcyB0aGUgZW1iZWRkZWRcbiYjNDM7ICBib290Y29uZmlnLiBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUgYW5kIC9wcm9jL2Jvb3Rjb25maWcuXG4mIzQzOy0gRW1iZWRkZWQgYm9vdGNvbmZpZyAocnVudGltZSk6IHBhcnNlZCBsYXRlLCBvbmx5IHdoZW4gbm8gaW5pdHJkXG4mIzQzOyAgYm9vdGNvbmZpZyBpcyBwcmVzZW50LiBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUgYW5kIC9wcm9jL2Jvb3Rjb25maWcuXG4mIzQzO1xuJiM0MztTbyB3aXRoIHRoaXMgb3B0aW9uIHRoZSBlbWJlZGRlZCBgYGtlcm5lbC4qYGAgdmFsdWVzIHRha2UgcHJlY2VkZW5jZVxuJiM0MztvdmVyIGFuIGluaXRyZCBib290Y29uZmlnJiMzOTtzIGBga2VybmVsLipgYCB2YWx1ZXM6IGZvciBlYXJseSBwYXJhbWV0ZXJzXG4mIzQzO3RoZSBpbml0cmQgaXMgbm90IHBhcnNlZCB5ZXQsIGFuZCBmb3Igb3JkaW5hcnkgcGFyYW1ldGVycyB0aGUgZW1iZWRkZWRcbiYjNDM7a2V5cyBsYW5kIGxhdGVyIGluIHRoZSBjb21tYW5kIGxpbmUuIElmIHlvdSBuZWVkIGFuIGluaXRyZCBib290Y29uZmlnIHRvXG4mIzQzO292ZXJyaWRlIHRoZSBlbWJlZGRlZCBgYGtlcm5lbC4qYGAga2V5cywgbGVhdmUgdGhpcyBvcHRpb24gb2ZmIGFuZCByZWx5XG4mIzQzO29uIHRoZSBydW50aW1lIHBhcnNlci5cbiYjNDM7XG4mIzQzO1RoZSByZW5kZXJlZCBzdHJpbmcgaXMgcGFydCBvZiB0aGUgY29tbWFuZCBsaW5lLCBzbyBpdCBhcHBlYXJzIGluXG4mIzQzOy9wcm9jL2NtZGxpbmUuIEl0IGlzIGRlbGliZXJhdGVseSBub3Qgc2hvd24gaW4gL3Byb2MvYm9vdGNvbmZpZzogdGhhdFxuJiM0MztmaWxlIGtlZXBzIHJlcG9ydGluZyB0aGUgcGFyc2VkIGJvb3Rjb25maWcgdHJlZSAtLSB0aGUgaW5pdHJkIGJvb3Rjb25maWdcbiYjNDM7aWYgcHJlc2VudCwgb3RoZXJ3aXNlIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIC0tIGluZGVwZW5kZW50IG9mIHdoZXRoZXJcbiYjNDM7YnVpbGQtdGltZSBjbWRsaW5lIHJlbmRlcmluZyBpcyBlbmFibGVkLlxuJiM0MztcbiBLZXJuZWwgcGFyYW1ldGVycyB2aWEgQm9vdCBDb25maWdcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCBiZjk3Mzk5ZDM1N2ZhMC4uNDgzNDA2NWE0YmYyZjcgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC05ODQ2LDYgJiM0Mzs5ODQ2LDcgQEAgRjpcdGZzL3Byb2MvYm9vdGNvbmZpZy5jXG4gRjpcdGluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oXG4gRjpcdGxpYi9ib290Y29uZmlnLWRhdGEuU1xuIEY6XHRsaWIvYm9vdGNvbmZpZy5jXG4mIzQzO0Y6XHRsaWIvZW1iZWRkZWQtY21kbGluZS5TXG4gRjpcdHRvb2xzL2Jvb3Rjb25maWcvKlxuIEY6XHR0b29scy9ib290Y29uZmlnL3NjcmlwdHMvKlxuIFxuZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGVcbmluZGV4IDEyZmQzZDJkNDdiNTgyLi4zNGZiMzU3MWJlYzgxZCAxMDA2NDRcbi0tLSBhL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9NYWtlZmlsZVxuQEAgLTE1NTIsNiAmIzQzOzE1NTIsMjIgQEAgcHJlcGFyZTogdG9vbHMvYnBmL3Jlc29sdmVfYnRmaWRzXG4gZW5kaWZcbiBlbmRpZlxuIFxuJiM0MzsjIHRvb2xzL2Jvb3Rjb25maWcgcmVuZGVycyB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBpbnRvIGEgY21kbGluZSBhdCBidWlsZCB0aW1lLlxuJiM0MztpZmRlZiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcbiYjNDM7cHJlcGFyZTogdG9vbHMvYm9vdGNvbmZpZ1xuJiM0MztlbmRpZlxuJiM0MztcbiYjNDM7IyB0b29scy9ib290Y29uZmlnIGlzIHJ1biBvbiB0aGUgYnVpbGQgaG9zdCBkdXJpbmcgcHJlcGFyZSwgc28gZm9yY2UgYSBob3N0XG4mIzQzOyMgYmluYXJ5IGhlcmU7IGl0cyBvd24gTWFrZWZpbGUga2VlcHMgJChDQykgZm9yIHN0YW5kYWxvbmUgYW5kIGNyb3NzIGJ1aWxkcy5cbiYjNDM7IyBDUk9TU19DT01QSUxFPSBpcyBjbGVhcmVkIHNvIHRvb2xzL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZSBkb2VzIG5vdCBpbmplY3RcbiYjNDM7IyB0aGUgdGFyZ2V0JiMzOTtzIC0tdGFyZ2V0PS8tLXN5c3Jvb3Q9IGZsYWdzIGludG8gdGhlIGhvc3QgY2xhbmcgaW52b2NhdGlvbiB1bmRlclxuJiM0MzsjIExMVk09MSBjcm9zcyBidWlsZHMgKHdoaWNoIHdvdWxkIHByb2R1Y2UgYSB0YXJnZXQgYmluYXJ5IHRoYXQgZmFpbHMgdG8gZXhlYykuXG4mIzQzO3Rvb2xzL2Jvb3Rjb25maWc6IGV4cG9ydCBDQyA6PSAkKEhPU1RDQylcbiYjNDM7dG9vbHMvYm9vdGNvbmZpZzogRk9SQ0VcbiYjNDM7XHQkKFEpbWtkaXIgLXAgJChvYmp0cmVlKS90b29sc1xuJiM0MztcdCQoUSkkKE1BS0UpIE89JChhYnNwYXRoICQob2JqdHJlZSkpIHN1YmRpcj10b29scyAtQyAkKHNyY3RyZWUpL3Rvb2xzLyBcXFxuJiM0MztcdFx0Ym9vdGNvbmZpZyBDUk9TU19DT01QSUxFPVxuJiM0MztcbiAjIFRoZSB0b29scyBidWlsZCBzeXN0ZW0gaXMgbm90IGEgcGFydCBvZiBLYnVpbGQgYW5kIHRlbmRzIHRvIGludHJvZHVjZVxuICMgaXRzIG93biB1bmlxdWUgaXNzdWVzLiBJZiB5b3UgbmVlZCB0byBpbnRlZ3JhdGUgYSBuZXcgdG9vbCBpbnRvIEtidWlsZCxcbiAjIHBsZWFzZSBjb25zaWRlciBsb2NhdGluZyB0aGF0IHRvb2wgb3V0c2lkZSB0aGUgdG9vbHMvIHRyZWUgYW5kIHVzaW5nIHRoZVxuQEAgLTE1NzgsNiAmIzQzOzE1OTQsMTUgQEAgaWZuZXEgKCQod2lsZGNhcmQgJChvYmp0b29sX08pKSwpXG4gXHQkKFEpJChNQUtFKSAtc0MgJChhYnNfc3JjdHJlZSkvdG9vbHMvb2JqdG9vbCBPPSQob2JqdG9vbF9PKSBzcmN0cmVlPSQoYWJzX3NyY3RyZWUpICQocGF0c3Vic3Qgb2JqdG9vbF8lLCUsJEApXG4gZW5kaWZcbiBcbiYjNDM7UEhPTlkgJiM0Mzs9IGJvb3Rjb25maWdfY2xlYW5cbiYjNDM7XG4mIzQzO2Jvb3Rjb25maWdfTyA9ICQoYWJzcGF0aCAkKG9ianRyZWUpKS90b29scy9ib290Y29uZmlnXG4mIzQzO1xuJiM0Mztib290Y29uZmlnX2NsZWFuOlxuJiM0MztpZm5lcSAoJCh3aWxkY2FyZCAkKGJvb3Rjb25maWdfTykpLClcbiYjNDM7XHQkKFEpJChNQUtFKSAtc0MgJChzcmN0cmVlKS90b29scy9ib290Y29uZmlnIE89JChib290Y29uZmlnX08pIGNsZWFuXG4mIzQzO2VuZGlmXG4mIzQzO1xuIHRvb2xzLzogRk9SQ0VcbiBcdCQoUSlta2RpciAtcCAkKG9ianRyZWUpL3Rvb2xzXG4gXHQkKFEpJChNQUtFKSBPPSQoYWJzcGF0aCAkKG9ianRyZWUpKSBzdWJkaXI9dG9vbHMgLUMgJChzcmN0cmVlKS90b29scy9cbkBAIC0xNzUzLDcgJiM0MzsxNzc4LDcgQEAgdm1saW51eGNsZWFuOlxuIFx0JChRKSQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3NjcmlwdHMvbGluay12bWxpbnV4LnNoIGNsZWFuXG4gXHQkKFEpJChpZiAkKEFSQ0hfUE9TVExJTkspLCAkKE1BS0UpIC1mICQoQVJDSF9QT1NUTElOSykgY2xlYW4pXG4gXG4tY2xlYW46IGFyY2hjbGVhbiB2bWxpbnV4Y2xlYW4gcmVzb2x2ZV9idGZpZHNfY2xlYW4gb2JqdG9vbF9jbGVhblxuJiM0MztjbGVhbjogYXJjaGNsZWFuIHZtbGludXhjbGVhbiByZXNvbHZlX2J0Zmlkc19jbGVhbiBvYmp0b29sX2NsZWFuIGJvb3Rjb25maWdfY2xlYW5cbiBcbiAjIG1ycHJvcGVyIC0gRGVsZXRlIGFsbCBnZW5lcmF0ZWQgZmlsZXMsIGluY2x1ZGluZyAuY29uZmlnXG4gI1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnXG5pbmRleCBiZGFkOTBmMjEwZTRiZi4uZmQ5NzllMGJlMWYwZTAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9LY29uZmlnXG5AQCAtMTI3LDYgJiM0MzsxMjcsNyBAQCBjb25maWcgWDg2XG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lOR1x0aWYgWDg2XzY0XG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19LTUFQX0xPQ0FMX0ZPUkNFX01BUFx0aWYgTlJfQ1BVUyBcdTAwM2M9IDQwOTZcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NGSVx0XHRpZiBYODZfNjRcbiYjNDM7XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuIFx0c2VsZWN0IEFSQ0hfVVNFU19DRklfVFJBUFNcdFx0aWYgWDg2XzY0IFx1MDAyNlx1MDAyNiBDRklcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0xUT19DTEFOR1xuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTFRPX0NMQU5HX1RISU5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jXG5pbmRleCA0Njg4MmNlNzljM2E0ZC4uODhiMDU1YTQ2NTkxZWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL3NldHVwLmNcbkBAIC02LDYgJiM0Mzs2LDcgQEBcbiAgKiBwYXJ0cyBvZiBlYXJseSBrZXJuZWwgaW5pdGlhbGl6YXRpb24uXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYWNwaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jvb3Rjb25maWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnNvbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXHUwMDNlXG5AQCAtODgwLDcgJiM0Mzs4ODEsNiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgeDg2X3JlcG9ydF9ueCh2b2lkKVxuICAqXG4gICogTm90ZTogT24geDg2XzY0LCBmaXhtYXBzIGFyZSByZWFkeSBmb3IgdXNlIGV2ZW4gYmVmb3JlIHRoaXMgaXMgY2FsbGVkLlxuICAqL1xuLVxuIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcbiB7XG4gI2lmZGVmIENPTkZJR19YODZfMzJcbkBAIC05MjQsNiAmIzQzOzkyNCwxOCBAQCB2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXG4gXHRidWlsdGluX2NtZGxpbmVfYWRkZWQgPSB0cnVlO1xuICNlbmRpZlxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcmVwZW5kIHRoZSBidWlsZC10aW1lLXJlbmRlcmVkIGVtYmVkZGVkIFwmIzM0O2tlcm5lbFwmIzM0OyBrZXlzIGhlcmUgc29cbiYjNDM7XHQgKiBwYXJzZV9lYXJseV9wYXJhbSgpIGJlbG93IHNlZXMgdGhlbSwgdXNpbmcgdGhlIHNhbWUgb3B0LWluIGFzIHRoZVxuJiM0MztcdCAqIHJ1bnRpbWUgcGFyc2VyLCBwbHVzIHRoZSBidWlsZC10aW1lIENPTkZJR19CT09UX0NPTkZJR19GT1JDRS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZChib290X2NvbW1hbmRfbGluZSwgTlVMTCkgfHxcbiYjNDM7XHQgICAgSVNfRU5BQkxFRChDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0UpKVxuJiM0MztcdFx0eGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShib290X2NvbW1hbmRfbGluZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgQ09NTUFORF9MSU5FX1NJWkUpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRzdHJzY3B5KGNvbW1hbmRfbGluZSwgYm9vdF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTtcbiBcdCpjbWRsaW5lX3AgPSBjb21tYW5kX2xpbmU7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmggYi9pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaFxuaW5kZXggMWM3ZjNiNzRmZmNmMzguLmRlZGE1MDc1MDBkYTIzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oXG5AQCAtMzA4LDQgJiM0MzszMDgsMTggQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyICp4YmNfZ2V0X2VtYmVkZGVkX2Jvb3Rjb25maWcoc2l6ZV90ICpzaXplKVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7LyogQm9vdGNvbmZpZyBvcHQtaW4gZGV0ZWN0aW9uLCBzaGFyZWQgYnkgc2V0dXBfYXJjaCgpIGFuZCBzZXR1cF9ib290X2NvbmZpZygpICovXG4mIzQzOyNpZmRlZiBDT05GSUdfQk9PVF9DT05GSUdcbiYjNDM7Ym9vbCBfX2luaXQgYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZChjb25zdCBjaGFyICpib290X2NtZGxpbmUsIGludCAqZW5kX29mZnNldCk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7LyogQnVpbGQtdGltZS1yZW5kZXJlZCBib290Y29uZmlnIGNtZGxpbmUgcHJlcGVuZGVkIGluIHNldHVwX2FyY2goKSAqL1xuJiM0MzsjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4mIzQzO3ZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSk7XG4mIzQzO2Jvb2wgX19pbml0IHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZCk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnXG5pbmRleCA1MjMwZDQ4NzliMWM4NC4uNTk4NjkwZWMzMTNhMjkgMTAwNjQ0XG4tLS0gYS9pbml0L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2luaXQvS2NvbmZpZ1xuQEAgLTE1NjYsNiAmIzQzOzE1NjYsNDIgQEAgY29uZmlnIEJPT1RfQ09ORklHX0VNQkVEX0ZJTEVcbiBcdCAgVGhpcyBib290Y29uZmlnIHdpbGwgYmUgdXNlZCBpZiB0aGVyZSBpcyBubyBpbml0cmQgb3Igbm8gb3RoZXJcbiBcdCAgYm9vdGNvbmZpZyBpbiB0aGUgaW5pdHJkLlxuIFxuJiM0Mztjb25maWcgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuJiM0MztcdGJvb2xcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBTaWxlbnQgc3ltYm9sOyBubyBDIGNvZGUgcmVhZHMgaXQgZGlyZWN0bHkuIEFyY2hpdGVjdHVyZXNcbiYjNDM7XHQgIHNlbGVjdCBpdCBvbmNlIHRoZWlyIHNldHVwX2FyY2goKSBjYWxsc1xuJiM0MztcdCAgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIGJlZm9yZSBwYXJzZV9lYXJseV9wYXJhbSgpLlxuJiM0MztcdCAgSXRzIG9ubHkgcm9sZSBpcyB0byBnYXRlIHRoZSB1c2VyLXZpc2libGVcbiYjNDM7XHQgIENNRExJTkVfRlJPTV9CT09UQ09ORklHIG9wdGlvbiBwZXItYXJjaCwgdGhlIHNhbWVcbiYjNDM7XHQgIEFSQ0hfU1VQUE9SVFNfKiBpZGlvbSB1c2VkIGJ5IEFSQ0hfU1VQUE9SVFNfQ0ZJLCBldGMuXG4mIzQzO1xuJiM0Mztjb25maWcgQ01ETElORV9GUk9NX0JPT1RDT05GSUdcbiYjNDM7XHRib29sIFwmIzM0O1JlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGFzIGtlcm5lbCBjbWRsaW5lIGF0IGJ1aWxkIHRpbWVcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIEJPT1RfQ09ORklHX0VNQkVEX0ZJTEUgIT0gXCYjMzQ7XCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4mIzQzO1x0ZGVwZW5kcyBvbiBDTURMSU5FID0gXCYjMzQ7XCYjMzQ7XG4mIzQzO1x0ZGVmYXVsdCBuXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgUmVuZGVyIHRoZSBcJiMzNDtrZXJuZWxcJiMzNDsgc3VidHJlZSBvZiB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBmaWxlIGludG8gYVxuJiM0MztcdCAgZmxhdCBjbWRsaW5lIHN0cmluZyBhdCBrZXJuZWwgYnVpbGQgdGltZSBhbmQgcHJlcGVuZCBpdCB0b1xuJiM0MztcdCAgYm9vdF9jb21tYW5kX2xpbmUgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cC4gVGhpcyBtYWtlc1xuJiM0MztcdCAgZWFybHlfcGFyYW0oKSBoYW5kbGVycyAoZS5nLiBtZW09LCBlYXJseWNvbj0sIGxvZ2xldmVsPSkgc2VlIHRoZVxuJiM0MztcdCAgdmFsdWVzIHN1cHBsaWVkIHZpYSB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZy5cbiYjNDM7XG4mIzQzO1x0ICBUaGUgcnVudGltZSBib290Y29uZmlnIHBhcnNlciBpcyB1bmFmZmVjdGVkLCBzbyB0cmVlLXN0cnVjdHVyZWRcbiYjNDM7XHQgIGNvbnN1bWVycyBzdWNoIGFzIGZ0cmFjZSBib290LXRpbWUgdHJhY2luZyBrZWVwIHdvcmtpbmcuXG4mIzQzO1xuJiM0MztcdCAgTm90ZTogd2hlbiBhbiBpbml0cmQgYWxzbyBjYXJyaWVzIGEgYm9vdGNvbmZpZywgaXRzIFwmIzM0O2tlcm5lbFwmIzM0O1xuJiM0MztcdCAgc3VidHJlZSBpcyBzdGlsbCBwYXJzZWQgYXQgcnVudGltZSwgYnV0IHRoZSBlbWJlZGRlZCBcJiMzNDtrZXJuZWxcJiMzNDtcbiYjNDM7XHQgIGtleXMgcmVtYWluIGluIGJvb3RfY29tbWFuZF9saW5lIGZvciBwYXJzZV9lYXJseV9wYXJhbSgpIGFuZFxuJiM0MztcdCAgZW5kIHVwIGxhdGVyIHRoYW4gdGhlIGluaXRyZCBrZXlzIGluIHNhdmVkX2NvbW1hbmRfbGluZSwgc29cbiYjNDM7XHQgIHBhcnNlX2FyZ3MoKSBsYXN0LXdpbnMgZmF2b3JzIHRoZSBlbWJlZGRlZCB2YWx1ZXMuIElmIHlvdSBuZWVkXG4mIzQzO1x0ICBpbml0cmQgdG8gb3ZlcnJpZGUgZW1iZWRkZWQga2VybmVsLioga2V5cywgbGVhdmUgdGhpcyBvcHRpb25cbiYjNDM7XHQgIG9mZi5cbiYjNDM7XG4mIzQzO1x0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiM0MztcbiBjb25maWcgQ01ETElORV9MT0dfV1JBUF9JREVBTF9MRU5cbiBcdGludCBcJiMzNDtMZW5ndGggdG8gdHJ5IHRvIHdyYXAgdGhlIGNtZGxpbmUgd2hlbiBsb2dnZWQgYXQgYm9vdFwmIzM0O1xuIFx0ZGVmYXVsdCAxMDIxXG5kaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uY1xuaW5kZXggZTM2MzIzMmI0MjhiNDcuLjM5YTUxOGE0NzI0MjIzIDEwMDY0NFxuLS0tIGEvaW5pdC9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2luaXQvbWFpbi5jXG5AQCAtMzU2LDQ1ICYjNDM7MzU2LDMzIEBAIHN0YXRpYyBjaGFyICogX19pbml0IHhiY19tYWtlX2NtZGxpbmUoY29uc3QgY2hhciAqa2V5KVxuIFx0cmV0dXJuIG5ld19jbWRsaW5lO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9faW5pdCBib290Y29uZmlnX3BhcmFtcyhjaGFyICpwYXJhbSwgY2hhciAqdmFsLFxuLVx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKnVudXNlZCwgdm9pZCAqYXJnKVxuLXtcbi1cdGlmIChzdHJjbXAocGFyYW0sIFwmIzM0O2Jvb3Rjb25maWdcJiMzNDspID09IDApIHtcbi1cdFx0Ym9vdGNvbmZpZ19mb3VuZCA9IHRydWU7XG4tXHR9XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGludCBfX2luaXQgd2Fybl9ib290Y29uZmlnKGNoYXIgKnN0cilcbiB7XG4tXHQvKiBUaGUgJiMzOTtib290Y29uZmlnJiMzOTsgaGFzIGJlZW4gaGFuZGxlZCBieSBib290Y29uZmlnX3BhcmFtcygpLiAqL1xuJiM0MztcdC8qIFRoZSAmIzM5O2Jvb3Rjb25maWcmIzM5OyBvcHRpb24gaXMgaGFuZGxlZCBieSBzZXR1cF9ib290X2NvbmZpZygpLiAqL1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290X2NvbmZpZyh2b2lkKVxuIHtcbi1cdHN0YXRpYyBjaGFyIHRtcF9jbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXSBfX2luaXRkYXRhO1xuIFx0Y29uc3QgY2hhciAqbXNnLCAqZGF0YTtcbi1cdGludCBwb3MsIHJldDtcbiYjNDM7XHRpbnQgcG9zLCByZXQsIG9mZnM7XG4gXHRzaXplX3Qgc2l6ZTtcbi1cdGNoYXIgKmVycjtcbiYjNDM7XHRib29sIGZyb21fZW1iZWRkZWQgPSBmYWxzZTtcbiBcbiBcdC8qIEN1dCBvdXQgdGhlIGJvb3Rjb25maWcgZGF0YSBldmVuIGlmIHdlIGhhdmUgbm8gYm9vdGNvbmZpZyBvcHRpb24gKi9cbiBcdGRhdGEgPSBnZXRfYm9vdF9jb25maWdfZnJvbV9pbml0cmQoXHUwMDI2c2l6ZSk7XG4gXHQvKiBJZiB0aGVyZSBpcyBubyBib290Y29uZmlnIGluIGluaXRyZCwgdHJ5IGVtYmVkZGVkIG9uZS4gKi9cbi1cdGlmICghZGF0YSlcbiYjNDM7XHRpZiAoIWRhdGEpIHtcbiBcdFx0ZGF0YSA9IHhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhcdTAwMjZzaXplKTtcbiYjNDM7XHRcdGZyb21fZW1iZWRkZWQgPSB0cnVlO1xuJiM0MztcdH1cbiBcbi1cdHN0cnNjcHkodG1wX2NtZGxpbmUsIGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7XG4tXHRlcnIgPSBwYXJzZV9hcmdzKFwmIzM0O2Jvb3Rjb25maWdcJiMzNDssIHRtcF9jbWRsaW5lLCBOVUxMLCAwLCAwLCAwLCBOVUxMLFxuLVx0XHRcdCBib290Y29uZmlnX3BhcmFtcyk7XG4tXG4tXHRpZiAoSVNfRVJSKGVycikgfHwgIShib290Y29uZmlnX2ZvdW5kIHx8IElTX0VOQUJMRUQoQ09ORklHX0JPT1RfQ09ORklHX0ZPUkNFKSkpXG4mIzQzO1x0Ym9vdGNvbmZpZ19mb3VuZCA9IGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoYm9vdF9jb21tYW5kX2xpbmUsIFx1MDAyNm9mZnMpO1xuJiM0MztcdGlmICghKGJvb3Rjb25maWdfZm91bmQgfHwgSVNfRU5BQkxFRChDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0UpKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0LyogcGFyc2VfYXJncygpIHN0b3BzIGF0IHRoZSBuZXh0IHBhcmFtIG9mICYjMzk7LS0mIzM5OyBhbmQgcmV0dXJucyBhbiBhZGRyZXNzICovXG4tXHRpZiAoZXJyKVxuLVx0XHRpbml0YXJnc19vZmZzID0gZXJyIC0gdG1wX2NtZGxpbmU7XG4mIzQzO1x0LyogT2Zmc2V0IG9mIHRoZSBpbml0IGFyZ3VtZW50cyBhZnRlciBhIFwmIzM0Oy0tXCYjMzQ7LCBsb2NhdGVkIGJ5IHRoZSBoZWxwZXIuICovXG4mIzQzO1x0aW5pdGFyZ3Nfb2ZmcyA9IG9mZnM7XG4gXG4gXHRpZiAoIWRhdGEpIHtcbiBcdFx0LyogSWYgdXNlciBpbnRlbmRlZCB0byB1c2UgYm9vdGNvbmZpZywgc2hvdyBhbiBlcnJvciBsZXZlbCBtZXNzYWdlICovXG5AQCAtNDIxLDggJiM0Mzs0MDksMjQgQEAgc3RhdGljIHZvaWQgX19pbml0IHNldHVwX2Jvb3RfY29uZmlnKHZvaWQpXG4gXHR9IGVsc2Uge1xuIFx0XHR4YmNfZ2V0X2luZm8oXHUwMDI2cmV0LCBOVUxMKTtcbiBcdFx0cHJfaW5mbyhcJiMzNDtMb2FkIGJvb3Rjb25maWc6ICVsZCBieXRlcyAlZCBub2Rlc1xcblwmIzM0OywgKGxvbmcpc2l6ZSwgcmV0KTtcbi1cdFx0Lyoga2V5cyBzdGFydGluZyB3aXRoIFwmIzM0O2tlcm5lbC5cJiMzNDsgYXJlIHBhc3NlZCB2aWEgY21kbGluZSAqL1xuLVx0XHRleHRyYV9jb21tYW5kX2xpbmUgPSB4YmNfbWFrZV9jbWRsaW5lKFwmIzM0O2tlcm5lbFwmIzM0Oyk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICoga2V5cyBzdGFydGluZyB3aXRoIFwmIzM0O2tlcm5lbC5cJiMzNDsgYXJlIHBhc3NlZCB2aWEgY21kbGluZS4gV2hlblxuJiM0MztcdFx0ICogdGhpcyBib290Y29uZmlnIGNhbWUgZnJvbSB0aGUgZW1iZWRkZWQgc291cmNlIGFuZFxuJiM0MztcdFx0ICogc2V0dXBfYXJjaCgpIGFscmVhZHkgcHJlcGVuZGVkIHRoZSByZW5kZXJlZCBcJiMzNDtrZXJuZWxcJiMzNDsgc3VidHJlZVxuJiM0MztcdFx0ICogdG8gYm9vdF9jb21tYW5kX2xpbmUsIHJlbmRlcmluZyBhZ2FpbiBoZXJlIHdvdWxkIGR1cGxpY2F0ZVxuJiM0MztcdFx0ICogdGhlIGtleXMgaW4gc2F2ZWRfY29tbWFuZF9saW5lIGFuZCBtYWtlIGFjY3VtdWxhdGluZyBoYW5kbGVyc1xuJiM0MztcdFx0ICogKGNvbnNvbGU9LCBlYXJseWNvbj0sIC4uLikgcmUtcmVnaXN0ZXIgdGhlIHNhbWUgdmFsdWUuIFNraXBcbiYjNDM7XHRcdCAqIG9ubHkgd2hlbiB0aGUgcHJlcGVuZCByZWFsbHkgaGFwcGVuZWQuXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogT24gYXJjaGVzIHRoYXQgZG8gbm90IHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHLFxuJiM0MztcdFx0ICogQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHIGlzIHVuc2VsZWN0YWJsZSBhbmRcbiYjNDM7XHRcdCAqIHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQoKSBjb2xsYXBzZXMgdG8gYSBzdHViIHJldHVybmluZ1xuJiM0MztcdFx0ICogZmFsc2UsIHNvIHRoaXMgcGF0aCBzdGlsbCBydW5zIGFuZCB0aGUgZW1iZWRkZWQgXCYjMzQ7a2VybmVsXCYjMzQ7XG4mIzQzO1x0XHQgKiBrZXlzIHJlYWNoIHRoZSBjbWRsaW5lIHZpYSB0aGUgcnVudGltZSBwYXJzZXIgZXhhY3RseSBhc1xuJiM0MztcdFx0ICogYmVmb3JlIHRoaXMgc2VyaWVzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIWZyb21fZW1iZWRkZWQgfHwgIXhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQoKSlcbiYjNDM7XHRcdFx0ZXh0cmFfY29tbWFuZF9saW5lID0geGJjX21ha2VfY21kbGluZShcJiMzNDtrZXJuZWxcJiMzNDspO1xuIFx0XHQvKiBBbHNvLCBcJiMzNDtpbml0LlwmIzM0OyBrZXlzIGFyZSBpbml0IGFyZ3VtZW50cyAqL1xuIFx0XHRleHRyYV9pbml0X2FyZ3MgPSB4YmNfbWFrZV9jbWRsaW5lKFwmIzM0O2luaXRcJiMzNDspO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZVxuaW5kZXggN2Y3NWNjNmVkZjk0YWYuLjRjY2RjZTJmZDVlNWIwIDEwMDY0NFxuLS0tIGEvbGliL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvTWFrZWZpbGVcbkBAIC0yNzMsNiAmIzQzOzI3MywyMiBAQCBmaWxlY2hrX2RlZmJjb25mID0gY2F0ICQob3IgJChyZWFsLXByZXJlcXMpLCAvZGV2L251bGwpXG4gJChvYmopL2RlZmF1bHQuYmNvbmY6ICQoQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEX0ZJTEUpIEZPUkNFXG4gXHQkKGNhbGwgZmlsZWNoayxkZWZiY29uZilcbiBcbiYjNDM7b2JqLSQoQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHKSAmIzQzOz0gZW1iZWRkZWQtY21kbGluZS5vXG4mIzQzOyQob2JqKS9lbWJlZGRlZC1jbWRsaW5lLm86ICQob2JqKS9lbWJlZGRlZF9jbWRsaW5lLmJpblxuJiM0MztcbiYjNDM7IyBSZW5kZXIgdGhlIGJvb3Rjb25maWcgXCYjMzQ7a2VybmVsXCYjMzQ7IHN1YnRyZWUgdG8gYSBmbGF0IGNtZGxpbmUgc3RyaW5nIHVzaW5nXG4mIzQzOyMgdGhlIHVzZXJzcGFjZSB0b29scy9ib290Y29uZmlnIHBhcnNlciAoLUMgbW9kZSkuIFRoZSBydW50aW1lIHByZXBlbmRcbiYjNDM7IyBoZWxwZXIgZW5mb3JjZXMgQ09NTUFORF9MSU5FX1NJWkUgYXQgYm9vdCwgc28gbm8gYnVpbGQtdGltZSBzaXplXG4mIzQzOyMgY2hlY2sgaXMgcGVyZm9ybWVkIGhlcmUgKENPTU1BTkRfTElORV9TSVpFIGlzIGFuIGFyY2ggaGVhZGVyXG4mIzQzOyMgY29uc3RhbnQsIG5vdCBhIEtjb25maWcgdmFsdWUpLlxuJiM0MztxdWlldF9jbWRfcmVuZGVyX2NtZGxpbmUgPSBCQ09ORjJDICRAXG4mIzQzOyAgICAgIGNtZF9yZW5kZXJfY21kbGluZSA9IFxcXG4mIzQzO1x0JChvYmp0cmVlKS90b29scy9ib290Y29uZmlnL2Jvb3Rjb25maWcgLUMgJFx1MDAzYyBcdTAwM2UgJEBcbiYjNDM7XG4mIzQzO3RhcmdldHMgJiM0Mzs9IGVtYmVkZGVkX2NtZGxpbmUuYmluXG4mIzQzOyQob2JqKS9lbWJlZGRlZF9jbWRsaW5lLmJpbjogJChvYmopL2RlZmF1bHQuYmNvbmYgJChvYmp0cmVlKS90b29scy9ib290Y29uZmlnL2Jvb3Rjb25maWcgRk9SQ0VcbiYjNDM7XHQkKGNhbGwgaWZfY2hhbmdlZCxyZW5kZXJfY21kbGluZSlcbiYjNDM7XG4gb2JqLSQoQ09ORklHX1JCVFJFRV9URVNUKSAmIzQzOz0gcmJ0cmVlX3Rlc3Qub1xuIG9iai0kKENPTkZJR19JTlRFUlZBTF9UUkVFX1RFU1QpICYjNDM7PSBpbnRlcnZhbF90cmVlX3Rlc3Qub1xuIFxuZGlmZiAtLWdpdCBhL2xpYi9ib290Y29uZmlnLmMgYi9saWIvYm9vdGNvbmZpZy5jXG5pbmRleCBmNDQ1Yjc3MDNmZGQ5Ni4uODljODhlMzU5MTc5ZjAgMTAwNjQ0XG4tLS0gYS9saWIvYm9vdGNvbmZpZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvYm9vdGNvbmZpZy5jXG5AQCAtMTksOSAmIzQzOzE5LDEzIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NhY2hlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGVwYXJhbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByaW50ay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3ByaW50Zi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtYmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9zZXR1cC5oXHUwMDNlXHRcdC8qIENPTU1BTkRfTElORV9TSVpFICovXG4gXG4gI2lmZGVmIENPTkZJR19CT09UX0NPTkZJR19FTUJFRFxuIC8qIGVtYmVkZGVkX2Jvb3Rjb25maWdfZGF0YSBpcyBkZWZpbmVkIGluIGJvb3Rjb25maWctZGF0YS5TICovXG5AQCAtMzQsNyAmIzQzOzM4LDEyOSBAQCBjb25zdCBjaGFyICogX19pbml0IHhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhzaXplX3QgKnNpemUpXG4gXHRyZXR1cm4gKCpzaXplKSA/IGVtYmVkZGVkX2Jvb3Rjb25maWdfZGF0YSA6IE5VTEw7XG4gfVxuICNlbmRpZlxuLSNlbmRpZlxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuJiM0MzsvKiBlbWJlZGRlZF9rZXJuZWxfY21kbGluZSBpcyBkZWZpbmVkIGluIGVtYmVkZGVkLWNtZGxpbmUuUyAqL1xuJiM0MztleHRlcm4gX192aXNpYmxlIGNvbnN0IGNoYXIgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVbXTtcbiYjNDM7ZXh0ZXJuIF9fdmlzaWJsZSBjb25zdCBjaGFyIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZFtdO1xuJiM0MztcbiYjNDM7LyogU2V0IG9uY2UgdGhlIGVtYmVkZGVkIGNtZGxpbmUgaGFzIGFjdHVhbGx5IGJlZW4gcHJlcGVuZGVkLiAqL1xuJiM0MztzdGF0aWMgYm9vbCB4YmNfY21kbGluZV9hcHBsaWVkIF9faW5pdGRhdGE7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBzdHJfcHJlcGVuZCgpIC0gUHJlcGVuZCBAc3JjIGluIGZyb250IG9mIHRoZSBzdHJpbmcgaW4gQGRzdCwgaW4gcGxhY2VcbiYjNDM7ICogQGRzdDogTlVMLXRlcm1pbmF0ZWQgZGVzdGluYXRpb24gYnVmZmVyLCBjdXJyZW50bHkgQGRzdF9sZW4gYnl0ZXMgbG9uZ1xuJiM0MzsgKiBAZHN0X2xlbjogbGVuZ3RoIG9mIHRoZSBjdXJyZW50IEBkc3Qgc3RyaW5nIChleGNsdWRpbmcgaXRzIE5VTClcbiYjNDM7ICogQHNyYzogYnl0ZXMgdG8gcHJlcGVuZCAobm90IE5VTC10ZXJtaW5hdGVkKVxuJiM0MzsgKiBAc3JjX2xlbjogbnVtYmVyIG9mIGJ5dGVzIGZyb20gQHNyYyB0byBwcmVwZW5kXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBjYWxsZXIgbXVzdCBndWFyYW50ZWUgQGRzdCBoYXMgcm9vbSBmb3Igc3JjX2xlbiAmIzQzOyBkc3RfbGVuICYjNDM7IDEgYnl0ZXMuXG4mIzQzOyAqIE1vdmluZyBkc3RfbGVuICYjNDM7IDEgYnl0ZXMgY2FycmllcyBAZHN0JiMzOTtzIE5VTCB0ZXJtaW5hdG9yIHRvbywgc28gYW4gZW1wdHlcbiYjNDM7ICogQGRzdCBuZWVkcyBubyBzcGVjaWFsIGNhc2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgc3RyX3ByZXBlbmQoY2hhciAqZHN0LCBzaXplX3QgZHN0X2xlbixcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY19sZW4pXG4mIzQzO3tcbiYjNDM7XHRtZW1tb3ZlKGRzdCAmIzQzOyBzcmNfbGVuLCBkc3QsIGRzdF9sZW4gJiM0MzsgMSk7XG4mIzQzO1x0bWVtY3B5KGRzdCwgc3JjLCBzcmNfbGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSAtIFByZXBlbmQgZW1iZWRkZWQgYm9vdGNvbmZpZyBjbWRsaW5lXG4mIzQzOyAqIEBkc3Q6IGNtZGxpbmUgYnVmZmVyIHRvIHByZXBlbmQgaW50byAobXVzdCBhbHJlYWR5IGNvbnRhaW4gYSBOVUwgYnl0ZSlcbiYjNDM7ICogQHNpemU6IHRvdGFsIGNhcGFjaXR5IG9mIEBkc3QgaW4gYnl0ZXNcbiYjNDM7ICpcbiYjNDM7ICogUHJlcGVuZCB0aGUgYnVpbGQtdGltZS1yZW5kZXJlZCBcJiMzNDtrZXJuZWxcJiMzNDsgc3VidHJlZSBvZiB0aGUgZW1iZWRkZWRcbiYjNDM7ICogYm9vdGNvbmZpZyB0byBAZHN0LiBUaGUgcmVuZGVyZWQgc3RyaW5nIGFscmVhZHkgZW5kcyB3aXRoIGEgc2luZ2xlXG4mIzQzOyAqIHNwYWNlICh0aGUgeGJjX3NucHJpbnRfY21kbGluZSgpIGludmFyaWFudCksIHdoaWNoIHNlcnZlcyBhcyB0aGVcbiYjNDM7ICogc2VwYXJhdG9yIGJldHdlZW4gdGhlIGVtYmVkZGVkIGtleXMgYW5kIGFueSBleGlzdGluZyBjb250ZW50IG9mIEBkc3QuXG4mIzQzOyAqIE9uIG92ZXJmbG93LCBsb2cgYW4gZXJyb3IgYW5kIGxlYXZlIEBkc3QgdW50b3VjaGVkIHJhdGhlciB0aGFuXG4mIzQzOyAqIHNpbGVudGx5IHRydW5jYXRpbmc6IGJvb3Rpbmcgd2l0aG91dCB0aGUgZW1iZWRkZWQgdmFsdWVzIGlzIGJldHRlclxuJiM0MzsgKiB0aGFuIHJlZnVzaW5nIHRvIGJvb3QsIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSB0ZWxscyB0aGUgdXNlciB3aHlcbiYjNDM7ICogdGhlaXIgZW1iZWRkZWQga2V5cyBhcmUgbWlzc2luZy5cbiYjNDM7ICpcbiYjNDM7ICogSW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gc2V0dXBfYXJjaCgpIGJlZm9yZSBwYXJzZV9lYXJseV9wYXJhbSgpIHNvXG4mIzQzOyAqIHRoYXQgZWFybHlfcGFyYW0oKSBoYW5kbGVycyBzZWUgdGhlIGVtYmVkZGVkIHZhbHVlcy5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBlbWJlZF9sZW4gPSBlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmQgLSBlbWJlZGRlZF9rZXJuZWxfY21kbGluZTtcbiYjNDM7XHRzaXplX3QgZHN0X2xlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzaXplIHx8IGVtYmVkX2xlbiBcdTAwM2M9IDEpXHQvKiB0cmFpbGluZyBOVUwgb25seSAqL1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGVtYmVkX2xlbi0tO1x0XHRcdC8qIGV4Y2x1ZGUgdHJhaWxpbmcgTlVMIGJ5dGUgKi9cbiYjNDM7XG4mIzQzO1x0ZHN0X2xlbiA9IHN0cm5sZW4oZHN0LCBzaXplKTtcbiYjNDM7XHRpZiAoZW1iZWRfbGVuICYjNDM7IGRzdF9sZW4gJiM0MzsgMSBcdTAwM2Ugc2l6ZSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O2VtYmVkZGVkIGJvb3Rjb25maWcgY21kbGluZSAoJXp1IGJ5dGVzKSBkb2VzIG5vdCBmaXQgaW4gQ09NTUFORF9MSU5FX1NJWkUgd2l0aCAlenUgYnl0ZXMgYWxyZWFkeSB1c2VkOyBpZ25vcmluZyBlbWJlZGRlZCB2YWx1ZXNcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgZW1iZWRfbGVuLCBkc3RfbGVuKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN0cl9wcmVwZW5kKGRzdCwgZHN0X2xlbiwgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmUsIGVtYmVkX2xlbik7XG4mIzQzO1x0eGJjX2NtZGxpbmVfYXBwbGllZCA9IHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkgLSBEaWQgdGhlIGVtYmVkZGVkIGNtZGxpbmUgZ2V0IHByZXBlbmRlZD9cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuIHRydWUgaWYgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIGFjdHVhbGx5IHByZXBlbmRlZCB0aGVcbiYjNDM7ICogZW1iZWRkZWQgXCYjMzQ7a2VybmVsXCYjMzQ7IHN1YnRyZWUuIHNldHVwX2Jvb3RfY29uZmlnKCkgdXNlcyB0aGlzIHRvIGF2b2lkXG4mIzQzOyAqIHJlbmRlcmluZyB0aGUgc2FtZSBrZXlzIGEgc2Vjb25kIHRpbWUuXG4mIzQzOyAqL1xuJiM0Mztib29sIF9faW5pdCB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geGJjX2NtZGxpbmVfYXBwbGllZDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcdC8qIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJRyAqL1xuJiM0MztcbiYjNDM7LyogcGFyc2VfYXJncygpIGNhbGxiYWNrOiBmbGFnIHdoZW4gdGhlIFwmIzM0O2Jvb3Rjb25maWdcJiMzNDsgcGFyYW1ldGVyIGlzIHByZXNlbnQuICovXG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGJvb3Rjb25maWdfb3B0aW4oY2hhciAqcGFyYW0sIGNoYXIgKnZhbCxcbiYjNDM7XHRcdFx0XHQgICBjb25zdCBjaGFyICp1bnVzZWQsIHZvaWQgKmFyZylcbiYjNDM7e1xuJiM0MztcdGlmICghc3RyY21wKHBhcmFtLCBcJiMzNDtib290Y29uZmlnXCYjMzQ7KSlcbiYjNDM7XHRcdCooYm9vbCAqKWFyZyA9IHRydWU7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkKCkgLSBXYXMgXCYjMzQ7Ym9vdGNvbmZpZ1wmIzM0OyBwYXNzZWQgb24gdGhlIGNtZGxpbmU/XG4mIzQzOyAqIEBib290X2NtZGxpbmU6IGtlcm5lbCBjb21tYW5kIGxpbmUgdG8gaW5zcGVjdCAobm90IG1vZGlmaWVkKVxuJiM0MzsgKiBAZW5kX29mZnNldDogaWYgbm9uLU5VTEwsIHNldCB0byB0aGUgb2Zmc2V0IG9mIHRoZSBpbml0IGFyZ3VtZW50cyB0aGF0XG4mIzQzOyAqXHRcdGZvbGxvdyBhIFwmIzM0Oy0tXCYjMzQ7IHNlcGFyYXRvciwgb3IgMCB3aGVuIHRoZXJlIGlzIG5vbmVcbiYjNDM7ICpcbiYjNDM7ICogUGFyc2UgYSBwcml2YXRlIGNvcHkgb2YgQGJvb3RfY21kbGluZSAocGFyc2VfYXJncygpIGlzIGRlc3RydWN0aXZlKSBhbmRcbiYjNDM7ICogcmVwb3J0IHdoZXRoZXIgXCYjMzQ7Ym9vdGNvbmZpZ1wmIzM0OyBpcyBwcmVzZW50IGJlZm9yZSB0aGUgXCYjMzQ7LS1cJiMzNDsgc2VwYXJhdG9yLlxuJiM0MzsgKiBzZXR1cF9hcmNoKCkgdXNlcyB0aGlzIHRvIGdhdGUgcHJlcGVuZGluZyB0aGUgYnVpbGQtdGltZSBlbWJlZGRlZCBjbWRsaW5lO1xuJiM0MzsgKiBzZXR1cF9ib290X2NvbmZpZygpIHVzZXMgaXQgZm9yIHRoZSBydW50aW1lIG9wdC1pbiBhbmQgdG8gbG9jYXRlIHRoZSBpbml0XG4mIzQzOyAqIGFyZ3VtZW50cyB2aWEgQGVuZF9vZmZzZXQuIFNoYXJpbmcgb25lIHBhcnNlciBrZWVwcyB0aGUgZWFybHkgYW5kIGxhdGVcbiYjNDM7ICogcGF0aHMgYWdyZWVpbmcgb24gd2hhdCBjb3VudHMgYXMgb3B0LWluLiBDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0UgaXMgbm90XG4mIzQzOyAqIGZvbGRlZCBpbiBoZXJlOyBjYWxsZXJzIGFwcGx5IGl0IHdoZXJlIHRoZXkgbmVlZCBpdC5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgX19pbml0IGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoY29uc3QgY2hhciAqYm9vdF9jbWRsaW5lLCBpbnQgKmVuZF9vZmZzZXQpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgY2hhciB0bXBfY21kbGluZVtDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTtcbiYjNDM7XHRib29sIGZvdW5kID0gZmFsc2U7XG4mIzQzO1x0Y2hhciAqZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoZW5kX29mZnNldClcbiYjNDM7XHRcdCplbmRfb2Zmc2V0ID0gMDtcbiYjNDM7XG4mIzQzO1x0c3Ryc2NweSh0bXBfY21kbGluZSwgYm9vdF9jbWRsaW5lLCBDT01NQU5EX0xJTkVfU0laRSk7XG4mIzQzO1x0ZXJyID0gcGFyc2VfYXJncyhcJiMzNDtib290Y29uZmlnXCYjMzQ7LCB0bXBfY21kbGluZSwgTlVMTCwgMCwgMCwgMCxcbiYjNDM7XHRcdFx0IFx1MDAyNmZvdW5kLCBib290Y29uZmlnX29wdGluKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGVycikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIHBhcnNlX2FyZ3MoKSBzdG9wcyBhdCBcJiMzNDstLVwmIzM0OyBhbmQgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgcmVzdC4gKi9cbiYjNDM7XHRpZiAoZW5kX29mZnNldCBcdTAwMjZcdTAwMjYgZXJyKVxuJiM0MztcdFx0KmVuZF9vZmZzZXQgPSBlcnIgLSB0bXBfY21kbGluZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZvdW5kO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcdC8qIF9fS0VSTkVMX18gKi9cbiBcbiAvKlxuICAqIEV4dHJhIEJvb3QgQ29uZmlnIChYQkMpIGlzIGdpdmVuIGFzIHRyZWUtc3RydWN0dXJlZCBhc2NpaSB0ZXh0IG9mXG5AQCAtNDI3LDExICYjNDM7NTUzLDMwIEBAIHN0YXRpYyBjaGFyIHhiY19uYW1lYnVmW1hCQ19LRVlMRU5fTUFYXSBfX2luaXRkYXRhO1xuIGludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpXG4ge1xuIFx0c3RydWN0IHhiY19ub2RlICprbm9kZSwgKnZub2RlO1xuLVx0Y2hhciAqZW5kID0gYnVmICYjNDM7IHNpemU7XG4gXHRjb25zdCBjaGFyICp2YWwsICpxO1xuJiM0MztcdHNpemVfdCBsZW4gPSAwO1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRyYWNrIHRoZSBydW5uaW5nIHdyaXR0ZW4gbGVuZ3RoIHJhdGhlciB0aGFuIGFkdmFuY2luZyBAYnVmLCBzbyB3ZVxuJiM0MztcdCAqIG5ldmVyIGZvcm0gXCYjMzQ7YnVmICYjNDM7IHNpemVcJiMzNDsgb3IgXCYjMzQ7YnVmICYjNDM7PSByZXRcJiMzNDsgd2hpbGUgQGJ1ZiBpcyBOVUxMICh0aGVcbiYjNDM7XHQgKiBzaXplLXByb2JlIGNhbGwgcGFzc2VzIGJ1Zj1OVUxMLCBzaXplPTApLiBOVUxMIHBvaW50ZXIgYXJpdGhtZXRpY1xuJiM0MztcdCAqIGlzIHVuZGVmaW5lZCBiZWhhdmlvciBhbmQgdHJpcHMgaG9zdCBVQlNhbiAvIEZPUlRJRllfU09VUkNFIHdoZW5cbiYjNDM7XHQgKiB0aGlzIHJlbmRlcmVyIHJ1bnMgYXQga2VybmVsIGJ1aWxkIHRpbWUuIHNucHJpbnRmKE5VTEwsIDAsIC4uLilcbiYjNDM7XHQgKiBpdHNlbGYgaXMgd2VsbCBkZWZpbmVkIGFuZCByZXR1cm5zIHRoZSB3b3VsZC1iZSBsZW5ndGguXG4mIzQzO1x0ICovXG4gXHR4YmNfbm9kZV9mb3JfZWFjaF9rZXlfdmFsdWUocm9vdCwga25vZGUsIHZhbCkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEFuIGVtcHR5IG9yIHZhbHVlLW9ubHkgQHJvb3QgKGUuZy4gXCYjMzQ7a2VybmVsIHt9XCYjMzQ7IG9yXG4mIzQzO1x0XHQgKiBcJiMzNDtrZXJuZWwgPSB4XCYjMzQ7LCBwb3NzaWJseSBhbG9uZ3NpZGUgXCYjMzQ7a2VybmVsLmZvbyA9IGJhclwmIzM0OylcbiYjNDM7XHRcdCAqIHlpZWxkcyBAcm9vdCBpdHNlbGYgaGVyZS4gU2tpcCBpdDogY29tcG9zaW5nIGEga2V5IGZvciBpdFxuJiM0MztcdFx0ICogd291bGQgZmFpbCB3aXRoIC1FSU5WQUwsIHlldCBhbnkgcmVhbCBkZXNjZW5kYW50IGtleXMgbXVzdFxuJiM0MztcdFx0ICogc3RpbGwgYmUgcmVuZGVyZWQuIEFuIGVudGlyZWx5IGVtcHR5IHN1YnRyZWUgdGhlbiByZW5kZXJzXG4mIzQzO1x0XHQgKiBub3RoaW5nIGFuZCByZXR1cm5zIDAgcmF0aGVyIHRoYW4gYW4gZXJyb3IuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChrbm9kZSA9PSByb290KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdHJldCA9IHhiY19ub2RlX2NvbXBvc2Vfa2V5X2FmdGVyKHJvb3QsIGtub2RlLFxuIFx0XHRcdFx0XHR4YmNfbmFtZWJ1ZiwgWEJDX0tFWUxFTl9NQVgpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuQEAgLTQzOSwxMCAmIzQzOzU4NCwxMSBAQCBpbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KVxuIFxuIFx0XHR2bm9kZSA9IHhiY19ub2RlX2dldF9jaGlsZChrbm9kZSk7XG4gXHRcdGlmICghdm5vZGUpIHtcbi1cdFx0XHRyZXQgPSBzbnByaW50ZihidWYsIHJlc3QoYnVmLCBlbmQpLCBcJiMzNDslcyBcJiMzNDssIHhiY19uYW1lYnVmKTtcbiYjNDM7XHRcdFx0cmV0ID0gc25wcmludGYoYnVmID8gYnVmICYjNDM7IGxlbiA6IE5VTEwsIHJlc3QobGVuLCBzaXplKSxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7JXMgXCYjMzQ7LCB4YmNfbmFtZWJ1Zik7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdFx0YnVmICYjNDM7PSByZXQ7XG4mIzQzO1x0XHRcdGxlbiAmIzQzOz0gcmV0O1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdHhiY19hcnJheV9mb3JfZWFjaF92YWx1ZSh2bm9kZSwgdmFsKSB7XG5AQCAtNDUyLDE1ICYjNDM7NTk4LDE1IEBAIGludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpXG4gXHRcdFx0ICogd2hpdGVzcGFjZS5cbiBcdFx0XHQgKi9cbiBcdFx0XHRxID0gc3RycGJyayh2YWwsIFwmIzM0OyBcXHRcXHJcXG5cJiMzNDspID8gXCYjMzQ7XFxcJiMzNDtcJiMzNDsgOiBcJiMzNDtcJiMzNDs7XG4tXHRcdFx0cmV0ID0gc25wcmludGYoYnVmLCByZXN0KGJ1ZiwgZW5kKSwgXCYjMzQ7JXM9JXMlcyVzIFwmIzM0Oyxcbi1cdFx0XHRcdCAgICAgICB4YmNfbmFtZWJ1ZiwgcSwgdmFsLCBxKTtcbiYjNDM7XHRcdFx0cmV0ID0gc25wcmludGYoYnVmID8gYnVmICYjNDM7IGxlbiA6IE5VTEwsIHJlc3QobGVuLCBzaXplKSxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7JXM9JXMlcyVzIFwmIzM0OywgeGJjX25hbWVidWYsIHEsIHZhbCwgcSk7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdFx0YnVmICYjNDM7PSByZXQ7XG4mIzQzO1x0XHRcdGxlbiAmIzQzOz0gcmV0O1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRyZXR1cm4gYnVmIC0gKGVuZCAtIHNpemUpO1xuJiM0MztcdHJldHVybiBsZW47XG4gfVxuICN1bmRlZiByZXN0XG4gXG5kaWZmIC0tZ2l0IGEvbGliL2VtYmVkZGVkLWNtZGxpbmUuUyBiL2xpYi9lbWJlZGRlZC1jbWRsaW5lLlNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYmRhODFiNGE0MmJlYWZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9lbWJlZGRlZC1jbWRsaW5lLlNcbkBAIC0wLDAgJiM0MzsxLDE2IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOy8qXG4mIzQzOyAqIEVtYmVkIHRoZSBidWlsZC10aW1lLXJlbmRlcmVkIGJvb3Rjb25maWcgXCYjMzQ7a2VybmVsXCYjMzQ7IHN1YnRyZWUgYXMgYSBmbGF0XG4mIzQzOyAqIGNtZGxpbmUgc3RyaW5nLiBzZXR1cF9hcmNoKCkgcHJlcGVuZHMgdGhpcyB0byBib290X2NvbW1hbmRfbGluZSBvblxuJiM0MzsgKiBhcmNoaXRlY3R1cmVzIHRoYXQgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUcuXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlc1xuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcdC5zZWN0aW9uIC5pbml0LnJvZGF0YS5lbWJlZF9jbWRsaW5lLCBcJiMzNDthXCYjMzQ7LCAlcHJvZ2JpdHNcbiYjNDM7XHQuZ2xvYmFsIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lXG4mIzQzO2VtYmVkZGVkX2tlcm5lbF9jbWRsaW5lOlxuJiM0MztcdC5pbmNiaW4gXCYjMzQ7bGliL2VtYmVkZGVkX2NtZGxpbmUuYmluXCYjMzQ7XG4mIzQzO1x0LmJ5dGUgMFxuJiM0MztcdC5nbG9iYWwgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kXG4mIzQzO2VtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZDpcbmRpZmYgLS1naXQgYS90b29scy9ib290Y29uZmlnL01ha2VmaWxlIGIvdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZVxuaW5kZXggOTBlYjQ3YzlkOGRlNjcuLjNjYjgwNjZkNTE0MWJiIDEwMDY0NFxuLS0tIGEvdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZVxuQEAgLTE1LDcgJiM0MzsxNSw3IEBAIG92ZXJyaWRlIENGTEFHUyAmIzQzOz0gLVdhbGwgLWcgLUkkKENVUkRJUikvaW5jbHVkZVxuIEFMTF9UQVJHRVRTIDo9IGJvb3Rjb25maWdcbiBBTExfUFJPR1JBTVMgOj0gJChwYXRzdWJzdCAlLCQoT1VUUFVUKSUsJChBTExfVEFSR0VUUykpXG4gXG4tYWxsOiAkKEFMTF9QUk9HUkFNUykgdGVzdFxuJiM0MzthbGw6ICQoQUxMX1BST0dSQU1TKVxuIFxuICQoT1VUUFVUKWJvb3Rjb25maWc6IG1haW4uYyBpbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaCAkKExJQlNSQylcbiBcdCQoQ0MpICQoZmlsdGVyICUuYywkXikgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEBcbkBAIC0yNyw0ICYjNDM7MjcsNCBAQCBpbnN0YWxsOiAkKEFMTF9QUk9HUkFNUylcbiBcdGluc3RhbGwgJChPVVRQVVQpYm9vdGNvbmZpZyAkKERFU1RESVIpJChiaW5kaXIpXG4gXG4gY2xlYW46XG4tXHQkKFJNKSAtZiAkKE9VVFBVVCkqLm8gJChBTExfUFJPR1JBTVMpXG4mIzQzO1x0cm0gLWYgJChPVVRQVVQpKi5vICQoQUxMX1BST0dSQU1TKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBidWlsZC10aW1lIGZlYXR1cmUgdG8gcmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gQWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUga2VybmVsIGFyZSBjb25maW5lZCB0byBgX19pbml0YCBmdW5jdGlvbnMgKGUuZy4sIGBzZXR1cF9hcmNoYCwgYHNldHVwX2Jvb3RfY29uZmlnYCwgYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgKSwgd2hpY2ggcnVuIG9ubHkgb25jZSBkdXJpbmcgZWFybHkgYm9vdCB3aXRoIHN0YXRpYyBpbnB1dHMgKGNvbXBpbGUtdGltZSBlbWJlZGRlZCBmaWxlcyBhbmQgdGhlIGJvb3Rsb2FkZXIgY29tbWFuZCBsaW5lKS4gU3l6a2FsbGVyIGNhbm5vdCBtdXRhdGUgdGhlc2UgaW5wdXRzIG9yIHJlYWNoIHRoaXMgY29kZSBkdXJpbmcgcnVudGltZSBzeXNjYWxsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMTgxZDMwMWM5YmQwNzZjZWFiNjM1YTQ3MzdlOGJmNWM2YTI0NWUxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdW4gMjYgMTg6MTU6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdAppbmRleCBmNzEyNzU4NDcyZDVjNi4uM2Q2NDEyNDU4YzhiNjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdApAQCAtMjM0LDYgJiM0MzsyMzQsODcgQEAgS2NvbmZpZyBvcHRpb24gc2VsZWN0ZWQuCiBOb3RlIHRoYXQgZXZlbiBpZiB5b3Ugc2V0IHRoaXMgb3B0aW9uLCB5b3UgY2FuIG92ZXJyaWRlIHRoZSBlbWJlZGRlZAogYm9vdGNvbmZpZyBieSBhbm90aGVyIGJvb3Rjb25maWcgd2hpY2ggYXR0YWNoZWQgdG8gdGhlIGluaXRyZC4KIAomIzQzO1JlbmRlcmluZyBFbWJlZGRlZCBrZXJuZWwuKiBLZXlzIGF0IEJ1aWxkIFRpbWUKJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7QnkgZGVmYXVsdCwgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgKGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEPXlgYCkgaXMKJiM0MztwYXJzZWQgYXQgcnVudGltZSwgYWZ0ZXIgYGBwYXJzZV9lYXJseV9wYXJhbSgpYGAgaGFzIGFscmVhZHkgcnVuLiBFYXJseQomIzQzO3BhcmFtZXRlciBoYW5kbGVycyAoYGBtZW09YGAsIGBgZWFybHljb249YGAsIGBgbG9nbGV2ZWw9YGAsIC4uLikgdGhlcmVmb3JlCiYjNDM7Y2Fubm90IHNlZSB2YWx1ZXMgc3VwcGxpZWQgdmlhIHRoZSBlbWJlZGRlZCBgYGtlcm5lbGBgIHN1YnRyZWUuCiYjNDM7CiYjNDM7YGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgYCByZXNvbHZlcyB0aGlzIGJ5IHJlbmRlcmluZyB0aGUKJiM0MztgYGtlcm5lbGBgIHN1YnRyZWUgb2YgYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURfRklMRWBgIGludG8gYSBmbGF0IGNtZGxpbmUKJiM0MztzdHJpbmcgYXQga2VybmVsIGJ1aWxkIHRpbWUgKHZpYSBgYHRvb2xzL2Jvb3Rjb25maWcgLUNgYCkgYW5kIHByZXBlbmRpbmcKJiM0MztpdCB0byBgYGJvb3RfY29tbWFuZF9saW5lYGAgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cCwgc28gdGhlIGtleXMKJiM0MzthcmUgdmlzaWJsZSB0byBgYHBhcnNlX2Vhcmx5X3BhcmFtKClgYC4KJiM0MzsKJiM0MztUaGUgb3B0aW9uIHJlcXVpcmVzIGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEPXlgYCwgYSBub24tZW1wdHkKJiM0MztgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRF9GSUxFYGAsIGBgQ09ORklHX0NNRExJTkVgYCB0byBiZSBlbXB0eSwgYW5kCiYjNDM7YW4gYXJjaGl0ZWN0dXJlIHRoYXQgc2VsZWN0cyBgYENPTkZJR19BUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHYGAuCiYjNDM7Q3VycmVudGx5IG9ubHkgeDg2IHNlbGVjdHMgaXQ7IG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgdGhlIGVtYmVkZGVkCiYjNDM7Ym9vdGNvbmZpZyBzdGlsbCB3b3JrcywgYnV0IG9ubHkgdGhyb3VnaCB0aGUgbGF0ZSBydW50aW1lIHBhcnNlci4KJiM0MzsKJiM0MztUaGUgc2FtZSBgYGJvb3Rjb25maWdgYCBvcHQtaW4gYXBwbGllcyBhcyBlbHNld2hlcmU6IHRoZSByZW5kZXJlZCBrZXlzCiYjNDM7YXJlIHByZXBlbmRlZCBvbmx5IHdoZW4gYGBib290Y29uZmlnYGAgKGluIGFueSBmb3JtKSBhcHBlYXJzIG9uIHRoZQomIzQzO2tlcm5lbCBjb21tYW5kIGxpbmUsIG9yIHdoZW4gYGBDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0VgYCBpcyBzZXQsIHdoaWNoCiYjNDM7ZGVmYXVsdHMgdG8gYGB5YGAgd2hlbiBgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRGBgIGlzIHNldC4KJiM0MzsKJiM0MztGb3IgZXhhbXBsZSwgZ2l2ZW46OgomIzQzOwomIzQzOyBrZXJuZWwgewomIzQzOyAgIGxvZ2xldmVsID0gNwomIzQzOyAgIG1lbSA9IDRHCiYjNDM7IH0KJiM0MzsKJiM0Mzt0aGUga2VybmVsIGJvb3RzIGFzIGlmIGBgbG9nbGV2ZWw9NyBtZW09NEdgYCBoYWQgYmVlbiBwcmVwZW5kZWQgdG8gdGhlCiYjNDM7Ym9vdGxvYWRlciBjb21tYW5kIGxpbmUsIHdpdGggdGhlIHZhbHVlcyB2aXNpYmxlIHRvIGVhcmx5LXBhcnNlZAomIzQzO2hhbmRsZXJzLiBDb21tYS1zZXBhcmF0ZWQgdmFsdWVzIGFyZSBzdGlsbCBleHBhbmRlZCBpbnRvIG11bHRpcGxlCiYjNDM7Y21kbGluZSBlbnRyaWVzIHBlciB0aGUgYm9vdGNvbmZpZyBhcnJheSBjb252ZW50aW9uIC0tIHRoZSBlbWJlZGRlZAomIzQzO2Bga2VybmVsLmVhcmx5Y29uID0gJiMzNDt1YXJ0ODI1MCxpbywweDNmOCYjMzQ7YGAgbXVzdCBiZSBxdW90ZWQgdG8gbGFuZCBhcyBhCiYjNDM7c2luZ2xlIGBgZWFybHljb249YGAgZW50cnksIGV4YWN0bHkgYXMgZm9yIHRoZSBydW50aW1lIHBhcnNlci4KJiM0MzsKJiM0MztJZiB0aGUgcmVuZGVyZWQgc3RyaW5nIHdvdWxkIG5vdCBmaXQgaW4gYGBDT01NQU5EX0xJTkVfU0laRWBgIHRvZ2V0aGVyCiYjNDM7d2l0aCB0aGUgZXhpc3RpbmcgY29tbWFuZCBsaW5lLCB0aGUgcHJlcGVuZCBpcyBza2lwcGVkIGFuZCBhbiBlcnJvciBpcwomIzQzO2xvZ2dlZCwgc28gYW4gb3ZlcnNpemVkIGVtYmVkZGVkIGJvb3Rjb25maWcgY2Fubm90IGJyaWNrIGEgYm9vdC4KJiM0MzsKJiM0MztJbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbW1hbmQgbGluZSBhbmQgYm9vdGNvbmZpZyBzb3VyY2VzCiYjNDM7fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgomIzQzOwomIzQzO1dpdGggYGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUc9eWBgIHRoZSByZW5kZXJlZCBgYGtlcm5lbGBgCiYjNDM7c3VidHJlZSBiZWhhdmVzIGxpa2UgYSBidWlsZC10aW1lIGNvbW1hbmQgbGluZSAoc2ltaWxhciB0bwomIzQzO2BgQ09ORklHX0NNRExJTkVgYCksIG5vdCBsaWtlIGEgYm9vdGNvbmZpZyBzb3VyY2UuIEl0IGlzIHByZXBlbmRlZCB0bwomIzQzO2BgYm9vdF9jb21tYW5kX2xpbmVgYCBpbiBgYHNldHVwX2FyY2goKWBgLCBiZWZvcmUgYGBwYXJzZV9lYXJseV9wYXJhbSgpYGAKJiM0MzthbmQgbG9uZyBiZWZvcmUgdGhlIHJ1bnRpbWUgcGFyc2VyIGxvb2tzIGF0IGFuIGluaXRyZC4gT3B0aW9ucyBjYW4gcmVhY2gKJiM0Mzt0aGUga2VybmVsIGZyb20gdXAgdG8gZm91ciBwbGFjZXM6CiYjNDM7CiYjNDM7LSBCb290bG9hZGVyIGNvbW1hbmQgbGluZTogdGhlIGFyZ3VtZW50cyB0aGUgYm9vdCBsb2FkZXIgcGFzc2VzLiBUaGUKJiM0MzsgIGVtYmVkZGVkIGNtZGxpbmUgaXMgcHJlcGVuZGVkIGluIGZyb250IG9mIHRoZW0sIHNvIGZvciBsYXN0LW9uZS13aW5zCiYjNDM7ICBwYXJhbWV0ZXJzIGEgYm9vdGxvYWRlciBvcHRpb24gc3RpbGwgb3ZlcnJpZGVzIHRoZSBlbWJlZGRlZCB2YWx1ZS4KJiM0MzsgIFZpc2libGUgaW4gL3Byb2MvY21kbGluZS4KJiM0MzstIEVtYmVkZGVkIGNtZGxpbmUgKHRoaXMgb3B0aW9uKTogdGhlIHJlbmRlcmVkIGBga2VybmVsYGAgc3VidHJlZSwKJiM0MzsgIHByZXBlbmRlZCBlYXJseSBzbyBpdCBpcyBzZWVuIGJ5IGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgLiBWaXNpYmxlIGluCiYjNDM7ICAvcHJvYy9jbWRsaW5lLgomIzQzOy0gSW5pdHJkIGJvb3Rjb25maWc6IHBhcnNlZCBsYXRlIGluIGBgc2V0dXBfYm9vdF9jb25maWcoKWBgOyBpdHMKJiM0MzsgIGBga2VybmVsYGAga2V5cyBhcmUgcGxhY2VkIGFoZWFkIG9mIGBgYm9vdF9jb21tYW5kX2xpbmVgYCwgaS5lLiBiZWZvcmUKJiM0MzsgIHRoZSBlbWJlZGRlZCBjbWRsaW5lLCBzbyBsYXN0LXdpbnMgZmF2b3JzIHRoZSBlbWJlZGRlZCB2YWx1ZXMuIEFzIGEKJiM0MzsgIGJvb3Rjb25maWcgc291cmNlLCBhbiBpbml0cmQgYm9vdGNvbmZpZyBzdGlsbCByZXBsYWNlcyB0aGUgZW1iZWRkZWQKJiM0MzsgIGJvb3Rjb25maWcuIFZpc2libGUgaW4gL3Byb2MvY21kbGluZSBhbmQgL3Byb2MvYm9vdGNvbmZpZy4KJiM0MzstIEVtYmVkZGVkIGJvb3Rjb25maWcgKHJ1bnRpbWUpOiBwYXJzZWQgbGF0ZSwgb25seSB3aGVuIG5vIGluaXRyZAomIzQzOyAgYm9vdGNvbmZpZyBpcyBwcmVzZW50LiBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUgYW5kIC9wcm9jL2Jvb3Rjb25maWcuCiYjNDM7CiYjNDM7U28gd2l0aCB0aGlzIG9wdGlvbiB0aGUgZW1iZWRkZWQgYGBrZXJuZWwuKmBgIHZhbHVlcyB0YWtlIHByZWNlZGVuY2UKJiM0MztvdmVyIGFuIGluaXRyZCBib290Y29uZmlnJiMzOTtzIGBga2VybmVsLipgYCB2YWx1ZXM6IGZvciBlYXJseSBwYXJhbWV0ZXJzCiYjNDM7dGhlIGluaXRyZCBpcyBub3QgcGFyc2VkIHlldCwgYW5kIGZvciBvcmRpbmFyeSBwYXJhbWV0ZXJzIHRoZSBlbWJlZGRlZAomIzQzO2tleXMgbGFuZCBsYXRlciBpbiB0aGUgY29tbWFuZCBsaW5lLiBJZiB5b3UgbmVlZCBhbiBpbml0cmQgYm9vdGNvbmZpZyB0bwomIzQzO292ZXJyaWRlIHRoZSBlbWJlZGRlZCBgYGtlcm5lbC4qYGAga2V5cywgbGVhdmUgdGhpcyBvcHRpb24gb2ZmIGFuZCByZWx5CiYjNDM7b24gdGhlIHJ1bnRpbWUgcGFyc2VyLgomIzQzOwomIzQzO1RoZSByZW5kZXJlZCBzdHJpbmcgaXMgcGFydCBvZiB0aGUgY29tbWFuZCBsaW5lLCBzbyBpdCBhcHBlYXJzIGluCiYjNDM7L3Byb2MvY21kbGluZS4gSXQgaXMgZGVsaWJlcmF0ZWx5IG5vdCBzaG93biBpbiAvcHJvYy9ib290Y29uZmlnOiB0aGF0CiYjNDM7ZmlsZSBrZWVwcyByZXBvcnRpbmcgdGhlIHBhcnNlZCBib290Y29uZmlnIHRyZWUgLS0gdGhlIGluaXRyZCBib290Y29uZmlnCiYjNDM7aWYgcHJlc2VudCwgb3RoZXJ3aXNlIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIC0tIGluZGVwZW5kZW50IG9mIHdoZXRoZXIKJiM0MztidWlsZC10aW1lIGNtZGxpbmUgcmVuZGVyaW5nIGlzIGVuYWJsZWQuCiYjNDM7CiBLZXJuZWwgcGFyYW1ldGVycyB2aWEgQm9vdCBDb25maWcKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGJmOTczOTlkMzU3ZmEwLi40ODM0MDY1YTRiZjJmNyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTk4NDYsNiAmIzQzOzk4NDYsNyBAQCBGOglmcy9wcm9jL2Jvb3Rjb25maWcuYwogRjoJaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmgKIEY6CWxpYi9ib290Y29uZmlnLWRhdGEuUwogRjoJbGliL2Jvb3Rjb25maWcuYwomIzQzO0Y6CWxpYi9lbWJlZGRlZC1jbWRsaW5lLlMKIEY6CXRvb2xzL2Jvb3Rjb25maWcvKgogRjoJdG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzLyoKIApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCAxMmZkM2QyZDQ3YjU4Mi4uMzRmYjM1NzFiZWM4MWQgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL01ha2VmaWxlCkBAIC0xNTUyLDYgJiM0MzsxNTUyLDIyIEBAIHByZXBhcmU6IHRvb2xzL2JwZi9yZXNvbHZlX2J0ZmlkcwogZW5kaWYKIGVuZGlmCiAKJiM0MzsjIHRvb2xzL2Jvb3Rjb25maWcgcmVuZGVycyB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBpbnRvIGEgY21kbGluZSBhdCBidWlsZCB0aW1lLgomIzQzO2lmZGVmIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJRwomIzQzO3ByZXBhcmU6IHRvb2xzL2Jvb3Rjb25maWcKJiM0MztlbmRpZgomIzQzOwomIzQzOyMgdG9vbHMvYm9vdGNvbmZpZyBpcyBydW4gb24gdGhlIGJ1aWxkIGhvc3QgZHVyaW5nIHByZXBhcmUsIHNvIGZvcmNlIGEgaG9zdAomIzQzOyMgYmluYXJ5IGhlcmU7IGl0cyBvd24gTWFrZWZpbGUga2VlcHMgJChDQykgZm9yIHN0YW5kYWxvbmUgYW5kIGNyb3NzIGJ1aWxkcy4KJiM0MzsjIENST1NTX0NPTVBJTEU9IGlzIGNsZWFyZWQgc28gdG9vbHMvc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlIGRvZXMgbm90IGluamVjdAomIzQzOyMgdGhlIHRhcmdldCYjMzk7cyAtLXRhcmdldD0vLS1zeXNyb290PSBmbGFncyBpbnRvIHRoZSBob3N0IGNsYW5nIGludm9jYXRpb24gdW5kZXIKJiM0MzsjIExMVk09MSBjcm9zcyBidWlsZHMgKHdoaWNoIHdvdWxkIHByb2R1Y2UgYSB0YXJnZXQgYmluYXJ5IHRoYXQgZmFpbHMgdG8gZXhlYykuCiYjNDM7dG9vbHMvYm9vdGNvbmZpZzogZXhwb3J0IENDIDo9ICQoSE9TVENDKQomIzQzO3Rvb2xzL2Jvb3Rjb25maWc6IEZPUkNFCiYjNDM7CSQoUSlta2RpciAtcCAkKG9ianRyZWUpL3Rvb2xzCiYjNDM7CSQoUSkkKE1BS0UpIE89JChhYnNwYXRoICQob2JqdHJlZSkpIHN1YmRpcj10b29scyAtQyAkKHNyY3RyZWUpL3Rvb2xzLyBcCiYjNDM7CQlib290Y29uZmlnIENST1NTX0NPTVBJTEU9CiYjNDM7CiAjIFRoZSB0b29scyBidWlsZCBzeXN0ZW0gaXMgbm90IGEgcGFydCBvZiBLYnVpbGQgYW5kIHRlbmRzIHRvIGludHJvZHVjZQogIyBpdHMgb3duIHVuaXF1ZSBpc3N1ZXMuIElmIHlvdSBuZWVkIHRvIGludGVncmF0ZSBhIG5ldyB0b29sIGludG8gS2J1aWxkLAogIyBwbGVhc2UgY29uc2lkZXIgbG9jYXRpbmcgdGhhdCB0b29sIG91dHNpZGUgdGhlIHRvb2xzLyB0cmVlIGFuZCB1c2luZyB0aGUKQEAgLTE1NzgsNiAmIzQzOzE1OTQsMTUgQEAgaWZuZXEgKCQod2lsZGNhcmQgJChvYmp0b29sX08pKSwpCiAJJChRKSQoTUFLRSkgLXNDICQoYWJzX3NyY3RyZWUpL3Rvb2xzL29ianRvb2wgTz0kKG9ianRvb2xfTykgc3JjdHJlZT0kKGFic19zcmN0cmVlKSAkKHBhdHN1YnN0IG9ianRvb2xfJSwlLCRAKQogZW5kaWYKIAomIzQzO1BIT05ZICYjNDM7PSBib290Y29uZmlnX2NsZWFuCiYjNDM7CiYjNDM7Ym9vdGNvbmZpZ19PID0gJChhYnNwYXRoICQob2JqdHJlZSkpL3Rvb2xzL2Jvb3Rjb25maWcKJiM0MzsKJiM0Mztib290Y29uZmlnX2NsZWFuOgomIzQzO2lmbmVxICgkKHdpbGRjYXJkICQoYm9vdGNvbmZpZ19PKSksKQomIzQzOwkkKFEpJChNQUtFKSAtc0MgJChzcmN0cmVlKS90b29scy9ib290Y29uZmlnIE89JChib290Y29uZmlnX08pIGNsZWFuCiYjNDM7ZW5kaWYKJiM0MzsKIHRvb2xzLzogRk9SQ0UKIAkkKFEpbWtkaXIgLXAgJChvYmp0cmVlKS90b29scwogCSQoUSkkKE1BS0UpIE89JChhYnNwYXRoICQob2JqdHJlZSkpIHN1YmRpcj10b29scyAtQyAkKHNyY3RyZWUpL3Rvb2xzLwpAQCAtMTc1Myw3ICYjNDM7MTc3OCw3IEBAIHZtbGludXhjbGVhbjoKIAkkKFEpJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9saW5rLXZtbGludXguc2ggY2xlYW4KIAkkKFEpJChpZiAkKEFSQ0hfUE9TVExJTkspLCAkKE1BS0UpIC1mICQoQVJDSF9QT1NUTElOSykgY2xlYW4pCiAKLWNsZWFuOiBhcmNoY2xlYW4gdm1saW51eGNsZWFuIHJlc29sdmVfYnRmaWRzX2NsZWFuIG9ianRvb2xfY2xlYW4KJiM0MztjbGVhbjogYXJjaGNsZWFuIHZtbGludXhjbGVhbiByZXNvbHZlX2J0Zmlkc19jbGVhbiBvYmp0b29sX2NsZWFuIGJvb3Rjb25maWdfY2xlYW4KIAogIyBtcnByb3BlciAtIERlbGV0ZSBhbGwgZ2VuZXJhdGVkIGZpbGVzLCBpbmNsdWRpbmcgLmNvbmZpZwogIwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggYmRhZDkwZjIxMGU0YmYuLmZkOTc5ZTBiZTFmMGUwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTEyNyw2ICYjNDM7MTI3LDcgQEAgY29uZmlnIFg4NgogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX05VTUFfQkFMQU5DSU5HCWlmIFg4Nl82NAogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0tNQVBfTE9DQUxfRk9SQ0VfTUFQCWlmIE5SX0NQVVMgJmx0Oz0gNDA5NgogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0NGSQkJaWYgWDg2XzY0CiYjNDM7CXNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHCiAJc2VsZWN0IEFSQ0hfVVNFU19DRklfVFJBUFMJCWlmIFg4Nl82NCAmYW1wOyZhbXA7IENGSQogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0xUT19DTEFORwogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0xUT19DTEFOR19USElOCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IDQ2ODgyY2U3OWMzYTRkLi44OGIwNTVhNDY1OTFlZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKQEAgLTYsNiAmIzQzOzYsNyBAQAogICogcGFydHMgb2YgZWFybHkga2VybmVsIGluaXRpYWxpemF0aW9uLgogICovCiAjaW5jbHVkZSAmbHQ7bGludXgvYWNwaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ib290Y29uZmlnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29uc29sZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NwdS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NyYXNoX2R1bXAuaCZndDsKQEAgLTg4MCw3ICYjNDM7ODgxLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IHg4Nl9yZXBvcnRfbngodm9pZCkKICAqCiAgKiBOb3RlOiBPbiB4ODZfNjQsIGZpeG1hcHMgYXJlIHJlYWR5IGZvciB1c2UgZXZlbiBiZWZvcmUgdGhpcyBpcyBjYWxsZWQuCiAgKi8KLQogdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogewogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTkyNCw2ICYjNDM7OTI0LDE4IEBAIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcCkKIAlidWlsdGluX2NtZGxpbmVfYWRkZWQgPSB0cnVlOwogI2VuZGlmCiAKJiM0MzsjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHCiYjNDM7CS8qCiYjNDM7CSAqIFByZXBlbmQgdGhlIGJ1aWxkLXRpbWUtcmVuZGVyZWQgZW1iZWRkZWQgJiMzNDtrZXJuZWwmIzM0OyBrZXlzIGhlcmUgc28KJiM0MzsJICogcGFyc2VfZWFybHlfcGFyYW0oKSBiZWxvdyBzZWVzIHRoZW0sIHVzaW5nIHRoZSBzYW1lIG9wdC1pbiBhcyB0aGUKJiM0MzsJICogcnVudGltZSBwYXJzZXIsIHBsdXMgdGhlIGJ1aWxkLXRpbWUgQ09ORklHX0JPT1RfQ09ORklHX0ZPUkNFLgomIzQzOwkgKi8KJiM0MzsJaWYgKGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoYm9vdF9jb21tYW5kX2xpbmUsIE5VTEwpIHx8CiYjNDM7CSAgICBJU19FTkFCTEVEKENPTkZJR19CT09UX0NPTkZJR19GT1JDRSkpCiYjNDM7CQl4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGJvb3RfY29tbWFuZF9saW5lLAomIzQzOwkJCQkJICAgICBDT01NQU5EX0xJTkVfU0laRSk7CiYjNDM7I2VuZGlmCiYjNDM7CiAJc3Ryc2NweShjb21tYW5kX2xpbmUsIGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CiAJKmNtZGxpbmVfcCA9IGNvbW1hbmRfbGluZTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmggYi9pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaAppbmRleCAxYzdmM2I3NGZmY2YzOC4uZGVkYTUwNzUwMGRhMjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oCkBAIC0zMDgsNCAmIzQzOzMwOCwxOCBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhzaXplX3QgKnNpemUpCiB9CiAjZW5kaWYKIAomIzQzOy8qIEJvb3Rjb25maWcgb3B0LWluIGRldGVjdGlvbiwgc2hhcmVkIGJ5IHNldHVwX2FyY2goKSBhbmQgc2V0dXBfYm9vdF9jb25maWcoKSAqLwomIzQzOyNpZmRlZiBDT05GSUdfQk9PVF9DT05GSUcKJiM0Mztib29sIF9faW5pdCBib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkKGNvbnN0IGNoYXIgKmJvb3RfY21kbGluZSwgaW50ICplbmRfb2Zmc2V0KTsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsvKiBCdWlsZC10aW1lLXJlbmRlcmVkIGJvb3Rjb25maWcgY21kbGluZSBwcmVwZW5kZWQgaW4gc2V0dXBfYXJjaCgpICovCiYjNDM7I2lmZGVmIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJRwomIzQzO3ZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSk7CiYjNDM7Ym9vbCBfX2luaXQgeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCh2b2lkKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9CiYjNDM7I2VuZGlmCiYjNDM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCA1MjMwZDQ4NzliMWM4NC4uNTk4NjkwZWMzMTNhMjkgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9pbml0L0tjb25maWcKQEAgLTE1NjYsNiAmIzQzOzE1NjYsNDIgQEAgY29uZmlnIEJPT1RfQ09ORklHX0VNQkVEX0ZJTEUKIAkgIFRoaXMgYm9vdGNvbmZpZyB3aWxsIGJlIHVzZWQgaWYgdGhlcmUgaXMgbm8gaW5pdHJkIG9yIG5vIG90aGVyCiAJICBib290Y29uZmlnIGluIHRoZSBpbml0cmQuCiAKJiM0Mztjb25maWcgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJRwomIzQzOwlib29sCiYjNDM7CWhlbHAKJiM0MzsJICBTaWxlbnQgc3ltYm9sOyBubyBDIGNvZGUgcmVhZHMgaXQgZGlyZWN0bHkuIEFyY2hpdGVjdHVyZXMKJiM0MzsJICBzZWxlY3QgaXQgb25jZSB0aGVpciBzZXR1cF9hcmNoKCkgY2FsbHMKJiM0MzsJICB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKCkgYmVmb3JlIHBhcnNlX2Vhcmx5X3BhcmFtKCkuCiYjNDM7CSAgSXRzIG9ubHkgcm9sZSBpcyB0byBnYXRlIHRoZSB1c2VyLXZpc2libGUKJiM0MzsJICBDTURMSU5FX0ZST01fQk9PVENPTkZJRyBvcHRpb24gcGVyLWFyY2gsIHRoZSBzYW1lCiYjNDM7CSAgQVJDSF9TVVBQT1JUU18qIGlkaW9tIHVzZWQgYnkgQVJDSF9TVVBQT1JUU19DRkksIGV0Yy4KJiM0MzsKJiM0Mztjb25maWcgQ01ETElORV9GUk9NX0JPT1RDT05GSUcKJiM0MzsJYm9vbCAmIzM0O1JlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGFzIGtlcm5lbCBjbWRsaW5lIGF0IGJ1aWxkIHRpbWUmIzM0OwomIzQzOwlkZXBlbmRzIG9uIEJPT1RfQ09ORklHX0VNQkVEX0ZJTEUgIT0gJiMzNDsmIzM0OwomIzQzOwlkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUcKJiM0MzsJZGVwZW5kcyBvbiBDTURMSU5FID0gJiMzNDsmIzM0OwomIzQzOwlkZWZhdWx0IG4KJiM0MzsJaGVscAomIzQzOwkgIFJlbmRlciB0aGUgJiMzNDtrZXJuZWwmIzM0OyBzdWJ0cmVlIG9mIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIGZpbGUgaW50byBhCiYjNDM7CSAgZmxhdCBjbWRsaW5lIHN0cmluZyBhdCBrZXJuZWwgYnVpbGQgdGltZSBhbmQgcHJlcGVuZCBpdCB0bwomIzQzOwkgIGJvb3RfY29tbWFuZF9saW5lIGR1cmluZyBlYXJseSBhcmNoaXRlY3R1cmUgc2V0dXAuIFRoaXMgbWFrZXMKJiM0MzsJICBlYXJseV9wYXJhbSgpIGhhbmRsZXJzIChlLmcuIG1lbT0sIGVhcmx5Y29uPSwgbG9nbGV2ZWw9KSBzZWUgdGhlCiYjNDM7CSAgdmFsdWVzIHN1cHBsaWVkIHZpYSB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZy4KJiM0MzsKJiM0MzsJICBUaGUgcnVudGltZSBib290Y29uZmlnIHBhcnNlciBpcyB1bmFmZmVjdGVkLCBzbyB0cmVlLXN0cnVjdHVyZWQKJiM0MzsJICBjb25zdW1lcnMgc3VjaCBhcyBmdHJhY2UgYm9vdC10aW1lIHRyYWNpbmcga2VlcCB3b3JraW5nLgomIzQzOwomIzQzOwkgIE5vdGU6IHdoZW4gYW4gaW5pdHJkIGFsc28gY2FycmllcyBhIGJvb3Rjb25maWcsIGl0cyAmIzM0O2tlcm5lbCYjMzQ7CiYjNDM7CSAgc3VidHJlZSBpcyBzdGlsbCBwYXJzZWQgYXQgcnVudGltZSwgYnV0IHRoZSBlbWJlZGRlZCAmIzM0O2tlcm5lbCYjMzQ7CiYjNDM7CSAga2V5cyByZW1haW4gaW4gYm9vdF9jb21tYW5kX2xpbmUgZm9yIHBhcnNlX2Vhcmx5X3BhcmFtKCkgYW5kCiYjNDM7CSAgZW5kIHVwIGxhdGVyIHRoYW4gdGhlIGluaXRyZCBrZXlzIGluIHNhdmVkX2NvbW1hbmRfbGluZSwgc28KJiM0MzsJICBwYXJzZV9hcmdzKCkgbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBJZiB5b3UgbmVlZAomIzQzOwkgIGluaXRyZCB0byBvdmVycmlkZSBlbWJlZGRlZCBrZXJuZWwuKiBrZXlzLCBsZWF2ZSB0aGlzIG9wdGlvbgomIzQzOwkgIG9mZi4KJiM0MzsKJiM0MzsJICBJZiB1bnN1cmUsIHNheSBOLgomIzQzOwogY29uZmlnIENNRExJTkVfTE9HX1dSQVBfSURFQUxfTEVOCiAJaW50ICYjMzQ7TGVuZ3RoIHRvIHRyeSB0byB3cmFwIHRoZSBjbWRsaW5lIHdoZW4gbG9nZ2VkIGF0IGJvb3QmIzM0OwogCWRlZmF1bHQgMTAyMQpkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCBlMzYzMjMyYjQyOGI0Ny4uMzlhNTE4YTQ3MjQyMjMgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2luaXQvbWFpbi5jCkBAIC0zNTYsNDUgJiM0MzszNTYsMzMgQEAgc3RhdGljIGNoYXIgKiBfX2luaXQgeGJjX21ha2VfY21kbGluZShjb25zdCBjaGFyICprZXkpCiAJcmV0dXJuIG5ld19jbWRsaW5lOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBib290Y29uZmlnX3BhcmFtcyhjaGFyICpwYXJhbSwgY2hhciAqdmFsLAotCQkJCSAgICBjb25zdCBjaGFyICp1bnVzZWQsIHZvaWQgKmFyZykKLXsKLQlpZiAoc3RyY21wKHBhcmFtLCAmIzM0O2Jvb3Rjb25maWcmIzM0OykgPT0gMCkgewotCQlib290Y29uZmlnX2ZvdW5kID0gdHJ1ZTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0IHdhcm5fYm9vdGNvbmZpZyhjaGFyICpzdHIpCiB7Ci0JLyogVGhlICYjMzk7Ym9vdGNvbmZpZyYjMzk7IGhhcyBiZWVuIGhhbmRsZWQgYnkgYm9vdGNvbmZpZ19wYXJhbXMoKS4gKi8KJiM0MzsJLyogVGhlICYjMzk7Ym9vdGNvbmZpZyYjMzk7IG9wdGlvbiBpcyBoYW5kbGVkIGJ5IHNldHVwX2Jvb3RfY29uZmlnKCkuICovCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290X2NvbmZpZyh2b2lkKQogewotCXN0YXRpYyBjaGFyIHRtcF9jbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXSBfX2luaXRkYXRhOwogCWNvbnN0IGNoYXIgKm1zZywgKmRhdGE7Ci0JaW50IHBvcywgcmV0OwomIzQzOwlpbnQgcG9zLCByZXQsIG9mZnM7CiAJc2l6ZV90IHNpemU7Ci0JY2hhciAqZXJyOwomIzQzOwlib29sIGZyb21fZW1iZWRkZWQgPSBmYWxzZTsKIAogCS8qIEN1dCBvdXQgdGhlIGJvb3Rjb25maWcgZGF0YSBldmVuIGlmIHdlIGhhdmUgbm8gYm9vdGNvbmZpZyBvcHRpb24gKi8KIAlkYXRhID0gZ2V0X2Jvb3RfY29uZmlnX2Zyb21faW5pdHJkKCZhbXA7c2l6ZSk7CiAJLyogSWYgdGhlcmUgaXMgbm8gYm9vdGNvbmZpZyBpbiBpbml0cmQsIHRyeSBlbWJlZGRlZCBvbmUuICovCi0JaWYgKCFkYXRhKQomIzQzOwlpZiAoIWRhdGEpIHsKIAkJZGF0YSA9IHhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZygmYW1wO3NpemUpOwomIzQzOwkJZnJvbV9lbWJlZGRlZCA9IHRydWU7CiYjNDM7CX0KIAotCXN0cnNjcHkodG1wX2NtZGxpbmUsIGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7Ci0JZXJyID0gcGFyc2VfYXJncygmIzM0O2Jvb3Rjb25maWcmIzM0OywgdG1wX2NtZGxpbmUsIE5VTEwsIDAsIDAsIDAsIE5VTEwsCi0JCQkgYm9vdGNvbmZpZ19wYXJhbXMpOwotCi0JaWYgKElTX0VSUihlcnIpIHx8ICEoYm9vdGNvbmZpZ19mb3VuZCB8fCBJU19FTkFCTEVEKENPTkZJR19CT09UX0NPTkZJR19GT1JDRSkpKQomIzQzOwlib290Y29uZmlnX2ZvdW5kID0gYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZChib290X2NvbW1hbmRfbGluZSwgJmFtcDtvZmZzKTsKJiM0MzsJaWYgKCEoYm9vdGNvbmZpZ19mb3VuZCB8fCBJU19FTkFCTEVEKENPTkZJR19CT09UX0NPTkZJR19GT1JDRSkpKQogCQlyZXR1cm47CiAKLQkvKiBwYXJzZV9hcmdzKCkgc3RvcHMgYXQgdGhlIG5leHQgcGFyYW0gb2YgJiMzOTstLSYjMzk7IGFuZCByZXR1cm5zIGFuIGFkZHJlc3MgKi8KLQlpZiAoZXJyKQotCQlpbml0YXJnc19vZmZzID0gZXJyIC0gdG1wX2NtZGxpbmU7CiYjNDM7CS8qIE9mZnNldCBvZiB0aGUgaW5pdCBhcmd1bWVudHMgYWZ0ZXIgYSAmIzM0Oy0tJiMzNDssIGxvY2F0ZWQgYnkgdGhlIGhlbHBlci4gKi8KJiM0MzsJaW5pdGFyZ3Nfb2ZmcyA9IG9mZnM7CiAKIAlpZiAoIWRhdGEpIHsKIAkJLyogSWYgdXNlciBpbnRlbmRlZCB0byB1c2UgYm9vdGNvbmZpZywgc2hvdyBhbiBlcnJvciBsZXZlbCBtZXNzYWdlICovCkBAIC00MjEsOCAmIzQzOzQwOSwyNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfYm9vdF9jb25maWcodm9pZCkKIAl9IGVsc2UgewogCQl4YmNfZ2V0X2luZm8oJmFtcDtyZXQsIE5VTEwpOwogCQlwcl9pbmZvKCYjMzQ7TG9hZCBib290Y29uZmlnOiAlbGQgYnl0ZXMgJWQgbm9kZXNcbiYjMzQ7LCAobG9uZylzaXplLCByZXQpOwotCQkvKiBrZXlzIHN0YXJ0aW5nIHdpdGggJiMzNDtrZXJuZWwuJiMzNDsgYXJlIHBhc3NlZCB2aWEgY21kbGluZSAqLwotCQlleHRyYV9jb21tYW5kX2xpbmUgPSB4YmNfbWFrZV9jbWRsaW5lKCYjMzQ7a2VybmVsJiMzNDspOwomIzQzOwkJLyoKJiM0MzsJCSAqIGtleXMgc3RhcnRpbmcgd2l0aCAmIzM0O2tlcm5lbC4mIzM0OyBhcmUgcGFzc2VkIHZpYSBjbWRsaW5lLiBXaGVuCiYjNDM7CQkgKiB0aGlzIGJvb3Rjb25maWcgY2FtZSBmcm9tIHRoZSBlbWJlZGRlZCBzb3VyY2UgYW5kCiYjNDM7CQkgKiBzZXR1cF9hcmNoKCkgYWxyZWFkeSBwcmVwZW5kZWQgdGhlIHJlbmRlcmVkICYjMzQ7a2VybmVsJiMzNDsgc3VidHJlZQomIzQzOwkJICogdG8gYm9vdF9jb21tYW5kX2xpbmUsIHJlbmRlcmluZyBhZ2FpbiBoZXJlIHdvdWxkIGR1cGxpY2F0ZQomIzQzOwkJICogdGhlIGtleXMgaW4gc2F2ZWRfY29tbWFuZF9saW5lIGFuZCBtYWtlIGFjY3VtdWxhdGluZyBoYW5kbGVycwomIzQzOwkJICogKGNvbnNvbGU9LCBlYXJseWNvbj0sIC4uLikgcmUtcmVnaXN0ZXIgdGhlIHNhbWUgdmFsdWUuIFNraXAKJiM0MzsJCSAqIG9ubHkgd2hlbiB0aGUgcHJlcGVuZCByZWFsbHkgaGFwcGVuZWQuCiYjNDM7CQkgKgomIzQzOwkJICogT24gYXJjaGVzIHRoYXQgZG8gbm90IHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHLAomIzQzOwkJICogQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHIGlzIHVuc2VsZWN0YWJsZSBhbmQKJiM0MzsJCSAqIHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQoKSBjb2xsYXBzZXMgdG8gYSBzdHViIHJldHVybmluZwomIzQzOwkJICogZmFsc2UsIHNvIHRoaXMgcGF0aCBzdGlsbCBydW5zIGFuZCB0aGUgZW1iZWRkZWQgJiMzNDtrZXJuZWwmIzM0OwomIzQzOwkJICoga2V5cyByZWFjaCB0aGUgY21kbGluZSB2aWEgdGhlIHJ1bnRpbWUgcGFyc2VyIGV4YWN0bHkgYXMKJiM0MzsJCSAqIGJlZm9yZSB0aGlzIHNlcmllcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFmcm9tX2VtYmVkZGVkIHx8ICF4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkpCiYjNDM7CQkJZXh0cmFfY29tbWFuZF9saW5lID0geGJjX21ha2VfY21kbGluZSgmIzM0O2tlcm5lbCYjMzQ7KTsKIAkJLyogQWxzbywgJiMzNDtpbml0LiYjMzQ7IGtleXMgYXJlIGluaXQgYXJndW1lbnRzICovCiAJCWV4dHJhX2luaXRfYXJncyA9IHhiY19tYWtlX2NtZGxpbmUoJiMzNDtpbml0JiMzNDspOwogCX0KZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQppbmRleCA3Zjc1Y2M2ZWRmOTRhZi4uNGNjZGNlMmZkNWU1YjAgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9saWIvTWFrZWZpbGUKQEAgLTI3Myw2ICYjNDM7MjczLDIyIEBAIGZpbGVjaGtfZGVmYmNvbmYgPSBjYXQgJChvciAkKHJlYWwtcHJlcmVxcyksIC9kZXYvbnVsbCkKICQob2JqKS9kZWZhdWx0LmJjb25mOiAkKENPTkZJR19CT09UX0NPTkZJR19FTUJFRF9GSUxFKSBGT1JDRQogCSQoY2FsbCBmaWxlY2hrLGRlZmJjb25mKQogCiYjNDM7b2JqLSQoQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHKSAmIzQzOz0gZW1iZWRkZWQtY21kbGluZS5vCiYjNDM7JChvYmopL2VtYmVkZGVkLWNtZGxpbmUubzogJChvYmopL2VtYmVkZGVkX2NtZGxpbmUuYmluCiYjNDM7CiYjNDM7IyBSZW5kZXIgdGhlIGJvb3Rjb25maWcgJiMzNDtrZXJuZWwmIzM0OyBzdWJ0cmVlIHRvIGEgZmxhdCBjbWRsaW5lIHN0cmluZyB1c2luZwomIzQzOyMgdGhlIHVzZXJzcGFjZSB0b29scy9ib290Y29uZmlnIHBhcnNlciAoLUMgbW9kZSkuIFRoZSBydW50aW1lIHByZXBlbmQKJiM0MzsjIGhlbHBlciBlbmZvcmNlcyBDT01NQU5EX0xJTkVfU0laRSBhdCBib290LCBzbyBubyBidWlsZC10aW1lIHNpemUKJiM0MzsjIGNoZWNrIGlzIHBlcmZvcm1lZCBoZXJlIChDT01NQU5EX0xJTkVfU0laRSBpcyBhbiBhcmNoIGhlYWRlcgomIzQzOyMgY29uc3RhbnQsIG5vdCBhIEtjb25maWcgdmFsdWUpLgomIzQzO3F1aWV0X2NtZF9yZW5kZXJfY21kbGluZSA9IEJDT05GMkMgJEAKJiM0MzsgICAgICBjbWRfcmVuZGVyX2NtZGxpbmUgPSBcCiYjNDM7CSQob2JqdHJlZSkvdG9vbHMvYm9vdGNvbmZpZy9ib290Y29uZmlnIC1DICQmbHQ7ICZndDsgJEAKJiM0MzsKJiM0Mzt0YXJnZXRzICYjNDM7PSBlbWJlZGRlZF9jbWRsaW5lLmJpbgomIzQzOyQob2JqKS9lbWJlZGRlZF9jbWRsaW5lLmJpbjogJChvYmopL2RlZmF1bHQuYmNvbmYgJChvYmp0cmVlKS90b29scy9ib290Y29uZmlnL2Jvb3Rjb25maWcgRk9SQ0UKJiM0MzsJJChjYWxsIGlmX2NoYW5nZWQscmVuZGVyX2NtZGxpbmUpCiYjNDM7CiBvYmotJChDT05GSUdfUkJUUkVFX1RFU1QpICYjNDM7PSByYnRyZWVfdGVzdC5vCiBvYmotJChDT05GSUdfSU5URVJWQUxfVFJFRV9URVNUKSAmIzQzOz0gaW50ZXJ2YWxfdHJlZV90ZXN0Lm8KIApkaWZmIC0tZ2l0IGEvbGliL2Jvb3Rjb25maWcuYyBiL2xpYi9ib290Y29uZmlnLmMKaW5kZXggZjQ0NWI3NzAzZmRkOTYuLjg5Yzg4ZTM1OTE3OWYwIDEwMDY0NAotLS0gYS9saWIvYm9vdGNvbmZpZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9ib290Y29uZmlnLmMKQEAgLTE5LDkgJiM0MzsxOSwxMyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Vycm5vLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2FjaGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb21waWxlci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZXBhcmFtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3ByaW50ay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwcmludGYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZW1ibG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vc2V0dXAuaCZndDsJCS8qIENPTU1BTkRfTElORV9TSVpFICovCiAKICNpZmRlZiBDT05GSUdfQk9PVF9DT05GSUdfRU1CRUQKIC8qIGVtYmVkZGVkX2Jvb3Rjb25maWdfZGF0YSBpcyBkZWZpbmVkIGluIGJvb3Rjb25maWctZGF0YS5TICovCkBAIC0zNCw3ICYjNDM7MzgsMTI5IEBAIGNvbnN0IGNoYXIgKiBfX2luaXQgeGJjX2dldF9lbWJlZGRlZF9ib290Y29uZmlnKHNpemVfdCAqc2l6ZSkKIAlyZXR1cm4gKCpzaXplKSA/IGVtYmVkZGVkX2Jvb3Rjb25maWdfZGF0YSA6IE5VTEw7CiB9CiAjZW5kaWYKLSNlbmRpZgomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcKJiM0MzsvKiBlbWJlZGRlZF9rZXJuZWxfY21kbGluZSBpcyBkZWZpbmVkIGluIGVtYmVkZGVkLWNtZGxpbmUuUyAqLwomIzQzO2V4dGVybiBfX3Zpc2libGUgY29uc3QgY2hhciBlbWJlZGRlZF9rZXJuZWxfY21kbGluZVtdOwomIzQzO2V4dGVybiBfX3Zpc2libGUgY29uc3QgY2hhciBlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmRbXTsKJiM0MzsKJiM0MzsvKiBTZXQgb25jZSB0aGUgZW1iZWRkZWQgY21kbGluZSBoYXMgYWN0dWFsbHkgYmVlbiBwcmVwZW5kZWQuICovCiYjNDM7c3RhdGljIGJvb2wgeGJjX2NtZGxpbmVfYXBwbGllZCBfX2luaXRkYXRhOwomIzQzOwomIzQzOy8qCiYjNDM7ICogc3RyX3ByZXBlbmQoKSAtIFByZXBlbmQgQHNyYyBpbiBmcm9udCBvZiB0aGUgc3RyaW5nIGluIEBkc3QsIGluIHBsYWNlCiYjNDM7ICogQGRzdDogTlVMLXRlcm1pbmF0ZWQgZGVzdGluYXRpb24gYnVmZmVyLCBjdXJyZW50bHkgQGRzdF9sZW4gYnl0ZXMgbG9uZwomIzQzOyAqIEBkc3RfbGVuOiBsZW5ndGggb2YgdGhlIGN1cnJlbnQgQGRzdCBzdHJpbmcgKGV4Y2x1ZGluZyBpdHMgTlVMKQomIzQzOyAqIEBzcmM6IGJ5dGVzIHRvIHByZXBlbmQgKG5vdCBOVUwtdGVybWluYXRlZCkKJiM0MzsgKiBAc3JjX2xlbjogbnVtYmVyIG9mIGJ5dGVzIGZyb20gQHNyYyB0byBwcmVwZW5kCiYjNDM7ICoKJiM0MzsgKiBUaGUgY2FsbGVyIG11c3QgZ3VhcmFudGVlIEBkc3QgaGFzIHJvb20gZm9yIHNyY19sZW4gJiM0MzsgZHN0X2xlbiAmIzQzOyAxIGJ5dGVzLgomIzQzOyAqIE1vdmluZyBkc3RfbGVuICYjNDM7IDEgYnl0ZXMgY2FycmllcyBAZHN0JiMzOTtzIE5VTCB0ZXJtaW5hdG9yIHRvbywgc28gYW4gZW1wdHkKJiM0MzsgKiBAZHN0IG5lZWRzIG5vIHNwZWNpYWwgY2FzZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgc3RyX3ByZXBlbmQoY2hhciAqZHN0LCBzaXplX3QgZHN0X2xlbiwKJiM0MzsJCQkgICAgICAgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjX2xlbikKJiM0Mzt7CiYjNDM7CW1lbW1vdmUoZHN0ICYjNDM7IHNyY19sZW4sIGRzdCwgZHN0X2xlbiAmIzQzOyAxKTsKJiM0MzsJbWVtY3B5KGRzdCwgc3JjLCBzcmNfbGVuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIC0gUHJlcGVuZCBlbWJlZGRlZCBib290Y29uZmlnIGNtZGxpbmUKJiM0MzsgKiBAZHN0OiBjbWRsaW5lIGJ1ZmZlciB0byBwcmVwZW5kIGludG8gKG11c3QgYWxyZWFkeSBjb250YWluIGEgTlVMIGJ5dGUpCiYjNDM7ICogQHNpemU6IHRvdGFsIGNhcGFjaXR5IG9mIEBkc3QgaW4gYnl0ZXMKJiM0MzsgKgomIzQzOyAqIFByZXBlbmQgdGhlIGJ1aWxkLXRpbWUtcmVuZGVyZWQgJiMzNDtrZXJuZWwmIzM0OyBzdWJ0cmVlIG9mIHRoZSBlbWJlZGRlZAomIzQzOyAqIGJvb3Rjb25maWcgdG8gQGRzdC4gVGhlIHJlbmRlcmVkIHN0cmluZyBhbHJlYWR5IGVuZHMgd2l0aCBhIHNpbmdsZQomIzQzOyAqIHNwYWNlICh0aGUgeGJjX3NucHJpbnRfY21kbGluZSgpIGludmFyaWFudCksIHdoaWNoIHNlcnZlcyBhcyB0aGUKJiM0MzsgKiBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgZW1iZWRkZWQga2V5cyBhbmQgYW55IGV4aXN0aW5nIGNvbnRlbnQgb2YgQGRzdC4KJiM0MzsgKiBPbiBvdmVyZmxvdywgbG9nIGFuIGVycm9yIGFuZCBsZWF2ZSBAZHN0IHVudG91Y2hlZCByYXRoZXIgdGhhbgomIzQzOyAqIHNpbGVudGx5IHRydW5jYXRpbmc6IGJvb3Rpbmcgd2l0aG91dCB0aGUgZW1iZWRkZWQgdmFsdWVzIGlzIGJldHRlcgomIzQzOyAqIHRoYW4gcmVmdXNpbmcgdG8gYm9vdCwgYW5kIHRoZSBlcnJvciBtZXNzYWdlIHRlbGxzIHRoZSB1c2VyIHdoeQomIzQzOyAqIHRoZWlyIGVtYmVkZGVkIGtleXMgYXJlIG1pc3NpbmcuCiYjNDM7ICoKJiM0MzsgKiBJbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBzZXR1cF9hcmNoKCkgYmVmb3JlIHBhcnNlX2Vhcmx5X3BhcmFtKCkgc28KJiM0MzsgKiB0aGF0IGVhcmx5X3BhcmFtKCkgaGFuZGxlcnMgc2VlIHRoZSBlbWJlZGRlZCB2YWx1ZXMuCiYjNDM7ICovCiYjNDM7dm9pZCBfX2luaXQgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShjaGFyICpkc3QsIHNpemVfdCBzaXplKQomIzQzO3sKJiM0MzsJc2l6ZV90IGVtYmVkX2xlbiA9IGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZCAtIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lOwomIzQzOwlzaXplX3QgZHN0X2xlbjsKJiM0MzsKJiM0MzsJaWYgKCFzaXplIHx8IGVtYmVkX2xlbiAmbHQ7PSAxKQkvKiB0cmFpbGluZyBOVUwgb25seSAqLwomIzQzOwkJcmV0dXJuOwomIzQzOwllbWJlZF9sZW4tLTsJCQkvKiBleGNsdWRlIHRyYWlsaW5nIE5VTCBieXRlICovCiYjNDM7CiYjNDM7CWRzdF9sZW4gPSBzdHJubGVuKGRzdCwgc2l6ZSk7CiYjNDM7CWlmIChlbWJlZF9sZW4gJiM0MzsgZHN0X2xlbiAmIzQzOyAxICZndDsgc2l6ZSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7ZW1iZWRkZWQgYm9vdGNvbmZpZyBjbWRsaW5lICglenUgYnl0ZXMpIGRvZXMgbm90IGZpdCBpbiBDT01NQU5EX0xJTkVfU0laRSB3aXRoICV6dSBieXRlcyBhbHJlYWR5IHVzZWQ7IGlnbm9yaW5nIGVtYmVkZGVkIHZhbHVlc1xuJiMzNDssCiYjNDM7CQkgICAgICAgZW1iZWRfbGVuLCBkc3RfbGVuKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlzdHJfcHJlcGVuZChkc3QsIGRzdF9sZW4sIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lLCBlbWJlZF9sZW4pOwomIzQzOwl4YmNfY21kbGluZV9hcHBsaWVkID0gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCgpIC0gRGlkIHRoZSBlbWJlZGRlZCBjbWRsaW5lIGdldCBwcmVwZW5kZWQ/CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm4gdHJ1ZSBpZiB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKCkgYWN0dWFsbHkgcHJlcGVuZGVkIHRoZQomIzQzOyAqIGVtYmVkZGVkICYjMzQ7a2VybmVsJiMzNDsgc3VidHJlZS4gc2V0dXBfYm9vdF9jb25maWcoKSB1c2VzIHRoaXMgdG8gYXZvaWQKJiM0MzsgKiByZW5kZXJpbmcgdGhlIHNhbWUga2V5cyBhIHNlY29uZCB0aW1lLgomIzQzOyAqLwomIzQzO2Jvb2wgX19pbml0IHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiB4YmNfY21kbGluZV9hcHBsaWVkOwomIzQzO30KJiM0MzsjZW5kaWYJLyogQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHICovCiYjNDM7CiYjNDM7LyogcGFyc2VfYXJncygpIGNhbGxiYWNrOiBmbGFnIHdoZW4gdGhlICYjMzQ7Ym9vdGNvbmZpZyYjMzQ7IHBhcmFtZXRlciBpcyBwcmVzZW50LiAqLwomIzQzO3N0YXRpYyBpbnQgX19pbml0IGJvb3Rjb25maWdfb3B0aW4oY2hhciAqcGFyYW0sIGNoYXIgKnZhbCwKJiM0MzsJCQkJICAgY29uc3QgY2hhciAqdW51c2VkLCB2b2lkICphcmcpCiYjNDM7ewomIzQzOwlpZiAoIXN0cmNtcChwYXJhbSwgJiMzNDtib290Y29uZmlnJiMzNDspKQomIzQzOwkJKihib29sICopYXJnID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoKSAtIFdhcyAmIzM0O2Jvb3Rjb25maWcmIzM0OyBwYXNzZWQgb24gdGhlIGNtZGxpbmU/CiYjNDM7ICogQGJvb3RfY21kbGluZToga2VybmVsIGNvbW1hbmQgbGluZSB0byBpbnNwZWN0IChub3QgbW9kaWZpZWQpCiYjNDM7ICogQGVuZF9vZmZzZXQ6IGlmIG5vbi1OVUxMLCBzZXQgdG8gdGhlIG9mZnNldCBvZiB0aGUgaW5pdCBhcmd1bWVudHMgdGhhdAomIzQzOyAqCQlmb2xsb3cgYSAmIzM0Oy0tJiMzNDsgc2VwYXJhdG9yLCBvciAwIHdoZW4gdGhlcmUgaXMgbm9uZQomIzQzOyAqCiYjNDM7ICogUGFyc2UgYSBwcml2YXRlIGNvcHkgb2YgQGJvb3RfY21kbGluZSAocGFyc2VfYXJncygpIGlzIGRlc3RydWN0aXZlKSBhbmQKJiM0MzsgKiByZXBvcnQgd2hldGhlciAmIzM0O2Jvb3Rjb25maWcmIzM0OyBpcyBwcmVzZW50IGJlZm9yZSB0aGUgJiMzNDstLSYjMzQ7IHNlcGFyYXRvci4KJiM0MzsgKiBzZXR1cF9hcmNoKCkgdXNlcyB0aGlzIHRvIGdhdGUgcHJlcGVuZGluZyB0aGUgYnVpbGQtdGltZSBlbWJlZGRlZCBjbWRsaW5lOwomIzQzOyAqIHNldHVwX2Jvb3RfY29uZmlnKCkgdXNlcyBpdCBmb3IgdGhlIHJ1bnRpbWUgb3B0LWluIGFuZCB0byBsb2NhdGUgdGhlIGluaXQKJiM0MzsgKiBhcmd1bWVudHMgdmlhIEBlbmRfb2Zmc2V0LiBTaGFyaW5nIG9uZSBwYXJzZXIga2VlcHMgdGhlIGVhcmx5IGFuZCBsYXRlCiYjNDM7ICogcGF0aHMgYWdyZWVpbmcgb24gd2hhdCBjb3VudHMgYXMgb3B0LWluLiBDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0UgaXMgbm90CiYjNDM7ICogZm9sZGVkIGluIGhlcmU7IGNhbGxlcnMgYXBwbHkgaXQgd2hlcmUgdGhleSBuZWVkIGl0LgomIzQzOyAqLwomIzQzO2Jvb2wgX19pbml0IGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoY29uc3QgY2hhciAqYm9vdF9jbWRsaW5lLCBpbnQgKmVuZF9vZmZzZXQpCiYjNDM7ewomIzQzOwlzdGF0aWMgY2hhciB0bXBfY21kbGluZVtDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTsKJiM0MzsJYm9vbCBmb3VuZCA9IGZhbHNlOwomIzQzOwljaGFyICplcnI7CiYjNDM7CiYjNDM7CWlmIChlbmRfb2Zmc2V0KQomIzQzOwkJKmVuZF9vZmZzZXQgPSAwOwomIzQzOwomIzQzOwlzdHJzY3B5KHRtcF9jbWRsaW5lLCBib290X2NtZGxpbmUsIENPTU1BTkRfTElORV9TSVpFKTsKJiM0MzsJZXJyID0gcGFyc2VfYXJncygmIzM0O2Jvb3Rjb25maWcmIzM0OywgdG1wX2NtZGxpbmUsIE5VTEwsIDAsIDAsIDAsCiYjNDM7CQkJICZhbXA7Zm91bmQsIGJvb3Rjb25maWdfb3B0aW4pOwomIzQzOwlpZiAoSVNfRVJSKGVycikpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIHBhcnNlX2FyZ3MoKSBzdG9wcyBhdCAmIzM0Oy0tJiMzNDsgYW5kIHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHJlc3QuICovCiYjNDM7CWlmIChlbmRfb2Zmc2V0ICZhbXA7JmFtcDsgZXJyKQomIzQzOwkJKmVuZF9vZmZzZXQgPSBlcnIgLSB0bXBfY21kbGluZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZvdW5kOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCiAvKgogICogRXh0cmEgQm9vdCBDb25maWcgKFhCQykgaXMgZ2l2ZW4gYXMgdHJlZS1zdHJ1Y3R1cmVkIGFzY2lpIHRleHQgb2YKQEAgLTQyNywxMSAmIzQzOzU1MywzMCBAQCBzdGF0aWMgY2hhciB4YmNfbmFtZWJ1ZltYQkNfS0VZTEVOX01BWF0gX19pbml0ZGF0YTsKIGludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpCiB7CiAJc3RydWN0IHhiY19ub2RlICprbm9kZSwgKnZub2RlOwotCWNoYXIgKmVuZCA9IGJ1ZiAmIzQzOyBzaXplOwogCWNvbnN0IGNoYXIgKnZhbCwgKnE7CiYjNDM7CXNpemVfdCBsZW4gPSAwOwogCWludCByZXQ7CiAKJiM0MzsJLyoKJiM0MzsJICogVHJhY2sgdGhlIHJ1bm5pbmcgd3JpdHRlbiBsZW5ndGggcmF0aGVyIHRoYW4gYWR2YW5jaW5nIEBidWYsIHNvIHdlCiYjNDM7CSAqIG5ldmVyIGZvcm0gJiMzNDtidWYgJiM0Mzsgc2l6ZSYjMzQ7IG9yICYjMzQ7YnVmICYjNDM7PSByZXQmIzM0OyB3aGlsZSBAYnVmIGlzIE5VTEwgKHRoZQomIzQzOwkgKiBzaXplLXByb2JlIGNhbGwgcGFzc2VzIGJ1Zj1OVUxMLCBzaXplPTApLiBOVUxMIHBvaW50ZXIgYXJpdGhtZXRpYwomIzQzOwkgKiBpcyB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIHRyaXBzIGhvc3QgVUJTYW4gLyBGT1JUSUZZX1NPVVJDRSB3aGVuCiYjNDM7CSAqIHRoaXMgcmVuZGVyZXIgcnVucyBhdCBrZXJuZWwgYnVpbGQgdGltZS4gc25wcmludGYoTlVMTCwgMCwgLi4uKQomIzQzOwkgKiBpdHNlbGYgaXMgd2VsbCBkZWZpbmVkIGFuZCByZXR1cm5zIHRoZSB3b3VsZC1iZSBsZW5ndGguCiYjNDM7CSAqLwogCXhiY19ub2RlX2Zvcl9lYWNoX2tleV92YWx1ZShyb290LCBrbm9kZSwgdmFsKSB7CiYjNDM7CQkvKgomIzQzOwkJICogQW4gZW1wdHkgb3IgdmFsdWUtb25seSBAcm9vdCAoZS5nLiAmIzM0O2tlcm5lbCB7fSYjMzQ7IG9yCiYjNDM7CQkgKiAmIzM0O2tlcm5lbCA9IHgmIzM0OywgcG9zc2libHkgYWxvbmdzaWRlICYjMzQ7a2VybmVsLmZvbyA9IGJhciYjMzQ7KQomIzQzOwkJICogeWllbGRzIEByb290IGl0c2VsZiBoZXJlLiBTa2lwIGl0OiBjb21wb3NpbmcgYSBrZXkgZm9yIGl0CiYjNDM7CQkgKiB3b3VsZCBmYWlsIHdpdGggLUVJTlZBTCwgeWV0IGFueSByZWFsIGRlc2NlbmRhbnQga2V5cyBtdXN0CiYjNDM7CQkgKiBzdGlsbCBiZSByZW5kZXJlZC4gQW4gZW50aXJlbHkgZW1wdHkgc3VidHJlZSB0aGVuIHJlbmRlcnMKJiM0MzsJCSAqIG5vdGhpbmcgYW5kIHJldHVybnMgMCByYXRoZXIgdGhhbiBhbiBlcnJvci4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGtub2RlID09IHJvb3QpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCXJldCA9IHhiY19ub2RlX2NvbXBvc2Vfa2V5X2FmdGVyKHJvb3QsIGtub2RlLAogCQkJCQl4YmNfbmFtZWJ1ZiwgWEJDX0tFWUxFTl9NQVgpOwogCQlpZiAocmV0ICZsdDsgMCkKQEAgLTQzOSwxMCAmIzQzOzU4NCwxMSBAQCBpbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KQogCiAJCXZub2RlID0geGJjX25vZGVfZ2V0X2NoaWxkKGtub2RlKTsKIAkJaWYgKCF2bm9kZSkgewotCQkJcmV0ID0gc25wcmludGYoYnVmLCByZXN0KGJ1ZiwgZW5kKSwgJiMzNDslcyAmIzM0OywgeGJjX25hbWVidWYpOwomIzQzOwkJCXJldCA9IHNucHJpbnRmKGJ1ZiA/IGJ1ZiAmIzQzOyBsZW4gOiBOVUxMLCByZXN0KGxlbiwgc2l6ZSksCiYjNDM7CQkJCSAgICAgICAmIzM0OyVzICYjMzQ7LCB4YmNfbmFtZWJ1Zik7CiAJCQlpZiAocmV0ICZsdDsgMCkKIAkJCQlyZXR1cm4gcmV0OwotCQkJYnVmICYjNDM7PSByZXQ7CiYjNDM7CQkJbGVuICYjNDM7PSByZXQ7CiAJCQljb250aW51ZTsKIAkJfQogCQl4YmNfYXJyYXlfZm9yX2VhY2hfdmFsdWUodm5vZGUsIHZhbCkgewpAQCAtNDUyLDE1ICYjNDM7NTk4LDE1IEBAIGludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpCiAJCQkgKiB3aGl0ZXNwYWNlLgogCQkJICovCiAJCQlxID0gc3RycGJyayh2YWwsICYjMzQ7IFx0XHJcbiYjMzQ7KSA/ICYjMzQ7XCYjMzQ7JiMzNDsgOiAmIzM0OyYjMzQ7OwotCQkJcmV0ID0gc25wcmludGYoYnVmLCByZXN0KGJ1ZiwgZW5kKSwgJiMzNDslcz0lcyVzJXMgJiMzNDssCi0JCQkJICAgICAgIHhiY19uYW1lYnVmLCBxLCB2YWwsIHEpOwomIzQzOwkJCXJldCA9IHNucHJpbnRmKGJ1ZiA/IGJ1ZiAmIzQzOyBsZW4gOiBOVUxMLCByZXN0KGxlbiwgc2l6ZSksCiYjNDM7CQkJCSAgICAgICAmIzM0OyVzPSVzJXMlcyAmIzM0OywgeGJjX25hbWVidWYsIHEsIHZhbCwgcSk7CiAJCQlpZiAocmV0ICZsdDsgMCkKIAkJCQlyZXR1cm4gcmV0OwotCQkJYnVmICYjNDM7PSByZXQ7CiYjNDM7CQkJbGVuICYjNDM7PSByZXQ7CiAJCX0KIAl9CiAKLQlyZXR1cm4gYnVmIC0gKGVuZCAtIHNpemUpOwomIzQzOwlyZXR1cm4gbGVuOwogfQogI3VuZGVmIHJlc3QKIApkaWZmIC0tZ2l0IGEvbGliL2VtYmVkZGVkLWNtZGxpbmUuUyBiL2xpYi9lbWJlZGRlZC1jbWRsaW5lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJkYTgxYjRhNDJiZWFmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbGliL2VtYmVkZGVkLWNtZGxpbmUuUwpAQCAtMCwwICYjNDM7MSwxNiBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyoKJiM0MzsgKiBFbWJlZCB0aGUgYnVpbGQtdGltZS1yZW5kZXJlZCBib290Y29uZmlnICYjMzQ7a2VybmVsJiMzNDsgc3VidHJlZSBhcyBhIGZsYXQKJiM0MzsgKiBjbWRsaW5lIHN0cmluZy4gc2V0dXBfYXJjaCgpIHByZXBlbmRzIHRoaXMgdG8gYm9vdF9jb21tYW5kX2xpbmUgb24KJiM0MzsgKiBhcmNoaXRlY3R1cmVzIHRoYXQgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUcuCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgQnJlbm8gTGVpdGFvICZsdDtsZWl0YW9AZGViaWFuLm9yZyZndDsKJiM0MzsgKi8KJiM0MzsJLnNlY3Rpb24gLmluaXQucm9kYXRhLmVtYmVkX2NtZGxpbmUsICYjMzQ7YSYjMzQ7LCAlcHJvZ2JpdHMKJiM0MzsJLmdsb2JhbCBlbWJlZGRlZF9rZXJuZWxfY21kbGluZQomIzQzO2VtYmVkZGVkX2tlcm5lbF9jbWRsaW5lOgomIzQzOwkuaW5jYmluICYjMzQ7bGliL2VtYmVkZGVkX2NtZGxpbmUuYmluJiMzNDsKJiM0MzsJLmJ5dGUgMAomIzQzOwkuZ2xvYmFsIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZAomIzQzO2VtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZDoKZGlmZiAtLWdpdCBhL3Rvb2xzL2Jvb3Rjb25maWcvTWFrZWZpbGUgYi90b29scy9ib290Y29uZmlnL01ha2VmaWxlCmluZGV4IDkwZWI0N2M5ZDhkZTY3Li4zY2I4MDY2ZDUxNDFiYiAxMDA2NDQKLS0tIGEvdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9ib290Y29uZmlnL01ha2VmaWxlCkBAIC0xNSw3ICYjNDM7MTUsNyBAQCBvdmVycmlkZSBDRkxBR1MgJiM0Mzs9IC1XYWxsIC1nIC1JJChDVVJESVIpL2luY2x1ZGUKIEFMTF9UQVJHRVRTIDo9IGJvb3Rjb25maWcKIEFMTF9QUk9HUkFNUyA6PSAkKHBhdHN1YnN0ICUsJChPVVRQVVQpJSwkKEFMTF9UQVJHRVRTKSkKIAotYWxsOiAkKEFMTF9QUk9HUkFNUykgdGVzdAomIzQzO2FsbDogJChBTExfUFJPR1JBTVMpCiAKICQoT1VUUFVUKWJvb3Rjb25maWc6IG1haW4uYyBpbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaCAkKExJQlNSQykKIAkkKENDKSAkKGZpbHRlciAlLmMsJF4pICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRACkBAIC0yNyw0ICYjNDM7MjcsNCBAQCBpbnN0YWxsOiAkKEFMTF9QUk9HUkFNUykKIAlpbnN0YWxsICQoT1VUUFVUKWJvb3Rjb25maWcgJChERVNURElSKSQoYmluZGlyKQogCiBjbGVhbjoKLQkkKFJNKSAtZiAkKE9VVFBVVCkqLm8gJChBTExfUFJPR1JBTVMpCiYjNDM7CXJtIC1mICQoT1VUUFVUKSoubyAkKEFMTF9QUk9HUkFNUykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyODEKCQkJCQkJCW91dHB1dDogMTMyCgkJCQkJCQl0aG91Z2h0czogMTY2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzOiBgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHYCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgaW1wbGVtZW50cyBgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHYC4gRXNzZW50aWFsbHksIGl0IGNvbXBpbGVzIGEgYm9vdGNvbmZpZyBzdWJ0cmVlIGludG8gYSBmbGF0IGNvbW1hbmQgbGluZSBzdHJpbmcgYW5kIHByZXBlbmRzIGl0IGR1cmluZyB0aGUgZWFybHkgYXJjaGl0ZWN0dXJlIHNldHVwLiBUaGlzIGFsbG93cyBlYXJseSBwYXJhbWV0ZXIgaGFuZGxlcnMgdG8gc2VlIHZhbHVlcyBkZWZpbmVkIGluIHRoZSBlbWJlZGRlZCBga2VybmVsYCBzdWJ0cmVlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGV2ZW4gZnV6emFibGUsIG9yIGlmIGl0JiMzOTtzIGRlYWQgY29kZSBhZnRlciB0aGUgYnVpbGQuCgpJIHNlZSB0aGF0IHRoZSBjaGFuZ2VzIGluY2x1ZGUgbW9kaWZpY2F0aW9ucyB0byBgYXJjaC94ODYva2VybmVsL3NldHVwLmNgICh0byBwcmVwZW5kIHRoZSBjbWRsaW5lKSwgYGluaXQvbWFpbi5jYCAoZm9yIGJvb3Rjb25maWcgaGFuZGxpbmcpLCBhZGRpdGlvbiBvZiBgbGliL2VtYmVkZGVkLWNtZGxpbmUuU2AgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYGxpYi9ib290Y29uZmlnLmNgLCBhbmQgYSBuZXcgS2NvbmZpZyBvcHRpb24uCgpJcyB0aGlzIGNvZGUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nIHdpdGggc29tZXRoaW5nIGxpa2UgU3l6a2FsbGVyPyBUaGUgY29tbWFuZCBsaW5lIGNvbnN0cnVjdGlvbiBhdCBib290IHRpbWUgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCB0YXJnZXQuIEhvd2V2ZXIsIGl0JiMzOTtzICp2ZXJ5KiBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzLiBTeXprYWxsZXIgaXMgZ3JlYXQsIGJ1dCBpdCB0eXBpY2FsbHkgaGl0cyB0aGUgc3lzY2FsbCBsYXllciwgbmV0d29yaywgYW5kIFVTQiwgbm90IHRoZSBib290IHByb2Nlc3Mgb3IgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgZGlyZWN0bHksIHdoaWNoIGFyZSBmaXhlZCBhdCBjb21waWxlIHRpbWUuCgpXYWl0LCB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBpcyAqZml4ZWQqLCBtZWFuaW5nIHRoZSBjb21tYW5kIGxpbmUgaXMgZml4ZWQsIGFuZCBjYW4mIzM5O3QgYmUgbXV0YXRlZCBwZXIgZnV6eiBjYXNlLiBCdXQgdGhlIGNvZGUgaW4gYGxpYi9ib290Y29uZmlnLmNgIGlzICpleGVjdXRlZCogZHVyaW5nIGJvb3QuIElmIGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgIGlzIGVuYWJsZWQsIHRoZW4gYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKWAgZXhlY3V0ZXMgZHVyaW5nIGBzZXR1cF9hcmNoKClgLiBJcyB0aGVyZSB1c2VyIGlucHV0IHRoYXQgY2FuIHJlYWNoIHRoaXM/IFRoZSBlbWJlZGRlZCBib290Y29uZmlnIGlzIGZpeGVkIGF0IGJ1aWxkIHRpbWUuIFRoZSBib290IGNvbW1hbmQgbGluZSBjb21lcyBmcm9tIHRoZSBib290bG9hZGVyLiBTeXprYWxsZXImIzM5O3MgYm9vdGxvYWRlciBpcyBmaXhlZCAoSSB0aGluaz8pLCBzbyBjYW4gc3l6a2FsbGVyIHBhc3MgYSBkaWZmZXJlbnQgY29tbWFuZCBsaW5lPyBObywgaXQmIzM5O3Mgbm90IGRlc2lnbmVkIHRvIGRvIHRoYXQuIFRoZSBgcGFyc2VfYXJnc2AgZnVuY3Rpb24gaXMgYWN0dWFsbHkgY2FsbGVkIG9uIHRoZSBib290IGNvbW1hbmQgbGluZS4KCk9rYXksIGlzIHRoZXJlICphbnkqIGZ1bmN0aW9uYWwgY2hhbmdlIFN5emthbGxlciBjYW4gZnV6ej8gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IG11dGF0ZSB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBvciBrZXJuZWwgY29tbWFuZCBsaW5lIGJldHdlZW4gZXhlY3V0aW9ucywgd2hpY2ggbWFrZXMgdGhpcyBjb2RlIG9ubHkgcnVuIG9uY2UgYXQgYm9vdC4gSXQmIzM5O3Mgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXItc3BhY2Ugc3lzY2FsbHMsIHNvIGl0JiMzOTtzIG5vdCAqcmVhbGx5KiBmdXp6YWJsZS4KCkxldCBtZSBkb3VibGUtY2hlY2suIFRoZSBwYXRjaCBhZGRzIGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgLCBgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZWAsIGBib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkYCwgYHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWRgLiBUaGVzZSBhcmUgYWxsIGBfX2luaXRgIGZ1bmN0aW9ucy4gU3l6a2FsbGVyIHN0YXJ0cyBmdXp6aW5nICphZnRlciogdGhlIGtlcm5lbCBoYXMgYm9vdGVkLiBgX19pbml0YCBjb2RlIGdldHMgZnJlZWQsIHNvIHdlIGNhbiYjMzk7dCBnZXQgdG8gaXQgd2l0aCBvdXIgc3lzY2FsbCBmdXp6ZXIsIHdoaWNoIG9wZXJhdGVzIGF0IHJ1bnRpbWUuIFN5emthbGxlciAqZG9lcyogY2F0Y2ggYm9vdC10aW1lIGNyYXNoZXMsIGJ1dCBpdCBkb2VzbiYjMzk7dCByZWFsbHkgZnV6eiB0aGUgaW5wdXRzIHRvIHRoZXNlIGVhcmx5IGZ1bmN0aW9ucyBiZWNhdXNlIHRob3NlIGlucHV0cyAodGhlIGJvb3Rjb25maWcsIHRoZSBjbWRsaW5lKSBhcmUgc3RhdGljLgoKU28sIHRoaXMgbG9va3MgcHJldHR5IHVuLWZ1enphYmxlIGluIHRoZSB0cmFkaXRpb25hbCBTeXprYWxsZXIgc2Vuc2UuIEFueSBub24taW5pdCBjb2RlPyBgeGJjX3NucHJpbnRfY21kbGluZWAgaXMgbW9kaWZpZWQsIGJ1dCBpdCYjMzk7cyBhbHNvIGBfX2luaXRgLiBMb29raW5nIGF0IGBsaWIvYm9vdGNvbmZpZy5jYCwgaXQmIzM5O3MgYWxsIGBfX2luaXRgIGZ1bmN0aW9uczogYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgLCBgYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZGAsIGB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkYCwgYGJvb3Rjb25maWdfb3B0aW5gLCBhbmQgYHN0cl9wcmVwZW5kYC4gQWxzbywgYHNldHVwX2FyY2hgLCBgc2V0dXBfYm9vdF9jb25maWdgLCBhbmQgYHdhcm5fYm9vdGNvbmZpZ2AgYXJlIGBfX2luaXRgLgoKWWVwLCBhbGwgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgaW4gYF9faW5pdGAgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSBleGVjdXRlZCBvbmx5IG9uY2UgYXQgYm9vdCB3aXRoIHN0YXRpYyBpbnB1dHMgKHRoZSBlbWJlZGRlZCBib290Y29uZmlnIGFuZCBib290bG9hZGVyIGNtZGxpbmUpLiBTeXprYWxsZXIgY2FuJiMzOTt0IHByb3ZpZGUgdmFyaWVkIGlucHV0cyB0byBleHBsb3JlIGRpZmZlcmVudCBjb2RlIHBhdGhzLiBUaGlzIGlzIG5vdCB3b3J0aCBmdXp6aW5nLgoKSnVzdCBjaGVja2luZyBmb3Igbm9uLWluaXQgZnVuY3Rpb25zLi4uIGB0b29scy9ib290Y29uZmlnL01ha2VmaWxlYCBpcyB1c2Vyc3BhY2UuIFRoZW4gaXQmIzM5O3MgZGF0YSwgYnVpbGQgcnVsZXMsIGBpbml0L21haW4uY2Agd2l0aCB0aG9zZSBpbml0IGZ1bmN0aW9ucywgS2NvbmZpZywgZGVjbGFyYXRpb25zLCBhcmNoL3g4NiBjb2RlIHdpdGggYF9faW5pdGAgZnVuY3Rpb25zLCBidWlsZCBydWxlcywgYW5kIGRvY3VtZW50YXRpb24uIEV2ZXJ5dGhpbmcgaXMgYnVpbGQtdGltZSwgZG9jdW1lbnRhdGlvbiwgb3IgYF9faW5pdGAgY29kZS4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGZ1enogYF9faW5pdGAgY29kZSBiZWNhdXNlIGl0IHJ1bnMgdG9vIGVhcmx5LCBhbmQgdGhlIGlucHV0cyBhcmVuJiMzOTt0IG11dGF0ZWQgYnkgU3l6a2FsbGVyLgoKSSYjMzk7bSByZXR1cm5pbmcgYFdvcnRoRnV6emluZzogZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgYWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyByZXNpZGUgd2l0aGluIGBfX2luaXRgIGZ1bmN0aW9ucyBhbmQgYnVpbGQtdGltZSB0b29scy4gVGhpcyBjb2RlIGdldHMgZXhlY3V0ZWQgZHVyaW5nIGJvb3Qgd2l0aCBzdGF0aWMgaW5wdXRzIHdoaWNoIG1lYW5zIHRoYXQgc3l6a2FsbGVy4oCZcyBydW50aW1lIHN5c2NhbGwgZnV6emluZyBjYW5ub3QgcmVhY2ggaXQuCgpMZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIHRoYXQgdGhlcmUgaXNuJiMzOTt0IHNvbWUgZWRnZSBjYXNlLCBsaWtlIGZpcm13YXJlIGZpbGVzLiBCdXQgbm8sIHRoZSBib290Y29uZmlnIGlzIGVtYmVkZGVkCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBidWlsZC10aW1lIGZlYXR1cmUgdG8gcmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gQWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUga2VybmVsIGFyZSBjb25maW5lZCB0byBgX19pbml0YCBmdW5jdGlvbnMgKGUuZy4sIGBzZXR1cF9hcmNoYCwgYHNldHVwX2Jvb3RfY29uZmlnYCwgYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgKSwgd2hpY2ggcnVuIG9ubHkgb25jZSBkdXJpbmcgZWFybHkgYm9vdCB3aXRoIHN0YXRpYyBpbnB1dHMgKGNvbXBpbGUtdGltZSBlbWJlZGRlZCBmaWxlcyBhbmQgdGhlIGJvb3Rsb2FkZXIgY29tbWFuZCBsaW5lKS4gU3l6a2FsbGVyIGNhbm5vdCBtdXRhdGUgdGhlc2UgaW5wdXRzIG9yIHJlYWNoIHRoaXMgY29kZSBkdXJpbmcgcnVudGltZSBzeXNjYWxsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYnVpbGQtdGltZSBmZWF0dXJlIHRvIHJlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGludG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuIEFsbCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGtlcm5lbCBhcmUgY29uZmluZWQgdG8gYF9faW5pdGAgZnVuY3Rpb25zIChlLmcuLCBgc2V0dXBfYXJjaGAsIGBzZXR1cF9ib290X2NvbmZpZ2AsIGB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lYCksIHdoaWNoIHJ1biBvbmx5IG9uY2UgZHVyaW5nIGVhcmx5IGJvb3Qgd2l0aCBzdGF0aWMgaW5wdXRzIChjb21waWxlLXRpbWUgZW1iZWRkZWQgZmlsZXMgYW5kIHRoZSBib290bG9hZGVyIGNvbW1hbmQgbGluZSkuIFN5emthbGxlciBjYW5ub3QgbXV0YXRlIHRoZXNlIGlucHV0cyBvciByZWFjaCB0aGlzIGNvZGUgZHVyaW5nIHJ1bnRpbWUgc3lzY2FsbCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjE1OjI3LjU1MzU5NzY4M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzY1NTU3ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYnVpbGQtdGltZSBmZWF0dXJlIHRvIHJlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGludG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuIEFsbCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGtlcm5lbCBhcmUgY29uZmluZWQgdG8gYF9faW5pdGAgZnVuY3Rpb25zIChlLmcuLCBgc2V0dXBfYXJjaGAsIGBzZXR1cF9ib290X2NvbmZpZ2AsIGB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lYCksIHdoaWNoIHJ1biBvbmx5IG9uY2UgZHVyaW5nIGVhcmx5IGJvb3Qgd2l0aCBzdGF0aWMgaW5wdXRzIChjb21waWxlLXRpbWUgZW1iZWRkZWQgZmlsZXMgYW5kIHRoZSBib290bG9hZGVyIGNvbW1hbmQgbGluZSkuIFN5emthbGxlciBjYW5ub3QgbXV0YXRlIHRoZXNlIGlucHV0cyBvciByZWFjaCB0aGlzIGNvZGUgZHVyaW5nIHJ1bnRpbWUgc3lzY2FsbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTU6MjcuNTUzNjAyODgzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzc5MjI4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlMTgxZDMwMWM5YmQwNzZjZWFiNjM1YTQ3MzdlOGJmNWM2YTI0NWUxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVuIDI2IDE4OjE1OjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0XFxuaW5kZXggZjcxMjc1ODQ3MmQ1YzYuLjNkNjQxMjQ1OGM4YjY5IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0XFxuQEAgLTIzNCw2ICsyMzQsODcgQEAgS2NvbmZpZyBvcHRpb24gc2VsZWN0ZWQuXFxuIE5vdGUgdGhhdCBldmVuIGlmIHlvdSBzZXQgdGhpcyBvcHRpb24sIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIGVtYmVkZGVkXFxuIGJvb3Rjb25maWcgYnkgYW5vdGhlciBib290Y29uZmlnIHdoaWNoIGF0dGFjaGVkIHRvIHRoZSBpbml0cmQuXFxuIFxcbitSZW5kZXJpbmcgRW1iZWRkZWQga2VybmVsLiogS2V5cyBhdCBCdWlsZCBUaW1lXFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rXFxuK0J5IGRlZmF1bHQsIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIChgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRD15YGApIGlzXFxuK3BhcnNlZCBhdCBydW50aW1lLCBhZnRlciBgYHBhcnNlX2Vhcmx5X3BhcmFtKClgYCBoYXMgYWxyZWFkeSBydW4uIEVhcmx5XFxuK3BhcmFtZXRlciBoYW5kbGVycyAoYGBtZW09YGAsIGBgZWFybHljb249YGAsIGBgbG9nbGV2ZWw9YGAsIC4uLikgdGhlcmVmb3JlXFxuK2Nhbm5vdCBzZWUgdmFsdWVzIHN1cHBsaWVkIHZpYSB0aGUgZW1iZWRkZWQgYGBrZXJuZWxgYCBzdWJ0cmVlLlxcbitcXG4rYGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgYCByZXNvbHZlcyB0aGlzIGJ5IHJlbmRlcmluZyB0aGVcXG4rYGBrZXJuZWxgYCBzdWJ0cmVlIG9mIGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEX0ZJTEVgYCBpbnRvIGEgZmxhdCBjbWRsaW5lXFxuK3N0cmluZyBhdCBrZXJuZWwgYnVpbGQgdGltZSAodmlhIGBgdG9vbHMvYm9vdGNvbmZpZyAtQ2BgKSBhbmQgcHJlcGVuZGluZ1xcbitpdCB0byBgYGJvb3RfY29tbWFuZF9saW5lYGAgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cCwgc28gdGhlIGtleXNcXG4rYXJlIHZpc2libGUgdG8gYGBwYXJzZV9lYXJseV9wYXJhbSgpYGAuXFxuK1xcbitUaGUgb3B0aW9uIHJlcXVpcmVzIGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEPXlgYCwgYSBub24tZW1wdHlcXG4rYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURfRklMRWBgLCBgYENPTkZJR19DTURMSU5FYGAgdG8gYmUgZW1wdHksIGFuZFxcbithbiBhcmNoaXRlY3R1cmUgdGhhdCBzZWxlY3RzIGBgQ09ORklHX0FSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgYC5cXG4rQ3VycmVudGx5IG9ubHkgeDg2IHNlbGVjdHMgaXQ7IG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgdGhlIGVtYmVkZGVkXFxuK2Jvb3Rjb25maWcgc3RpbGwgd29ya3MsIGJ1dCBvbmx5IHRocm91Z2ggdGhlIGxhdGUgcnVudGltZSBwYXJzZXIuXFxuK1xcbitUaGUgc2FtZSBgYGJvb3Rjb25maWdgYCBvcHQtaW4gYXBwbGllcyBhcyBlbHNld2hlcmU6IHRoZSByZW5kZXJlZCBrZXlzXFxuK2FyZSBwcmVwZW5kZWQgb25seSB3aGVuIGBgYm9vdGNvbmZpZ2BgIChpbiBhbnkgZm9ybSkgYXBwZWFycyBvbiB0aGVcXG4ra2VybmVsIGNvbW1hbmQgbGluZSwgb3Igd2hlbiBgYENPTkZJR19CT09UX0NPTkZJR19GT1JDRWBgIGlzIHNldCwgd2hpY2hcXG4rZGVmYXVsdHMgdG8gYGB5YGAgd2hlbiBgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRGBgIGlzIHNldC5cXG4rXFxuK0ZvciBleGFtcGxlLCBnaXZlbjo6XFxuK1xcbisga2VybmVsIHtcXG4rICAgbG9nbGV2ZWwgPSA3XFxuKyAgIG1lbSA9IDRHXFxuKyB9XFxuK1xcbit0aGUga2VybmVsIGJvb3RzIGFzIGlmIGBgbG9nbGV2ZWw9NyBtZW09NEdgYCBoYWQgYmVlbiBwcmVwZW5kZWQgdG8gdGhlXFxuK2Jvb3Rsb2FkZXIgY29tbWFuZCBsaW5lLCB3aXRoIHRoZSB2YWx1ZXMgdmlzaWJsZSB0byBlYXJseS1wYXJzZWRcXG4raGFuZGxlcnMuIENvbW1hLXNlcGFyYXRlZCB2YWx1ZXMgYXJlIHN0aWxsIGV4cGFuZGVkIGludG8gbXVsdGlwbGVcXG4rY21kbGluZSBlbnRyaWVzIHBlciB0aGUgYm9vdGNvbmZpZyBhcnJheSBjb252ZW50aW9uIC0tIHRoZSBlbWJlZGRlZFxcbitgYGtlcm5lbC5lYXJseWNvbiA9IFxcXCJ1YXJ0ODI1MCxpbywweDNmOFxcXCJgYCBtdXN0IGJlIHF1b3RlZCB0byBsYW5kIGFzIGFcXG4rc2luZ2xlIGBgZWFybHljb249YGAgZW50cnksIGV4YWN0bHkgYXMgZm9yIHRoZSBydW50aW1lIHBhcnNlci5cXG4rXFxuK0lmIHRoZSByZW5kZXJlZCBzdHJpbmcgd291bGQgbm90IGZpdCBpbiBgYENPTU1BTkRfTElORV9TSVpFYGAgdG9nZXRoZXJcXG4rd2l0aCB0aGUgZXhpc3RpbmcgY29tbWFuZCBsaW5lLCB0aGUgcHJlcGVuZCBpcyBza2lwcGVkIGFuZCBhbiBlcnJvciBpc1xcbitsb2dnZWQsIHNvIGFuIG92ZXJzaXplZCBlbWJlZGRlZCBib290Y29uZmlnIGNhbm5vdCBicmljayBhIGJvb3QuXFxuK1xcbitJbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbW1hbmQgbGluZSBhbmQgYm9vdGNvbmZpZyBzb3VyY2VzXFxuK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cXG4rXFxuK1dpdGggYGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUc9eWBgIHRoZSByZW5kZXJlZCBgYGtlcm5lbGBgXFxuK3N1YnRyZWUgYmVoYXZlcyBsaWtlIGEgYnVpbGQtdGltZSBjb21tYW5kIGxpbmUgKHNpbWlsYXIgdG9cXG4rYGBDT05GSUdfQ01ETElORWBgKSwgbm90IGxpa2UgYSBib290Y29uZmlnIHNvdXJjZS4gSXQgaXMgcHJlcGVuZGVkIHRvXFxuK2BgYm9vdF9jb21tYW5kX2xpbmVgYCBpbiBgYHNldHVwX2FyY2goKWBgLCBiZWZvcmUgYGBwYXJzZV9lYXJseV9wYXJhbSgpYGBcXG4rYW5kIGxvbmcgYmVmb3JlIHRoZSBydW50aW1lIHBhcnNlciBsb29rcyBhdCBhbiBpbml0cmQuIE9wdGlvbnMgY2FuIHJlYWNoXFxuK3RoZSBrZXJuZWwgZnJvbSB1cCB0byBmb3VyIHBsYWNlczpcXG4rXFxuKy0gQm9vdGxvYWRlciBjb21tYW5kIGxpbmU6IHRoZSBhcmd1bWVudHMgdGhlIGJvb3QgbG9hZGVyIHBhc3Nlcy4gVGhlXFxuKyAgZW1iZWRkZWQgY21kbGluZSBpcyBwcmVwZW5kZWQgaW4gZnJvbnQgb2YgdGhlbSwgc28gZm9yIGxhc3Qtb25lLXdpbnNcXG4rICBwYXJhbWV0ZXJzIGEgYm9vdGxvYWRlciBvcHRpb24gc3RpbGwgb3ZlcnJpZGVzIHRoZSBlbWJlZGRlZCB2YWx1ZS5cXG4rICBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUuXFxuKy0gRW1iZWRkZWQgY21kbGluZSAodGhpcyBvcHRpb24pOiB0aGUgcmVuZGVyZWQgYGBrZXJuZWxgYCBzdWJ0cmVlLFxcbisgIHByZXBlbmRlZCBlYXJseSBzbyBpdCBpcyBzZWVuIGJ5IGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgLiBWaXNpYmxlIGluXFxuKyAgL3Byb2MvY21kbGluZS5cXG4rLSBJbml0cmQgYm9vdGNvbmZpZzogcGFyc2VkIGxhdGUgaW4gYGBzZXR1cF9ib290X2NvbmZpZygpYGA7IGl0c1xcbisgIGBga2VybmVsYGAga2V5cyBhcmUgcGxhY2VkIGFoZWFkIG9mIGBgYm9vdF9jb21tYW5kX2xpbmVgYCwgaS5lLiBiZWZvcmVcXG4rICB0aGUgZW1iZWRkZWQgY21kbGluZSwgc28gbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBBcyBhXFxuKyAgYm9vdGNvbmZpZyBzb3VyY2UsIGFuIGluaXRyZCBib290Y29uZmlnIHN0aWxsIHJlcGxhY2VzIHRoZSBlbWJlZGRlZFxcbisgIGJvb3Rjb25maWcuIFZpc2libGUgaW4gL3Byb2MvY21kbGluZSBhbmQgL3Byb2MvYm9vdGNvbmZpZy5cXG4rLSBFbWJlZGRlZCBib290Y29uZmlnIChydW50aW1lKTogcGFyc2VkIGxhdGUsIG9ubHkgd2hlbiBubyBpbml0cmRcXG4rICBib290Y29uZmlnIGlzIHByZXNlbnQuIFZpc2libGUgaW4gL3Byb2MvY21kbGluZSBhbmQgL3Byb2MvYm9vdGNvbmZpZy5cXG4rXFxuK1NvIHdpdGggdGhpcyBvcHRpb24gdGhlIGVtYmVkZGVkIGBga2VybmVsLipgYCB2YWx1ZXMgdGFrZSBwcmVjZWRlbmNlXFxuK292ZXIgYW4gaW5pdHJkIGJvb3Rjb25maWcncyBgYGtlcm5lbC4qYGAgdmFsdWVzOiBmb3IgZWFybHkgcGFyYW1ldGVyc1xcbit0aGUgaW5pdHJkIGlzIG5vdCBwYXJzZWQgeWV0LCBhbmQgZm9yIG9yZGluYXJ5IHBhcmFtZXRlcnMgdGhlIGVtYmVkZGVkXFxuK2tleXMgbGFuZCBsYXRlciBpbiB0aGUgY29tbWFuZCBsaW5lLiBJZiB5b3UgbmVlZCBhbiBpbml0cmQgYm9vdGNvbmZpZyB0b1xcbitvdmVycmlkZSB0aGUgZW1iZWRkZWQgYGBrZXJuZWwuKmBgIGtleXMsIGxlYXZlIHRoaXMgb3B0aW9uIG9mZiBhbmQgcmVseVxcbitvbiB0aGUgcnVudGltZSBwYXJzZXIuXFxuK1xcbitUaGUgcmVuZGVyZWQgc3RyaW5nIGlzIHBhcnQgb2YgdGhlIGNvbW1hbmQgbGluZSwgc28gaXQgYXBwZWFycyBpblxcbisvcHJvYy9jbWRsaW5lLiBJdCBpcyBkZWxpYmVyYXRlbHkgbm90IHNob3duIGluIC9wcm9jL2Jvb3Rjb25maWc6IHRoYXRcXG4rZmlsZSBrZWVwcyByZXBvcnRpbmcgdGhlIHBhcnNlZCBib290Y29uZmlnIHRyZWUgLS0gdGhlIGluaXRyZCBib290Y29uZmlnXFxuK2lmIHByZXNlbnQsIG90aGVyd2lzZSB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyAtLSBpbmRlcGVuZGVudCBvZiB3aGV0aGVyXFxuK2J1aWxkLXRpbWUgY21kbGluZSByZW5kZXJpbmcgaXMgZW5hYmxlZC5cXG4rXFxuIEtlcm5lbCBwYXJhbWV0ZXJzIHZpYSBCb290IENvbmZpZ1xcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCBiZjk3Mzk5ZDM1N2ZhMC4uNDgzNDA2NWE0YmYyZjcgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC05ODQ2LDYgKzk4NDYsNyBAQCBGOlxcdGZzL3Byb2MvYm9vdGNvbmZpZy5jXFxuIEY6XFx0aW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcXG4gRjpcXHRsaWIvYm9vdGNvbmZpZy1kYXRhLlNcXG4gRjpcXHRsaWIvYm9vdGNvbmZpZy5jXFxuK0Y6XFx0bGliL2VtYmVkZGVkLWNtZGxpbmUuU1xcbiBGOlxcdHRvb2xzL2Jvb3Rjb25maWcvKlxcbiBGOlxcdHRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy8qXFxuIFxcbmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlXFxuaW5kZXggMTJmZDNkMmQ0N2I1ODIuLjM0ZmIzNTcxYmVjODFkIDEwMDY0NFxcbi0tLSBhL01ha2VmaWxlXFxuKysrIGIvTWFrZWZpbGVcXG5AQCAtMTU1Miw2ICsxNTUyLDIyIEBAIHByZXBhcmU6IHRvb2xzL2JwZi9yZXNvbHZlX2J0Zmlkc1xcbiBlbmRpZlxcbiBlbmRpZlxcbiBcXG4rIyB0b29scy9ib290Y29uZmlnIHJlbmRlcnMgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byBhIGNtZGxpbmUgYXQgYnVpbGQgdGltZS5cXG4raWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuK3ByZXBhcmU6IHRvb2xzL2Jvb3Rjb25maWdcXG4rZW5kaWZcXG4rXFxuKyMgdG9vbHMvYm9vdGNvbmZpZyBpcyBydW4gb24gdGhlIGJ1aWxkIGhvc3QgZHVyaW5nIHByZXBhcmUsIHNvIGZvcmNlIGEgaG9zdFxcbisjIGJpbmFyeSBoZXJlOyBpdHMgb3duIE1ha2VmaWxlIGtlZXBzICQoQ0MpIGZvciBzdGFuZGFsb25lIGFuZCBjcm9zcyBidWlsZHMuXFxuKyMgQ1JPU1NfQ09NUElMRT0gaXMgY2xlYXJlZCBzbyB0b29scy9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGUgZG9lcyBub3QgaW5qZWN0XFxuKyMgdGhlIHRhcmdldCdzIC0tdGFyZ2V0PS8tLXN5c3Jvb3Q9IGZsYWdzIGludG8gdGhlIGhvc3QgY2xhbmcgaW52b2NhdGlvbiB1bmRlclxcbisjIExMVk09MSBjcm9zcyBidWlsZHMgKHdoaWNoIHdvdWxkIHByb2R1Y2UgYSB0YXJnZXQgYmluYXJ5IHRoYXQgZmFpbHMgdG8gZXhlYykuXFxuK3Rvb2xzL2Jvb3Rjb25maWc6IGV4cG9ydCBDQyA6PSAkKEhPU1RDQylcXG4rdG9vbHMvYm9vdGNvbmZpZzogRk9SQ0VcXG4rXFx0JChRKW1rZGlyIC1wICQob2JqdHJlZSkvdG9vbHNcXG4rXFx0JChRKSQoTUFLRSkgTz0kKGFic3BhdGggJChvYmp0cmVlKSkgc3ViZGlyPXRvb2xzIC1DICQoc3JjdHJlZSkvdG9vbHMvIFxcXFxcXG4rXFx0XFx0Ym9vdGNvbmZpZyBDUk9TU19DT01QSUxFPVxcbitcXG4gIyBUaGUgdG9vbHMgYnVpbGQgc3lzdGVtIGlzIG5vdCBhIHBhcnQgb2YgS2J1aWxkIGFuZCB0ZW5kcyB0byBpbnRyb2R1Y2VcXG4gIyBpdHMgb3duIHVuaXF1ZSBpc3N1ZXMuIElmIHlvdSBuZWVkIHRvIGludGVncmF0ZSBhIG5ldyB0b29sIGludG8gS2J1aWxkLFxcbiAjIHBsZWFzZSBjb25zaWRlciBsb2NhdGluZyB0aGF0IHRvb2wgb3V0c2lkZSB0aGUgdG9vbHMvIHRyZWUgYW5kIHVzaW5nIHRoZVxcbkBAIC0xNTc4LDYgKzE1OTQsMTUgQEAgaWZuZXEgKCQod2lsZGNhcmQgJChvYmp0b29sX08pKSwpXFxuIFxcdCQoUSkkKE1BS0UpIC1zQyAkKGFic19zcmN0cmVlKS90b29scy9vYmp0b29sIE89JChvYmp0b29sX08pIHNyY3RyZWU9JChhYnNfc3JjdHJlZSkgJChwYXRzdWJzdCBvYmp0b29sXyUsJSwkQClcXG4gZW5kaWZcXG4gXFxuK1BIT05ZICs9IGJvb3Rjb25maWdfY2xlYW5cXG4rXFxuK2Jvb3Rjb25maWdfTyA9ICQoYWJzcGF0aCAkKG9ianRyZWUpKS90b29scy9ib290Y29uZmlnXFxuK1xcbitib290Y29uZmlnX2NsZWFuOlxcbitpZm5lcSAoJCh3aWxkY2FyZCAkKGJvb3Rjb25maWdfTykpLClcXG4rXFx0JChRKSQoTUFLRSkgLXNDICQoc3JjdHJlZSkvdG9vbHMvYm9vdGNvbmZpZyBPPSQoYm9vdGNvbmZpZ19PKSBjbGVhblxcbitlbmRpZlxcbitcXG4gdG9vbHMvOiBGT1JDRVxcbiBcXHQkKFEpbWtkaXIgLXAgJChvYmp0cmVlKS90b29sc1xcbiBcXHQkKFEpJChNQUtFKSBPPSQoYWJzcGF0aCAkKG9ianRyZWUpKSBzdWJkaXI9dG9vbHMgLUMgJChzcmN0cmVlKS90b29scy9cXG5AQCAtMTc1Myw3ICsxNzc4LDcgQEAgdm1saW51eGNsZWFuOlxcbiBcXHQkKFEpJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9saW5rLXZtbGludXguc2ggY2xlYW5cXG4gXFx0JChRKSQoaWYgJChBUkNIX1BPU1RMSU5LKSwgJChNQUtFKSAtZiAkKEFSQ0hfUE9TVExJTkspIGNsZWFuKVxcbiBcXG4tY2xlYW46IGFyY2hjbGVhbiB2bWxpbnV4Y2xlYW4gcmVzb2x2ZV9idGZpZHNfY2xlYW4gb2JqdG9vbF9jbGVhblxcbitjbGVhbjogYXJjaGNsZWFuIHZtbGludXhjbGVhbiByZXNvbHZlX2J0Zmlkc19jbGVhbiBvYmp0b29sX2NsZWFuIGJvb3Rjb25maWdfY2xlYW5cXG4gXFxuICMgbXJwcm9wZXIgLSBEZWxldGUgYWxsIGdlbmVyYXRlZCBmaWxlcywgaW5jbHVkaW5nIC5jb25maWdcXG4gI1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xcbmluZGV4IGJkYWQ5MGYyMTBlNGJmLi5mZDk3OWUwYmUxZjBlMCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9LY29uZmlnXFxuKysrIGIvYXJjaC94ODYvS2NvbmZpZ1xcbkBAIC0xMjcsNiArMTI3LDcgQEAgY29uZmlnIFg4NlxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lOR1xcdGlmIFg4Nl82NFxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19LTUFQX0xPQ0FMX0ZPUkNFX01BUFxcdGlmIE5SX0NQVVMgXFx1MDAzYz0gNDA5NlxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19DRklcXHRcXHRpZiBYODZfNjRcXG4rXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcXG4gXFx0c2VsZWN0IEFSQ0hfVVNFU19DRklfVFJBUFNcXHRcXHRpZiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgQ0ZJXFxuIFxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0xUT19DTEFOR1xcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkdfVEhJTlxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jXFxuaW5kZXggNDY4ODJjZTc5YzNhNGQuLjg4YjA1NWE0NjU5MWVmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jXFxuKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmNcXG5AQCAtNiw2ICs2LDcgQEBcXG4gICogcGFydHMgb2YgZWFybHkga2VybmVsIGluaXRpYWxpemF0aW9uLlxcbiAgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FjcGkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Jvb3Rjb25maWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbnNvbGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NwdS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXFx1MDAzZVxcbkBAIC04ODAsNyArODgxLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IHg4Nl9yZXBvcnRfbngodm9pZClcXG4gICpcXG4gICogTm90ZTogT24geDg2XzY0LCBmaXhtYXBzIGFyZSByZWFkeSBmb3IgdXNlIGV2ZW4gYmVmb3JlIHRoaXMgaXMgY2FsbGVkLlxcbiAgKi9cXG4tXFxuIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcXG4ge1xcbiAjaWZkZWYgQ09ORklHX1g4Nl8zMlxcbkBAIC05MjQsNiArOTI0LDE4IEBAIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcXG4gXFx0YnVpbHRpbl9jbWRsaW5lX2FkZGVkID0gdHJ1ZTtcXG4gI2VuZGlmXFxuIFxcbisjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuK1xcdC8qXFxuK1xcdCAqIFByZXBlbmQgdGhlIGJ1aWxkLXRpbWUtcmVuZGVyZWQgZW1iZWRkZWQgXFxcImtlcm5lbFxcXCIga2V5cyBoZXJlIHNvXFxuK1xcdCAqIHBhcnNlX2Vhcmx5X3BhcmFtKCkgYmVsb3cgc2VlcyB0aGVtLCB1c2luZyB0aGUgc2FtZSBvcHQtaW4gYXMgdGhlXFxuK1xcdCAqIHJ1bnRpbWUgcGFyc2VyLCBwbHVzIHRoZSBidWlsZC10aW1lIENPTkZJR19CT09UX0NPTkZJR19GT1JDRS5cXG4rXFx0ICovXFxuK1xcdGlmIChib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkKGJvb3RfY29tbWFuZF9saW5lLCBOVUxMKSB8fFxcbitcXHQgICAgSVNfRU5BQkxFRChDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0UpKVxcbitcXHRcXHR4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGJvb3RfY29tbWFuZF9saW5lLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIENPTU1BTkRfTElORV9TSVpFKTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRzdHJzY3B5KGNvbW1hbmRfbGluZSwgYm9vdF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTtcXG4gXFx0KmNtZGxpbmVfcCA9IGNvbW1hbmRfbGluZTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oIGIvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcXG5pbmRleCAxYzdmM2I3NGZmY2YzOC4uZGVkYTUwNzUwMGRhMjMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaFxcbkBAIC0zMDgsNCArMzA4LDE4IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqeGJjX2dldF9lbWJlZGRlZF9ib290Y29uZmlnKHNpemVfdCAqc2l6ZSlcXG4gfVxcbiAjZW5kaWZcXG4gXFxuKy8qIEJvb3Rjb25maWcgb3B0LWluIGRldGVjdGlvbiwgc2hhcmVkIGJ5IHNldHVwX2FyY2goKSBhbmQgc2V0dXBfYm9vdF9jb25maWcoKSAqL1xcbisjaWZkZWYgQ09ORklHX0JPT1RfQ09ORklHXFxuK2Jvb2wgX19pbml0IGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoY29uc3QgY2hhciAqYm9vdF9jbWRsaW5lLCBpbnQgKmVuZF9vZmZzZXQpO1xcbisjZW5kaWZcXG4rXFxuKy8qIEJ1aWxkLXRpbWUtcmVuZGVyZWQgYm9vdGNvbmZpZyBjbWRsaW5lIHByZXBlbmRlZCBpbiBzZXR1cF9hcmNoKCkgKi9cXG4rI2lmZGVmIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xcbit2b2lkIF9faW5pdCB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpO1xcbitib29sIF9faW5pdCB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKHZvaWQpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShjaGFyICpkc3QsIHNpemVfdCBzaXplKSB7IH1cXG4rc3RhdGljIGlubGluZSBib29sIHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG4rI2VuZGlmXFxuK1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnXFxuaW5kZXggNTIzMGQ0ODc5YjFjODQuLjU5ODY5MGVjMzEzYTI5IDEwMDY0NFxcbi0tLSBhL2luaXQvS2NvbmZpZ1xcbisrKyBiL2luaXQvS2NvbmZpZ1xcbkBAIC0xNTY2LDYgKzE1NjYsNDIgQEAgY29uZmlnIEJPT1RfQ09ORklHX0VNQkVEX0ZJTEVcXG4gXFx0ICBUaGlzIGJvb3Rjb25maWcgd2lsbCBiZSB1c2VkIGlmIHRoZXJlIGlzIG5vIGluaXRyZCBvciBubyBvdGhlclxcbiBcXHQgIGJvb3Rjb25maWcgaW4gdGhlIGluaXRyZC5cXG4gXFxuK2NvbmZpZyBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuK1xcdGJvb2xcXG4rXFx0aGVscFxcbitcXHQgIFNpbGVudCBzeW1ib2w7IG5vIEMgY29kZSByZWFkcyBpdCBkaXJlY3RseS4gQXJjaGl0ZWN0dXJlc1xcbitcXHQgIHNlbGVjdCBpdCBvbmNlIHRoZWlyIHNldHVwX2FyY2goKSBjYWxsc1xcbitcXHQgIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSBiZWZvcmUgcGFyc2VfZWFybHlfcGFyYW0oKS5cXG4rXFx0ICBJdHMgb25seSByb2xlIGlzIHRvIGdhdGUgdGhlIHVzZXItdmlzaWJsZVxcbitcXHQgIENNRExJTkVfRlJPTV9CT09UQ09ORklHIG9wdGlvbiBwZXItYXJjaCwgdGhlIHNhbWVcXG4rXFx0ICBBUkNIX1NVUFBPUlRTXyogaWRpb20gdXNlZCBieSBBUkNIX1NVUFBPUlRTX0NGSSwgZXRjLlxcbitcXG4rY29uZmlnIENNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuK1xcdGJvb2wgXFxcIlJlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGFzIGtlcm5lbCBjbWRsaW5lIGF0IGJ1aWxkIHRpbWVcXFwiXFxuK1xcdGRlcGVuZHMgb24gQk9PVF9DT05GSUdfRU1CRURfRklMRSAhPSBcXFwiXFxcIlxcbitcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcXG4rXFx0ZGVwZW5kcyBvbiBDTURMSU5FID0gXFxcIlxcXCJcXG4rXFx0ZGVmYXVsdCBuXFxuK1xcdGhlbHBcXG4rXFx0ICBSZW5kZXIgdGhlIFxcXCJrZXJuZWxcXFwiIHN1YnRyZWUgb2YgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgZmlsZSBpbnRvIGFcXG4rXFx0ICBmbGF0IGNtZGxpbmUgc3RyaW5nIGF0IGtlcm5lbCBidWlsZCB0aW1lIGFuZCBwcmVwZW5kIGl0IHRvXFxuK1xcdCAgYm9vdF9jb21tYW5kX2xpbmUgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cC4gVGhpcyBtYWtlc1xcbitcXHQgIGVhcmx5X3BhcmFtKCkgaGFuZGxlcnMgKGUuZy4gbWVtPSwgZWFybHljb249LCBsb2dsZXZlbD0pIHNlZSB0aGVcXG4rXFx0ICB2YWx1ZXMgc3VwcGxpZWQgdmlhIHRoZSBlbWJlZGRlZCBib290Y29uZmlnLlxcbitcXG4rXFx0ICBUaGUgcnVudGltZSBib290Y29uZmlnIHBhcnNlciBpcyB1bmFmZmVjdGVkLCBzbyB0cmVlLXN0cnVjdHVyZWRcXG4rXFx0ICBjb25zdW1lcnMgc3VjaCBhcyBmdHJhY2UgYm9vdC10aW1lIHRyYWNpbmcga2VlcCB3b3JraW5nLlxcbitcXG4rXFx0ICBOb3RlOiB3aGVuIGFuIGluaXRyZCBhbHNvIGNhcnJpZXMgYSBib290Y29uZmlnLCBpdHMgXFxcImtlcm5lbFxcXCJcXG4rXFx0ICBzdWJ0cmVlIGlzIHN0aWxsIHBhcnNlZCBhdCBydW50aW1lLCBidXQgdGhlIGVtYmVkZGVkIFxcXCJrZXJuZWxcXFwiXFxuK1xcdCAga2V5cyByZW1haW4gaW4gYm9vdF9jb21tYW5kX2xpbmUgZm9yIHBhcnNlX2Vhcmx5X3BhcmFtKCkgYW5kXFxuK1xcdCAgZW5kIHVwIGxhdGVyIHRoYW4gdGhlIGluaXRyZCBrZXlzIGluIHNhdmVkX2NvbW1hbmRfbGluZSwgc29cXG4rXFx0ICBwYXJzZV9hcmdzKCkgbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBJZiB5b3UgbmVlZFxcbitcXHQgIGluaXRyZCB0byBvdmVycmlkZSBlbWJlZGRlZCBrZXJuZWwuKiBrZXlzLCBsZWF2ZSB0aGlzIG9wdGlvblxcbitcXHQgIG9mZi5cXG4rXFxuK1xcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4rXFxuIGNvbmZpZyBDTURMSU5FX0xPR19XUkFQX0lERUFMX0xFTlxcbiBcXHRpbnQgXFxcIkxlbmd0aCB0byB0cnkgdG8gd3JhcCB0aGUgY21kbGluZSB3aGVuIGxvZ2dlZCBhdCBib290XFxcIlxcbiBcXHRkZWZhdWx0IDEwMjFcXG5kaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uY1xcbmluZGV4IGUzNjMyMzJiNDI4YjQ3Li4zOWE1MThhNDcyNDIyMyAxMDA2NDRcXG4tLS0gYS9pbml0L21haW4uY1xcbisrKyBiL2luaXQvbWFpbi5jXFxuQEAgLTM1Niw0NSArMzU2LDMzIEBAIHN0YXRpYyBjaGFyICogX19pbml0IHhiY19tYWtlX2NtZGxpbmUoY29uc3QgY2hhciAqa2V5KVxcbiBcXHRyZXR1cm4gbmV3X2NtZGxpbmU7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgX19pbml0IGJvb3Rjb25maWdfcGFyYW1zKGNoYXIgKnBhcmFtLCBjaGFyICp2YWwsXFxuLVxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICp1bnVzZWQsIHZvaWQgKmFyZylcXG4te1xcbi1cXHRpZiAoc3RyY21wKHBhcmFtLCBcXFwiYm9vdGNvbmZpZ1xcXCIpID09IDApIHtcXG4tXFx0XFx0Ym9vdGNvbmZpZ19mb3VuZCA9IHRydWU7XFxuLVxcdH1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgX19pbml0IHdhcm5fYm9vdGNvbmZpZyhjaGFyICpzdHIpXFxuIHtcXG4tXFx0LyogVGhlICdib290Y29uZmlnJyBoYXMgYmVlbiBoYW5kbGVkIGJ5IGJvb3Rjb25maWdfcGFyYW1zKCkuICovXFxuK1xcdC8qIFRoZSAnYm9vdGNvbmZpZycgb3B0aW9uIGlzIGhhbmRsZWQgYnkgc2V0dXBfYm9vdF9jb25maWcoKS4gKi9cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290X2NvbmZpZyh2b2lkKVxcbiB7XFxuLVxcdHN0YXRpYyBjaGFyIHRtcF9jbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXSBfX2luaXRkYXRhO1xcbiBcXHRjb25zdCBjaGFyICptc2csICpkYXRhO1xcbi1cXHRpbnQgcG9zLCByZXQ7XFxuK1xcdGludCBwb3MsIHJldCwgb2ZmcztcXG4gXFx0c2l6ZV90IHNpemU7XFxuLVxcdGNoYXIgKmVycjtcXG4rXFx0Ym9vbCBmcm9tX2VtYmVkZGVkID0gZmFsc2U7XFxuIFxcbiBcXHQvKiBDdXQgb3V0IHRoZSBib290Y29uZmlnIGRhdGEgZXZlbiBpZiB3ZSBoYXZlIG5vIGJvb3Rjb25maWcgb3B0aW9uICovXFxuIFxcdGRhdGEgPSBnZXRfYm9vdF9jb25maWdfZnJvbV9pbml0cmQoXFx1MDAyNnNpemUpO1xcbiBcXHQvKiBJZiB0aGVyZSBpcyBubyBib290Y29uZmlnIGluIGluaXRyZCwgdHJ5IGVtYmVkZGVkIG9uZS4gKi9cXG4tXFx0aWYgKCFkYXRhKVxcbitcXHRpZiAoIWRhdGEpIHtcXG4gXFx0XFx0ZGF0YSA9IHhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhcXHUwMDI2c2l6ZSk7XFxuK1xcdFxcdGZyb21fZW1iZWRkZWQgPSB0cnVlO1xcbitcXHR9XFxuIFxcbi1cXHRzdHJzY3B5KHRtcF9jbWRsaW5lLCBib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpO1xcbi1cXHRlcnIgPSBwYXJzZV9hcmdzKFxcXCJib290Y29uZmlnXFxcIiwgdG1wX2NtZGxpbmUsIE5VTEwsIDAsIDAsIDAsIE5VTEwsXFxuLVxcdFxcdFxcdCBib290Y29uZmlnX3BhcmFtcyk7XFxuLVxcbi1cXHRpZiAoSVNfRVJSKGVycikgfHwgIShib290Y29uZmlnX2ZvdW5kIHx8IElTX0VOQUJMRUQoQ09ORklHX0JPT1RfQ09ORklHX0ZPUkNFKSkpXFxuK1xcdGJvb3Rjb25maWdfZm91bmQgPSBib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkKGJvb3RfY29tbWFuZF9saW5lLCBcXHUwMDI2b2Zmcyk7XFxuK1xcdGlmICghKGJvb3Rjb25maWdfZm91bmQgfHwgSVNfRU5BQkxFRChDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0UpKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0LyogcGFyc2VfYXJncygpIHN0b3BzIGF0IHRoZSBuZXh0IHBhcmFtIG9mICctLScgYW5kIHJldHVybnMgYW4gYWRkcmVzcyAqL1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRpbml0YXJnc19vZmZzID0gZXJyIC0gdG1wX2NtZGxpbmU7XFxuK1xcdC8qIE9mZnNldCBvZiB0aGUgaW5pdCBhcmd1bWVudHMgYWZ0ZXIgYSBcXFwiLS1cXFwiLCBsb2NhdGVkIGJ5IHRoZSBoZWxwZXIuICovXFxuK1xcdGluaXRhcmdzX29mZnMgPSBvZmZzO1xcbiBcXG4gXFx0aWYgKCFkYXRhKSB7XFxuIFxcdFxcdC8qIElmIHVzZXIgaW50ZW5kZWQgdG8gdXNlIGJvb3Rjb25maWcsIHNob3cgYW4gZXJyb3IgbGV2ZWwgbWVzc2FnZSAqL1xcbkBAIC00MjEsOCArNDA5LDI0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290X2NvbmZpZyh2b2lkKVxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHR4YmNfZ2V0X2luZm8oXFx1MDAyNnJldCwgTlVMTCk7XFxuIFxcdFxcdHByX2luZm8oXFxcIkxvYWQgYm9vdGNvbmZpZzogJWxkIGJ5dGVzICVkIG5vZGVzXFxcXG5cXFwiLCAobG9uZylzaXplLCByZXQpO1xcbi1cXHRcXHQvKiBrZXlzIHN0YXJ0aW5nIHdpdGggXFxcImtlcm5lbC5cXFwiIGFyZSBwYXNzZWQgdmlhIGNtZGxpbmUgKi9cXG4tXFx0XFx0ZXh0cmFfY29tbWFuZF9saW5lID0geGJjX21ha2VfY21kbGluZShcXFwia2VybmVsXFxcIik7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIGtleXMgc3RhcnRpbmcgd2l0aCBcXFwia2VybmVsLlxcXCIgYXJlIHBhc3NlZCB2aWEgY21kbGluZS4gV2hlblxcbitcXHRcXHQgKiB0aGlzIGJvb3Rjb25maWcgY2FtZSBmcm9tIHRoZSBlbWJlZGRlZCBzb3VyY2UgYW5kXFxuK1xcdFxcdCAqIHNldHVwX2FyY2goKSBhbHJlYWR5IHByZXBlbmRlZCB0aGUgcmVuZGVyZWQgXFxcImtlcm5lbFxcXCIgc3VidHJlZVxcbitcXHRcXHQgKiB0byBib290X2NvbW1hbmRfbGluZSwgcmVuZGVyaW5nIGFnYWluIGhlcmUgd291bGQgZHVwbGljYXRlXFxuK1xcdFxcdCAqIHRoZSBrZXlzIGluIHNhdmVkX2NvbW1hbmRfbGluZSBhbmQgbWFrZSBhY2N1bXVsYXRpbmcgaGFuZGxlcnNcXG4rXFx0XFx0ICogKGNvbnNvbGU9LCBlYXJseWNvbj0sIC4uLikgcmUtcmVnaXN0ZXIgdGhlIHNhbWUgdmFsdWUuIFNraXBcXG4rXFx0XFx0ICogb25seSB3aGVuIHRoZSBwcmVwZW5kIHJlYWxseSBoYXBwZW5lZC5cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogT24gYXJjaGVzIHRoYXQgZG8gbm90IHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHLFxcbitcXHRcXHQgKiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcgaXMgdW5zZWxlY3RhYmxlIGFuZFxcbitcXHRcXHQgKiB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkgY29sbGFwc2VzIHRvIGEgc3R1YiByZXR1cm5pbmdcXG4rXFx0XFx0ICogZmFsc2UsIHNvIHRoaXMgcGF0aCBzdGlsbCBydW5zIGFuZCB0aGUgZW1iZWRkZWQgXFxcImtlcm5lbFxcXCJcXG4rXFx0XFx0ICoga2V5cyByZWFjaCB0aGUgY21kbGluZSB2aWEgdGhlIHJ1bnRpbWUgcGFyc2VyIGV4YWN0bHkgYXNcXG4rXFx0XFx0ICogYmVmb3JlIHRoaXMgc2VyaWVzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFmcm9tX2VtYmVkZGVkIHx8ICF4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkpXFxuK1xcdFxcdFxcdGV4dHJhX2NvbW1hbmRfbGluZSA9IHhiY19tYWtlX2NtZGxpbmUoXFxcImtlcm5lbFxcXCIpO1xcbiBcXHRcXHQvKiBBbHNvLCBcXFwiaW5pdC5cXFwiIGtleXMgYXJlIGluaXQgYXJndW1lbnRzICovXFxuIFxcdFxcdGV4dHJhX2luaXRfYXJncyA9IHhiY19tYWtlX2NtZGxpbmUoXFxcImluaXRcXFwiKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGVcXG5pbmRleCA3Zjc1Y2M2ZWRmOTRhZi4uNGNjZGNlMmZkNWU1YjAgMTAwNjQ0XFxuLS0tIGEvbGliL01ha2VmaWxlXFxuKysrIGIvbGliL01ha2VmaWxlXFxuQEAgLTI3Myw2ICsyNzMsMjIgQEAgZmlsZWNoa19kZWZiY29uZiA9IGNhdCAkKG9yICQocmVhbC1wcmVyZXFzKSwgL2Rldi9udWxsKVxcbiAkKG9iaikvZGVmYXVsdC5iY29uZjogJChDT05GSUdfQk9PVF9DT05GSUdfRU1CRURfRklMRSkgRk9SQ0VcXG4gXFx0JChjYWxsIGZpbGVjaGssZGVmYmNvbmYpXFxuIFxcbitvYmotJChDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcpICs9IGVtYmVkZGVkLWNtZGxpbmUub1xcbiskKG9iaikvZW1iZWRkZWQtY21kbGluZS5vOiAkKG9iaikvZW1iZWRkZWRfY21kbGluZS5iaW5cXG4rXFxuKyMgUmVuZGVyIHRoZSBib290Y29uZmlnIFxcXCJrZXJuZWxcXFwiIHN1YnRyZWUgdG8gYSBmbGF0IGNtZGxpbmUgc3RyaW5nIHVzaW5nXFxuKyMgdGhlIHVzZXJzcGFjZSB0b29scy9ib290Y29uZmlnIHBhcnNlciAoLUMgbW9kZSkuIFRoZSBydW50aW1lIHByZXBlbmRcXG4rIyBoZWxwZXIgZW5mb3JjZXMgQ09NTUFORF9MSU5FX1NJWkUgYXQgYm9vdCwgc28gbm8gYnVpbGQtdGltZSBzaXplXFxuKyMgY2hlY2sgaXMgcGVyZm9ybWVkIGhlcmUgKENPTU1BTkRfTElORV9TSVpFIGlzIGFuIGFyY2ggaGVhZGVyXFxuKyMgY29uc3RhbnQsIG5vdCBhIEtjb25maWcgdmFsdWUpLlxcbitxdWlldF9jbWRfcmVuZGVyX2NtZGxpbmUgPSBCQ09ORjJDICRAXFxuKyAgICAgIGNtZF9yZW5kZXJfY21kbGluZSA9IFxcXFxcXG4rXFx0JChvYmp0cmVlKS90b29scy9ib290Y29uZmlnL2Jvb3Rjb25maWcgLUMgJFxcdTAwM2MgXFx1MDAzZSAkQFxcbitcXG4rdGFyZ2V0cyArPSBlbWJlZGRlZF9jbWRsaW5lLmJpblxcbiskKG9iaikvZW1iZWRkZWRfY21kbGluZS5iaW46ICQob2JqKS9kZWZhdWx0LmJjb25mICQob2JqdHJlZSkvdG9vbHMvYm9vdGNvbmZpZy9ib290Y29uZmlnIEZPUkNFXFxuK1xcdCQoY2FsbCBpZl9jaGFuZ2VkLHJlbmRlcl9jbWRsaW5lKVxcbitcXG4gb2JqLSQoQ09ORklHX1JCVFJFRV9URVNUKSArPSByYnRyZWVfdGVzdC5vXFxuIG9iai0kKENPTkZJR19JTlRFUlZBTF9UUkVFX1RFU1QpICs9IGludGVydmFsX3RyZWVfdGVzdC5vXFxuIFxcbmRpZmYgLS1naXQgYS9saWIvYm9vdGNvbmZpZy5jIGIvbGliL2Jvb3Rjb25maWcuY1xcbmluZGV4IGY0NDViNzcwM2ZkZDk2Li44OWM4OGUzNTkxNzlmMCAxMDA2NDRcXG4tLS0gYS9saWIvYm9vdGNvbmZpZy5jXFxuKysrIGIvbGliL2Jvb3Rjb25maWcuY1xcbkBAIC0xOSw5ICsxOSwxMyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJybm8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NhY2hlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21waWxlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlcGFyYW0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByaW50ay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3ByaW50Zi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtYmxvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3NldHVwLmhcXHUwMDNlXFx0XFx0LyogQ09NTUFORF9MSU5FX1NJWkUgKi9cXG4gXFxuICNpZmRlZiBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURcXG4gLyogZW1iZWRkZWRfYm9vdGNvbmZpZ19kYXRhIGlzIGRlZmluZWQgaW4gYm9vdGNvbmZpZy1kYXRhLlMgKi9cXG5AQCAtMzQsNyArMzgsMTI5IEBAIGNvbnN0IGNoYXIgKiBfX2luaXQgeGJjX2dldF9lbWJlZGRlZF9ib290Y29uZmlnKHNpemVfdCAqc2l6ZSlcXG4gXFx0cmV0dXJuICgqc2l6ZSkgPyBlbWJlZGRlZF9ib290Y29uZmlnX2RhdGEgOiBOVUxMO1xcbiB9XFxuICNlbmRpZlxcbi0jZW5kaWZcXG4rXFxuKyNpZmRlZiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcXG4rLyogZW1iZWRkZWRfa2VybmVsX2NtZGxpbmUgaXMgZGVmaW5lZCBpbiBlbWJlZGRlZC1jbWRsaW5lLlMgKi9cXG4rZXh0ZXJuIF9fdmlzaWJsZSBjb25zdCBjaGFyIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lW107XFxuK2V4dGVybiBfX3Zpc2libGUgY29uc3QgY2hhciBlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmRbXTtcXG4rXFxuKy8qIFNldCBvbmNlIHRoZSBlbWJlZGRlZCBjbWRsaW5lIGhhcyBhY3R1YWxseSBiZWVuIHByZXBlbmRlZC4gKi9cXG4rc3RhdGljIGJvb2wgeGJjX2NtZGxpbmVfYXBwbGllZCBfX2luaXRkYXRhO1xcbitcXG4rLypcXG4rICogc3RyX3ByZXBlbmQoKSAtIFByZXBlbmQgQHNyYyBpbiBmcm9udCBvZiB0aGUgc3RyaW5nIGluIEBkc3QsIGluIHBsYWNlXFxuKyAqIEBkc3Q6IE5VTC10ZXJtaW5hdGVkIGRlc3RpbmF0aW9uIGJ1ZmZlciwgY3VycmVudGx5IEBkc3RfbGVuIGJ5dGVzIGxvbmdcXG4rICogQGRzdF9sZW46IGxlbmd0aCBvZiB0aGUgY3VycmVudCBAZHN0IHN0cmluZyAoZXhjbHVkaW5nIGl0cyBOVUwpXFxuKyAqIEBzcmM6IGJ5dGVzIHRvIHByZXBlbmQgKG5vdCBOVUwtdGVybWluYXRlZClcXG4rICogQHNyY19sZW46IG51bWJlciBvZiBieXRlcyBmcm9tIEBzcmMgdG8gcHJlcGVuZFxcbisgKlxcbisgKiBUaGUgY2FsbGVyIG11c3QgZ3VhcmFudGVlIEBkc3QgaGFzIHJvb20gZm9yIHNyY19sZW4gKyBkc3RfbGVuICsgMSBieXRlcy5cXG4rICogTW92aW5nIGRzdF9sZW4gKyAxIGJ5dGVzIGNhcnJpZXMgQGRzdCdzIE5VTCB0ZXJtaW5hdG9yIHRvbywgc28gYW4gZW1wdHlcXG4rICogQGRzdCBuZWVkcyBubyBzcGVjaWFsIGNhc2UuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBfX2luaXQgc3RyX3ByZXBlbmQoY2hhciAqZHN0LCBzaXplX3QgZHN0X2xlbixcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY19sZW4pXFxuK3tcXG4rXFx0bWVtbW92ZShkc3QgKyBzcmNfbGVuLCBkc3QsIGRzdF9sZW4gKyAxKTtcXG4rXFx0bWVtY3B5KGRzdCwgc3JjLCBzcmNfbGVuKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSAtIFByZXBlbmQgZW1iZWRkZWQgYm9vdGNvbmZpZyBjbWRsaW5lXFxuKyAqIEBkc3Q6IGNtZGxpbmUgYnVmZmVyIHRvIHByZXBlbmQgaW50byAobXVzdCBhbHJlYWR5IGNvbnRhaW4gYSBOVUwgYnl0ZSlcXG4rICogQHNpemU6IHRvdGFsIGNhcGFjaXR5IG9mIEBkc3QgaW4gYnl0ZXNcXG4rICpcXG4rICogUHJlcGVuZCB0aGUgYnVpbGQtdGltZS1yZW5kZXJlZCBcXFwia2VybmVsXFxcIiBzdWJ0cmVlIG9mIHRoZSBlbWJlZGRlZFxcbisgKiBib290Y29uZmlnIHRvIEBkc3QuIFRoZSByZW5kZXJlZCBzdHJpbmcgYWxyZWFkeSBlbmRzIHdpdGggYSBzaW5nbGVcXG4rICogc3BhY2UgKHRoZSB4YmNfc25wcmludF9jbWRsaW5lKCkgaW52YXJpYW50KSwgd2hpY2ggc2VydmVzIGFzIHRoZVxcbisgKiBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgZW1iZWRkZWQga2V5cyBhbmQgYW55IGV4aXN0aW5nIGNvbnRlbnQgb2YgQGRzdC5cXG4rICogT24gb3ZlcmZsb3csIGxvZyBhbiBlcnJvciBhbmQgbGVhdmUgQGRzdCB1bnRvdWNoZWQgcmF0aGVyIHRoYW5cXG4rICogc2lsZW50bHkgdHJ1bmNhdGluZzogYm9vdGluZyB3aXRob3V0IHRoZSBlbWJlZGRlZCB2YWx1ZXMgaXMgYmV0dGVyXFxuKyAqIHRoYW4gcmVmdXNpbmcgdG8gYm9vdCwgYW5kIHRoZSBlcnJvciBtZXNzYWdlIHRlbGxzIHRoZSB1c2VyIHdoeVxcbisgKiB0aGVpciBlbWJlZGRlZCBrZXlzIGFyZSBtaXNzaW5nLlxcbisgKlxcbisgKiBJbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBzZXR1cF9hcmNoKCkgYmVmb3JlIHBhcnNlX2Vhcmx5X3BhcmFtKCkgc29cXG4rICogdGhhdCBlYXJseV9wYXJhbSgpIGhhbmRsZXJzIHNlZSB0aGUgZW1iZWRkZWQgdmFsdWVzLlxcbisgKi9cXG4rdm9pZCBfX2luaXQgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShjaGFyICpkc3QsIHNpemVfdCBzaXplKVxcbit7XFxuK1xcdHNpemVfdCBlbWJlZF9sZW4gPSBlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmQgLSBlbWJlZGRlZF9rZXJuZWxfY21kbGluZTtcXG4rXFx0c2l6ZV90IGRzdF9sZW47XFxuK1xcbitcXHRpZiAoIXNpemUgfHwgZW1iZWRfbGVuIFxcdTAwM2M9IDEpXFx0LyogdHJhaWxpbmcgTlVMIG9ubHkgKi9cXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRlbWJlZF9sZW4tLTtcXHRcXHRcXHQvKiBleGNsdWRlIHRyYWlsaW5nIE5VTCBieXRlICovXFxuK1xcbitcXHRkc3RfbGVuID0gc3Rybmxlbihkc3QsIHNpemUpO1xcbitcXHRpZiAoZW1iZWRfbGVuICsgZHN0X2xlbiArIDEgXFx1MDAzZSBzaXplKSB7XFxuK1xcdFxcdHByX2VycihcXFwiZW1iZWRkZWQgYm9vdGNvbmZpZyBjbWRsaW5lICglenUgYnl0ZXMpIGRvZXMgbm90IGZpdCBpbiBDT01NQU5EX0xJTkVfU0laRSB3aXRoICV6dSBieXRlcyBhbHJlYWR5IHVzZWQ7IGlnbm9yaW5nIGVtYmVkZGVkIHZhbHVlc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIGVtYmVkX2xlbiwgZHN0X2xlbik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0c3RyX3ByZXBlbmQoZHN0LCBkc3RfbGVuLCBlbWJlZGRlZF9rZXJuZWxfY21kbGluZSwgZW1iZWRfbGVuKTtcXG4rXFx0eGJjX2NtZGxpbmVfYXBwbGllZCA9IHRydWU7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkgLSBEaWQgdGhlIGVtYmVkZGVkIGNtZGxpbmUgZ2V0IHByZXBlbmRlZD9cXG4rICpcXG4rICogUmV0dXJuIHRydWUgaWYgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIGFjdHVhbGx5IHByZXBlbmRlZCB0aGVcXG4rICogZW1iZWRkZWQgXFxcImtlcm5lbFxcXCIgc3VidHJlZS4gc2V0dXBfYm9vdF9jb25maWcoKSB1c2VzIHRoaXMgdG8gYXZvaWRcXG4rICogcmVuZGVyaW5nIHRoZSBzYW1lIGtleXMgYSBzZWNvbmQgdGltZS5cXG4rICovXFxuK2Jvb2wgX19pbml0IHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZClcXG4re1xcbitcXHRyZXR1cm4geGJjX2NtZGxpbmVfYXBwbGllZDtcXG4rfVxcbisjZW5kaWZcXHQvKiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcgKi9cXG4rXFxuKy8qIHBhcnNlX2FyZ3MoKSBjYWxsYmFjazogZmxhZyB3aGVuIHRoZSBcXFwiYm9vdGNvbmZpZ1xcXCIgcGFyYW1ldGVyIGlzIHByZXNlbnQuICovXFxuK3N0YXRpYyBpbnQgX19pbml0IGJvb3Rjb25maWdfb3B0aW4oY2hhciAqcGFyYW0sIGNoYXIgKnZhbCxcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqdW51c2VkLCB2b2lkICphcmcpXFxuK3tcXG4rXFx0aWYgKCFzdHJjbXAocGFyYW0sIFxcXCJib290Y29uZmlnXFxcIikpXFxuK1xcdFxcdCooYm9vbCAqKWFyZyA9IHRydWU7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZCgpIC0gV2FzIFxcXCJib290Y29uZmlnXFxcIiBwYXNzZWQgb24gdGhlIGNtZGxpbmU/XFxuKyAqIEBib290X2NtZGxpbmU6IGtlcm5lbCBjb21tYW5kIGxpbmUgdG8gaW5zcGVjdCAobm90IG1vZGlmaWVkKVxcbisgKiBAZW5kX29mZnNldDogaWYgbm9uLU5VTEwsIHNldCB0byB0aGUgb2Zmc2V0IG9mIHRoZSBpbml0IGFyZ3VtZW50cyB0aGF0XFxuKyAqXFx0XFx0Zm9sbG93IGEgXFxcIi0tXFxcIiBzZXBhcmF0b3IsIG9yIDAgd2hlbiB0aGVyZSBpcyBub25lXFxuKyAqXFxuKyAqIFBhcnNlIGEgcHJpdmF0ZSBjb3B5IG9mIEBib290X2NtZGxpbmUgKHBhcnNlX2FyZ3MoKSBpcyBkZXN0cnVjdGl2ZSkgYW5kXFxuKyAqIHJlcG9ydCB3aGV0aGVyIFxcXCJib290Y29uZmlnXFxcIiBpcyBwcmVzZW50IGJlZm9yZSB0aGUgXFxcIi0tXFxcIiBzZXBhcmF0b3IuXFxuKyAqIHNldHVwX2FyY2goKSB1c2VzIHRoaXMgdG8gZ2F0ZSBwcmVwZW5kaW5nIHRoZSBidWlsZC10aW1lIGVtYmVkZGVkIGNtZGxpbmU7XFxuKyAqIHNldHVwX2Jvb3RfY29uZmlnKCkgdXNlcyBpdCBmb3IgdGhlIHJ1bnRpbWUgb3B0LWluIGFuZCB0byBsb2NhdGUgdGhlIGluaXRcXG4rICogYXJndW1lbnRzIHZpYSBAZW5kX29mZnNldC4gU2hhcmluZyBvbmUgcGFyc2VyIGtlZXBzIHRoZSBlYXJseSBhbmQgbGF0ZVxcbisgKiBwYXRocyBhZ3JlZWluZyBvbiB3aGF0IGNvdW50cyBhcyBvcHQtaW4uIENPTkZJR19CT09UX0NPTkZJR19GT1JDRSBpcyBub3RcXG4rICogZm9sZGVkIGluIGhlcmU7IGNhbGxlcnMgYXBwbHkgaXQgd2hlcmUgdGhleSBuZWVkIGl0LlxcbisgKi9cXG4rYm9vbCBfX2luaXQgYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZChjb25zdCBjaGFyICpib290X2NtZGxpbmUsIGludCAqZW5kX29mZnNldClcXG4re1xcbitcXHRzdGF0aWMgY2hhciB0bXBfY21kbGluZVtDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTtcXG4rXFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xcbitcXHRjaGFyICplcnI7XFxuK1xcbitcXHRpZiAoZW5kX29mZnNldClcXG4rXFx0XFx0KmVuZF9vZmZzZXQgPSAwO1xcbitcXG4rXFx0c3Ryc2NweSh0bXBfY21kbGluZSwgYm9vdF9jbWRsaW5lLCBDT01NQU5EX0xJTkVfU0laRSk7XFxuK1xcdGVyciA9IHBhcnNlX2FyZ3MoXFxcImJvb3Rjb25maWdcXFwiLCB0bXBfY21kbGluZSwgTlVMTCwgMCwgMCwgMCxcXG4rXFx0XFx0XFx0IFxcdTAwMjZmb3VuZCwgYm9vdGNvbmZpZ19vcHRpbik7XFxuK1xcdGlmIChJU19FUlIoZXJyKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogcGFyc2VfYXJncygpIHN0b3BzIGF0IFxcXCItLVxcXCIgYW5kIHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHJlc3QuICovXFxuK1xcdGlmIChlbmRfb2Zmc2V0IFxcdTAwMjZcXHUwMDI2IGVycilcXG4rXFx0XFx0KmVuZF9vZmZzZXQgPSBlcnIgLSB0bXBfY21kbGluZTtcXG4rXFxuK1xcdHJldHVybiBmb3VuZDtcXG4rfVxcbitcXG4rI2VuZGlmXFx0LyogX19LRVJORUxfXyAqL1xcbiBcXG4gLypcXG4gICogRXh0cmEgQm9vdCBDb25maWcgKFhCQykgaXMgZ2l2ZW4gYXMgdHJlZS1zdHJ1Y3R1cmVkIGFzY2lpIHRleHQgb2ZcXG5AQCAtNDI3LDExICs1NTMsMzAgQEAgc3RhdGljIGNoYXIgeGJjX25hbWVidWZbWEJDX0tFWUxFTl9NQVhdIF9faW5pdGRhdGE7XFxuIGludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpXFxuIHtcXG4gXFx0c3RydWN0IHhiY19ub2RlICprbm9kZSwgKnZub2RlO1xcbi1cXHRjaGFyICplbmQgPSBidWYgKyBzaXplO1xcbiBcXHRjb25zdCBjaGFyICp2YWwsICpxO1xcbitcXHRzaXplX3QgbGVuID0gMDtcXG4gXFx0aW50IHJldDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFRyYWNrIHRoZSBydW5uaW5nIHdyaXR0ZW4gbGVuZ3RoIHJhdGhlciB0aGFuIGFkdmFuY2luZyBAYnVmLCBzbyB3ZVxcbitcXHQgKiBuZXZlciBmb3JtIFxcXCJidWYgKyBzaXplXFxcIiBvciBcXFwiYnVmICs9IHJldFxcXCIgd2hpbGUgQGJ1ZiBpcyBOVUxMICh0aGVcXG4rXFx0ICogc2l6ZS1wcm9iZSBjYWxsIHBhc3NlcyBidWY9TlVMTCwgc2l6ZT0wKS4gTlVMTCBwb2ludGVyIGFyaXRobWV0aWNcXG4rXFx0ICogaXMgdW5kZWZpbmVkIGJlaGF2aW9yIGFuZCB0cmlwcyBob3N0IFVCU2FuIC8gRk9SVElGWV9TT1VSQ0Ugd2hlblxcbitcXHQgKiB0aGlzIHJlbmRlcmVyIHJ1bnMgYXQga2VybmVsIGJ1aWxkIHRpbWUuIHNucHJpbnRmKE5VTEwsIDAsIC4uLilcXG4rXFx0ICogaXRzZWxmIGlzIHdlbGwgZGVmaW5lZCBhbmQgcmV0dXJucyB0aGUgd291bGQtYmUgbGVuZ3RoLlxcbitcXHQgKi9cXG4gXFx0eGJjX25vZGVfZm9yX2VhY2hfa2V5X3ZhbHVlKHJvb3QsIGtub2RlLCB2YWwpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQW4gZW1wdHkgb3IgdmFsdWUtb25seSBAcm9vdCAoZS5nLiBcXFwia2VybmVsIHt9XFxcIiBvclxcbitcXHRcXHQgKiBcXFwia2VybmVsID0geFxcXCIsIHBvc3NpYmx5IGFsb25nc2lkZSBcXFwia2VybmVsLmZvbyA9IGJhclxcXCIpXFxuK1xcdFxcdCAqIHlpZWxkcyBAcm9vdCBpdHNlbGYgaGVyZS4gU2tpcCBpdDogY29tcG9zaW5nIGEga2V5IGZvciBpdFxcbitcXHRcXHQgKiB3b3VsZCBmYWlsIHdpdGggLUVJTlZBTCwgeWV0IGFueSByZWFsIGRlc2NlbmRhbnQga2V5cyBtdXN0XFxuK1xcdFxcdCAqIHN0aWxsIGJlIHJlbmRlcmVkLiBBbiBlbnRpcmVseSBlbXB0eSBzdWJ0cmVlIHRoZW4gcmVuZGVyc1xcbitcXHRcXHQgKiBub3RoaW5nIGFuZCByZXR1cm5zIDAgcmF0aGVyIHRoYW4gYW4gZXJyb3IuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoa25vZGUgPT0gcm9vdClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbiBcXHRcXHRyZXQgPSB4YmNfbm9kZV9jb21wb3NlX2tleV9hZnRlcihyb290LCBrbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0eGJjX25hbWVidWYsIFhCQ19LRVlMRU5fTUFYKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuQEAgLTQzOSwxMCArNTg0LDExIEBAIGludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpXFxuIFxcbiBcXHRcXHR2bm9kZSA9IHhiY19ub2RlX2dldF9jaGlsZChrbm9kZSk7XFxuIFxcdFxcdGlmICghdm5vZGUpIHtcXG4tXFx0XFx0XFx0cmV0ID0gc25wcmludGYoYnVmLCByZXN0KGJ1ZiwgZW5kKSwgXFxcIiVzIFxcXCIsIHhiY19uYW1lYnVmKTtcXG4rXFx0XFx0XFx0cmV0ID0gc25wcmludGYoYnVmID8gYnVmICsgbGVuIDogTlVMTCwgcmVzdChsZW4sIHNpemUpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIiVzIFxcXCIsIHhiY19uYW1lYnVmKTtcXG4gXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdFxcdGJ1ZiArPSByZXQ7XFxuK1xcdFxcdFxcdGxlbiArPSByZXQ7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHhiY19hcnJheV9mb3JfZWFjaF92YWx1ZSh2bm9kZSwgdmFsKSB7XFxuQEAgLTQ1MiwxNSArNTk4LDE1IEBAIGludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpXFxuIFxcdFxcdFxcdCAqIHdoaXRlc3BhY2UuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRxID0gc3RycGJyayh2YWwsIFxcXCIgXFxcXHRcXFxcclxcXFxuXFxcIikgPyBcXFwiXFxcXFxcXCJcXFwiIDogXFxcIlxcXCI7XFxuLVxcdFxcdFxcdHJldCA9IHNucHJpbnRmKGJ1ZiwgcmVzdChidWYsIGVuZCksIFxcXCIlcz0lcyVzJXMgXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHhiY19uYW1lYnVmLCBxLCB2YWwsIHEpO1xcbitcXHRcXHRcXHRyZXQgPSBzbnByaW50ZihidWYgPyBidWYgKyBsZW4gOiBOVUxMLCByZXN0KGxlbiwgc2l6ZSksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXFwiJXM9JXMlcyVzIFxcXCIsIHhiY19uYW1lYnVmLCBxLCB2YWwsIHEpO1xcbiBcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0XFx0XFx0YnVmICs9IHJldDtcXG4rXFx0XFx0XFx0bGVuICs9IHJldDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gYnVmIC0gKGVuZCAtIHNpemUpO1xcbitcXHRyZXR1cm4gbGVuO1xcbiB9XFxuICN1bmRlZiByZXN0XFxuIFxcbmRpZmYgLS1naXQgYS9saWIvZW1iZWRkZWQtY21kbGluZS5TIGIvbGliL2VtYmVkZGVkLWNtZGxpbmUuU1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJkYTgxYjRhNDJiZWFmXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2xpYi9lbWJlZGRlZC1jbWRsaW5lLlNcXG5AQCAtMCwwICsxLDE2IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKy8qXFxuKyAqIEVtYmVkIHRoZSBidWlsZC10aW1lLXJlbmRlcmVkIGJvb3Rjb25maWcgXFxcImtlcm5lbFxcXCIgc3VidHJlZSBhcyBhIGZsYXRcXG4rICogY21kbGluZSBzdHJpbmcuIHNldHVwX2FyY2goKSBwcmVwZW5kcyB0aGlzIHRvIGJvb3RfY29tbWFuZF9saW5lIG9uXFxuKyAqIGFyY2hpdGVjdHVyZXMgdGhhdCBzZWxlY3QgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJRy5cXG4rICpcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBCcmVubyBMZWl0YW8gXFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXFx1MDAzZVxcbisgKi9cXG4rXFx0LnNlY3Rpb24gLmluaXQucm9kYXRhLmVtYmVkX2NtZGxpbmUsIFxcXCJhXFxcIiwgJXByb2diaXRzXFxuK1xcdC5nbG9iYWwgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVcXG4rZW1iZWRkZWRfa2VybmVsX2NtZGxpbmU6XFxuK1xcdC5pbmNiaW4gXFxcImxpYi9lbWJlZGRlZF9jbWRsaW5lLmJpblxcXCJcXG4rXFx0LmJ5dGUgMFxcbitcXHQuZ2xvYmFsIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZFxcbitlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmQ6XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2Jvb3Rjb25maWcvTWFrZWZpbGUgYi90b29scy9ib290Y29uZmlnL01ha2VmaWxlXFxuaW5kZXggOTBlYjQ3YzlkOGRlNjcuLjNjYjgwNjZkNTE0MWJiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2Jvb3Rjb25maWcvTWFrZWZpbGVcXG4rKysgYi90b29scy9ib290Y29uZmlnL01ha2VmaWxlXFxuQEAgLTE1LDcgKzE1LDcgQEAgb3ZlcnJpZGUgQ0ZMQUdTICs9IC1XYWxsIC1nIC1JJChDVVJESVIpL2luY2x1ZGVcXG4gQUxMX1RBUkdFVFMgOj0gYm9vdGNvbmZpZ1xcbiBBTExfUFJPR1JBTVMgOj0gJChwYXRzdWJzdCAlLCQoT1VUUFVUKSUsJChBTExfVEFSR0VUUykpXFxuIFxcbi1hbGw6ICQoQUxMX1BST0dSQU1TKSB0ZXN0XFxuK2FsbDogJChBTExfUFJPR1JBTVMpXFxuIFxcbiAkKE9VVFBVVClib290Y29uZmlnOiBtYWluLmMgaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmggJChMSUJTUkMpXFxuIFxcdCQoQ0MpICQoZmlsdGVyICUuYywkXikgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEBcXG5AQCAtMjcsNCArMjcsNCBAQCBpbnN0YWxsOiAkKEFMTF9QUk9HUkFNUylcXG4gXFx0aW5zdGFsbCAkKE9VVFBVVClib290Y29uZmlnICQoREVTVERJUikkKGJpbmRpcilcXG4gXFxuIGNsZWFuOlxcbi1cXHQkKFJNKSAtZiAkKE9VVFBVVCkqLm8gJChBTExfUFJPR1JBTVMpXFxuK1xcdHJtIC1mICQoT1VUUFVUKSoubyAkKEFMTF9QUk9HUkFNUylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTU6MjguMTkyMzcyNzA2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTEyNjc3NTI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGJ1aWxkLXRpbWUgZmVhdHVyZSB0byByZW5kZXIgZW1iZWRkZWQgYm9vdGNvbmZpZyBpbnRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiBBbGwgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBrZXJuZWwgYXJlIGNvbmZpbmVkIHRvIGBfX2luaXRgIGZ1bmN0aW9ucyAoZS5nLiwgYHNldHVwX2FyY2hgLCBgc2V0dXBfYm9vdF9jb25maWdgLCBgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZWApLCB3aGljaCBydW4gb25seSBvbmNlIGR1cmluZyBlYXJseSBib290IHdpdGggc3RhdGljIGlucHV0cyAoY29tcGlsZS10aW1lIGVtYmVkZGVkIGZpbGVzIGFuZCB0aGUgYm9vdGxvYWRlciBjb21tYW5kIGxpbmUpLiBTeXprYWxsZXIgY2Fubm90IG11dGF0ZSB0aGVzZSBpbnB1dHMgb3IgcmVhY2ggdGhpcyBjb2RlIGR1cmluZyBydW50aW1lIHN5c2NhbGwgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTE4MWQzMDFjOWJkMDc2Y2VhYjYzNWE0NzM3ZThiZjVjNmEyNDVlMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDE4OjE1OjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3RcbmluZGV4IGY3MTI3NTg0NzJkNWM2Li4zZDY0MTI0NThjOGI2OSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3RcbkBAIC0yMzQsNiArMjM0LDg3IEBAIEtjb25maWcgb3B0aW9uIHNlbGVjdGVkLlxuIE5vdGUgdGhhdCBldmVuIGlmIHlvdSBzZXQgdGhpcyBvcHRpb24sIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIGVtYmVkZGVkXG4gYm9vdGNvbmZpZyBieSBhbm90aGVyIGJvb3Rjb25maWcgd2hpY2ggYXR0YWNoZWQgdG8gdGhlIGluaXRyZC5cbiBcbitSZW5kZXJpbmcgRW1iZWRkZWQga2VybmVsLiogS2V5cyBhdCBCdWlsZCBUaW1lXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuK1xuK0J5IGRlZmF1bHQsIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIChgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRD15YGApIGlzXG4rcGFyc2VkIGF0IHJ1bnRpbWUsIGFmdGVyIGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgIGhhcyBhbHJlYWR5IHJ1bi4gRWFybHlcbitwYXJhbWV0ZXIgaGFuZGxlcnMgKGBgbWVtPWBgLCBgYGVhcmx5Y29uPWBgLCBgYGxvZ2xldmVsPWBgLCAuLi4pIHRoZXJlZm9yZVxuK2Nhbm5vdCBzZWUgdmFsdWVzIHN1cHBsaWVkIHZpYSB0aGUgZW1iZWRkZWQgYGBrZXJuZWxgYCBzdWJ0cmVlLlxuK1xuK2BgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHYGAgcmVzb2x2ZXMgdGhpcyBieSByZW5kZXJpbmcgdGhlXG4rYGBrZXJuZWxgYCBzdWJ0cmVlIG9mIGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEX0ZJTEVgYCBpbnRvIGEgZmxhdCBjbWRsaW5lXG4rc3RyaW5nIGF0IGtlcm5lbCBidWlsZCB0aW1lICh2aWEgYGB0b29scy9ib290Y29uZmlnIC1DYGApIGFuZCBwcmVwZW5kaW5nXG4raXQgdG8gYGBib290X2NvbW1hbmRfbGluZWBgIGR1cmluZyBlYXJseSBhcmNoaXRlY3R1cmUgc2V0dXAsIHNvIHRoZSBrZXlzXG4rYXJlIHZpc2libGUgdG8gYGBwYXJzZV9lYXJseV9wYXJhbSgpYGAuXG4rXG4rVGhlIG9wdGlvbiByZXF1aXJlcyBgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRD15YGAsIGEgbm9uLWVtcHR5XG4rYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURfRklMRWBgLCBgYENPTkZJR19DTURMSU5FYGAgdG8gYmUgZW1wdHksIGFuZFxuK2FuIGFyY2hpdGVjdHVyZSB0aGF0IHNlbGVjdHMgYGBDT05GSUdfQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR2BgLlxuK0N1cnJlbnRseSBvbmx5IHg4NiBzZWxlY3RzIGl0OyBvbiBvdGhlciBhcmNoaXRlY3R1cmVzIHRoZSBlbWJlZGRlZFxuK2Jvb3Rjb25maWcgc3RpbGwgd29ya3MsIGJ1dCBvbmx5IHRocm91Z2ggdGhlIGxhdGUgcnVudGltZSBwYXJzZXIuXG4rXG4rVGhlIHNhbWUgYGBib290Y29uZmlnYGAgb3B0LWluIGFwcGxpZXMgYXMgZWxzZXdoZXJlOiB0aGUgcmVuZGVyZWQga2V5c1xuK2FyZSBwcmVwZW5kZWQgb25seSB3aGVuIGBgYm9vdGNvbmZpZ2BgIChpbiBhbnkgZm9ybSkgYXBwZWFycyBvbiB0aGVcbitrZXJuZWwgY29tbWFuZCBsaW5lLCBvciB3aGVuIGBgQ09ORklHX0JPT1RfQ09ORklHX0ZPUkNFYGAgaXMgc2V0LCB3aGljaFxuK2RlZmF1bHRzIHRvIGBgeWBgIHdoZW4gYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURgYCBpcyBzZXQuXG4rXG4rRm9yIGV4YW1wbGUsIGdpdmVuOjpcbitcbisga2VybmVsIHtcbisgICBsb2dsZXZlbCA9IDdcbisgICBtZW0gPSA0R1xuKyB9XG4rXG4rdGhlIGtlcm5lbCBib290cyBhcyBpZiBgYGxvZ2xldmVsPTcgbWVtPTRHYGAgaGFkIGJlZW4gcHJlcGVuZGVkIHRvIHRoZVxuK2Jvb3Rsb2FkZXIgY29tbWFuZCBsaW5lLCB3aXRoIHRoZSB2YWx1ZXMgdmlzaWJsZSB0byBlYXJseS1wYXJzZWRcbitoYW5kbGVycy4gQ29tbWEtc2VwYXJhdGVkIHZhbHVlcyBhcmUgc3RpbGwgZXhwYW5kZWQgaW50byBtdWx0aXBsZVxuK2NtZGxpbmUgZW50cmllcyBwZXIgdGhlIGJvb3Rjb25maWcgYXJyYXkgY29udmVudGlvbiAtLSB0aGUgZW1iZWRkZWRcbitgYGtlcm5lbC5lYXJseWNvbiA9IFwidWFydDgyNTAsaW8sMHgzZjhcImBgIG11c3QgYmUgcXVvdGVkIHRvIGxhbmQgYXMgYVxuK3NpbmdsZSBgYGVhcmx5Y29uPWBgIGVudHJ5LCBleGFjdGx5IGFzIGZvciB0aGUgcnVudGltZSBwYXJzZXIuXG4rXG4rSWYgdGhlIHJlbmRlcmVkIHN0cmluZyB3b3VsZCBub3QgZml0IGluIGBgQ09NTUFORF9MSU5FX1NJWkVgYCB0b2dldGhlclxuK3dpdGggdGhlIGV4aXN0aW5nIGNvbW1hbmQgbGluZSwgdGhlIHByZXBlbmQgaXMgc2tpcHBlZCBhbmQgYW4gZXJyb3IgaXNcbitsb2dnZWQsIHNvIGFuIG92ZXJzaXplZCBlbWJlZGRlZCBib290Y29uZmlnIGNhbm5vdCBicmljayBhIGJvb3QuXG4rXG4rSW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21tYW5kIGxpbmUgYW5kIGJvb3Rjb25maWcgc291cmNlc1xuK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cbitcbitXaXRoIGBgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHPXlgYCB0aGUgcmVuZGVyZWQgYGBrZXJuZWxgYFxuK3N1YnRyZWUgYmVoYXZlcyBsaWtlIGEgYnVpbGQtdGltZSBjb21tYW5kIGxpbmUgKHNpbWlsYXIgdG9cbitgYENPTkZJR19DTURMSU5FYGApLCBub3QgbGlrZSBhIGJvb3Rjb25maWcgc291cmNlLiBJdCBpcyBwcmVwZW5kZWQgdG9cbitgYGJvb3RfY29tbWFuZF9saW5lYGAgaW4gYGBzZXR1cF9hcmNoKClgYCwgYmVmb3JlIGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgXG4rYW5kIGxvbmcgYmVmb3JlIHRoZSBydW50aW1lIHBhcnNlciBsb29rcyBhdCBhbiBpbml0cmQuIE9wdGlvbnMgY2FuIHJlYWNoXG4rdGhlIGtlcm5lbCBmcm9tIHVwIHRvIGZvdXIgcGxhY2VzOlxuK1xuKy0gQm9vdGxvYWRlciBjb21tYW5kIGxpbmU6IHRoZSBhcmd1bWVudHMgdGhlIGJvb3QgbG9hZGVyIHBhc3Nlcy4gVGhlXG4rICBlbWJlZGRlZCBjbWRsaW5lIGlzIHByZXBlbmRlZCBpbiBmcm9udCBvZiB0aGVtLCBzbyBmb3IgbGFzdC1vbmUtd2luc1xuKyAgcGFyYW1ldGVycyBhIGJvb3Rsb2FkZXIgb3B0aW9uIHN0aWxsIG92ZXJyaWRlcyB0aGUgZW1iZWRkZWQgdmFsdWUuXG4rICBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUuXG4rLSBFbWJlZGRlZCBjbWRsaW5lICh0aGlzIG9wdGlvbik6IHRoZSByZW5kZXJlZCBgYGtlcm5lbGBgIHN1YnRyZWUsXG4rICBwcmVwZW5kZWQgZWFybHkgc28gaXQgaXMgc2VlbiBieSBgYHBhcnNlX2Vhcmx5X3BhcmFtKClgYC4gVmlzaWJsZSBpblxuKyAgL3Byb2MvY21kbGluZS5cbistIEluaXRyZCBib290Y29uZmlnOiBwYXJzZWQgbGF0ZSBpbiBgYHNldHVwX2Jvb3RfY29uZmlnKClgYDsgaXRzXG4rICBgYGtlcm5lbGBgIGtleXMgYXJlIHBsYWNlZCBhaGVhZCBvZiBgYGJvb3RfY29tbWFuZF9saW5lYGAsIGkuZS4gYmVmb3JlXG4rICB0aGUgZW1iZWRkZWQgY21kbGluZSwgc28gbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBBcyBhXG4rICBib290Y29uZmlnIHNvdXJjZSwgYW4gaW5pdHJkIGJvb3Rjb25maWcgc3RpbGwgcmVwbGFjZXMgdGhlIGVtYmVkZGVkXG4rICBib290Y29uZmlnLiBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUgYW5kIC9wcm9jL2Jvb3Rjb25maWcuXG4rLSBFbWJlZGRlZCBib290Y29uZmlnIChydW50aW1lKTogcGFyc2VkIGxhdGUsIG9ubHkgd2hlbiBubyBpbml0cmRcbisgIGJvb3Rjb25maWcgaXMgcHJlc2VudC4gVmlzaWJsZSBpbiAvcHJvYy9jbWRsaW5lIGFuZCAvcHJvYy9ib290Y29uZmlnLlxuK1xuK1NvIHdpdGggdGhpcyBvcHRpb24gdGhlIGVtYmVkZGVkIGBga2VybmVsLipgYCB2YWx1ZXMgdGFrZSBwcmVjZWRlbmNlXG4rb3ZlciBhbiBpbml0cmQgYm9vdGNvbmZpZydzIGBga2VybmVsLipgYCB2YWx1ZXM6IGZvciBlYXJseSBwYXJhbWV0ZXJzXG4rdGhlIGluaXRyZCBpcyBub3QgcGFyc2VkIHlldCwgYW5kIGZvciBvcmRpbmFyeSBwYXJhbWV0ZXJzIHRoZSBlbWJlZGRlZFxuK2tleXMgbGFuZCBsYXRlciBpbiB0aGUgY29tbWFuZCBsaW5lLiBJZiB5b3UgbmVlZCBhbiBpbml0cmQgYm9vdGNvbmZpZyB0b1xuK292ZXJyaWRlIHRoZSBlbWJlZGRlZCBgYGtlcm5lbC4qYGAga2V5cywgbGVhdmUgdGhpcyBvcHRpb24gb2ZmIGFuZCByZWx5XG4rb24gdGhlIHJ1bnRpbWUgcGFyc2VyLlxuK1xuK1RoZSByZW5kZXJlZCBzdHJpbmcgaXMgcGFydCBvZiB0aGUgY29tbWFuZCBsaW5lLCBzbyBpdCBhcHBlYXJzIGluXG4rL3Byb2MvY21kbGluZS4gSXQgaXMgZGVsaWJlcmF0ZWx5IG5vdCBzaG93biBpbiAvcHJvYy9ib290Y29uZmlnOiB0aGF0XG4rZmlsZSBrZWVwcyByZXBvcnRpbmcgdGhlIHBhcnNlZCBib290Y29uZmlnIHRyZWUgLS0gdGhlIGluaXRyZCBib290Y29uZmlnXG4raWYgcHJlc2VudCwgb3RoZXJ3aXNlIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIC0tIGluZGVwZW5kZW50IG9mIHdoZXRoZXJcbitidWlsZC10aW1lIGNtZGxpbmUgcmVuZGVyaW5nIGlzIGVuYWJsZWQuXG4rXG4gS2VybmVsIHBhcmFtZXRlcnMgdmlhIEJvb3QgQ29uZmlnXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggYmY5NzM5OWQzNTdmYTAuLjQ4MzQwNjVhNGJmMmY3IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtOTg0Niw2ICs5ODQ2LDcgQEAgRjpcdGZzL3Byb2MvYm9vdGNvbmZpZy5jXG4gRjpcdGluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oXG4gRjpcdGxpYi9ib290Y29uZmlnLWRhdGEuU1xuIEY6XHRsaWIvYm9vdGNvbmZpZy5jXG4rRjpcdGxpYi9lbWJlZGRlZC1jbWRsaW5lLlNcbiBGOlx0dG9vbHMvYm9vdGNvbmZpZy8qXG4gRjpcdHRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy8qXG4gXG5kaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZVxuaW5kZXggMTJmZDNkMmQ0N2I1ODIuLjM0ZmIzNTcxYmVjODFkIDEwMDY0NFxuLS0tIGEvTWFrZWZpbGVcbisrKyBiL01ha2VmaWxlXG5AQCAtMTU1Miw2ICsxNTUyLDIyIEBAIHByZXBhcmU6IHRvb2xzL2JwZi9yZXNvbHZlX2J0Zmlkc1xuIGVuZGlmXG4gZW5kaWZcbiBcbisjIHRvb2xzL2Jvb3Rjb25maWcgcmVuZGVycyB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBpbnRvIGEgY21kbGluZSBhdCBidWlsZCB0aW1lLlxuK2lmZGVmIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuK3ByZXBhcmU6IHRvb2xzL2Jvb3Rjb25maWdcbitlbmRpZlxuK1xuKyMgdG9vbHMvYm9vdGNvbmZpZyBpcyBydW4gb24gdGhlIGJ1aWxkIGhvc3QgZHVyaW5nIHByZXBhcmUsIHNvIGZvcmNlIGEgaG9zdFxuKyMgYmluYXJ5IGhlcmU7IGl0cyBvd24gTWFrZWZpbGUga2VlcHMgJChDQykgZm9yIHN0YW5kYWxvbmUgYW5kIGNyb3NzIGJ1aWxkcy5cbisjIENST1NTX0NPTVBJTEU9IGlzIGNsZWFyZWQgc28gdG9vbHMvc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlIGRvZXMgbm90IGluamVjdFxuKyMgdGhlIHRhcmdldCdzIC0tdGFyZ2V0PS8tLXN5c3Jvb3Q9IGZsYWdzIGludG8gdGhlIGhvc3QgY2xhbmcgaW52b2NhdGlvbiB1bmRlclxuKyMgTExWTT0xIGNyb3NzIGJ1aWxkcyAod2hpY2ggd291bGQgcHJvZHVjZSBhIHRhcmdldCBiaW5hcnkgdGhhdCBmYWlscyB0byBleGVjKS5cbit0b29scy9ib290Y29uZmlnOiBleHBvcnQgQ0MgOj0gJChIT1NUQ0MpXG4rdG9vbHMvYm9vdGNvbmZpZzogRk9SQ0VcbitcdCQoUSlta2RpciAtcCAkKG9ianRyZWUpL3Rvb2xzXG4rXHQkKFEpJChNQUtFKSBPPSQoYWJzcGF0aCAkKG9ianRyZWUpKSBzdWJkaXI9dG9vbHMgLUMgJChzcmN0cmVlKS90b29scy8gXFxcbitcdFx0Ym9vdGNvbmZpZyBDUk9TU19DT01QSUxFPVxuK1xuICMgVGhlIHRvb2xzIGJ1aWxkIHN5c3RlbSBpcyBub3QgYSBwYXJ0IG9mIEtidWlsZCBhbmQgdGVuZHMgdG8gaW50cm9kdWNlXG4gIyBpdHMgb3duIHVuaXF1ZSBpc3N1ZXMuIElmIHlvdSBuZWVkIHRvIGludGVncmF0ZSBhIG5ldyB0b29sIGludG8gS2J1aWxkLFxuICMgcGxlYXNlIGNvbnNpZGVyIGxvY2F0aW5nIHRoYXQgdG9vbCBvdXRzaWRlIHRoZSB0b29scy8gdHJlZSBhbmQgdXNpbmcgdGhlXG5AQCAtMTU3OCw2ICsxNTk0LDE1IEBAIGlmbmVxICgkKHdpbGRjYXJkICQob2JqdG9vbF9PKSksKVxuIFx0JChRKSQoTUFLRSkgLXNDICQoYWJzX3NyY3RyZWUpL3Rvb2xzL29ianRvb2wgTz0kKG9ianRvb2xfTykgc3JjdHJlZT0kKGFic19zcmN0cmVlKSAkKHBhdHN1YnN0IG9ianRvb2xfJSwlLCRAKVxuIGVuZGlmXG4gXG4rUEhPTlkgKz0gYm9vdGNvbmZpZ19jbGVhblxuK1xuK2Jvb3Rjb25maWdfTyA9ICQoYWJzcGF0aCAkKG9ianRyZWUpKS90b29scy9ib290Y29uZmlnXG4rXG4rYm9vdGNvbmZpZ19jbGVhbjpcbitpZm5lcSAoJCh3aWxkY2FyZCAkKGJvb3Rjb25maWdfTykpLClcbitcdCQoUSkkKE1BS0UpIC1zQyAkKHNyY3RyZWUpL3Rvb2xzL2Jvb3Rjb25maWcgTz0kKGJvb3Rjb25maWdfTykgY2xlYW5cbitlbmRpZlxuK1xuIHRvb2xzLzogRk9SQ0VcbiBcdCQoUSlta2RpciAtcCAkKG9ianRyZWUpL3Rvb2xzXG4gXHQkKFEpJChNQUtFKSBPPSQoYWJzcGF0aCAkKG9ianRyZWUpKSBzdWJkaXI9dG9vbHMgLUMgJChzcmN0cmVlKS90b29scy9cbkBAIC0xNzUzLDcgKzE3NzgsNyBAQCB2bWxpbnV4Y2xlYW46XG4gXHQkKFEpJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9saW5rLXZtbGludXguc2ggY2xlYW5cbiBcdCQoUSkkKGlmICQoQVJDSF9QT1NUTElOSyksICQoTUFLRSkgLWYgJChBUkNIX1BPU1RMSU5LKSBjbGVhbilcbiBcbi1jbGVhbjogYXJjaGNsZWFuIHZtbGludXhjbGVhbiByZXNvbHZlX2J0Zmlkc19jbGVhbiBvYmp0b29sX2NsZWFuXG4rY2xlYW46IGFyY2hjbGVhbiB2bWxpbnV4Y2xlYW4gcmVzb2x2ZV9idGZpZHNfY2xlYW4gb2JqdG9vbF9jbGVhbiBib290Y29uZmlnX2NsZWFuXG4gXG4gIyBtcnByb3BlciAtIERlbGV0ZSBhbGwgZ2VuZXJhdGVkIGZpbGVzLCBpbmNsdWRpbmcgLmNvbmZpZ1xuICNcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xuaW5kZXggYmRhZDkwZjIxMGU0YmYuLmZkOTc5ZTBiZTFmMGUwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvS2NvbmZpZ1xuKysrIGIvYXJjaC94ODYvS2NvbmZpZ1xuQEAgLTEyNyw2ICsxMjcsNyBAQCBjb25maWcgWDg2XG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lOR1x0aWYgWDg2XzY0XG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19LTUFQX0xPQ0FMX0ZPUkNFX01BUFx0aWYgTlJfQ1BVUyBcdTAwM2M9IDQwOTZcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NGSVx0XHRpZiBYODZfNjRcbitcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4gXHRzZWxlY3QgQVJDSF9VU0VTX0NGSV9UUkFQU1x0XHRpZiBYODZfNjQgXHUwMDI2XHUwMDI2IENGSVxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTFRPX0NMQU5HXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkdfVEhJTlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmNcbmluZGV4IDQ2ODgyY2U3OWMzYTRkLi44OGIwNTVhNDY1OTFlZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuY1xuQEAgLTYsNiArNiw3IEBAXG4gICogcGFydHMgb2YgZWFybHkga2VybmVsIGluaXRpYWxpemF0aW9uLlxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2FjcGkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jvb3Rjb25maWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnNvbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXHUwMDNlXG5AQCAtODgwLDcgKzg4MSw2IEBAIHN0YXRpYyB2b2lkIF9faW5pdCB4ODZfcmVwb3J0X254KHZvaWQpXG4gICpcbiAgKiBOb3RlOiBPbiB4ODZfNjQsIGZpeG1hcHMgYXJlIHJlYWR5IGZvciB1c2UgZXZlbiBiZWZvcmUgdGhpcyBpcyBjYWxsZWQuXG4gICovXG4tXG4gdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxuIHtcbiAjaWZkZWYgQ09ORklHX1g4Nl8zMlxuQEAgLTkyNCw2ICs5MjQsMTggQEAgdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxuIFx0YnVpbHRpbl9jbWRsaW5lX2FkZGVkID0gdHJ1ZTtcbiAjZW5kaWZcbiBcbisjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4rXHQvKlxuK1x0ICogUHJlcGVuZCB0aGUgYnVpbGQtdGltZS1yZW5kZXJlZCBlbWJlZGRlZCBcImtlcm5lbFwiIGtleXMgaGVyZSBzb1xuK1x0ICogcGFyc2VfZWFybHlfcGFyYW0oKSBiZWxvdyBzZWVzIHRoZW0sIHVzaW5nIHRoZSBzYW1lIG9wdC1pbiBhcyB0aGVcbitcdCAqIHJ1bnRpbWUgcGFyc2VyLCBwbHVzIHRoZSBidWlsZC10aW1lIENPTkZJR19CT09UX0NPTkZJR19GT1JDRS5cbitcdCAqL1xuK1x0aWYgKGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoYm9vdF9jb21tYW5kX2xpbmUsIE5VTEwpIHx8XG4rXHQgICAgSVNfRU5BQkxFRChDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0UpKVxuK1x0XHR4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGJvb3RfY29tbWFuZF9saW5lLFxuK1x0XHRcdFx0XHQgICAgIENPTU1BTkRfTElORV9TSVpFKTtcbisjZW5kaWZcbitcbiBcdHN0cnNjcHkoY29tbWFuZF9saW5lLCBib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpO1xuIFx0KmNtZGxpbmVfcCA9IGNvbW1hbmRfbGluZTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaCBiL2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oXG5pbmRleCAxYzdmM2I3NGZmY2YzOC4uZGVkYTUwNzUwMGRhMjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcbkBAIC0zMDgsNCArMzA4LDE4IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqeGJjX2dldF9lbWJlZGRlZF9ib290Y29uZmlnKHNpemVfdCAqc2l6ZSlcbiB9XG4gI2VuZGlmXG4gXG4rLyogQm9vdGNvbmZpZyBvcHQtaW4gZGV0ZWN0aW9uLCBzaGFyZWQgYnkgc2V0dXBfYXJjaCgpIGFuZCBzZXR1cF9ib290X2NvbmZpZygpICovXG4rI2lmZGVmIENPTkZJR19CT09UX0NPTkZJR1xuK2Jvb2wgX19pbml0IGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoY29uc3QgY2hhciAqYm9vdF9jbWRsaW5lLCBpbnQgKmVuZF9vZmZzZXQpO1xuKyNlbmRpZlxuK1xuKy8qIEJ1aWxkLXRpbWUtcmVuZGVyZWQgYm9vdGNvbmZpZyBjbWRsaW5lIHByZXBlbmRlZCBpbiBzZXR1cF9hcmNoKCkgKi9cbisjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4rdm9pZCBfX2luaXQgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShjaGFyICpkc3QsIHNpemVfdCBzaXplKTtcbitib29sIF9faW5pdCB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKHZvaWQpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkgeyB9XG4rc3RhdGljIGlubGluZSBib29sIHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbisjZW5kaWZcbitcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWdcbmluZGV4IDUyMzBkNDg3OWIxYzg0Li41OTg2OTBlYzMxM2EyOSAxMDA2NDRcbi0tLSBhL2luaXQvS2NvbmZpZ1xuKysrIGIvaW5pdC9LY29uZmlnXG5AQCAtMTU2Niw2ICsxNTY2LDQyIEBAIGNvbmZpZyBCT09UX0NPTkZJR19FTUJFRF9GSUxFXG4gXHQgIFRoaXMgYm9vdGNvbmZpZyB3aWxsIGJlIHVzZWQgaWYgdGhlcmUgaXMgbm8gaW5pdHJkIG9yIG5vIG90aGVyXG4gXHQgIGJvb3Rjb25maWcgaW4gdGhlIGluaXRyZC5cbiBcbitjb25maWcgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuK1x0Ym9vbFxuK1x0aGVscFxuK1x0ICBTaWxlbnQgc3ltYm9sOyBubyBDIGNvZGUgcmVhZHMgaXQgZGlyZWN0bHkuIEFyY2hpdGVjdHVyZXNcbitcdCAgc2VsZWN0IGl0IG9uY2UgdGhlaXIgc2V0dXBfYXJjaCgpIGNhbGxzXG4rXHQgIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSBiZWZvcmUgcGFyc2VfZWFybHlfcGFyYW0oKS5cbitcdCAgSXRzIG9ubHkgcm9sZSBpcyB0byBnYXRlIHRoZSB1c2VyLXZpc2libGVcbitcdCAgQ01ETElORV9GUk9NX0JPT1RDT05GSUcgb3B0aW9uIHBlci1hcmNoLCB0aGUgc2FtZVxuK1x0ICBBUkNIX1NVUFBPUlRTXyogaWRpb20gdXNlZCBieSBBUkNIX1NVUFBPUlRTX0NGSSwgZXRjLlxuK1xuK2NvbmZpZyBDTURMSU5FX0ZST01fQk9PVENPTkZJR1xuK1x0Ym9vbCBcIlJlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGFzIGtlcm5lbCBjbWRsaW5lIGF0IGJ1aWxkIHRpbWVcIlxuK1x0ZGVwZW5kcyBvbiBCT09UX0NPTkZJR19FTUJFRF9GSUxFICE9IFwiXCJcbitcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuK1x0ZGVwZW5kcyBvbiBDTURMSU5FID0gXCJcIlxuK1x0ZGVmYXVsdCBuXG4rXHRoZWxwXG4rXHQgIFJlbmRlciB0aGUgXCJrZXJuZWxcIiBzdWJ0cmVlIG9mIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIGZpbGUgaW50byBhXG4rXHQgIGZsYXQgY21kbGluZSBzdHJpbmcgYXQga2VybmVsIGJ1aWxkIHRpbWUgYW5kIHByZXBlbmQgaXQgdG9cbitcdCAgYm9vdF9jb21tYW5kX2xpbmUgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cC4gVGhpcyBtYWtlc1xuK1x0ICBlYXJseV9wYXJhbSgpIGhhbmRsZXJzIChlLmcuIG1lbT0sIGVhcmx5Y29uPSwgbG9nbGV2ZWw9KSBzZWUgdGhlXG4rXHQgIHZhbHVlcyBzdXBwbGllZCB2aWEgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcuXG4rXG4rXHQgIFRoZSBydW50aW1lIGJvb3Rjb25maWcgcGFyc2VyIGlzIHVuYWZmZWN0ZWQsIHNvIHRyZWUtc3RydWN0dXJlZFxuK1x0ICBjb25zdW1lcnMgc3VjaCBhcyBmdHJhY2UgYm9vdC10aW1lIHRyYWNpbmcga2VlcCB3b3JraW5nLlxuK1xuK1x0ICBOb3RlOiB3aGVuIGFuIGluaXRyZCBhbHNvIGNhcnJpZXMgYSBib290Y29uZmlnLCBpdHMgXCJrZXJuZWxcIlxuK1x0ICBzdWJ0cmVlIGlzIHN0aWxsIHBhcnNlZCBhdCBydW50aW1lLCBidXQgdGhlIGVtYmVkZGVkIFwia2VybmVsXCJcbitcdCAga2V5cyByZW1haW4gaW4gYm9vdF9jb21tYW5kX2xpbmUgZm9yIHBhcnNlX2Vhcmx5X3BhcmFtKCkgYW5kXG4rXHQgIGVuZCB1cCBsYXRlciB0aGFuIHRoZSBpbml0cmQga2V5cyBpbiBzYXZlZF9jb21tYW5kX2xpbmUsIHNvXG4rXHQgIHBhcnNlX2FyZ3MoKSBsYXN0LXdpbnMgZmF2b3JzIHRoZSBlbWJlZGRlZCB2YWx1ZXMuIElmIHlvdSBuZWVkXG4rXHQgIGluaXRyZCB0byBvdmVycmlkZSBlbWJlZGRlZCBrZXJuZWwuKiBrZXlzLCBsZWF2ZSB0aGlzIG9wdGlvblxuK1x0ICBvZmYuXG4rXG4rXHQgIElmIHVuc3VyZSwgc2F5IE4uXG4rXG4gY29uZmlnIENNRExJTkVfTE9HX1dSQVBfSURFQUxfTEVOXG4gXHRpbnQgXCJMZW5ndGggdG8gdHJ5IHRvIHdyYXAgdGhlIGNtZGxpbmUgd2hlbiBsb2dnZWQgYXQgYm9vdFwiXG4gXHRkZWZhdWx0IDEwMjFcbmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jXG5pbmRleCBlMzYzMjMyYjQyOGI0Ny4uMzlhNTE4YTQ3MjQyMjMgMTAwNjQ0XG4tLS0gYS9pbml0L21haW4uY1xuKysrIGIvaW5pdC9tYWluLmNcbkBAIC0zNTYsNDUgKzM1NiwzMyBAQCBzdGF0aWMgY2hhciAqIF9faW5pdCB4YmNfbWFrZV9jbWRsaW5lKGNvbnN0IGNoYXIgKmtleSlcbiBcdHJldHVybiBuZXdfY21kbGluZTtcbiB9XG4gXG4tc3RhdGljIGludCBfX2luaXQgYm9vdGNvbmZpZ19wYXJhbXMoY2hhciAqcGFyYW0sIGNoYXIgKnZhbCxcbi1cdFx0XHRcdCAgICBjb25zdCBjaGFyICp1bnVzZWQsIHZvaWQgKmFyZylcbi17XG4tXHRpZiAoc3RyY21wKHBhcmFtLCBcImJvb3Rjb25maWdcIikgPT0gMCkge1xuLVx0XHRib290Y29uZmlnX2ZvdW5kID0gdHJ1ZTtcbi1cdH1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IF9faW5pdCB3YXJuX2Jvb3Rjb25maWcoY2hhciAqc3RyKVxuIHtcbi1cdC8qIFRoZSAnYm9vdGNvbmZpZycgaGFzIGJlZW4gaGFuZGxlZCBieSBib290Y29uZmlnX3BhcmFtcygpLiAqL1xuK1x0LyogVGhlICdib290Y29uZmlnJyBvcHRpb24gaXMgaGFuZGxlZCBieSBzZXR1cF9ib290X2NvbmZpZygpLiAqL1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290X2NvbmZpZyh2b2lkKVxuIHtcbi1cdHN0YXRpYyBjaGFyIHRtcF9jbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXSBfX2luaXRkYXRhO1xuIFx0Y29uc3QgY2hhciAqbXNnLCAqZGF0YTtcbi1cdGludCBwb3MsIHJldDtcbitcdGludCBwb3MsIHJldCwgb2ZmcztcbiBcdHNpemVfdCBzaXplO1xuLVx0Y2hhciAqZXJyO1xuK1x0Ym9vbCBmcm9tX2VtYmVkZGVkID0gZmFsc2U7XG4gXG4gXHQvKiBDdXQgb3V0IHRoZSBib290Y29uZmlnIGRhdGEgZXZlbiBpZiB3ZSBoYXZlIG5vIGJvb3Rjb25maWcgb3B0aW9uICovXG4gXHRkYXRhID0gZ2V0X2Jvb3RfY29uZmlnX2Zyb21faW5pdHJkKFx1MDAyNnNpemUpO1xuIFx0LyogSWYgdGhlcmUgaXMgbm8gYm9vdGNvbmZpZyBpbiBpbml0cmQsIHRyeSBlbWJlZGRlZCBvbmUuICovXG4tXHRpZiAoIWRhdGEpXG4rXHRpZiAoIWRhdGEpIHtcbiBcdFx0ZGF0YSA9IHhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhcdTAwMjZzaXplKTtcbitcdFx0ZnJvbV9lbWJlZGRlZCA9IHRydWU7XG4rXHR9XG4gXG4tXHRzdHJzY3B5KHRtcF9jbWRsaW5lLCBib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpO1xuLVx0ZXJyID0gcGFyc2VfYXJncyhcImJvb3Rjb25maWdcIiwgdG1wX2NtZGxpbmUsIE5VTEwsIDAsIDAsIDAsIE5VTEwsXG4tXHRcdFx0IGJvb3Rjb25maWdfcGFyYW1zKTtcbi1cbi1cdGlmIChJU19FUlIoZXJyKSB8fCAhKGJvb3Rjb25maWdfZm91bmQgfHwgSVNfRU5BQkxFRChDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0UpKSlcbitcdGJvb3Rjb25maWdfZm91bmQgPSBib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkKGJvb3RfY29tbWFuZF9saW5lLCBcdTAwMjZvZmZzKTtcbitcdGlmICghKGJvb3Rjb25maWdfZm91bmQgfHwgSVNfRU5BQkxFRChDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0UpKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0LyogcGFyc2VfYXJncygpIHN0b3BzIGF0IHRoZSBuZXh0IHBhcmFtIG9mICctLScgYW5kIHJldHVybnMgYW4gYWRkcmVzcyAqL1xuLVx0aWYgKGVycilcbi1cdFx0aW5pdGFyZ3Nfb2ZmcyA9IGVyciAtIHRtcF9jbWRsaW5lO1xuK1x0LyogT2Zmc2V0IG9mIHRoZSBpbml0IGFyZ3VtZW50cyBhZnRlciBhIFwiLS1cIiwgbG9jYXRlZCBieSB0aGUgaGVscGVyLiAqL1xuK1x0aW5pdGFyZ3Nfb2ZmcyA9IG9mZnM7XG4gXG4gXHRpZiAoIWRhdGEpIHtcbiBcdFx0LyogSWYgdXNlciBpbnRlbmRlZCB0byB1c2UgYm9vdGNvbmZpZywgc2hvdyBhbiBlcnJvciBsZXZlbCBtZXNzYWdlICovXG5AQCAtNDIxLDggKzQwOSwyNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfYm9vdF9jb25maWcodm9pZClcbiBcdH0gZWxzZSB7XG4gXHRcdHhiY19nZXRfaW5mbyhcdTAwMjZyZXQsIE5VTEwpO1xuIFx0XHRwcl9pbmZvKFwiTG9hZCBib290Y29uZmlnOiAlbGQgYnl0ZXMgJWQgbm9kZXNcXG5cIiwgKGxvbmcpc2l6ZSwgcmV0KTtcbi1cdFx0Lyoga2V5cyBzdGFydGluZyB3aXRoIFwia2VybmVsLlwiIGFyZSBwYXNzZWQgdmlhIGNtZGxpbmUgKi9cbi1cdFx0ZXh0cmFfY29tbWFuZF9saW5lID0geGJjX21ha2VfY21kbGluZShcImtlcm5lbFwiKTtcbitcdFx0LypcbitcdFx0ICoga2V5cyBzdGFydGluZyB3aXRoIFwia2VybmVsLlwiIGFyZSBwYXNzZWQgdmlhIGNtZGxpbmUuIFdoZW5cbitcdFx0ICogdGhpcyBib290Y29uZmlnIGNhbWUgZnJvbSB0aGUgZW1iZWRkZWQgc291cmNlIGFuZFxuK1x0XHQgKiBzZXR1cF9hcmNoKCkgYWxyZWFkeSBwcmVwZW5kZWQgdGhlIHJlbmRlcmVkIFwia2VybmVsXCIgc3VidHJlZVxuK1x0XHQgKiB0byBib290X2NvbW1hbmRfbGluZSwgcmVuZGVyaW5nIGFnYWluIGhlcmUgd291bGQgZHVwbGljYXRlXG4rXHRcdCAqIHRoZSBrZXlzIGluIHNhdmVkX2NvbW1hbmRfbGluZSBhbmQgbWFrZSBhY2N1bXVsYXRpbmcgaGFuZGxlcnNcbitcdFx0ICogKGNvbnNvbGU9LCBlYXJseWNvbj0sIC4uLikgcmUtcmVnaXN0ZXIgdGhlIHNhbWUgdmFsdWUuIFNraXBcbitcdFx0ICogb25seSB3aGVuIHRoZSBwcmVwZW5kIHJlYWxseSBoYXBwZW5lZC5cbitcdFx0ICpcbitcdFx0ICogT24gYXJjaGVzIHRoYXQgZG8gbm90IHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHLFxuK1x0XHQgKiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcgaXMgdW5zZWxlY3RhYmxlIGFuZFxuK1x0XHQgKiB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkgY29sbGFwc2VzIHRvIGEgc3R1YiByZXR1cm5pbmdcbitcdFx0ICogZmFsc2UsIHNvIHRoaXMgcGF0aCBzdGlsbCBydW5zIGFuZCB0aGUgZW1iZWRkZWQgXCJrZXJuZWxcIlxuK1x0XHQgKiBrZXlzIHJlYWNoIHRoZSBjbWRsaW5lIHZpYSB0aGUgcnVudGltZSBwYXJzZXIgZXhhY3RseSBhc1xuK1x0XHQgKiBiZWZvcmUgdGhpcyBzZXJpZXMuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWZyb21fZW1iZWRkZWQgfHwgIXhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQoKSlcbitcdFx0XHRleHRyYV9jb21tYW5kX2xpbmUgPSB4YmNfbWFrZV9jbWRsaW5lKFwia2VybmVsXCIpO1xuIFx0XHQvKiBBbHNvLCBcImluaXQuXCIga2V5cyBhcmUgaW5pdCBhcmd1bWVudHMgKi9cbiBcdFx0ZXh0cmFfaW5pdF9hcmdzID0geGJjX21ha2VfY21kbGluZShcImluaXRcIik7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlXG5pbmRleCA3Zjc1Y2M2ZWRmOTRhZi4uNGNjZGNlMmZkNWU1YjAgMTAwNjQ0XG4tLS0gYS9saWIvTWFrZWZpbGVcbisrKyBiL2xpYi9NYWtlZmlsZVxuQEAgLTI3Myw2ICsyNzMsMjIgQEAgZmlsZWNoa19kZWZiY29uZiA9IGNhdCAkKG9yICQocmVhbC1wcmVyZXFzKSwgL2Rldi9udWxsKVxuICQob2JqKS9kZWZhdWx0LmJjb25mOiAkKENPTkZJR19CT09UX0NPTkZJR19FTUJFRF9GSUxFKSBGT1JDRVxuIFx0JChjYWxsIGZpbGVjaGssZGVmYmNvbmYpXG4gXG4rb2JqLSQoQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHKSArPSBlbWJlZGRlZC1jbWRsaW5lLm9cbiskKG9iaikvZW1iZWRkZWQtY21kbGluZS5vOiAkKG9iaikvZW1iZWRkZWRfY21kbGluZS5iaW5cbitcbisjIFJlbmRlciB0aGUgYm9vdGNvbmZpZyBcImtlcm5lbFwiIHN1YnRyZWUgdG8gYSBmbGF0IGNtZGxpbmUgc3RyaW5nIHVzaW5nXG4rIyB0aGUgdXNlcnNwYWNlIHRvb2xzL2Jvb3Rjb25maWcgcGFyc2VyICgtQyBtb2RlKS4gVGhlIHJ1bnRpbWUgcHJlcGVuZFxuKyMgaGVscGVyIGVuZm9yY2VzIENPTU1BTkRfTElORV9TSVpFIGF0IGJvb3QsIHNvIG5vIGJ1aWxkLXRpbWUgc2l6ZVxuKyMgY2hlY2sgaXMgcGVyZm9ybWVkIGhlcmUgKENPTU1BTkRfTElORV9TSVpFIGlzIGFuIGFyY2ggaGVhZGVyXG4rIyBjb25zdGFudCwgbm90IGEgS2NvbmZpZyB2YWx1ZSkuXG4rcXVpZXRfY21kX3JlbmRlcl9jbWRsaW5lID0gQkNPTkYyQyAkQFxuKyAgICAgIGNtZF9yZW5kZXJfY21kbGluZSA9IFxcXG4rXHQkKG9ianRyZWUpL3Rvb2xzL2Jvb3Rjb25maWcvYm9vdGNvbmZpZyAtQyAkXHUwMDNjIFx1MDAzZSAkQFxuK1xuK3RhcmdldHMgKz0gZW1iZWRkZWRfY21kbGluZS5iaW5cbiskKG9iaikvZW1iZWRkZWRfY21kbGluZS5iaW46ICQob2JqKS9kZWZhdWx0LmJjb25mICQob2JqdHJlZSkvdG9vbHMvYm9vdGNvbmZpZy9ib290Y29uZmlnIEZPUkNFXG4rXHQkKGNhbGwgaWZfY2hhbmdlZCxyZW5kZXJfY21kbGluZSlcbitcbiBvYmotJChDT05GSUdfUkJUUkVFX1RFU1QpICs9IHJidHJlZV90ZXN0Lm9cbiBvYmotJChDT05GSUdfSU5URVJWQUxfVFJFRV9URVNUKSArPSBpbnRlcnZhbF90cmVlX3Rlc3Qub1xuIFxuZGlmZiAtLWdpdCBhL2xpYi9ib290Y29uZmlnLmMgYi9saWIvYm9vdGNvbmZpZy5jXG5pbmRleCBmNDQ1Yjc3MDNmZGQ5Ni4uODljODhlMzU5MTc5ZjAgMTAwNjQ0XG4tLS0gYS9saWIvYm9vdGNvbmZpZy5jXG4rKysgYi9saWIvYm9vdGNvbmZpZy5jXG5AQCAtMTksOSArMTksMTMgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FjaGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGVwYXJhbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcHJpbnRmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vc2V0dXAuaFx1MDAzZVx0XHQvKiBDT01NQU5EX0xJTkVfU0laRSAqL1xuIFxuICNpZmRlZiBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURcbiAvKiBlbWJlZGRlZF9ib290Y29uZmlnX2RhdGEgaXMgZGVmaW5lZCBpbiBib290Y29uZmlnLWRhdGEuUyAqL1xuQEAgLTM0LDcgKzM4LDEyOSBAQCBjb25zdCBjaGFyICogX19pbml0IHhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhzaXplX3QgKnNpemUpXG4gXHRyZXR1cm4gKCpzaXplKSA/IGVtYmVkZGVkX2Jvb3Rjb25maWdfZGF0YSA6IE5VTEw7XG4gfVxuICNlbmRpZlxuLSNlbmRpZlxuK1xuKyNpZmRlZiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcbisvKiBlbWJlZGRlZF9rZXJuZWxfY21kbGluZSBpcyBkZWZpbmVkIGluIGVtYmVkZGVkLWNtZGxpbmUuUyAqL1xuK2V4dGVybiBfX3Zpc2libGUgY29uc3QgY2hhciBlbWJlZGRlZF9rZXJuZWxfY21kbGluZVtdO1xuK2V4dGVybiBfX3Zpc2libGUgY29uc3QgY2hhciBlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmRbXTtcbitcbisvKiBTZXQgb25jZSB0aGUgZW1iZWRkZWQgY21kbGluZSBoYXMgYWN0dWFsbHkgYmVlbiBwcmVwZW5kZWQuICovXG4rc3RhdGljIGJvb2wgeGJjX2NtZGxpbmVfYXBwbGllZCBfX2luaXRkYXRhO1xuK1xuKy8qXG4rICogc3RyX3ByZXBlbmQoKSAtIFByZXBlbmQgQHNyYyBpbiBmcm9udCBvZiB0aGUgc3RyaW5nIGluIEBkc3QsIGluIHBsYWNlXG4rICogQGRzdDogTlVMLXRlcm1pbmF0ZWQgZGVzdGluYXRpb24gYnVmZmVyLCBjdXJyZW50bHkgQGRzdF9sZW4gYnl0ZXMgbG9uZ1xuKyAqIEBkc3RfbGVuOiBsZW5ndGggb2YgdGhlIGN1cnJlbnQgQGRzdCBzdHJpbmcgKGV4Y2x1ZGluZyBpdHMgTlVMKVxuKyAqIEBzcmM6IGJ5dGVzIHRvIHByZXBlbmQgKG5vdCBOVUwtdGVybWluYXRlZClcbisgKiBAc3JjX2xlbjogbnVtYmVyIG9mIGJ5dGVzIGZyb20gQHNyYyB0byBwcmVwZW5kXG4rICpcbisgKiBUaGUgY2FsbGVyIG11c3QgZ3VhcmFudGVlIEBkc3QgaGFzIHJvb20gZm9yIHNyY19sZW4gKyBkc3RfbGVuICsgMSBieXRlcy5cbisgKiBNb3ZpbmcgZHN0X2xlbiArIDEgYnl0ZXMgY2FycmllcyBAZHN0J3MgTlVMIHRlcm1pbmF0b3IgdG9vLCBzbyBhbiBlbXB0eVxuKyAqIEBkc3QgbmVlZHMgbm8gc3BlY2lhbCBjYXNlLlxuKyAqL1xuK3N0YXRpYyB2b2lkIF9faW5pdCBzdHJfcHJlcGVuZChjaGFyICpkc3QsIHNpemVfdCBkc3RfbGVuLFxuK1x0XHRcdCAgICAgICBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNfbGVuKVxuK3tcbitcdG1lbW1vdmUoZHN0ICsgc3JjX2xlbiwgZHN0LCBkc3RfbGVuICsgMSk7XG4rXHRtZW1jcHkoZHN0LCBzcmMsIHNyY19sZW4pO1xuK31cbitcbisvKipcbisgKiB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKCkgLSBQcmVwZW5kIGVtYmVkZGVkIGJvb3Rjb25maWcgY21kbGluZVxuKyAqIEBkc3Q6IGNtZGxpbmUgYnVmZmVyIHRvIHByZXBlbmQgaW50byAobXVzdCBhbHJlYWR5IGNvbnRhaW4gYSBOVUwgYnl0ZSlcbisgKiBAc2l6ZTogdG90YWwgY2FwYWNpdHkgb2YgQGRzdCBpbiBieXRlc1xuKyAqXG4rICogUHJlcGVuZCB0aGUgYnVpbGQtdGltZS1yZW5kZXJlZCBcImtlcm5lbFwiIHN1YnRyZWUgb2YgdGhlIGVtYmVkZGVkXG4rICogYm9vdGNvbmZpZyB0byBAZHN0LiBUaGUgcmVuZGVyZWQgc3RyaW5nIGFscmVhZHkgZW5kcyB3aXRoIGEgc2luZ2xlXG4rICogc3BhY2UgKHRoZSB4YmNfc25wcmludF9jbWRsaW5lKCkgaW52YXJpYW50KSwgd2hpY2ggc2VydmVzIGFzIHRoZVxuKyAqIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBlbWJlZGRlZCBrZXlzIGFuZCBhbnkgZXhpc3RpbmcgY29udGVudCBvZiBAZHN0LlxuKyAqIE9uIG92ZXJmbG93LCBsb2cgYW4gZXJyb3IgYW5kIGxlYXZlIEBkc3QgdW50b3VjaGVkIHJhdGhlciB0aGFuXG4rICogc2lsZW50bHkgdHJ1bmNhdGluZzogYm9vdGluZyB3aXRob3V0IHRoZSBlbWJlZGRlZCB2YWx1ZXMgaXMgYmV0dGVyXG4rICogdGhhbiByZWZ1c2luZyB0byBib290LCBhbmQgdGhlIGVycm9yIG1lc3NhZ2UgdGVsbHMgdGhlIHVzZXIgd2h5XG4rICogdGhlaXIgZW1iZWRkZWQga2V5cyBhcmUgbWlzc2luZy5cbisgKlxuKyAqIEludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIHNldHVwX2FyY2goKSBiZWZvcmUgcGFyc2VfZWFybHlfcGFyYW0oKSBzb1xuKyAqIHRoYXQgZWFybHlfcGFyYW0oKSBoYW5kbGVycyBzZWUgdGhlIGVtYmVkZGVkIHZhbHVlcy5cbisgKi9cbit2b2lkIF9faW5pdCB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpXG4re1xuK1x0c2l6ZV90IGVtYmVkX2xlbiA9IGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZCAtIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lO1xuK1x0c2l6ZV90IGRzdF9sZW47XG4rXG4rXHRpZiAoIXNpemUgfHwgZW1iZWRfbGVuIFx1MDAzYz0gMSlcdC8qIHRyYWlsaW5nIE5VTCBvbmx5ICovXG4rXHRcdHJldHVybjtcbitcdGVtYmVkX2xlbi0tO1x0XHRcdC8qIGV4Y2x1ZGUgdHJhaWxpbmcgTlVMIGJ5dGUgKi9cbitcbitcdGRzdF9sZW4gPSBzdHJubGVuKGRzdCwgc2l6ZSk7XG4rXHRpZiAoZW1iZWRfbGVuICsgZHN0X2xlbiArIDEgXHUwMDNlIHNpemUpIHtcbitcdFx0cHJfZXJyKFwiZW1iZWRkZWQgYm9vdGNvbmZpZyBjbWRsaW5lICglenUgYnl0ZXMpIGRvZXMgbm90IGZpdCBpbiBDT01NQU5EX0xJTkVfU0laRSB3aXRoICV6dSBieXRlcyBhbHJlYWR5IHVzZWQ7IGlnbm9yaW5nIGVtYmVkZGVkIHZhbHVlc1xcblwiLFxuK1x0XHQgICAgICAgZW1iZWRfbGVuLCBkc3RfbGVuKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0c3RyX3ByZXBlbmQoZHN0LCBkc3RfbGVuLCBlbWJlZGRlZF9rZXJuZWxfY21kbGluZSwgZW1iZWRfbGVuKTtcbitcdHhiY19jbWRsaW5lX2FwcGxpZWQgPSB0cnVlO1xuK31cbitcbisvKipcbisgKiB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkgLSBEaWQgdGhlIGVtYmVkZGVkIGNtZGxpbmUgZ2V0IHByZXBlbmRlZD9cbisgKlxuKyAqIFJldHVybiB0cnVlIGlmIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSBhY3R1YWxseSBwcmVwZW5kZWQgdGhlXG4rICogZW1iZWRkZWQgXCJrZXJuZWxcIiBzdWJ0cmVlLiBzZXR1cF9ib290X2NvbmZpZygpIHVzZXMgdGhpcyB0byBhdm9pZFxuKyAqIHJlbmRlcmluZyB0aGUgc2FtZSBrZXlzIGEgc2Vjb25kIHRpbWUuXG4rICovXG4rYm9vbCBfX2luaXQgeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCh2b2lkKVxuK3tcbitcdHJldHVybiB4YmNfY21kbGluZV9hcHBsaWVkO1xuK31cbisjZW5kaWZcdC8qIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJRyAqL1xuK1xuKy8qIHBhcnNlX2FyZ3MoKSBjYWxsYmFjazogZmxhZyB3aGVuIHRoZSBcImJvb3Rjb25maWdcIiBwYXJhbWV0ZXIgaXMgcHJlc2VudC4gKi9cbitzdGF0aWMgaW50IF9faW5pdCBib290Y29uZmlnX29wdGluKGNoYXIgKnBhcmFtLCBjaGFyICp2YWwsXG4rXHRcdFx0XHQgICBjb25zdCBjaGFyICp1bnVzZWQsIHZvaWQgKmFyZylcbit7XG4rXHRpZiAoIXN0cmNtcChwYXJhbSwgXCJib290Y29uZmlnXCIpKVxuK1x0XHQqKGJvb2wgKilhcmcgPSB0cnVlO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoKSAtIFdhcyBcImJvb3Rjb25maWdcIiBwYXNzZWQgb24gdGhlIGNtZGxpbmU/XG4rICogQGJvb3RfY21kbGluZToga2VybmVsIGNvbW1hbmQgbGluZSB0byBpbnNwZWN0IChub3QgbW9kaWZpZWQpXG4rICogQGVuZF9vZmZzZXQ6IGlmIG5vbi1OVUxMLCBzZXQgdG8gdGhlIG9mZnNldCBvZiB0aGUgaW5pdCBhcmd1bWVudHMgdGhhdFxuKyAqXHRcdGZvbGxvdyBhIFwiLS1cIiBzZXBhcmF0b3IsIG9yIDAgd2hlbiB0aGVyZSBpcyBub25lXG4rICpcbisgKiBQYXJzZSBhIHByaXZhdGUgY29weSBvZiBAYm9vdF9jbWRsaW5lIChwYXJzZV9hcmdzKCkgaXMgZGVzdHJ1Y3RpdmUpIGFuZFxuKyAqIHJlcG9ydCB3aGV0aGVyIFwiYm9vdGNvbmZpZ1wiIGlzIHByZXNlbnQgYmVmb3JlIHRoZSBcIi0tXCIgc2VwYXJhdG9yLlxuKyAqIHNldHVwX2FyY2goKSB1c2VzIHRoaXMgdG8gZ2F0ZSBwcmVwZW5kaW5nIHRoZSBidWlsZC10aW1lIGVtYmVkZGVkIGNtZGxpbmU7XG4rICogc2V0dXBfYm9vdF9jb25maWcoKSB1c2VzIGl0IGZvciB0aGUgcnVudGltZSBvcHQtaW4gYW5kIHRvIGxvY2F0ZSB0aGUgaW5pdFxuKyAqIGFyZ3VtZW50cyB2aWEgQGVuZF9vZmZzZXQuIFNoYXJpbmcgb25lIHBhcnNlciBrZWVwcyB0aGUgZWFybHkgYW5kIGxhdGVcbisgKiBwYXRocyBhZ3JlZWluZyBvbiB3aGF0IGNvdW50cyBhcyBvcHQtaW4uIENPTkZJR19CT09UX0NPTkZJR19GT1JDRSBpcyBub3RcbisgKiBmb2xkZWQgaW4gaGVyZTsgY2FsbGVycyBhcHBseSBpdCB3aGVyZSB0aGV5IG5lZWQgaXQuXG4rICovXG4rYm9vbCBfX2luaXQgYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZChjb25zdCBjaGFyICpib290X2NtZGxpbmUsIGludCAqZW5kX29mZnNldClcbit7XG4rXHRzdGF0aWMgY2hhciB0bXBfY21kbGluZVtDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTtcbitcdGJvb2wgZm91bmQgPSBmYWxzZTtcbitcdGNoYXIgKmVycjtcbitcbitcdGlmIChlbmRfb2Zmc2V0KVxuK1x0XHQqZW5kX29mZnNldCA9IDA7XG4rXG4rXHRzdHJzY3B5KHRtcF9jbWRsaW5lLCBib290X2NtZGxpbmUsIENPTU1BTkRfTElORV9TSVpFKTtcbitcdGVyciA9IHBhcnNlX2FyZ3MoXCJib290Y29uZmlnXCIsIHRtcF9jbWRsaW5lLCBOVUxMLCAwLCAwLCAwLFxuK1x0XHRcdCBcdTAwMjZmb3VuZCwgYm9vdGNvbmZpZ19vcHRpbik7XG4rXHRpZiAoSVNfRVJSKGVycikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIHBhcnNlX2FyZ3MoKSBzdG9wcyBhdCBcIi0tXCIgYW5kIHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHJlc3QuICovXG4rXHRpZiAoZW5kX29mZnNldCBcdTAwMjZcdTAwMjYgZXJyKVxuK1x0XHQqZW5kX29mZnNldCA9IGVyciAtIHRtcF9jbWRsaW5lO1xuK1xuK1x0cmV0dXJuIGZvdW5kO1xuK31cbitcbisjZW5kaWZcdC8qIF9fS0VSTkVMX18gKi9cbiBcbiAvKlxuICAqIEV4dHJhIEJvb3QgQ29uZmlnIChYQkMpIGlzIGdpdmVuIGFzIHRyZWUtc3RydWN0dXJlZCBhc2NpaSB0ZXh0IG9mXG5AQCAtNDI3LDExICs1NTMsMzAgQEAgc3RhdGljIGNoYXIgeGJjX25hbWVidWZbWEJDX0tFWUxFTl9NQVhdIF9faW5pdGRhdGE7XG4gaW50IF9faW5pdCB4YmNfc25wcmludF9jbWRsaW5lKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIHN0cnVjdCB4YmNfbm9kZSAqcm9vdClcbiB7XG4gXHRzdHJ1Y3QgeGJjX25vZGUgKmtub2RlLCAqdm5vZGU7XG4tXHRjaGFyICplbmQgPSBidWYgKyBzaXplO1xuIFx0Y29uc3QgY2hhciAqdmFsLCAqcTtcbitcdHNpemVfdCBsZW4gPSAwO1xuIFx0aW50IHJldDtcbiBcbitcdC8qXG4rXHQgKiBUcmFjayB0aGUgcnVubmluZyB3cml0dGVuIGxlbmd0aCByYXRoZXIgdGhhbiBhZHZhbmNpbmcgQGJ1Ziwgc28gd2VcbitcdCAqIG5ldmVyIGZvcm0gXCJidWYgKyBzaXplXCIgb3IgXCJidWYgKz0gcmV0XCIgd2hpbGUgQGJ1ZiBpcyBOVUxMICh0aGVcbitcdCAqIHNpemUtcHJvYmUgY2FsbCBwYXNzZXMgYnVmPU5VTEwsIHNpemU9MCkuIE5VTEwgcG9pbnRlciBhcml0aG1ldGljXG4rXHQgKiBpcyB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIHRyaXBzIGhvc3QgVUJTYW4gLyBGT1JUSUZZX1NPVVJDRSB3aGVuXG4rXHQgKiB0aGlzIHJlbmRlcmVyIHJ1bnMgYXQga2VybmVsIGJ1aWxkIHRpbWUuIHNucHJpbnRmKE5VTEwsIDAsIC4uLilcbitcdCAqIGl0c2VsZiBpcyB3ZWxsIGRlZmluZWQgYW5kIHJldHVybnMgdGhlIHdvdWxkLWJlIGxlbmd0aC5cbitcdCAqL1xuIFx0eGJjX25vZGVfZm9yX2VhY2hfa2V5X3ZhbHVlKHJvb3QsIGtub2RlLCB2YWwpIHtcbitcdFx0LypcbitcdFx0ICogQW4gZW1wdHkgb3IgdmFsdWUtb25seSBAcm9vdCAoZS5nLiBcImtlcm5lbCB7fVwiIG9yXG4rXHRcdCAqIFwia2VybmVsID0geFwiLCBwb3NzaWJseSBhbG9uZ3NpZGUgXCJrZXJuZWwuZm9vID0gYmFyXCIpXG4rXHRcdCAqIHlpZWxkcyBAcm9vdCBpdHNlbGYgaGVyZS4gU2tpcCBpdDogY29tcG9zaW5nIGEga2V5IGZvciBpdFxuK1x0XHQgKiB3b3VsZCBmYWlsIHdpdGggLUVJTlZBTCwgeWV0IGFueSByZWFsIGRlc2NlbmRhbnQga2V5cyBtdXN0XG4rXHRcdCAqIHN0aWxsIGJlIHJlbmRlcmVkLiBBbiBlbnRpcmVseSBlbXB0eSBzdWJ0cmVlIHRoZW4gcmVuZGVyc1xuK1x0XHQgKiBub3RoaW5nIGFuZCByZXR1cm5zIDAgcmF0aGVyIHRoYW4gYW4gZXJyb3IuXG4rXHRcdCAqL1xuK1x0XHRpZiAoa25vZGUgPT0gcm9vdClcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0cmV0ID0geGJjX25vZGVfY29tcG9zZV9rZXlfYWZ0ZXIocm9vdCwga25vZGUsXG4gXHRcdFx0XHRcdHhiY19uYW1lYnVmLCBYQkNfS0VZTEVOX01BWCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG5AQCAtNDM5LDEwICs1ODQsMTEgQEAgaW50IF9faW5pdCB4YmNfc25wcmludF9jbWRsaW5lKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIHN0cnVjdCB4YmNfbm9kZSAqcm9vdClcbiBcbiBcdFx0dm5vZGUgPSB4YmNfbm9kZV9nZXRfY2hpbGQoa25vZGUpO1xuIFx0XHRpZiAoIXZub2RlKSB7XG4tXHRcdFx0cmV0ID0gc25wcmludGYoYnVmLCByZXN0KGJ1ZiwgZW5kKSwgXCIlcyBcIiwgeGJjX25hbWVidWYpO1xuK1x0XHRcdHJldCA9IHNucHJpbnRmKGJ1ZiA/IGJ1ZiArIGxlbiA6IE5VTEwsIHJlc3QobGVuLCBzaXplKSxcbitcdFx0XHRcdCAgICAgICBcIiVzIFwiLCB4YmNfbmFtZWJ1Zik7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdFx0YnVmICs9IHJldDtcbitcdFx0XHRsZW4gKz0gcmV0O1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdHhiY19hcnJheV9mb3JfZWFjaF92YWx1ZSh2bm9kZSwgdmFsKSB7XG5AQCAtNDUyLDE1ICs1OTgsMTUgQEAgaW50IF9faW5pdCB4YmNfc25wcmludF9jbWRsaW5lKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIHN0cnVjdCB4YmNfbm9kZSAqcm9vdClcbiBcdFx0XHQgKiB3aGl0ZXNwYWNlLlxuIFx0XHRcdCAqL1xuIFx0XHRcdHEgPSBzdHJwYnJrKHZhbCwgXCIgXFx0XFxyXFxuXCIpID8gXCJcXFwiXCIgOiBcIlwiO1xuLVx0XHRcdHJldCA9IHNucHJpbnRmKGJ1ZiwgcmVzdChidWYsIGVuZCksIFwiJXM9JXMlcyVzIFwiLFxuLVx0XHRcdFx0ICAgICAgIHhiY19uYW1lYnVmLCBxLCB2YWwsIHEpO1xuK1x0XHRcdHJldCA9IHNucHJpbnRmKGJ1ZiA/IGJ1ZiArIGxlbiA6IE5VTEwsIHJlc3QobGVuLCBzaXplKSxcbitcdFx0XHRcdCAgICAgICBcIiVzPSVzJXMlcyBcIiwgeGJjX25hbWVidWYsIHEsIHZhbCwgcSk7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdFx0YnVmICs9IHJldDtcbitcdFx0XHRsZW4gKz0gcmV0O1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRyZXR1cm4gYnVmIC0gKGVuZCAtIHNpemUpO1xuK1x0cmV0dXJuIGxlbjtcbiB9XG4gI3VuZGVmIHJlc3RcbiBcbmRpZmYgLS1naXQgYS9saWIvZW1iZWRkZWQtY21kbGluZS5TIGIvbGliL2VtYmVkZGVkLWNtZGxpbmUuU1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iZGE4MWI0YTQyYmVhZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvbGliL2VtYmVkZGVkLWNtZGxpbmUuU1xuQEAgLTAsMCArMSwxNiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLypcbisgKiBFbWJlZCB0aGUgYnVpbGQtdGltZS1yZW5kZXJlZCBib290Y29uZmlnIFwia2VybmVsXCIgc3VidHJlZSBhcyBhIGZsYXRcbisgKiBjbWRsaW5lIHN0cmluZy4gc2V0dXBfYXJjaCgpIHByZXBlbmRzIHRoaXMgdG8gYm9vdF9jb21tYW5kX2xpbmUgb25cbisgKiBhcmNoaXRlY3R1cmVzIHRoYXQgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUcuXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXNcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4rICovXG4rXHQuc2VjdGlvbiAuaW5pdC5yb2RhdGEuZW1iZWRfY21kbGluZSwgXCJhXCIsICVwcm9nYml0c1xuK1x0Lmdsb2JhbCBlbWJlZGRlZF9rZXJuZWxfY21kbGluZVxuK2VtYmVkZGVkX2tlcm5lbF9jbWRsaW5lOlxuK1x0LmluY2JpbiBcImxpYi9lbWJlZGRlZF9jbWRsaW5lLmJpblwiXG4rXHQuYnl0ZSAwXG4rXHQuZ2xvYmFsIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZFxuK2VtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZDpcbmRpZmYgLS1naXQgYS90b29scy9ib290Y29uZmlnL01ha2VmaWxlIGIvdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZVxuaW5kZXggOTBlYjQ3YzlkOGRlNjcuLjNjYjgwNjZkNTE0MWJiIDEwMDY0NFxuLS0tIGEvdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZVxuKysrIGIvdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZVxuQEAgLTE1LDcgKzE1LDcgQEAgb3ZlcnJpZGUgQ0ZMQUdTICs9IC1XYWxsIC1nIC1JJChDVVJESVIpL2luY2x1ZGVcbiBBTExfVEFSR0VUUyA6PSBib290Y29uZmlnXG4gQUxMX1BST0dSQU1TIDo9ICQocGF0c3Vic3QgJSwkKE9VVFBVVCklLCQoQUxMX1RBUkdFVFMpKVxuIFxuLWFsbDogJChBTExfUFJPR1JBTVMpIHRlc3RcbithbGw6ICQoQUxMX1BST0dSQU1TKVxuIFxuICQoT1VUUFVUKWJvb3Rjb25maWc6IG1haW4uYyBpbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaCAkKExJQlNSQylcbiBcdCQoQ0MpICQoZmlsdGVyICUuYywkXikgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEBcbkBAIC0yNyw0ICsyNyw0IEBAIGluc3RhbGw6ICQoQUxMX1BST0dSQU1TKVxuIFx0aW5zdGFsbCAkKE9VVFBVVClib290Y29uZmlnICQoREVTVERJUikkKGJpbmRpcilcbiBcbiBjbGVhbjpcbi1cdCQoUk0pIC1mICQoT1VUUFVUKSoubyAkKEFMTF9QUk9HUkFNUylcbitcdHJtIC1mICQoT1VUUFVUKSoubyAkKEFMTF9QUk9HUkFNUylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjE1OjI4LjE5MjM3NDM0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxMTI2NzQyMjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgKipcblxuT2theSwgc28gd2UndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgaW1wbGVtZW50cyBgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHYC4gRXNzZW50aWFsbHksIGl0IGNvbXBpbGVzIGEgYm9vdGNvbmZpZyBzdWJ0cmVlIGludG8gYSBmbGF0IGNvbW1hbmQgbGluZSBzdHJpbmcgYW5kIHByZXBlbmRzIGl0IGR1cmluZyB0aGUgZWFybHkgYXJjaGl0ZWN0dXJlIHNldHVwLiBUaGlzIGFsbG93cyBlYXJseSBwYXJhbWV0ZXIgaGFuZGxlcnMgdG8gc2VlIHZhbHVlcyBkZWZpbmVkIGluIHRoZSBlbWJlZGRlZCBga2VybmVsYCBzdWJ0cmVlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGV2ZW4gZnV6emFibGUsIG9yIGlmIGl0J3MgZGVhZCBjb2RlIGFmdGVyIHRoZSBidWlsZC5cblxuSSBzZWUgdGhhdCB0aGUgY2hhbmdlcyBpbmNsdWRlIG1vZGlmaWNhdGlvbnMgdG8gYGFyY2gveDg2L2tlcm5lbC9zZXR1cC5jYCAodG8gcHJlcGVuZCB0aGUgY21kbGluZSksIGBpbml0L21haW4uY2AgKGZvciBib290Y29uZmlnIGhhbmRsaW5nKSwgYWRkaXRpb24gb2YgYGxpYi9lbWJlZGRlZC1jbWRsaW5lLlNgIGFuZCBtb2RpZmljYXRpb25zIHRvIGBsaWIvYm9vdGNvbmZpZy5jYCwgYW5kIGEgbmV3IEtjb25maWcgb3B0aW9uLlxuXG5JcyB0aGlzIGNvZGUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nIHdpdGggc29tZXRoaW5nIGxpa2UgU3l6a2FsbGVyPyBUaGUgY29tbWFuZCBsaW5lIGNvbnN0cnVjdGlvbiBhdCBib290IHRpbWUgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCB0YXJnZXQuIEhvd2V2ZXIsIGl0J3MgKnZlcnkqIGVhcmx5IGluIHRoZSBib290IHByb2Nlc3MuIFN5emthbGxlciBpcyBncmVhdCwgYnV0IGl0IHR5cGljYWxseSBoaXRzIHRoZSBzeXNjYWxsIGxheWVyLCBuZXR3b3JrLCBhbmQgVVNCLCBub3QgdGhlIGJvb3QgcHJvY2VzcyBvciB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBkaXJlY3RseSwgd2hpY2ggYXJlIGZpeGVkIGF0IGNvbXBpbGUgdGltZS5cblxuV2FpdCwgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgaXMgKmZpeGVkKiwgbWVhbmluZyB0aGUgY29tbWFuZCBsaW5lIGlzIGZpeGVkLCBhbmQgY2FuJ3QgYmUgbXV0YXRlZCBwZXIgZnV6eiBjYXNlLiBCdXQgdGhlIGNvZGUgaW4gYGxpYi9ib290Y29uZmlnLmNgIGlzICpleGVjdXRlZCogZHVyaW5nIGJvb3QuIElmIGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgIGlzIGVuYWJsZWQsIHRoZW4gYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKWAgZXhlY3V0ZXMgZHVyaW5nIGBzZXR1cF9hcmNoKClgLiBJcyB0aGVyZSB1c2VyIGlucHV0IHRoYXQgY2FuIHJlYWNoIHRoaXM/IFRoZSBlbWJlZGRlZCBib290Y29uZmlnIGlzIGZpeGVkIGF0IGJ1aWxkIHRpbWUuIFRoZSBib290IGNvbW1hbmQgbGluZSBjb21lcyBmcm9tIHRoZSBib290bG9hZGVyLiBTeXprYWxsZXIncyBib290bG9hZGVyIGlzIGZpeGVkIChJIHRoaW5rPyksIHNvIGNhbiBzeXprYWxsZXIgcGFzcyBhIGRpZmZlcmVudCBjb21tYW5kIGxpbmU/IE5vLCBpdCdzIG5vdCBkZXNpZ25lZCB0byBkbyB0aGF0LiBUaGUgYHBhcnNlX2FyZ3NgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZCBvbiB0aGUgYm9vdCBjb21tYW5kIGxpbmUuXG5cbk9rYXksIGlzIHRoZXJlICphbnkqIGZ1bmN0aW9uYWwgY2hhbmdlIFN5emthbGxlciBjYW4gZnV6ej8gU3l6a2FsbGVyIGRvZXNuJ3QgbXV0YXRlIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIG9yIGtlcm5lbCBjb21tYW5kIGxpbmUgYmV0d2VlbiBleGVjdXRpb25zLCB3aGljaCBtYWtlcyB0aGlzIGNvZGUgb25seSBydW4gb25jZSBhdCBib290LiBJdCdzIG5vdCByZWFjaGFibGUgZnJvbSB1c2VyLXNwYWNlIHN5c2NhbGxzLCBzbyBpdCdzIG5vdCAqcmVhbGx5KiBmdXp6YWJsZS5cblxuTGV0IG1lIGRvdWJsZS1jaGVjay4gVGhlIHBhdGNoIGFkZHMgYENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR2AsIGB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lYCwgYGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWRgLCBgeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZGAuIFRoZXNlIGFyZSBhbGwgYF9faW5pdGAgZnVuY3Rpb25zLiBTeXprYWxsZXIgc3RhcnRzIGZ1enppbmcgKmFmdGVyKiB0aGUga2VybmVsIGhhcyBib290ZWQuIGBfX2luaXRgIGNvZGUgZ2V0cyBmcmVlZCwgc28gd2UgY2FuJ3QgZ2V0IHRvIGl0IHdpdGggb3VyIHN5c2NhbGwgZnV6emVyLCB3aGljaCBvcGVyYXRlcyBhdCBydW50aW1lLiBTeXprYWxsZXIgKmRvZXMqIGNhdGNoIGJvb3QtdGltZSBjcmFzaGVzLCBidXQgaXQgZG9lc24ndCByZWFsbHkgZnV6eiB0aGUgaW5wdXRzIHRvIHRoZXNlIGVhcmx5IGZ1bmN0aW9ucyBiZWNhdXNlIHRob3NlIGlucHV0cyAodGhlIGJvb3Rjb25maWcsIHRoZSBjbWRsaW5lKSBhcmUgc3RhdGljLlxuXG5TbywgdGhpcyBsb29rcyBwcmV0dHkgdW4tZnV6emFibGUgaW4gdGhlIHRyYWRpdGlvbmFsIFN5emthbGxlciBzZW5zZS4gQW55IG5vbi1pbml0IGNvZGU/IGB4YmNfc25wcmludF9jbWRsaW5lYCBpcyBtb2RpZmllZCwgYnV0IGl0J3MgYWxzbyBgX19pbml0YC4gTG9va2luZyBhdCBgbGliL2Jvb3Rjb25maWcuY2AsIGl0J3MgYWxsIGBfX2luaXRgIGZ1bmN0aW9uczogYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgLCBgYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZGAsIGB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkYCwgYGJvb3Rjb25maWdfb3B0aW5gLCBhbmQgYHN0cl9wcmVwZW5kYC4gQWxzbywgYHNldHVwX2FyY2hgLCBgc2V0dXBfYm9vdF9jb25maWdgLCBhbmQgYHdhcm5fYm9vdGNvbmZpZ2AgYXJlIGBfX2luaXRgLlxuXG5ZZXAsIGFsbCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBpbiBgX19pbml0YCBmdW5jdGlvbnMuIFRoZXkncmUgZXhlY3V0ZWQgb25seSBvbmNlIGF0IGJvb3Qgd2l0aCBzdGF0aWMgaW5wdXRzICh0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBhbmQgYm9vdGxvYWRlciBjbWRsaW5lKS4gU3l6a2FsbGVyIGNhbid0IHByb3ZpZGUgdmFyaWVkIGlucHV0cyB0byBleHBsb3JlIGRpZmZlcmVudCBjb2RlIHBhdGhzLiBUaGlzIGlzIG5vdCB3b3J0aCBmdXp6aW5nLlxuXG5KdXN0IGNoZWNraW5nIGZvciBub24taW5pdCBmdW5jdGlvbnMuLi4gYHRvb2xzL2Jvb3Rjb25maWcvTWFrZWZpbGVgIGlzIHVzZXJzcGFjZS4gVGhlbiBpdCdzIGRhdGEsIGJ1aWxkIHJ1bGVzLCBgaW5pdC9tYWluLmNgIHdpdGggdGhvc2UgaW5pdCBmdW5jdGlvbnMsIEtjb25maWcsIGRlY2xhcmF0aW9ucywgYXJjaC94ODYgY29kZSB3aXRoIGBfX2luaXRgIGZ1bmN0aW9ucywgYnVpbGQgcnVsZXMsIGFuZCBkb2N1bWVudGF0aW9uLiBFdmVyeXRoaW5nIGlzIGJ1aWxkLXRpbWUsIGRvY3VtZW50YXRpb24sIG9yIGBfX2luaXRgIGNvZGUuIFN5emthbGxlciBkb2Vzbid0IGZ1enogYF9faW5pdGAgY29kZSBiZWNhdXNlIGl0IHJ1bnMgdG9vIGVhcmx5LCBhbmQgdGhlIGlucHV0cyBhcmVuJ3QgbXV0YXRlZCBieSBTeXprYWxsZXIuXG5cbkknbSByZXR1cm5pbmcgYFdvcnRoRnV6emluZzogZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgYWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyByZXNpZGUgd2l0aGluIGBfX2luaXRgIGZ1bmN0aW9ucyBhbmQgYnVpbGQtdGltZSB0b29scy4gVGhpcyBjb2RlIGdldHMgZXhlY3V0ZWQgZHVyaW5nIGJvb3Qgd2l0aCBzdGF0aWMgaW5wdXRzIHdoaWNoIG1lYW5zIHRoYXQgc3l6a2FsbGVy4oCZcyBydW50aW1lIHN5c2NhbGwgZnV6emluZyBjYW5ub3QgcmVhY2ggaXQuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgdGhhdCB0aGVyZSBpc24ndCBzb21lIGVkZ2UgY2FzZSwgbGlrZSBmaXJtd2FyZSBmaWxlcy4gQnV0IG5vLCB0aGUgYm9vdGNvbmZpZyBpcyBlbWJlZGRlZFxuXG4iLCJJbnB1dFRva2VucyI6MTAyODEsIk91dHB1dFRva2VucyI6MTMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjE1OjQ5LjMxOTExOTQ1OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGJ1aWxkLXRpbWUgZmVhdHVyZSB0byByZW5kZXIgZW1iZWRkZWQgYm9vdGNvbmZpZyBpbnRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiBBbGwgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBrZXJuZWwgYXJlIGNvbmZpbmVkIHRvIGBfX2luaXRgIGZ1bmN0aW9ucyAoZS5nLiwgYHNldHVwX2FyY2hgLCBgc2V0dXBfYm9vdF9jb25maWdgLCBgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZWApLCB3aGljaCBydW4gb25seSBvbmNlIGR1cmluZyBlYXJseSBib290IHdpdGggc3RhdGljIGlucHV0cyAoY29tcGlsZS10aW1lIGVtYmVkZGVkIGZpbGVzIGFuZCB0aGUgYm9vdGxvYWRlciBjb21tYW5kIGxpbmUpLiBTeXprYWxsZXIgY2Fubm90IG11dGF0ZSB0aGVzZSBpbnB1dHMgb3IgcmVhY2ggdGhpcyBjb2RlIGR1cmluZyBydW50aW1lIHN5c2NhbGwgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBidWlsZC10aW1lIGZlYXR1cmUgdG8gcmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gQWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUga2VybmVsIGFyZSBjb25maW5lZCB0byBgX19pbml0YCBmdW5jdGlvbnMgKGUuZy4sIGBzZXR1cF9hcmNoYCwgYHNldHVwX2Jvb3RfY29uZmlnYCwgYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgKSwgd2hpY2ggcnVuIG9ubHkgb25jZSBkdXJpbmcgZWFybHkgYm9vdCB3aXRoIHN0YXRpYyBpbnB1dHMgKGNvbXBpbGUtdGltZSBlbWJlZGRlZCBmaWxlcyBhbmQgdGhlIGJvb3Rsb2FkZXIgY29tbWFuZCBsaW5lKS4gU3l6a2FsbGVyIGNhbm5vdCBtdXRhdGUgdGhlc2UgaW5wdXRzIG9yIHJlYWNoIHRoaXMgY29kZSBkdXJpbmcgcnVudGltZSBzeXNjYWxsIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowk4rr6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 18:05:49 +0000 UTC FinishedAt: 2026-06-26 18:15:50 +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+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBidWlsZC10aW1lIGZlYXR1cmUgdG8gcmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gQWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUga2VybmVsIGFyZSBjb25maW5lZCB0byBgX19pbml0YCBmdW5jdGlvbnMgKGUuZy4sIGBzZXR1cF9hcmNoYCwgYHNldHVwX2Jvb3RfY29uZmlnYCwgYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgKSwgd2hpY2ggcnVuIG9ubHkgb25jZSBkdXJpbmcgZWFybHkgYm9vdCB3aXRoIHN0YXRpYyBpbnB1dHMgKGNvbXBpbGUtdGltZSBlbWJlZGRlZCBmaWxlcyBhbmQgdGhlIGJvb3Rsb2FkZXIgY29tbWFuZCBsaW5lKS4gU3l6a2FsbGVyIGNhbm5vdCBtdXRhdGUgdGhlc2UgaW5wdXRzIG9yIHJlYWNoIHRoaXMgY29kZSBkdXJpbmcgcnVudGltZSBzeXNjYWxsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTE4MWQzMDFjOWJkMDc2Y2VhYjYzNWE0NzM3ZThiZjVjNmEyNDVlMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDE4OjE1OjI2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0XG5pbmRleCBmNzEyNzU4NDcyZDVjNi4uM2Q2NDEyNDU4YzhiNjkgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0XG5AQCAtMjM0LDYgJiM0MzsyMzQsODcgQEAgS2NvbmZpZyBvcHRpb24gc2VsZWN0ZWQuXG4gTm90ZSB0aGF0IGV2ZW4gaWYgeW91IHNldCB0aGlzIG9wdGlvbiwgeW91IGNhbiBvdmVycmlkZSB0aGUgZW1iZWRkZWRcbiBib290Y29uZmlnIGJ5IGFub3RoZXIgYm9vdGNvbmZpZyB3aGljaCBhdHRhY2hlZCB0byB0aGUgaW5pdHJkLlxuIFxuJiM0MztSZW5kZXJpbmcgRW1iZWRkZWQga2VybmVsLiogS2V5cyBhdCBCdWlsZCBUaW1lXG4mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzO0J5IGRlZmF1bHQsIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIChgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRD15YGApIGlzXG4mIzQzO3BhcnNlZCBhdCBydW50aW1lLCBhZnRlciBgYHBhcnNlX2Vhcmx5X3BhcmFtKClgYCBoYXMgYWxyZWFkeSBydW4uIEVhcmx5XG4mIzQzO3BhcmFtZXRlciBoYW5kbGVycyAoYGBtZW09YGAsIGBgZWFybHljb249YGAsIGBgbG9nbGV2ZWw9YGAsIC4uLikgdGhlcmVmb3JlXG4mIzQzO2Nhbm5vdCBzZWUgdmFsdWVzIHN1cHBsaWVkIHZpYSB0aGUgZW1iZWRkZWQgYGBrZXJuZWxgYCBzdWJ0cmVlLlxuJiM0MztcbiYjNDM7YGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgYCByZXNvbHZlcyB0aGlzIGJ5IHJlbmRlcmluZyB0aGVcbiYjNDM7YGBrZXJuZWxgYCBzdWJ0cmVlIG9mIGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEX0ZJTEVgYCBpbnRvIGEgZmxhdCBjbWRsaW5lXG4mIzQzO3N0cmluZyBhdCBrZXJuZWwgYnVpbGQgdGltZSAodmlhIGBgdG9vbHMvYm9vdGNvbmZpZyAtQ2BgKSBhbmQgcHJlcGVuZGluZ1xuJiM0MztpdCB0byBgYGJvb3RfY29tbWFuZF9saW5lYGAgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cCwgc28gdGhlIGtleXNcbiYjNDM7YXJlIHZpc2libGUgdG8gYGBwYXJzZV9lYXJseV9wYXJhbSgpYGAuXG4mIzQzO1xuJiM0MztUaGUgb3B0aW9uIHJlcXVpcmVzIGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEPXlgYCwgYSBub24tZW1wdHlcbiYjNDM7YGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURfRklMRWBgLCBgYENPTkZJR19DTURMSU5FYGAgdG8gYmUgZW1wdHksIGFuZFxuJiM0MzthbiBhcmNoaXRlY3R1cmUgdGhhdCBzZWxlY3RzIGBgQ09ORklHX0FSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgYC5cbiYjNDM7Q3VycmVudGx5IG9ubHkgeDg2IHNlbGVjdHMgaXQ7IG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgdGhlIGVtYmVkZGVkXG4mIzQzO2Jvb3Rjb25maWcgc3RpbGwgd29ya3MsIGJ1dCBvbmx5IHRocm91Z2ggdGhlIGxhdGUgcnVudGltZSBwYXJzZXIuXG4mIzQzO1xuJiM0MztUaGUgc2FtZSBgYGJvb3Rjb25maWdgYCBvcHQtaW4gYXBwbGllcyBhcyBlbHNld2hlcmU6IHRoZSByZW5kZXJlZCBrZXlzXG4mIzQzO2FyZSBwcmVwZW5kZWQgb25seSB3aGVuIGBgYm9vdGNvbmZpZ2BgIChpbiBhbnkgZm9ybSkgYXBwZWFycyBvbiB0aGVcbiYjNDM7a2VybmVsIGNvbW1hbmQgbGluZSwgb3Igd2hlbiBgYENPTkZJR19CT09UX0NPTkZJR19GT1JDRWBgIGlzIHNldCwgd2hpY2hcbiYjNDM7ZGVmYXVsdHMgdG8gYGB5YGAgd2hlbiBgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRGBgIGlzIHNldC5cbiYjNDM7XG4mIzQzO0ZvciBleGFtcGxlLCBnaXZlbjo6XG4mIzQzO1xuJiM0Mzsga2VybmVsIHtcbiYjNDM7ICAgbG9nbGV2ZWwgPSA3XG4mIzQzOyAgIG1lbSA9IDRHXG4mIzQzOyB9XG4mIzQzO1xuJiM0Mzt0aGUga2VybmVsIGJvb3RzIGFzIGlmIGBgbG9nbGV2ZWw9NyBtZW09NEdgYCBoYWQgYmVlbiBwcmVwZW5kZWQgdG8gdGhlXG4mIzQzO2Jvb3Rsb2FkZXIgY29tbWFuZCBsaW5lLCB3aXRoIHRoZSB2YWx1ZXMgdmlzaWJsZSB0byBlYXJseS1wYXJzZWRcbiYjNDM7aGFuZGxlcnMuIENvbW1hLXNlcGFyYXRlZCB2YWx1ZXMgYXJlIHN0aWxsIGV4cGFuZGVkIGludG8gbXVsdGlwbGVcbiYjNDM7Y21kbGluZSBlbnRyaWVzIHBlciB0aGUgYm9vdGNvbmZpZyBhcnJheSBjb252ZW50aW9uIC0tIHRoZSBlbWJlZGRlZFxuJiM0MztgYGtlcm5lbC5lYXJseWNvbiA9IFwmIzM0O3VhcnQ4MjUwLGlvLDB4M2Y4XCYjMzQ7YGAgbXVzdCBiZSBxdW90ZWQgdG8gbGFuZCBhcyBhXG4mIzQzO3NpbmdsZSBgYGVhcmx5Y29uPWBgIGVudHJ5LCBleGFjdGx5IGFzIGZvciB0aGUgcnVudGltZSBwYXJzZXIuXG4mIzQzO1xuJiM0MztJZiB0aGUgcmVuZGVyZWQgc3RyaW5nIHdvdWxkIG5vdCBmaXQgaW4gYGBDT01NQU5EX0xJTkVfU0laRWBgIHRvZ2V0aGVyXG4mIzQzO3dpdGggdGhlIGV4aXN0aW5nIGNvbW1hbmQgbGluZSwgdGhlIHByZXBlbmQgaXMgc2tpcHBlZCBhbmQgYW4gZXJyb3IgaXNcbiYjNDM7bG9nZ2VkLCBzbyBhbiBvdmVyc2l6ZWQgZW1iZWRkZWQgYm9vdGNvbmZpZyBjYW5ub3QgYnJpY2sgYSBib290LlxuJiM0MztcbiYjNDM7SW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21tYW5kIGxpbmUgYW5kIGJvb3Rjb25maWcgc291cmNlc1xuJiM0Mzt+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XG4mIzQzO1xuJiM0MztXaXRoIGBgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHPXlgYCB0aGUgcmVuZGVyZWQgYGBrZXJuZWxgYFxuJiM0MztzdWJ0cmVlIGJlaGF2ZXMgbGlrZSBhIGJ1aWxkLXRpbWUgY29tbWFuZCBsaW5lIChzaW1pbGFyIHRvXG4mIzQzO2BgQ09ORklHX0NNRExJTkVgYCksIG5vdCBsaWtlIGEgYm9vdGNvbmZpZyBzb3VyY2UuIEl0IGlzIHByZXBlbmRlZCB0b1xuJiM0MztgYGJvb3RfY29tbWFuZF9saW5lYGAgaW4gYGBzZXR1cF9hcmNoKClgYCwgYmVmb3JlIGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgXG4mIzQzO2FuZCBsb25nIGJlZm9yZSB0aGUgcnVudGltZSBwYXJzZXIgbG9va3MgYXQgYW4gaW5pdHJkLiBPcHRpb25zIGNhbiByZWFjaFxuJiM0Mzt0aGUga2VybmVsIGZyb20gdXAgdG8gZm91ciBwbGFjZXM6XG4mIzQzO1xuJiM0MzstIEJvb3Rsb2FkZXIgY29tbWFuZCBsaW5lOiB0aGUgYXJndW1lbnRzIHRoZSBib290IGxvYWRlciBwYXNzZXMuIFRoZVxuJiM0MzsgIGVtYmVkZGVkIGNtZGxpbmUgaXMgcHJlcGVuZGVkIGluIGZyb250IG9mIHRoZW0sIHNvIGZvciBsYXN0LW9uZS13aW5zXG4mIzQzOyAgcGFyYW1ldGVycyBhIGJvb3Rsb2FkZXIgb3B0aW9uIHN0aWxsIG92ZXJyaWRlcyB0aGUgZW1iZWRkZWQgdmFsdWUuXG4mIzQzOyAgVmlzaWJsZSBpbiAvcHJvYy9jbWRsaW5lLlxuJiM0MzstIEVtYmVkZGVkIGNtZGxpbmUgKHRoaXMgb3B0aW9uKTogdGhlIHJlbmRlcmVkIGBga2VybmVsYGAgc3VidHJlZSxcbiYjNDM7ICBwcmVwZW5kZWQgZWFybHkgc28gaXQgaXMgc2VlbiBieSBgYHBhcnNlX2Vhcmx5X3BhcmFtKClgYC4gVmlzaWJsZSBpblxuJiM0MzsgIC9wcm9jL2NtZGxpbmUuXG4mIzQzOy0gSW5pdHJkIGJvb3Rjb25maWc6IHBhcnNlZCBsYXRlIGluIGBgc2V0dXBfYm9vdF9jb25maWcoKWBgOyBpdHNcbiYjNDM7ICBgYGtlcm5lbGBgIGtleXMgYXJlIHBsYWNlZCBhaGVhZCBvZiBgYGJvb3RfY29tbWFuZF9saW5lYGAsIGkuZS4gYmVmb3JlXG4mIzQzOyAgdGhlIGVtYmVkZGVkIGNtZGxpbmUsIHNvIGxhc3Qtd2lucyBmYXZvcnMgdGhlIGVtYmVkZGVkIHZhbHVlcy4gQXMgYVxuJiM0MzsgIGJvb3Rjb25maWcgc291cmNlLCBhbiBpbml0cmQgYm9vdGNvbmZpZyBzdGlsbCByZXBsYWNlcyB0aGUgZW1iZWRkZWRcbiYjNDM7ICBib290Y29uZmlnLiBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUgYW5kIC9wcm9jL2Jvb3Rjb25maWcuXG4mIzQzOy0gRW1iZWRkZWQgYm9vdGNvbmZpZyAocnVudGltZSk6IHBhcnNlZCBsYXRlLCBvbmx5IHdoZW4gbm8gaW5pdHJkXG4mIzQzOyAgYm9vdGNvbmZpZyBpcyBwcmVzZW50LiBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUgYW5kIC9wcm9jL2Jvb3Rjb25maWcuXG4mIzQzO1xuJiM0MztTbyB3aXRoIHRoaXMgb3B0aW9uIHRoZSBlbWJlZGRlZCBgYGtlcm5lbC4qYGAgdmFsdWVzIHRha2UgcHJlY2VkZW5jZVxuJiM0MztvdmVyIGFuIGluaXRyZCBib290Y29uZmlnJiMzOTtzIGBga2VybmVsLipgYCB2YWx1ZXM6IGZvciBlYXJseSBwYXJhbWV0ZXJzXG4mIzQzO3RoZSBpbml0cmQgaXMgbm90IHBhcnNlZCB5ZXQsIGFuZCBmb3Igb3JkaW5hcnkgcGFyYW1ldGVycyB0aGUgZW1iZWRkZWRcbiYjNDM7a2V5cyBsYW5kIGxhdGVyIGluIHRoZSBjb21tYW5kIGxpbmUuIElmIHlvdSBuZWVkIGFuIGluaXRyZCBib290Y29uZmlnIHRvXG4mIzQzO292ZXJyaWRlIHRoZSBlbWJlZGRlZCBgYGtlcm5lbC4qYGAga2V5cywgbGVhdmUgdGhpcyBvcHRpb24gb2ZmIGFuZCByZWx5XG4mIzQzO29uIHRoZSBydW50aW1lIHBhcnNlci5cbiYjNDM7XG4mIzQzO1RoZSByZW5kZXJlZCBzdHJpbmcgaXMgcGFydCBvZiB0aGUgY29tbWFuZCBsaW5lLCBzbyBpdCBhcHBlYXJzIGluXG4mIzQzOy9wcm9jL2NtZGxpbmUuIEl0IGlzIGRlbGliZXJhdGVseSBub3Qgc2hvd24gaW4gL3Byb2MvYm9vdGNvbmZpZzogdGhhdFxuJiM0MztmaWxlIGtlZXBzIHJlcG9ydGluZyB0aGUgcGFyc2VkIGJvb3Rjb25maWcgdHJlZSAtLSB0aGUgaW5pdHJkIGJvb3Rjb25maWdcbiYjNDM7aWYgcHJlc2VudCwgb3RoZXJ3aXNlIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIC0tIGluZGVwZW5kZW50IG9mIHdoZXRoZXJcbiYjNDM7YnVpbGQtdGltZSBjbWRsaW5lIHJlbmRlcmluZyBpcyBlbmFibGVkLlxuJiM0MztcbiBLZXJuZWwgcGFyYW1ldGVycyB2aWEgQm9vdCBDb25maWdcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCBiZjk3Mzk5ZDM1N2ZhMC4uNDgzNDA2NWE0YmYyZjcgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC05ODQ2LDYgJiM0Mzs5ODQ2LDcgQEAgRjpcdGZzL3Byb2MvYm9vdGNvbmZpZy5jXG4gRjpcdGluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oXG4gRjpcdGxpYi9ib290Y29uZmlnLWRhdGEuU1xuIEY6XHRsaWIvYm9vdGNvbmZpZy5jXG4mIzQzO0Y6XHRsaWIvZW1iZWRkZWQtY21kbGluZS5TXG4gRjpcdHRvb2xzL2Jvb3Rjb25maWcvKlxuIEY6XHR0b29scy9ib290Y29uZmlnL3NjcmlwdHMvKlxuIFxuZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGVcbmluZGV4IDEyZmQzZDJkNDdiNTgyLi4zNGZiMzU3MWJlYzgxZCAxMDA2NDRcbi0tLSBhL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9NYWtlZmlsZVxuQEAgLTE1NTIsNiAmIzQzOzE1NTIsMjIgQEAgcHJlcGFyZTogdG9vbHMvYnBmL3Jlc29sdmVfYnRmaWRzXG4gZW5kaWZcbiBlbmRpZlxuIFxuJiM0MzsjIHRvb2xzL2Jvb3Rjb25maWcgcmVuZGVycyB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBpbnRvIGEgY21kbGluZSBhdCBidWlsZCB0aW1lLlxuJiM0MztpZmRlZiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcbiYjNDM7cHJlcGFyZTogdG9vbHMvYm9vdGNvbmZpZ1xuJiM0MztlbmRpZlxuJiM0MztcbiYjNDM7IyB0b29scy9ib290Y29uZmlnIGlzIHJ1biBvbiB0aGUgYnVpbGQgaG9zdCBkdXJpbmcgcHJlcGFyZSwgc28gZm9yY2UgYSBob3N0XG4mIzQzOyMgYmluYXJ5IGhlcmU7IGl0cyBvd24gTWFrZWZpbGUga2VlcHMgJChDQykgZm9yIHN0YW5kYWxvbmUgYW5kIGNyb3NzIGJ1aWxkcy5cbiYjNDM7IyBDUk9TU19DT01QSUxFPSBpcyBjbGVhcmVkIHNvIHRvb2xzL3NjcmlwdHMvTWFrZWZpbGUuaW5jbHVkZSBkb2VzIG5vdCBpbmplY3RcbiYjNDM7IyB0aGUgdGFyZ2V0JiMzOTtzIC0tdGFyZ2V0PS8tLXN5c3Jvb3Q9IGZsYWdzIGludG8gdGhlIGhvc3QgY2xhbmcgaW52b2NhdGlvbiB1bmRlclxuJiM0MzsjIExMVk09MSBjcm9zcyBidWlsZHMgKHdoaWNoIHdvdWxkIHByb2R1Y2UgYSB0YXJnZXQgYmluYXJ5IHRoYXQgZmFpbHMgdG8gZXhlYykuXG4mIzQzO3Rvb2xzL2Jvb3Rjb25maWc6IGV4cG9ydCBDQyA6PSAkKEhPU1RDQylcbiYjNDM7dG9vbHMvYm9vdGNvbmZpZzogRk9SQ0VcbiYjNDM7XHQkKFEpbWtkaXIgLXAgJChvYmp0cmVlKS90b29sc1xuJiM0MztcdCQoUSkkKE1BS0UpIE89JChhYnNwYXRoICQob2JqdHJlZSkpIHN1YmRpcj10b29scyAtQyAkKHNyY3RyZWUpL3Rvb2xzLyBcXFxuJiM0MztcdFx0Ym9vdGNvbmZpZyBDUk9TU19DT01QSUxFPVxuJiM0MztcbiAjIFRoZSB0b29scyBidWlsZCBzeXN0ZW0gaXMgbm90IGEgcGFydCBvZiBLYnVpbGQgYW5kIHRlbmRzIHRvIGludHJvZHVjZVxuICMgaXRzIG93biB1bmlxdWUgaXNzdWVzLiBJZiB5b3UgbmVlZCB0byBpbnRlZ3JhdGUgYSBuZXcgdG9vbCBpbnRvIEtidWlsZCxcbiAjIHBsZWFzZSBjb25zaWRlciBsb2NhdGluZyB0aGF0IHRvb2wgb3V0c2lkZSB0aGUgdG9vbHMvIHRyZWUgYW5kIHVzaW5nIHRoZVxuQEAgLTE1NzgsNiAmIzQzOzE1OTQsMTUgQEAgaWZuZXEgKCQod2lsZGNhcmQgJChvYmp0b29sX08pKSwpXG4gXHQkKFEpJChNQUtFKSAtc0MgJChhYnNfc3JjdHJlZSkvdG9vbHMvb2JqdG9vbCBPPSQob2JqdG9vbF9PKSBzcmN0cmVlPSQoYWJzX3NyY3RyZWUpICQocGF0c3Vic3Qgb2JqdG9vbF8lLCUsJEApXG4gZW5kaWZcbiBcbiYjNDM7UEhPTlkgJiM0Mzs9IGJvb3Rjb25maWdfY2xlYW5cbiYjNDM7XG4mIzQzO2Jvb3Rjb25maWdfTyA9ICQoYWJzcGF0aCAkKG9ianRyZWUpKS90b29scy9ib290Y29uZmlnXG4mIzQzO1xuJiM0Mztib290Y29uZmlnX2NsZWFuOlxuJiM0MztpZm5lcSAoJCh3aWxkY2FyZCAkKGJvb3Rjb25maWdfTykpLClcbiYjNDM7XHQkKFEpJChNQUtFKSAtc0MgJChzcmN0cmVlKS90b29scy9ib290Y29uZmlnIE89JChib290Y29uZmlnX08pIGNsZWFuXG4mIzQzO2VuZGlmXG4mIzQzO1xuIHRvb2xzLzogRk9SQ0VcbiBcdCQoUSlta2RpciAtcCAkKG9ianRyZWUpL3Rvb2xzXG4gXHQkKFEpJChNQUtFKSBPPSQoYWJzcGF0aCAkKG9ianRyZWUpKSBzdWJkaXI9dG9vbHMgLUMgJChzcmN0cmVlKS90b29scy9cbkBAIC0xNzUzLDcgJiM0MzsxNzc4LDcgQEAgdm1saW51eGNsZWFuOlxuIFx0JChRKSQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3NjcmlwdHMvbGluay12bWxpbnV4LnNoIGNsZWFuXG4gXHQkKFEpJChpZiAkKEFSQ0hfUE9TVExJTkspLCAkKE1BS0UpIC1mICQoQVJDSF9QT1NUTElOSykgY2xlYW4pXG4gXG4tY2xlYW46IGFyY2hjbGVhbiB2bWxpbnV4Y2xlYW4gcmVzb2x2ZV9idGZpZHNfY2xlYW4gb2JqdG9vbF9jbGVhblxuJiM0MztjbGVhbjogYXJjaGNsZWFuIHZtbGludXhjbGVhbiByZXNvbHZlX2J0Zmlkc19jbGVhbiBvYmp0b29sX2NsZWFuIGJvb3Rjb25maWdfY2xlYW5cbiBcbiAjIG1ycHJvcGVyIC0gRGVsZXRlIGFsbCBnZW5lcmF0ZWQgZmlsZXMsIGluY2x1ZGluZyAuY29uZmlnXG4gI1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnXG5pbmRleCBiZGFkOTBmMjEwZTRiZi4uZmQ5NzllMGJlMWYwZTAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9LY29uZmlnXG5AQCAtMTI3LDYgJiM0MzsxMjcsNyBAQCBjb25maWcgWDg2XG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lOR1x0aWYgWDg2XzY0XG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19LTUFQX0xPQ0FMX0ZPUkNFX01BUFx0aWYgTlJfQ1BVUyBcdTAwM2M9IDQwOTZcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NGSVx0XHRpZiBYODZfNjRcbiYjNDM7XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuIFx0c2VsZWN0IEFSQ0hfVVNFU19DRklfVFJBUFNcdFx0aWYgWDg2XzY0IFx1MDAyNlx1MDAyNiBDRklcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0xUT19DTEFOR1xuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTFRPX0NMQU5HX1RISU5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jXG5pbmRleCA0Njg4MmNlNzljM2E0ZC4uODhiMDU1YTQ2NTkxZWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL3NldHVwLmNcbkBAIC02LDYgJiM0Mzs2LDcgQEBcbiAgKiBwYXJ0cyBvZiBlYXJseSBrZXJuZWwgaW5pdGlhbGl6YXRpb24uXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYWNwaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jvb3Rjb25maWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnNvbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXHUwMDNlXG5AQCAtODgwLDcgJiM0Mzs4ODEsNiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgeDg2X3JlcG9ydF9ueCh2b2lkKVxuICAqXG4gICogTm90ZTogT24geDg2XzY0LCBmaXhtYXBzIGFyZSByZWFkeSBmb3IgdXNlIGV2ZW4gYmVmb3JlIHRoaXMgaXMgY2FsbGVkLlxuICAqL1xuLVxuIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcbiB7XG4gI2lmZGVmIENPTkZJR19YODZfMzJcbkBAIC05MjQsNiAmIzQzOzkyNCwxOCBAQCB2b2lkIF9faW5pdCBzZXR1cF9hcmNoKGNoYXIgKipjbWRsaW5lX3ApXG4gXHRidWlsdGluX2NtZGxpbmVfYWRkZWQgPSB0cnVlO1xuICNlbmRpZlxuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcmVwZW5kIHRoZSBidWlsZC10aW1lLXJlbmRlcmVkIGVtYmVkZGVkIFwmIzM0O2tlcm5lbFwmIzM0OyBrZXlzIGhlcmUgc29cbiYjNDM7XHQgKiBwYXJzZV9lYXJseV9wYXJhbSgpIGJlbG93IHNlZXMgdGhlbSwgdXNpbmcgdGhlIHNhbWUgb3B0LWluIGFzIHRoZVxuJiM0MztcdCAqIHJ1bnRpbWUgcGFyc2VyLCBwbHVzIHRoZSBidWlsZC10aW1lIENPTkZJR19CT09UX0NPTkZJR19GT1JDRS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZChib290X2NvbW1hbmRfbGluZSwgTlVMTCkgfHxcbiYjNDM7XHQgICAgSVNfRU5BQkxFRChDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0UpKVxuJiM0MztcdFx0eGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShib290X2NvbW1hbmRfbGluZSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgQ09NTUFORF9MSU5FX1NJWkUpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gXHRzdHJzY3B5KGNvbW1hbmRfbGluZSwgYm9vdF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTtcbiBcdCpjbWRsaW5lX3AgPSBjb21tYW5kX2xpbmU7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmggYi9pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaFxuaW5kZXggMWM3ZjNiNzRmZmNmMzguLmRlZGE1MDc1MDBkYTIzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oXG5AQCAtMzA4LDQgJiM0MzszMDgsMTggQEAgc3RhdGljIGlubGluZSBjb25zdCBjaGFyICp4YmNfZ2V0X2VtYmVkZGVkX2Jvb3Rjb25maWcoc2l6ZV90ICpzaXplKVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7LyogQm9vdGNvbmZpZyBvcHQtaW4gZGV0ZWN0aW9uLCBzaGFyZWQgYnkgc2V0dXBfYXJjaCgpIGFuZCBzZXR1cF9ib290X2NvbmZpZygpICovXG4mIzQzOyNpZmRlZiBDT05GSUdfQk9PVF9DT05GSUdcbiYjNDM7Ym9vbCBfX2luaXQgYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZChjb25zdCBjaGFyICpib290X2NtZGxpbmUsIGludCAqZW5kX29mZnNldCk7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7LyogQnVpbGQtdGltZS1yZW5kZXJlZCBib290Y29uZmlnIGNtZGxpbmUgcHJlcGVuZGVkIGluIHNldHVwX2FyY2goKSAqL1xuJiM0MzsjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4mIzQzO3ZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSk7XG4mIzQzO2Jvb2wgX19pbml0IHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZCk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpIHsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnXG5pbmRleCA1MjMwZDQ4NzliMWM4NC4uNTk4NjkwZWMzMTNhMjkgMTAwNjQ0XG4tLS0gYS9pbml0L0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2luaXQvS2NvbmZpZ1xuQEAgLTE1NjYsNiAmIzQzOzE1NjYsNDIgQEAgY29uZmlnIEJPT1RfQ09ORklHX0VNQkVEX0ZJTEVcbiBcdCAgVGhpcyBib290Y29uZmlnIHdpbGwgYmUgdXNlZCBpZiB0aGVyZSBpcyBubyBpbml0cmQgb3Igbm8gb3RoZXJcbiBcdCAgYm9vdGNvbmZpZyBpbiB0aGUgaW5pdHJkLlxuIFxuJiM0Mztjb25maWcgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuJiM0MztcdGJvb2xcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBTaWxlbnQgc3ltYm9sOyBubyBDIGNvZGUgcmVhZHMgaXQgZGlyZWN0bHkuIEFyY2hpdGVjdHVyZXNcbiYjNDM7XHQgIHNlbGVjdCBpdCBvbmNlIHRoZWlyIHNldHVwX2FyY2goKSBjYWxsc1xuJiM0MztcdCAgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIGJlZm9yZSBwYXJzZV9lYXJseV9wYXJhbSgpLlxuJiM0MztcdCAgSXRzIG9ubHkgcm9sZSBpcyB0byBnYXRlIHRoZSB1c2VyLXZpc2libGVcbiYjNDM7XHQgIENNRExJTkVfRlJPTV9CT09UQ09ORklHIG9wdGlvbiBwZXItYXJjaCwgdGhlIHNhbWVcbiYjNDM7XHQgIEFSQ0hfU1VQUE9SVFNfKiBpZGlvbSB1c2VkIGJ5IEFSQ0hfU1VQUE9SVFNfQ0ZJLCBldGMuXG4mIzQzO1xuJiM0Mztjb25maWcgQ01ETElORV9GUk9NX0JPT1RDT05GSUdcbiYjNDM7XHRib29sIFwmIzM0O1JlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGFzIGtlcm5lbCBjbWRsaW5lIGF0IGJ1aWxkIHRpbWVcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIEJPT1RfQ09ORklHX0VNQkVEX0ZJTEUgIT0gXCYjMzQ7XCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4mIzQzO1x0ZGVwZW5kcyBvbiBDTURMSU5FID0gXCYjMzQ7XCYjMzQ7XG4mIzQzO1x0ZGVmYXVsdCBuXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgUmVuZGVyIHRoZSBcJiMzNDtrZXJuZWxcJiMzNDsgc3VidHJlZSBvZiB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBmaWxlIGludG8gYVxuJiM0MztcdCAgZmxhdCBjbWRsaW5lIHN0cmluZyBhdCBrZXJuZWwgYnVpbGQgdGltZSBhbmQgcHJlcGVuZCBpdCB0b1xuJiM0MztcdCAgYm9vdF9jb21tYW5kX2xpbmUgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cC4gVGhpcyBtYWtlc1xuJiM0MztcdCAgZWFybHlfcGFyYW0oKSBoYW5kbGVycyAoZS5nLiBtZW09LCBlYXJseWNvbj0sIGxvZ2xldmVsPSkgc2VlIHRoZVxuJiM0MztcdCAgdmFsdWVzIHN1cHBsaWVkIHZpYSB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZy5cbiYjNDM7XG4mIzQzO1x0ICBUaGUgcnVudGltZSBib290Y29uZmlnIHBhcnNlciBpcyB1bmFmZmVjdGVkLCBzbyB0cmVlLXN0cnVjdHVyZWRcbiYjNDM7XHQgIGNvbnN1bWVycyBzdWNoIGFzIGZ0cmFjZSBib290LXRpbWUgdHJhY2luZyBrZWVwIHdvcmtpbmcuXG4mIzQzO1xuJiM0MztcdCAgTm90ZTogd2hlbiBhbiBpbml0cmQgYWxzbyBjYXJyaWVzIGEgYm9vdGNvbmZpZywgaXRzIFwmIzM0O2tlcm5lbFwmIzM0O1xuJiM0MztcdCAgc3VidHJlZSBpcyBzdGlsbCBwYXJzZWQgYXQgcnVudGltZSwgYnV0IHRoZSBlbWJlZGRlZCBcJiMzNDtrZXJuZWxcJiMzNDtcbiYjNDM7XHQgIGtleXMgcmVtYWluIGluIGJvb3RfY29tbWFuZF9saW5lIGZvciBwYXJzZV9lYXJseV9wYXJhbSgpIGFuZFxuJiM0MztcdCAgZW5kIHVwIGxhdGVyIHRoYW4gdGhlIGluaXRyZCBrZXlzIGluIHNhdmVkX2NvbW1hbmRfbGluZSwgc29cbiYjNDM7XHQgIHBhcnNlX2FyZ3MoKSBsYXN0LXdpbnMgZmF2b3JzIHRoZSBlbWJlZGRlZCB2YWx1ZXMuIElmIHlvdSBuZWVkXG4mIzQzO1x0ICBpbml0cmQgdG8gb3ZlcnJpZGUgZW1iZWRkZWQga2VybmVsLioga2V5cywgbGVhdmUgdGhpcyBvcHRpb25cbiYjNDM7XHQgIG9mZi5cbiYjNDM7XG4mIzQzO1x0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiM0MztcbiBjb25maWcgQ01ETElORV9MT0dfV1JBUF9JREVBTF9MRU5cbiBcdGludCBcJiMzNDtMZW5ndGggdG8gdHJ5IHRvIHdyYXAgdGhlIGNtZGxpbmUgd2hlbiBsb2dnZWQgYXQgYm9vdFwmIzM0O1xuIFx0ZGVmYXVsdCAxMDIxXG5kaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uY1xuaW5kZXggZTM2MzIzMmI0MjhiNDcuLjM5YTUxOGE0NzI0MjIzIDEwMDY0NFxuLS0tIGEvaW5pdC9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2luaXQvbWFpbi5jXG5AQCAtMzU2LDQ1ICYjNDM7MzU2LDMzIEBAIHN0YXRpYyBjaGFyICogX19pbml0IHhiY19tYWtlX2NtZGxpbmUoY29uc3QgY2hhciAqa2V5KVxuIFx0cmV0dXJuIG5ld19jbWRsaW5lO1xuIH1cbiBcbi1zdGF0aWMgaW50IF9faW5pdCBib290Y29uZmlnX3BhcmFtcyhjaGFyICpwYXJhbSwgY2hhciAqdmFsLFxuLVx0XHRcdFx0ICAgIGNvbnN0IGNoYXIgKnVudXNlZCwgdm9pZCAqYXJnKVxuLXtcbi1cdGlmIChzdHJjbXAocGFyYW0sIFwmIzM0O2Jvb3Rjb25maWdcJiMzNDspID09IDApIHtcbi1cdFx0Ym9vdGNvbmZpZ19mb3VuZCA9IHRydWU7XG4tXHR9XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIGludCBfX2luaXQgd2Fybl9ib290Y29uZmlnKGNoYXIgKnN0cilcbiB7XG4tXHQvKiBUaGUgJiMzOTtib290Y29uZmlnJiMzOTsgaGFzIGJlZW4gaGFuZGxlZCBieSBib290Y29uZmlnX3BhcmFtcygpLiAqL1xuJiM0MztcdC8qIFRoZSAmIzM5O2Jvb3Rjb25maWcmIzM5OyBvcHRpb24gaXMgaGFuZGxlZCBieSBzZXR1cF9ib290X2NvbmZpZygpLiAqL1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290X2NvbmZpZyh2b2lkKVxuIHtcbi1cdHN0YXRpYyBjaGFyIHRtcF9jbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXSBfX2luaXRkYXRhO1xuIFx0Y29uc3QgY2hhciAqbXNnLCAqZGF0YTtcbi1cdGludCBwb3MsIHJldDtcbiYjNDM7XHRpbnQgcG9zLCByZXQsIG9mZnM7XG4gXHRzaXplX3Qgc2l6ZTtcbi1cdGNoYXIgKmVycjtcbiYjNDM7XHRib29sIGZyb21fZW1iZWRkZWQgPSBmYWxzZTtcbiBcbiBcdC8qIEN1dCBvdXQgdGhlIGJvb3Rjb25maWcgZGF0YSBldmVuIGlmIHdlIGhhdmUgbm8gYm9vdGNvbmZpZyBvcHRpb24gKi9cbiBcdGRhdGEgPSBnZXRfYm9vdF9jb25maWdfZnJvbV9pbml0cmQoXHUwMDI2c2l6ZSk7XG4gXHQvKiBJZiB0aGVyZSBpcyBubyBib290Y29uZmlnIGluIGluaXRyZCwgdHJ5IGVtYmVkZGVkIG9uZS4gKi9cbi1cdGlmICghZGF0YSlcbiYjNDM7XHRpZiAoIWRhdGEpIHtcbiBcdFx0ZGF0YSA9IHhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhcdTAwMjZzaXplKTtcbiYjNDM7XHRcdGZyb21fZW1iZWRkZWQgPSB0cnVlO1xuJiM0MztcdH1cbiBcbi1cdHN0cnNjcHkodG1wX2NtZGxpbmUsIGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7XG4tXHRlcnIgPSBwYXJzZV9hcmdzKFwmIzM0O2Jvb3Rjb25maWdcJiMzNDssIHRtcF9jbWRsaW5lLCBOVUxMLCAwLCAwLCAwLCBOVUxMLFxuLVx0XHRcdCBib290Y29uZmlnX3BhcmFtcyk7XG4tXG4tXHRpZiAoSVNfRVJSKGVycikgfHwgIShib290Y29uZmlnX2ZvdW5kIHx8IElTX0VOQUJMRUQoQ09ORklHX0JPT1RfQ09ORklHX0ZPUkNFKSkpXG4mIzQzO1x0Ym9vdGNvbmZpZ19mb3VuZCA9IGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoYm9vdF9jb21tYW5kX2xpbmUsIFx1MDAyNm9mZnMpO1xuJiM0MztcdGlmICghKGJvb3Rjb25maWdfZm91bmQgfHwgSVNfRU5BQkxFRChDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0UpKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0LyogcGFyc2VfYXJncygpIHN0b3BzIGF0IHRoZSBuZXh0IHBhcmFtIG9mICYjMzk7LS0mIzM5OyBhbmQgcmV0dXJucyBhbiBhZGRyZXNzICovXG4tXHRpZiAoZXJyKVxuLVx0XHRpbml0YXJnc19vZmZzID0gZXJyIC0gdG1wX2NtZGxpbmU7XG4mIzQzO1x0LyogT2Zmc2V0IG9mIHRoZSBpbml0IGFyZ3VtZW50cyBhZnRlciBhIFwmIzM0Oy0tXCYjMzQ7LCBsb2NhdGVkIGJ5IHRoZSBoZWxwZXIuICovXG4mIzQzO1x0aW5pdGFyZ3Nfb2ZmcyA9IG9mZnM7XG4gXG4gXHRpZiAoIWRhdGEpIHtcbiBcdFx0LyogSWYgdXNlciBpbnRlbmRlZCB0byB1c2UgYm9vdGNvbmZpZywgc2hvdyBhbiBlcnJvciBsZXZlbCBtZXNzYWdlICovXG5AQCAtNDIxLDggJiM0Mzs0MDksMjQgQEAgc3RhdGljIHZvaWQgX19pbml0IHNldHVwX2Jvb3RfY29uZmlnKHZvaWQpXG4gXHR9IGVsc2Uge1xuIFx0XHR4YmNfZ2V0X2luZm8oXHUwMDI2cmV0LCBOVUxMKTtcbiBcdFx0cHJfaW5mbyhcJiMzNDtMb2FkIGJvb3Rjb25maWc6ICVsZCBieXRlcyAlZCBub2Rlc1xcblwmIzM0OywgKGxvbmcpc2l6ZSwgcmV0KTtcbi1cdFx0Lyoga2V5cyBzdGFydGluZyB3aXRoIFwmIzM0O2tlcm5lbC5cJiMzNDsgYXJlIHBhc3NlZCB2aWEgY21kbGluZSAqL1xuLVx0XHRleHRyYV9jb21tYW5kX2xpbmUgPSB4YmNfbWFrZV9jbWRsaW5lKFwmIzM0O2tlcm5lbFwmIzM0Oyk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICoga2V5cyBzdGFydGluZyB3aXRoIFwmIzM0O2tlcm5lbC5cJiMzNDsgYXJlIHBhc3NlZCB2aWEgY21kbGluZS4gV2hlblxuJiM0MztcdFx0ICogdGhpcyBib290Y29uZmlnIGNhbWUgZnJvbSB0aGUgZW1iZWRkZWQgc291cmNlIGFuZFxuJiM0MztcdFx0ICogc2V0dXBfYXJjaCgpIGFscmVhZHkgcHJlcGVuZGVkIHRoZSByZW5kZXJlZCBcJiMzNDtrZXJuZWxcJiMzNDsgc3VidHJlZVxuJiM0MztcdFx0ICogdG8gYm9vdF9jb21tYW5kX2xpbmUsIHJlbmRlcmluZyBhZ2FpbiBoZXJlIHdvdWxkIGR1cGxpY2F0ZVxuJiM0MztcdFx0ICogdGhlIGtleXMgaW4gc2F2ZWRfY29tbWFuZF9saW5lIGFuZCBtYWtlIGFjY3VtdWxhdGluZyBoYW5kbGVyc1xuJiM0MztcdFx0ICogKGNvbnNvbGU9LCBlYXJseWNvbj0sIC4uLikgcmUtcmVnaXN0ZXIgdGhlIHNhbWUgdmFsdWUuIFNraXBcbiYjNDM7XHRcdCAqIG9ubHkgd2hlbiB0aGUgcHJlcGVuZCByZWFsbHkgaGFwcGVuZWQuXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogT24gYXJjaGVzIHRoYXQgZG8gbm90IHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHLFxuJiM0MztcdFx0ICogQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHIGlzIHVuc2VsZWN0YWJsZSBhbmRcbiYjNDM7XHRcdCAqIHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQoKSBjb2xsYXBzZXMgdG8gYSBzdHViIHJldHVybmluZ1xuJiM0MztcdFx0ICogZmFsc2UsIHNvIHRoaXMgcGF0aCBzdGlsbCBydW5zIGFuZCB0aGUgZW1iZWRkZWQgXCYjMzQ7a2VybmVsXCYjMzQ7XG4mIzQzO1x0XHQgKiBrZXlzIHJlYWNoIHRoZSBjbWRsaW5lIHZpYSB0aGUgcnVudGltZSBwYXJzZXIgZXhhY3RseSBhc1xuJiM0MztcdFx0ICogYmVmb3JlIHRoaXMgc2VyaWVzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIWZyb21fZW1iZWRkZWQgfHwgIXhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQoKSlcbiYjNDM7XHRcdFx0ZXh0cmFfY29tbWFuZF9saW5lID0geGJjX21ha2VfY21kbGluZShcJiMzNDtrZXJuZWxcJiMzNDspO1xuIFx0XHQvKiBBbHNvLCBcJiMzNDtpbml0LlwmIzM0OyBrZXlzIGFyZSBpbml0IGFyZ3VtZW50cyAqL1xuIFx0XHRleHRyYV9pbml0X2FyZ3MgPSB4YmNfbWFrZV9jbWRsaW5lKFwmIzM0O2luaXRcJiMzNDspO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZVxuaW5kZXggN2Y3NWNjNmVkZjk0YWYuLjRjY2RjZTJmZDVlNWIwIDEwMDY0NFxuLS0tIGEvbGliL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvTWFrZWZpbGVcbkBAIC0yNzMsNiAmIzQzOzI3MywyMiBAQCBmaWxlY2hrX2RlZmJjb25mID0gY2F0ICQob3IgJChyZWFsLXByZXJlcXMpLCAvZGV2L251bGwpXG4gJChvYmopL2RlZmF1bHQuYmNvbmY6ICQoQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEX0ZJTEUpIEZPUkNFXG4gXHQkKGNhbGwgZmlsZWNoayxkZWZiY29uZilcbiBcbiYjNDM7b2JqLSQoQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHKSAmIzQzOz0gZW1iZWRkZWQtY21kbGluZS5vXG4mIzQzOyQob2JqKS9lbWJlZGRlZC1jbWRsaW5lLm86ICQob2JqKS9lbWJlZGRlZF9jbWRsaW5lLmJpblxuJiM0MztcbiYjNDM7IyBSZW5kZXIgdGhlIGJvb3Rjb25maWcgXCYjMzQ7a2VybmVsXCYjMzQ7IHN1YnRyZWUgdG8gYSBmbGF0IGNtZGxpbmUgc3RyaW5nIHVzaW5nXG4mIzQzOyMgdGhlIHVzZXJzcGFjZSB0b29scy9ib290Y29uZmlnIHBhcnNlciAoLUMgbW9kZSkuIFRoZSBydW50aW1lIHByZXBlbmRcbiYjNDM7IyBoZWxwZXIgZW5mb3JjZXMgQ09NTUFORF9MSU5FX1NJWkUgYXQgYm9vdCwgc28gbm8gYnVpbGQtdGltZSBzaXplXG4mIzQzOyMgY2hlY2sgaXMgcGVyZm9ybWVkIGhlcmUgKENPTU1BTkRfTElORV9TSVpFIGlzIGFuIGFyY2ggaGVhZGVyXG4mIzQzOyMgY29uc3RhbnQsIG5vdCBhIEtjb25maWcgdmFsdWUpLlxuJiM0MztxdWlldF9jbWRfcmVuZGVyX2NtZGxpbmUgPSBCQ09ORjJDICRAXG4mIzQzOyAgICAgIGNtZF9yZW5kZXJfY21kbGluZSA9IFxcXG4mIzQzO1x0JChvYmp0cmVlKS90b29scy9ib290Y29uZmlnL2Jvb3Rjb25maWcgLUMgJFx1MDAzYyBcdTAwM2UgJEBcbiYjNDM7XG4mIzQzO3RhcmdldHMgJiM0Mzs9IGVtYmVkZGVkX2NtZGxpbmUuYmluXG4mIzQzOyQob2JqKS9lbWJlZGRlZF9jbWRsaW5lLmJpbjogJChvYmopL2RlZmF1bHQuYmNvbmYgJChvYmp0cmVlKS90b29scy9ib290Y29uZmlnL2Jvb3Rjb25maWcgRk9SQ0VcbiYjNDM7XHQkKGNhbGwgaWZfY2hhbmdlZCxyZW5kZXJfY21kbGluZSlcbiYjNDM7XG4gb2JqLSQoQ09ORklHX1JCVFJFRV9URVNUKSAmIzQzOz0gcmJ0cmVlX3Rlc3Qub1xuIG9iai0kKENPTkZJR19JTlRFUlZBTF9UUkVFX1RFU1QpICYjNDM7PSBpbnRlcnZhbF90cmVlX3Rlc3Qub1xuIFxuZGlmZiAtLWdpdCBhL2xpYi9ib290Y29uZmlnLmMgYi9saWIvYm9vdGNvbmZpZy5jXG5pbmRleCBmNDQ1Yjc3MDNmZGQ5Ni4uODljODhlMzU5MTc5ZjAgMTAwNjQ0XG4tLS0gYS9saWIvYm9vdGNvbmZpZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvYm9vdGNvbmZpZy5jXG5AQCAtMTksOSAmIzQzOzE5LDEzIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NhY2hlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGVwYXJhbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByaW50ay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3ByaW50Zi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtYmxvY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9zZXR1cC5oXHUwMDNlXHRcdC8qIENPTU1BTkRfTElORV9TSVpFICovXG4gXG4gI2lmZGVmIENPTkZJR19CT09UX0NPTkZJR19FTUJFRFxuIC8qIGVtYmVkZGVkX2Jvb3Rjb25maWdfZGF0YSBpcyBkZWZpbmVkIGluIGJvb3Rjb25maWctZGF0YS5TICovXG5AQCAtMzQsNyAmIzQzOzM4LDEyOSBAQCBjb25zdCBjaGFyICogX19pbml0IHhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhzaXplX3QgKnNpemUpXG4gXHRyZXR1cm4gKCpzaXplKSA/IGVtYmVkZGVkX2Jvb3Rjb25maWdfZGF0YSA6IE5VTEw7XG4gfVxuICNlbmRpZlxuLSNlbmRpZlxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuJiM0MzsvKiBlbWJlZGRlZF9rZXJuZWxfY21kbGluZSBpcyBkZWZpbmVkIGluIGVtYmVkZGVkLWNtZGxpbmUuUyAqL1xuJiM0MztleHRlcm4gX192aXNpYmxlIGNvbnN0IGNoYXIgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVbXTtcbiYjNDM7ZXh0ZXJuIF9fdmlzaWJsZSBjb25zdCBjaGFyIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZFtdO1xuJiM0MztcbiYjNDM7LyogU2V0IG9uY2UgdGhlIGVtYmVkZGVkIGNtZGxpbmUgaGFzIGFjdHVhbGx5IGJlZW4gcHJlcGVuZGVkLiAqL1xuJiM0MztzdGF0aWMgYm9vbCB4YmNfY21kbGluZV9hcHBsaWVkIF9faW5pdGRhdGE7XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBzdHJfcHJlcGVuZCgpIC0gUHJlcGVuZCBAc3JjIGluIGZyb250IG9mIHRoZSBzdHJpbmcgaW4gQGRzdCwgaW4gcGxhY2VcbiYjNDM7ICogQGRzdDogTlVMLXRlcm1pbmF0ZWQgZGVzdGluYXRpb24gYnVmZmVyLCBjdXJyZW50bHkgQGRzdF9sZW4gYnl0ZXMgbG9uZ1xuJiM0MzsgKiBAZHN0X2xlbjogbGVuZ3RoIG9mIHRoZSBjdXJyZW50IEBkc3Qgc3RyaW5nIChleGNsdWRpbmcgaXRzIE5VTClcbiYjNDM7ICogQHNyYzogYnl0ZXMgdG8gcHJlcGVuZCAobm90IE5VTC10ZXJtaW5hdGVkKVxuJiM0MzsgKiBAc3JjX2xlbjogbnVtYmVyIG9mIGJ5dGVzIGZyb20gQHNyYyB0byBwcmVwZW5kXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBjYWxsZXIgbXVzdCBndWFyYW50ZWUgQGRzdCBoYXMgcm9vbSBmb3Igc3JjX2xlbiAmIzQzOyBkc3RfbGVuICYjNDM7IDEgYnl0ZXMuXG4mIzQzOyAqIE1vdmluZyBkc3RfbGVuICYjNDM7IDEgYnl0ZXMgY2FycmllcyBAZHN0JiMzOTtzIE5VTCB0ZXJtaW5hdG9yIHRvbywgc28gYW4gZW1wdHlcbiYjNDM7ICogQGRzdCBuZWVkcyBubyBzcGVjaWFsIGNhc2UuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgc3RyX3ByZXBlbmQoY2hhciAqZHN0LCBzaXplX3QgZHN0X2xlbixcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY19sZW4pXG4mIzQzO3tcbiYjNDM7XHRtZW1tb3ZlKGRzdCAmIzQzOyBzcmNfbGVuLCBkc3QsIGRzdF9sZW4gJiM0MzsgMSk7XG4mIzQzO1x0bWVtY3B5KGRzdCwgc3JjLCBzcmNfbGVuKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSAtIFByZXBlbmQgZW1iZWRkZWQgYm9vdGNvbmZpZyBjbWRsaW5lXG4mIzQzOyAqIEBkc3Q6IGNtZGxpbmUgYnVmZmVyIHRvIHByZXBlbmQgaW50byAobXVzdCBhbHJlYWR5IGNvbnRhaW4gYSBOVUwgYnl0ZSlcbiYjNDM7ICogQHNpemU6IHRvdGFsIGNhcGFjaXR5IG9mIEBkc3QgaW4gYnl0ZXNcbiYjNDM7ICpcbiYjNDM7ICogUHJlcGVuZCB0aGUgYnVpbGQtdGltZS1yZW5kZXJlZCBcJiMzNDtrZXJuZWxcJiMzNDsgc3VidHJlZSBvZiB0aGUgZW1iZWRkZWRcbiYjNDM7ICogYm9vdGNvbmZpZyB0byBAZHN0LiBUaGUgcmVuZGVyZWQgc3RyaW5nIGFscmVhZHkgZW5kcyB3aXRoIGEgc2luZ2xlXG4mIzQzOyAqIHNwYWNlICh0aGUgeGJjX3NucHJpbnRfY21kbGluZSgpIGludmFyaWFudCksIHdoaWNoIHNlcnZlcyBhcyB0aGVcbiYjNDM7ICogc2VwYXJhdG9yIGJldHdlZW4gdGhlIGVtYmVkZGVkIGtleXMgYW5kIGFueSBleGlzdGluZyBjb250ZW50IG9mIEBkc3QuXG4mIzQzOyAqIE9uIG92ZXJmbG93LCBsb2cgYW4gZXJyb3IgYW5kIGxlYXZlIEBkc3QgdW50b3VjaGVkIHJhdGhlciB0aGFuXG4mIzQzOyAqIHNpbGVudGx5IHRydW5jYXRpbmc6IGJvb3Rpbmcgd2l0aG91dCB0aGUgZW1iZWRkZWQgdmFsdWVzIGlzIGJldHRlclxuJiM0MzsgKiB0aGFuIHJlZnVzaW5nIHRvIGJvb3QsIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSB0ZWxscyB0aGUgdXNlciB3aHlcbiYjNDM7ICogdGhlaXIgZW1iZWRkZWQga2V5cyBhcmUgbWlzc2luZy5cbiYjNDM7ICpcbiYjNDM7ICogSW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gc2V0dXBfYXJjaCgpIGJlZm9yZSBwYXJzZV9lYXJseV9wYXJhbSgpIHNvXG4mIzQzOyAqIHRoYXQgZWFybHlfcGFyYW0oKSBoYW5kbGVycyBzZWUgdGhlIGVtYmVkZGVkIHZhbHVlcy5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHNpemVfdCBlbWJlZF9sZW4gPSBlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmQgLSBlbWJlZGRlZF9rZXJuZWxfY21kbGluZTtcbiYjNDM7XHRzaXplX3QgZHN0X2xlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzaXplIHx8IGVtYmVkX2xlbiBcdTAwM2M9IDEpXHQvKiB0cmFpbGluZyBOVUwgb25seSAqL1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGVtYmVkX2xlbi0tO1x0XHRcdC8qIGV4Y2x1ZGUgdHJhaWxpbmcgTlVMIGJ5dGUgKi9cbiYjNDM7XG4mIzQzO1x0ZHN0X2xlbiA9IHN0cm5sZW4oZHN0LCBzaXplKTtcbiYjNDM7XHRpZiAoZW1iZWRfbGVuICYjNDM7IGRzdF9sZW4gJiM0MzsgMSBcdTAwM2Ugc2l6ZSkge1xuJiM0MztcdFx0cHJfZXJyKFwmIzM0O2VtYmVkZGVkIGJvb3Rjb25maWcgY21kbGluZSAoJXp1IGJ5dGVzKSBkb2VzIG5vdCBmaXQgaW4gQ09NTUFORF9MSU5FX1NJWkUgd2l0aCAlenUgYnl0ZXMgYWxyZWFkeSB1c2VkOyBpZ25vcmluZyBlbWJlZGRlZCB2YWx1ZXNcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgICAgZW1iZWRfbGVuLCBkc3RfbGVuKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN0cl9wcmVwZW5kKGRzdCwgZHN0X2xlbiwgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmUsIGVtYmVkX2xlbik7XG4mIzQzO1x0eGJjX2NtZGxpbmVfYXBwbGllZCA9IHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkgLSBEaWQgdGhlIGVtYmVkZGVkIGNtZGxpbmUgZ2V0IHByZXBlbmRlZD9cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuIHRydWUgaWYgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIGFjdHVhbGx5IHByZXBlbmRlZCB0aGVcbiYjNDM7ICogZW1iZWRkZWQgXCYjMzQ7a2VybmVsXCYjMzQ7IHN1YnRyZWUuIHNldHVwX2Jvb3RfY29uZmlnKCkgdXNlcyB0aGlzIHRvIGF2b2lkXG4mIzQzOyAqIHJlbmRlcmluZyB0aGUgc2FtZSBrZXlzIGEgc2Vjb25kIHRpbWUuXG4mIzQzOyAqL1xuJiM0Mztib29sIF9faW5pdCB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4geGJjX2NtZGxpbmVfYXBwbGllZDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcdC8qIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJRyAqL1xuJiM0MztcbiYjNDM7LyogcGFyc2VfYXJncygpIGNhbGxiYWNrOiBmbGFnIHdoZW4gdGhlIFwmIzM0O2Jvb3Rjb25maWdcJiMzNDsgcGFyYW1ldGVyIGlzIHByZXNlbnQuICovXG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGJvb3Rjb25maWdfb3B0aW4oY2hhciAqcGFyYW0sIGNoYXIgKnZhbCxcbiYjNDM7XHRcdFx0XHQgICBjb25zdCBjaGFyICp1bnVzZWQsIHZvaWQgKmFyZylcbiYjNDM7e1xuJiM0MztcdGlmICghc3RyY21wKHBhcmFtLCBcJiMzNDtib290Y29uZmlnXCYjMzQ7KSlcbiYjNDM7XHRcdCooYm9vbCAqKWFyZyA9IHRydWU7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkKCkgLSBXYXMgXCYjMzQ7Ym9vdGNvbmZpZ1wmIzM0OyBwYXNzZWQgb24gdGhlIGNtZGxpbmU/XG4mIzQzOyAqIEBib290X2NtZGxpbmU6IGtlcm5lbCBjb21tYW5kIGxpbmUgdG8gaW5zcGVjdCAobm90IG1vZGlmaWVkKVxuJiM0MzsgKiBAZW5kX29mZnNldDogaWYgbm9uLU5VTEwsIHNldCB0byB0aGUgb2Zmc2V0IG9mIHRoZSBpbml0IGFyZ3VtZW50cyB0aGF0XG4mIzQzOyAqXHRcdGZvbGxvdyBhIFwmIzM0Oy0tXCYjMzQ7IHNlcGFyYXRvciwgb3IgMCB3aGVuIHRoZXJlIGlzIG5vbmVcbiYjNDM7ICpcbiYjNDM7ICogUGFyc2UgYSBwcml2YXRlIGNvcHkgb2YgQGJvb3RfY21kbGluZSAocGFyc2VfYXJncygpIGlzIGRlc3RydWN0aXZlKSBhbmRcbiYjNDM7ICogcmVwb3J0IHdoZXRoZXIgXCYjMzQ7Ym9vdGNvbmZpZ1wmIzM0OyBpcyBwcmVzZW50IGJlZm9yZSB0aGUgXCYjMzQ7LS1cJiMzNDsgc2VwYXJhdG9yLlxuJiM0MzsgKiBzZXR1cF9hcmNoKCkgdXNlcyB0aGlzIHRvIGdhdGUgcHJlcGVuZGluZyB0aGUgYnVpbGQtdGltZSBlbWJlZGRlZCBjbWRsaW5lO1xuJiM0MzsgKiBzZXR1cF9ib290X2NvbmZpZygpIHVzZXMgaXQgZm9yIHRoZSBydW50aW1lIG9wdC1pbiBhbmQgdG8gbG9jYXRlIHRoZSBpbml0XG4mIzQzOyAqIGFyZ3VtZW50cyB2aWEgQGVuZF9vZmZzZXQuIFNoYXJpbmcgb25lIHBhcnNlciBrZWVwcyB0aGUgZWFybHkgYW5kIGxhdGVcbiYjNDM7ICogcGF0aHMgYWdyZWVpbmcgb24gd2hhdCBjb3VudHMgYXMgb3B0LWluLiBDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0UgaXMgbm90XG4mIzQzOyAqIGZvbGRlZCBpbiBoZXJlOyBjYWxsZXJzIGFwcGx5IGl0IHdoZXJlIHRoZXkgbmVlZCBpdC5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgX19pbml0IGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoY29uc3QgY2hhciAqYm9vdF9jbWRsaW5lLCBpbnQgKmVuZF9vZmZzZXQpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgY2hhciB0bXBfY21kbGluZVtDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTtcbiYjNDM7XHRib29sIGZvdW5kID0gZmFsc2U7XG4mIzQzO1x0Y2hhciAqZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAoZW5kX29mZnNldClcbiYjNDM7XHRcdCplbmRfb2Zmc2V0ID0gMDtcbiYjNDM7XG4mIzQzO1x0c3Ryc2NweSh0bXBfY21kbGluZSwgYm9vdF9jbWRsaW5lLCBDT01NQU5EX0xJTkVfU0laRSk7XG4mIzQzO1x0ZXJyID0gcGFyc2VfYXJncyhcJiMzNDtib290Y29uZmlnXCYjMzQ7LCB0bXBfY21kbGluZSwgTlVMTCwgMCwgMCwgMCxcbiYjNDM7XHRcdFx0IFx1MDAyNmZvdW5kLCBib290Y29uZmlnX29wdGluKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGVycikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIHBhcnNlX2FyZ3MoKSBzdG9wcyBhdCBcJiMzNDstLVwmIzM0OyBhbmQgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgcmVzdC4gKi9cbiYjNDM7XHRpZiAoZW5kX29mZnNldCBcdTAwMjZcdTAwMjYgZXJyKVxuJiM0MztcdFx0KmVuZF9vZmZzZXQgPSBlcnIgLSB0bXBfY21kbGluZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZvdW5kO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcdC8qIF9fS0VSTkVMX18gKi9cbiBcbiAvKlxuICAqIEV4dHJhIEJvb3QgQ29uZmlnIChYQkMpIGlzIGdpdmVuIGFzIHRyZWUtc3RydWN0dXJlZCBhc2NpaSB0ZXh0IG9mXG5AQCAtNDI3LDExICYjNDM7NTUzLDMwIEBAIHN0YXRpYyBjaGFyIHhiY19uYW1lYnVmW1hCQ19LRVlMRU5fTUFYXSBfX2luaXRkYXRhO1xuIGludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpXG4ge1xuIFx0c3RydWN0IHhiY19ub2RlICprbm9kZSwgKnZub2RlO1xuLVx0Y2hhciAqZW5kID0gYnVmICYjNDM7IHNpemU7XG4gXHRjb25zdCBjaGFyICp2YWwsICpxO1xuJiM0MztcdHNpemVfdCBsZW4gPSAwO1xuIFx0aW50IHJldDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRyYWNrIHRoZSBydW5uaW5nIHdyaXR0ZW4gbGVuZ3RoIHJhdGhlciB0aGFuIGFkdmFuY2luZyBAYnVmLCBzbyB3ZVxuJiM0MztcdCAqIG5ldmVyIGZvcm0gXCYjMzQ7YnVmICYjNDM7IHNpemVcJiMzNDsgb3IgXCYjMzQ7YnVmICYjNDM7PSByZXRcJiMzNDsgd2hpbGUgQGJ1ZiBpcyBOVUxMICh0aGVcbiYjNDM7XHQgKiBzaXplLXByb2JlIGNhbGwgcGFzc2VzIGJ1Zj1OVUxMLCBzaXplPTApLiBOVUxMIHBvaW50ZXIgYXJpdGhtZXRpY1xuJiM0MztcdCAqIGlzIHVuZGVmaW5lZCBiZWhhdmlvciBhbmQgdHJpcHMgaG9zdCBVQlNhbiAvIEZPUlRJRllfU09VUkNFIHdoZW5cbiYjNDM7XHQgKiB0aGlzIHJlbmRlcmVyIHJ1bnMgYXQga2VybmVsIGJ1aWxkIHRpbWUuIHNucHJpbnRmKE5VTEwsIDAsIC4uLilcbiYjNDM7XHQgKiBpdHNlbGYgaXMgd2VsbCBkZWZpbmVkIGFuZCByZXR1cm5zIHRoZSB3b3VsZC1iZSBsZW5ndGguXG4mIzQzO1x0ICovXG4gXHR4YmNfbm9kZV9mb3JfZWFjaF9rZXlfdmFsdWUocm9vdCwga25vZGUsIHZhbCkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEFuIGVtcHR5IG9yIHZhbHVlLW9ubHkgQHJvb3QgKGUuZy4gXCYjMzQ7a2VybmVsIHt9XCYjMzQ7IG9yXG4mIzQzO1x0XHQgKiBcJiMzNDtrZXJuZWwgPSB4XCYjMzQ7LCBwb3NzaWJseSBhbG9uZ3NpZGUgXCYjMzQ7a2VybmVsLmZvbyA9IGJhclwmIzM0OylcbiYjNDM7XHRcdCAqIHlpZWxkcyBAcm9vdCBpdHNlbGYgaGVyZS4gU2tpcCBpdDogY29tcG9zaW5nIGEga2V5IGZvciBpdFxuJiM0MztcdFx0ICogd291bGQgZmFpbCB3aXRoIC1FSU5WQUwsIHlldCBhbnkgcmVhbCBkZXNjZW5kYW50IGtleXMgbXVzdFxuJiM0MztcdFx0ICogc3RpbGwgYmUgcmVuZGVyZWQuIEFuIGVudGlyZWx5IGVtcHR5IHN1YnRyZWUgdGhlbiByZW5kZXJzXG4mIzQzO1x0XHQgKiBub3RoaW5nIGFuZCByZXR1cm5zIDAgcmF0aGVyIHRoYW4gYW4gZXJyb3IuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChrbm9kZSA9PSByb290KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4gXHRcdHJldCA9IHhiY19ub2RlX2NvbXBvc2Vfa2V5X2FmdGVyKHJvb3QsIGtub2RlLFxuIFx0XHRcdFx0XHR4YmNfbmFtZWJ1ZiwgWEJDX0tFWUxFTl9NQVgpO1xuIFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuQEAgLTQzOSwxMCAmIzQzOzU4NCwxMSBAQCBpbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KVxuIFxuIFx0XHR2bm9kZSA9IHhiY19ub2RlX2dldF9jaGlsZChrbm9kZSk7XG4gXHRcdGlmICghdm5vZGUpIHtcbi1cdFx0XHRyZXQgPSBzbnByaW50ZihidWYsIHJlc3QoYnVmLCBlbmQpLCBcJiMzNDslcyBcJiMzNDssIHhiY19uYW1lYnVmKTtcbiYjNDM7XHRcdFx0cmV0ID0gc25wcmludGYoYnVmID8gYnVmICYjNDM7IGxlbiA6IE5VTEwsIHJlc3QobGVuLCBzaXplKSxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7JXMgXCYjMzQ7LCB4YmNfbmFtZWJ1Zik7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdFx0YnVmICYjNDM7PSByZXQ7XG4mIzQzO1x0XHRcdGxlbiAmIzQzOz0gcmV0O1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdHhiY19hcnJheV9mb3JfZWFjaF92YWx1ZSh2bm9kZSwgdmFsKSB7XG5AQCAtNDUyLDE1ICYjNDM7NTk4LDE1IEBAIGludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpXG4gXHRcdFx0ICogd2hpdGVzcGFjZS5cbiBcdFx0XHQgKi9cbiBcdFx0XHRxID0gc3RycGJyayh2YWwsIFwmIzM0OyBcXHRcXHJcXG5cJiMzNDspID8gXCYjMzQ7XFxcJiMzNDtcJiMzNDsgOiBcJiMzNDtcJiMzNDs7XG4tXHRcdFx0cmV0ID0gc25wcmludGYoYnVmLCByZXN0KGJ1ZiwgZW5kKSwgXCYjMzQ7JXM9JXMlcyVzIFwmIzM0Oyxcbi1cdFx0XHRcdCAgICAgICB4YmNfbmFtZWJ1ZiwgcSwgdmFsLCBxKTtcbiYjNDM7XHRcdFx0cmV0ID0gc25wcmludGYoYnVmID8gYnVmICYjNDM7IGxlbiA6IE5VTEwsIHJlc3QobGVuLCBzaXplKSxcbiYjNDM7XHRcdFx0XHQgICAgICAgXCYjMzQ7JXM9JXMlcyVzIFwmIzM0OywgeGJjX25hbWVidWYsIHEsIHZhbCwgcSk7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdFx0YnVmICYjNDM7PSByZXQ7XG4mIzQzO1x0XHRcdGxlbiAmIzQzOz0gcmV0O1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRyZXR1cm4gYnVmIC0gKGVuZCAtIHNpemUpO1xuJiM0MztcdHJldHVybiBsZW47XG4gfVxuICN1bmRlZiByZXN0XG4gXG5kaWZmIC0tZ2l0IGEvbGliL2VtYmVkZGVkLWNtZGxpbmUuUyBiL2xpYi9lbWJlZGRlZC1jbWRsaW5lLlNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYmRhODFiNGE0MmJlYWZcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9lbWJlZGRlZC1jbWRsaW5lLlNcbkBAIC0wLDAgJiM0MzsxLDE2IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOy8qXG4mIzQzOyAqIEVtYmVkIHRoZSBidWlsZC10aW1lLXJlbmRlcmVkIGJvb3Rjb25maWcgXCYjMzQ7a2VybmVsXCYjMzQ7IHN1YnRyZWUgYXMgYSBmbGF0XG4mIzQzOyAqIGNtZGxpbmUgc3RyaW5nLiBzZXR1cF9hcmNoKCkgcHJlcGVuZHMgdGhpcyB0byBib290X2NvbW1hbmRfbGluZSBvblxuJiM0MzsgKiBhcmNoaXRlY3R1cmVzIHRoYXQgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUcuXG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlc1xuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcdC5zZWN0aW9uIC5pbml0LnJvZGF0YS5lbWJlZF9jbWRsaW5lLCBcJiMzNDthXCYjMzQ7LCAlcHJvZ2JpdHNcbiYjNDM7XHQuZ2xvYmFsIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lXG4mIzQzO2VtYmVkZGVkX2tlcm5lbF9jbWRsaW5lOlxuJiM0MztcdC5pbmNiaW4gXCYjMzQ7bGliL2VtYmVkZGVkX2NtZGxpbmUuYmluXCYjMzQ7XG4mIzQzO1x0LmJ5dGUgMFxuJiM0MztcdC5nbG9iYWwgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVfZW5kXG4mIzQzO2VtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZDpcbmRpZmYgLS1naXQgYS90b29scy9ib290Y29uZmlnL01ha2VmaWxlIGIvdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZVxuaW5kZXggOTBlYjQ3YzlkOGRlNjcuLjNjYjgwNjZkNTE0MWJiIDEwMDY0NFxuLS0tIGEvdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZVxuQEAgLTE1LDcgJiM0MzsxNSw3IEBAIG92ZXJyaWRlIENGTEFHUyAmIzQzOz0gLVdhbGwgLWcgLUkkKENVUkRJUikvaW5jbHVkZVxuIEFMTF9UQVJHRVRTIDo9IGJvb3Rjb25maWdcbiBBTExfUFJPR1JBTVMgOj0gJChwYXRzdWJzdCAlLCQoT1VUUFVUKSUsJChBTExfVEFSR0VUUykpXG4gXG4tYWxsOiAkKEFMTF9QUk9HUkFNUykgdGVzdFxuJiM0MzthbGw6ICQoQUxMX1BST0dSQU1TKVxuIFxuICQoT1VUUFVUKWJvb3Rjb25maWc6IG1haW4uYyBpbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaCAkKExJQlNSQylcbiBcdCQoQ0MpICQoZmlsdGVyICUuYywkXikgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEBcbkBAIC0yNyw0ICYjNDM7MjcsNCBAQCBpbnN0YWxsOiAkKEFMTF9QUk9HUkFNUylcbiBcdGluc3RhbGwgJChPVVRQVVQpYm9vdGNvbmZpZyAkKERFU1RESVIpJChiaW5kaXIpXG4gXG4gY2xlYW46XG4tXHQkKFJNKSAtZiAkKE9VVFBVVCkqLm8gJChBTExfUFJPR1JBTVMpXG4mIzQzO1x0cm0gLWYgJChPVVRQVVQpKi5vICQoQUxMX1BST0dSQU1TKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDE4OjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBidWlsZC10aW1lIGZlYXR1cmUgdG8gcmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gQWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUga2VybmVsIGFyZSBjb25maW5lZCB0byBgX19pbml0YCBmdW5jdGlvbnMgKGUuZy4sIGBzZXR1cF9hcmNoYCwgYHNldHVwX2Jvb3RfY29uZmlnYCwgYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgKSwgd2hpY2ggcnVuIG9ubHkgb25jZSBkdXJpbmcgZWFybHkgYm9vdCB3aXRoIHN0YXRpYyBpbnB1dHMgKGNvbXBpbGUtdGltZSBlbWJlZGRlZCBmaWxlcyBhbmQgdGhlIGJvb3Rsb2FkZXIgY29tbWFuZCBsaW5lKS4gU3l6a2FsbGVyIGNhbm5vdCBtdXRhdGUgdGhlc2UgaW5wdXRzIG9yIHJlYWNoIHRoaXMgY29kZSBkdXJpbmcgcnVudGltZSBzeXNjYWxsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlMTgxZDMwMWM5YmQwNzZjZWFiNjM1YTQ3MzdlOGJmNWM2YTI0NWUxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdW4gMjYgMTg6MTU6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdAppbmRleCBmNzEyNzU4NDcyZDVjNi4uM2Q2NDEyNDU4YzhiNjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdApAQCAtMjM0LDYgJiM0MzsyMzQsODcgQEAgS2NvbmZpZyBvcHRpb24gc2VsZWN0ZWQuCiBOb3RlIHRoYXQgZXZlbiBpZiB5b3Ugc2V0IHRoaXMgb3B0aW9uLCB5b3UgY2FuIG92ZXJyaWRlIHRoZSBlbWJlZGRlZAogYm9vdGNvbmZpZyBieSBhbm90aGVyIGJvb3Rjb25maWcgd2hpY2ggYXR0YWNoZWQgdG8gdGhlIGluaXRyZC4KIAomIzQzO1JlbmRlcmluZyBFbWJlZGRlZCBrZXJuZWwuKiBLZXlzIGF0IEJ1aWxkIFRpbWUKJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7QnkgZGVmYXVsdCwgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgKGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEPXlgYCkgaXMKJiM0MztwYXJzZWQgYXQgcnVudGltZSwgYWZ0ZXIgYGBwYXJzZV9lYXJseV9wYXJhbSgpYGAgaGFzIGFscmVhZHkgcnVuLiBFYXJseQomIzQzO3BhcmFtZXRlciBoYW5kbGVycyAoYGBtZW09YGAsIGBgZWFybHljb249YGAsIGBgbG9nbGV2ZWw9YGAsIC4uLikgdGhlcmVmb3JlCiYjNDM7Y2Fubm90IHNlZSB2YWx1ZXMgc3VwcGxpZWQgdmlhIHRoZSBlbWJlZGRlZCBgYGtlcm5lbGBgIHN1YnRyZWUuCiYjNDM7CiYjNDM7YGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgYCByZXNvbHZlcyB0aGlzIGJ5IHJlbmRlcmluZyB0aGUKJiM0MztgYGtlcm5lbGBgIHN1YnRyZWUgb2YgYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURfRklMRWBgIGludG8gYSBmbGF0IGNtZGxpbmUKJiM0MztzdHJpbmcgYXQga2VybmVsIGJ1aWxkIHRpbWUgKHZpYSBgYHRvb2xzL2Jvb3Rjb25maWcgLUNgYCkgYW5kIHByZXBlbmRpbmcKJiM0MztpdCB0byBgYGJvb3RfY29tbWFuZF9saW5lYGAgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cCwgc28gdGhlIGtleXMKJiM0MzthcmUgdmlzaWJsZSB0byBgYHBhcnNlX2Vhcmx5X3BhcmFtKClgYC4KJiM0MzsKJiM0MztUaGUgb3B0aW9uIHJlcXVpcmVzIGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEPXlgYCwgYSBub24tZW1wdHkKJiM0MztgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRF9GSUxFYGAsIGBgQ09ORklHX0NNRExJTkVgYCB0byBiZSBlbXB0eSwgYW5kCiYjNDM7YW4gYXJjaGl0ZWN0dXJlIHRoYXQgc2VsZWN0cyBgYENPTkZJR19BUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHYGAuCiYjNDM7Q3VycmVudGx5IG9ubHkgeDg2IHNlbGVjdHMgaXQ7IG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgdGhlIGVtYmVkZGVkCiYjNDM7Ym9vdGNvbmZpZyBzdGlsbCB3b3JrcywgYnV0IG9ubHkgdGhyb3VnaCB0aGUgbGF0ZSBydW50aW1lIHBhcnNlci4KJiM0MzsKJiM0MztUaGUgc2FtZSBgYGJvb3Rjb25maWdgYCBvcHQtaW4gYXBwbGllcyBhcyBlbHNld2hlcmU6IHRoZSByZW5kZXJlZCBrZXlzCiYjNDM7YXJlIHByZXBlbmRlZCBvbmx5IHdoZW4gYGBib290Y29uZmlnYGAgKGluIGFueSBmb3JtKSBhcHBlYXJzIG9uIHRoZQomIzQzO2tlcm5lbCBjb21tYW5kIGxpbmUsIG9yIHdoZW4gYGBDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0VgYCBpcyBzZXQsIHdoaWNoCiYjNDM7ZGVmYXVsdHMgdG8gYGB5YGAgd2hlbiBgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRGBgIGlzIHNldC4KJiM0MzsKJiM0MztGb3IgZXhhbXBsZSwgZ2l2ZW46OgomIzQzOwomIzQzOyBrZXJuZWwgewomIzQzOyAgIGxvZ2xldmVsID0gNwomIzQzOyAgIG1lbSA9IDRHCiYjNDM7IH0KJiM0MzsKJiM0Mzt0aGUga2VybmVsIGJvb3RzIGFzIGlmIGBgbG9nbGV2ZWw9NyBtZW09NEdgYCBoYWQgYmVlbiBwcmVwZW5kZWQgdG8gdGhlCiYjNDM7Ym9vdGxvYWRlciBjb21tYW5kIGxpbmUsIHdpdGggdGhlIHZhbHVlcyB2aXNpYmxlIHRvIGVhcmx5LXBhcnNlZAomIzQzO2hhbmRsZXJzLiBDb21tYS1zZXBhcmF0ZWQgdmFsdWVzIGFyZSBzdGlsbCBleHBhbmRlZCBpbnRvIG11bHRpcGxlCiYjNDM7Y21kbGluZSBlbnRyaWVzIHBlciB0aGUgYm9vdGNvbmZpZyBhcnJheSBjb252ZW50aW9uIC0tIHRoZSBlbWJlZGRlZAomIzQzO2Bga2VybmVsLmVhcmx5Y29uID0gJiMzNDt1YXJ0ODI1MCxpbywweDNmOCYjMzQ7YGAgbXVzdCBiZSBxdW90ZWQgdG8gbGFuZCBhcyBhCiYjNDM7c2luZ2xlIGBgZWFybHljb249YGAgZW50cnksIGV4YWN0bHkgYXMgZm9yIHRoZSBydW50aW1lIHBhcnNlci4KJiM0MzsKJiM0MztJZiB0aGUgcmVuZGVyZWQgc3RyaW5nIHdvdWxkIG5vdCBmaXQgaW4gYGBDT01NQU5EX0xJTkVfU0laRWBgIHRvZ2V0aGVyCiYjNDM7d2l0aCB0aGUgZXhpc3RpbmcgY29tbWFuZCBsaW5lLCB0aGUgcHJlcGVuZCBpcyBza2lwcGVkIGFuZCBhbiBlcnJvciBpcwomIzQzO2xvZ2dlZCwgc28gYW4gb3ZlcnNpemVkIGVtYmVkZGVkIGJvb3Rjb25maWcgY2Fubm90IGJyaWNrIGEgYm9vdC4KJiM0MzsKJiM0MztJbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbW1hbmQgbGluZSBhbmQgYm9vdGNvbmZpZyBzb3VyY2VzCiYjNDM7fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgomIzQzOwomIzQzO1dpdGggYGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUc9eWBgIHRoZSByZW5kZXJlZCBgYGtlcm5lbGBgCiYjNDM7c3VidHJlZSBiZWhhdmVzIGxpa2UgYSBidWlsZC10aW1lIGNvbW1hbmQgbGluZSAoc2ltaWxhciB0bwomIzQzO2BgQ09ORklHX0NNRExJTkVgYCksIG5vdCBsaWtlIGEgYm9vdGNvbmZpZyBzb3VyY2UuIEl0IGlzIHByZXBlbmRlZCB0bwomIzQzO2BgYm9vdF9jb21tYW5kX2xpbmVgYCBpbiBgYHNldHVwX2FyY2goKWBgLCBiZWZvcmUgYGBwYXJzZV9lYXJseV9wYXJhbSgpYGAKJiM0MzthbmQgbG9uZyBiZWZvcmUgdGhlIHJ1bnRpbWUgcGFyc2VyIGxvb2tzIGF0IGFuIGluaXRyZC4gT3B0aW9ucyBjYW4gcmVhY2gKJiM0Mzt0aGUga2VybmVsIGZyb20gdXAgdG8gZm91ciBwbGFjZXM6CiYjNDM7CiYjNDM7LSBCb290bG9hZGVyIGNvbW1hbmQgbGluZTogdGhlIGFyZ3VtZW50cyB0aGUgYm9vdCBsb2FkZXIgcGFzc2VzLiBUaGUKJiM0MzsgIGVtYmVkZGVkIGNtZGxpbmUgaXMgcHJlcGVuZGVkIGluIGZyb250IG9mIHRoZW0sIHNvIGZvciBsYXN0LW9uZS13aW5zCiYjNDM7ICBwYXJhbWV0ZXJzIGEgYm9vdGxvYWRlciBvcHRpb24gc3RpbGwgb3ZlcnJpZGVzIHRoZSBlbWJlZGRlZCB2YWx1ZS4KJiM0MzsgIFZpc2libGUgaW4gL3Byb2MvY21kbGluZS4KJiM0MzstIEVtYmVkZGVkIGNtZGxpbmUgKHRoaXMgb3B0aW9uKTogdGhlIHJlbmRlcmVkIGBga2VybmVsYGAgc3VidHJlZSwKJiM0MzsgIHByZXBlbmRlZCBlYXJseSBzbyBpdCBpcyBzZWVuIGJ5IGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgLiBWaXNpYmxlIGluCiYjNDM7ICAvcHJvYy9jbWRsaW5lLgomIzQzOy0gSW5pdHJkIGJvb3Rjb25maWc6IHBhcnNlZCBsYXRlIGluIGBgc2V0dXBfYm9vdF9jb25maWcoKWBgOyBpdHMKJiM0MzsgIGBga2VybmVsYGAga2V5cyBhcmUgcGxhY2VkIGFoZWFkIG9mIGBgYm9vdF9jb21tYW5kX2xpbmVgYCwgaS5lLiBiZWZvcmUKJiM0MzsgIHRoZSBlbWJlZGRlZCBjbWRsaW5lLCBzbyBsYXN0LXdpbnMgZmF2b3JzIHRoZSBlbWJlZGRlZCB2YWx1ZXMuIEFzIGEKJiM0MzsgIGJvb3Rjb25maWcgc291cmNlLCBhbiBpbml0cmQgYm9vdGNvbmZpZyBzdGlsbCByZXBsYWNlcyB0aGUgZW1iZWRkZWQKJiM0MzsgIGJvb3Rjb25maWcuIFZpc2libGUgaW4gL3Byb2MvY21kbGluZSBhbmQgL3Byb2MvYm9vdGNvbmZpZy4KJiM0MzstIEVtYmVkZGVkIGJvb3Rjb25maWcgKHJ1bnRpbWUpOiBwYXJzZWQgbGF0ZSwgb25seSB3aGVuIG5vIGluaXRyZAomIzQzOyAgYm9vdGNvbmZpZyBpcyBwcmVzZW50LiBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUgYW5kIC9wcm9jL2Jvb3Rjb25maWcuCiYjNDM7CiYjNDM7U28gd2l0aCB0aGlzIG9wdGlvbiB0aGUgZW1iZWRkZWQgYGBrZXJuZWwuKmBgIHZhbHVlcyB0YWtlIHByZWNlZGVuY2UKJiM0MztvdmVyIGFuIGluaXRyZCBib290Y29uZmlnJiMzOTtzIGBga2VybmVsLipgYCB2YWx1ZXM6IGZvciBlYXJseSBwYXJhbWV0ZXJzCiYjNDM7dGhlIGluaXRyZCBpcyBub3QgcGFyc2VkIHlldCwgYW5kIGZvciBvcmRpbmFyeSBwYXJhbWV0ZXJzIHRoZSBlbWJlZGRlZAomIzQzO2tleXMgbGFuZCBsYXRlciBpbiB0aGUgY29tbWFuZCBsaW5lLiBJZiB5b3UgbmVlZCBhbiBpbml0cmQgYm9vdGNvbmZpZyB0bwomIzQzO292ZXJyaWRlIHRoZSBlbWJlZGRlZCBgYGtlcm5lbC4qYGAga2V5cywgbGVhdmUgdGhpcyBvcHRpb24gb2ZmIGFuZCByZWx5CiYjNDM7b24gdGhlIHJ1bnRpbWUgcGFyc2VyLgomIzQzOwomIzQzO1RoZSByZW5kZXJlZCBzdHJpbmcgaXMgcGFydCBvZiB0aGUgY29tbWFuZCBsaW5lLCBzbyBpdCBhcHBlYXJzIGluCiYjNDM7L3Byb2MvY21kbGluZS4gSXQgaXMgZGVsaWJlcmF0ZWx5IG5vdCBzaG93biBpbiAvcHJvYy9ib290Y29uZmlnOiB0aGF0CiYjNDM7ZmlsZSBrZWVwcyByZXBvcnRpbmcgdGhlIHBhcnNlZCBib290Y29uZmlnIHRyZWUgLS0gdGhlIGluaXRyZCBib290Y29uZmlnCiYjNDM7aWYgcHJlc2VudCwgb3RoZXJ3aXNlIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIC0tIGluZGVwZW5kZW50IG9mIHdoZXRoZXIKJiM0MztidWlsZC10aW1lIGNtZGxpbmUgcmVuZGVyaW5nIGlzIGVuYWJsZWQuCiYjNDM7CiBLZXJuZWwgcGFyYW1ldGVycyB2aWEgQm9vdCBDb25maWcKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGJmOTczOTlkMzU3ZmEwLi40ODM0MDY1YTRiZjJmNyAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTk4NDYsNiAmIzQzOzk4NDYsNyBAQCBGOglmcy9wcm9jL2Jvb3Rjb25maWcuYwogRjoJaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmgKIEY6CWxpYi9ib290Y29uZmlnLWRhdGEuUwogRjoJbGliL2Jvb3Rjb25maWcuYwomIzQzO0Y6CWxpYi9lbWJlZGRlZC1jbWRsaW5lLlMKIEY6CXRvb2xzL2Jvb3Rjb25maWcvKgogRjoJdG9vbHMvYm9vdGNvbmZpZy9zY3JpcHRzLyoKIApkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCAxMmZkM2QyZDQ3YjU4Mi4uMzRmYjM1NzFiZWM4MWQgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL01ha2VmaWxlCkBAIC0xNTUyLDYgJiM0MzsxNTUyLDIyIEBAIHByZXBhcmU6IHRvb2xzL2JwZi9yZXNvbHZlX2J0ZmlkcwogZW5kaWYKIGVuZGlmCiAKJiM0MzsjIHRvb2xzL2Jvb3Rjb25maWcgcmVuZGVycyB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBpbnRvIGEgY21kbGluZSBhdCBidWlsZCB0aW1lLgomIzQzO2lmZGVmIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJRwomIzQzO3ByZXBhcmU6IHRvb2xzL2Jvb3Rjb25maWcKJiM0MztlbmRpZgomIzQzOwomIzQzOyMgdG9vbHMvYm9vdGNvbmZpZyBpcyBydW4gb24gdGhlIGJ1aWxkIGhvc3QgZHVyaW5nIHByZXBhcmUsIHNvIGZvcmNlIGEgaG9zdAomIzQzOyMgYmluYXJ5IGhlcmU7IGl0cyBvd24gTWFrZWZpbGUga2VlcHMgJChDQykgZm9yIHN0YW5kYWxvbmUgYW5kIGNyb3NzIGJ1aWxkcy4KJiM0MzsjIENST1NTX0NPTVBJTEU9IGlzIGNsZWFyZWQgc28gdG9vbHMvc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlIGRvZXMgbm90IGluamVjdAomIzQzOyMgdGhlIHRhcmdldCYjMzk7cyAtLXRhcmdldD0vLS1zeXNyb290PSBmbGFncyBpbnRvIHRoZSBob3N0IGNsYW5nIGludm9jYXRpb24gdW5kZXIKJiM0MzsjIExMVk09MSBjcm9zcyBidWlsZHMgKHdoaWNoIHdvdWxkIHByb2R1Y2UgYSB0YXJnZXQgYmluYXJ5IHRoYXQgZmFpbHMgdG8gZXhlYykuCiYjNDM7dG9vbHMvYm9vdGNvbmZpZzogZXhwb3J0IENDIDo9ICQoSE9TVENDKQomIzQzO3Rvb2xzL2Jvb3Rjb25maWc6IEZPUkNFCiYjNDM7CSQoUSlta2RpciAtcCAkKG9ianRyZWUpL3Rvb2xzCiYjNDM7CSQoUSkkKE1BS0UpIE89JChhYnNwYXRoICQob2JqdHJlZSkpIHN1YmRpcj10b29scyAtQyAkKHNyY3RyZWUpL3Rvb2xzLyBcCiYjNDM7CQlib290Y29uZmlnIENST1NTX0NPTVBJTEU9CiYjNDM7CiAjIFRoZSB0b29scyBidWlsZCBzeXN0ZW0gaXMgbm90IGEgcGFydCBvZiBLYnVpbGQgYW5kIHRlbmRzIHRvIGludHJvZHVjZQogIyBpdHMgb3duIHVuaXF1ZSBpc3N1ZXMuIElmIHlvdSBuZWVkIHRvIGludGVncmF0ZSBhIG5ldyB0b29sIGludG8gS2J1aWxkLAogIyBwbGVhc2UgY29uc2lkZXIgbG9jYXRpbmcgdGhhdCB0b29sIG91dHNpZGUgdGhlIHRvb2xzLyB0cmVlIGFuZCB1c2luZyB0aGUKQEAgLTE1NzgsNiAmIzQzOzE1OTQsMTUgQEAgaWZuZXEgKCQod2lsZGNhcmQgJChvYmp0b29sX08pKSwpCiAJJChRKSQoTUFLRSkgLXNDICQoYWJzX3NyY3RyZWUpL3Rvb2xzL29ianRvb2wgTz0kKG9ianRvb2xfTykgc3JjdHJlZT0kKGFic19zcmN0cmVlKSAkKHBhdHN1YnN0IG9ianRvb2xfJSwlLCRAKQogZW5kaWYKIAomIzQzO1BIT05ZICYjNDM7PSBib290Y29uZmlnX2NsZWFuCiYjNDM7CiYjNDM7Ym9vdGNvbmZpZ19PID0gJChhYnNwYXRoICQob2JqdHJlZSkpL3Rvb2xzL2Jvb3Rjb25maWcKJiM0MzsKJiM0Mztib290Y29uZmlnX2NsZWFuOgomIzQzO2lmbmVxICgkKHdpbGRjYXJkICQoYm9vdGNvbmZpZ19PKSksKQomIzQzOwkkKFEpJChNQUtFKSAtc0MgJChzcmN0cmVlKS90b29scy9ib290Y29uZmlnIE89JChib290Y29uZmlnX08pIGNsZWFuCiYjNDM7ZW5kaWYKJiM0MzsKIHRvb2xzLzogRk9SQ0UKIAkkKFEpbWtkaXIgLXAgJChvYmp0cmVlKS90b29scwogCSQoUSkkKE1BS0UpIE89JChhYnNwYXRoICQob2JqdHJlZSkpIHN1YmRpcj10b29scyAtQyAkKHNyY3RyZWUpL3Rvb2xzLwpAQCAtMTc1Myw3ICYjNDM7MTc3OCw3IEBAIHZtbGludXhjbGVhbjoKIAkkKFEpJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9saW5rLXZtbGludXguc2ggY2xlYW4KIAkkKFEpJChpZiAkKEFSQ0hfUE9TVExJTkspLCAkKE1BS0UpIC1mICQoQVJDSF9QT1NUTElOSykgY2xlYW4pCiAKLWNsZWFuOiBhcmNoY2xlYW4gdm1saW51eGNsZWFuIHJlc29sdmVfYnRmaWRzX2NsZWFuIG9ianRvb2xfY2xlYW4KJiM0MztjbGVhbjogYXJjaGNsZWFuIHZtbGludXhjbGVhbiByZXNvbHZlX2J0Zmlkc19jbGVhbiBvYmp0b29sX2NsZWFuIGJvb3Rjb25maWdfY2xlYW4KIAogIyBtcnByb3BlciAtIERlbGV0ZSBhbGwgZ2VuZXJhdGVkIGZpbGVzLCBpbmNsdWRpbmcgLmNvbmZpZwogIwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggYmRhZDkwZjIxMGU0YmYuLmZkOTc5ZTBiZTFmMGUwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTEyNyw2ICYjNDM7MTI3LDcgQEAgY29uZmlnIFg4NgogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX05VTUFfQkFMQU5DSU5HCWlmIFg4Nl82NAogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0tNQVBfTE9DQUxfRk9SQ0VfTUFQCWlmIE5SX0NQVVMgJmx0Oz0gNDA5NgogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0NGSQkJaWYgWDg2XzY0CiYjNDM7CXNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHCiAJc2VsZWN0IEFSQ0hfVVNFU19DRklfVFJBUFMJCWlmIFg4Nl82NCAmYW1wOyZhbXA7IENGSQogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0xUT19DTEFORwogCXNlbGVjdCBBUkNIX1NVUFBPUlRTX0xUT19DTEFOR19USElOCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IDQ2ODgyY2U3OWMzYTRkLi44OGIwNTVhNDY1OTFlZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKQEAgLTYsNiAmIzQzOzYsNyBAQAogICogcGFydHMgb2YgZWFybHkga2VybmVsIGluaXRpYWxpemF0aW9uLgogICovCiAjaW5jbHVkZSAmbHQ7bGludXgvYWNwaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ib290Y29uZmlnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29uc29sZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NwdS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2NyYXNoX2R1bXAuaCZndDsKQEAgLTg4MCw3ICYjNDM7ODgxLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IHg4Nl9yZXBvcnRfbngodm9pZCkKICAqCiAgKiBOb3RlOiBPbiB4ODZfNjQsIGZpeG1hcHMgYXJlIHJlYWR5IGZvciB1c2UgZXZlbiBiZWZvcmUgdGhpcyBpcyBjYWxsZWQuCiAgKi8KLQogdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogewogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTkyNCw2ICYjNDM7OTI0LDE4IEBAIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcCkKIAlidWlsdGluX2NtZGxpbmVfYWRkZWQgPSB0cnVlOwogI2VuZGlmCiAKJiM0MzsjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHCiYjNDM7CS8qCiYjNDM7CSAqIFByZXBlbmQgdGhlIGJ1aWxkLXRpbWUtcmVuZGVyZWQgZW1iZWRkZWQgJiMzNDtrZXJuZWwmIzM0OyBrZXlzIGhlcmUgc28KJiM0MzsJICogcGFyc2VfZWFybHlfcGFyYW0oKSBiZWxvdyBzZWVzIHRoZW0sIHVzaW5nIHRoZSBzYW1lIG9wdC1pbiBhcyB0aGUKJiM0MzsJICogcnVudGltZSBwYXJzZXIsIHBsdXMgdGhlIGJ1aWxkLXRpbWUgQ09ORklHX0JPT1RfQ09ORklHX0ZPUkNFLgomIzQzOwkgKi8KJiM0MzsJaWYgKGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoYm9vdF9jb21tYW5kX2xpbmUsIE5VTEwpIHx8CiYjNDM7CSAgICBJU19FTkFCTEVEKENPTkZJR19CT09UX0NPTkZJR19GT1JDRSkpCiYjNDM7CQl4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGJvb3RfY29tbWFuZF9saW5lLAomIzQzOwkJCQkJICAgICBDT01NQU5EX0xJTkVfU0laRSk7CiYjNDM7I2VuZGlmCiYjNDM7CiAJc3Ryc2NweShjb21tYW5kX2xpbmUsIGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7CiAJKmNtZGxpbmVfcCA9IGNvbW1hbmRfbGluZTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmggYi9pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaAppbmRleCAxYzdmM2I3NGZmY2YzOC4uZGVkYTUwNzUwMGRhMjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oCkBAIC0zMDgsNCAmIzQzOzMwOCwxOCBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhzaXplX3QgKnNpemUpCiB9CiAjZW5kaWYKIAomIzQzOy8qIEJvb3Rjb25maWcgb3B0LWluIGRldGVjdGlvbiwgc2hhcmVkIGJ5IHNldHVwX2FyY2goKSBhbmQgc2V0dXBfYm9vdF9jb25maWcoKSAqLwomIzQzOyNpZmRlZiBDT05GSUdfQk9PVF9DT05GSUcKJiM0Mztib29sIF9faW5pdCBib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkKGNvbnN0IGNoYXIgKmJvb3RfY21kbGluZSwgaW50ICplbmRfb2Zmc2V0KTsKJiM0MzsjZW5kaWYKJiM0MzsKJiM0MzsvKiBCdWlsZC10aW1lLXJlbmRlcmVkIGJvb3Rjb25maWcgY21kbGluZSBwcmVwZW5kZWQgaW4gc2V0dXBfYXJjaCgpICovCiYjNDM7I2lmZGVmIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJRwomIzQzO3ZvaWQgX19pbml0IHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSk7CiYjNDM7Ym9vbCBfX2luaXQgeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCh2b2lkKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpIHsgfQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9CiYjNDM7I2VuZGlmCiYjNDM7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCA1MjMwZDQ4NzliMWM4NC4uNTk4NjkwZWMzMTNhMjkgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9pbml0L0tjb25maWcKQEAgLTE1NjYsNiAmIzQzOzE1NjYsNDIgQEAgY29uZmlnIEJPT1RfQ09ORklHX0VNQkVEX0ZJTEUKIAkgIFRoaXMgYm9vdGNvbmZpZyB3aWxsIGJlIHVzZWQgaWYgdGhlcmUgaXMgbm8gaW5pdHJkIG9yIG5vIG90aGVyCiAJICBib290Y29uZmlnIGluIHRoZSBpbml0cmQuCiAKJiM0Mztjb25maWcgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJRwomIzQzOwlib29sCiYjNDM7CWhlbHAKJiM0MzsJICBTaWxlbnQgc3ltYm9sOyBubyBDIGNvZGUgcmVhZHMgaXQgZGlyZWN0bHkuIEFyY2hpdGVjdHVyZXMKJiM0MzsJICBzZWxlY3QgaXQgb25jZSB0aGVpciBzZXR1cF9hcmNoKCkgY2FsbHMKJiM0MzsJICB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKCkgYmVmb3JlIHBhcnNlX2Vhcmx5X3BhcmFtKCkuCiYjNDM7CSAgSXRzIG9ubHkgcm9sZSBpcyB0byBnYXRlIHRoZSB1c2VyLXZpc2libGUKJiM0MzsJICBDTURMSU5FX0ZST01fQk9PVENPTkZJRyBvcHRpb24gcGVyLWFyY2gsIHRoZSBzYW1lCiYjNDM7CSAgQVJDSF9TVVBQT1JUU18qIGlkaW9tIHVzZWQgYnkgQVJDSF9TVVBQT1JUU19DRkksIGV0Yy4KJiM0MzsKJiM0Mztjb25maWcgQ01ETElORV9GUk9NX0JPT1RDT05GSUcKJiM0MzsJYm9vbCAmIzM0O1JlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGFzIGtlcm5lbCBjbWRsaW5lIGF0IGJ1aWxkIHRpbWUmIzM0OwomIzQzOwlkZXBlbmRzIG9uIEJPT1RfQ09ORklHX0VNQkVEX0ZJTEUgIT0gJiMzNDsmIzM0OwomIzQzOwlkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUcKJiM0MzsJZGVwZW5kcyBvbiBDTURMSU5FID0gJiMzNDsmIzM0OwomIzQzOwlkZWZhdWx0IG4KJiM0MzsJaGVscAomIzQzOwkgIFJlbmRlciB0aGUgJiMzNDtrZXJuZWwmIzM0OyBzdWJ0cmVlIG9mIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIGZpbGUgaW50byBhCiYjNDM7CSAgZmxhdCBjbWRsaW5lIHN0cmluZyBhdCBrZXJuZWwgYnVpbGQgdGltZSBhbmQgcHJlcGVuZCBpdCB0bwomIzQzOwkgIGJvb3RfY29tbWFuZF9saW5lIGR1cmluZyBlYXJseSBhcmNoaXRlY3R1cmUgc2V0dXAuIFRoaXMgbWFrZXMKJiM0MzsJICBlYXJseV9wYXJhbSgpIGhhbmRsZXJzIChlLmcuIG1lbT0sIGVhcmx5Y29uPSwgbG9nbGV2ZWw9KSBzZWUgdGhlCiYjNDM7CSAgdmFsdWVzIHN1cHBsaWVkIHZpYSB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZy4KJiM0MzsKJiM0MzsJICBUaGUgcnVudGltZSBib290Y29uZmlnIHBhcnNlciBpcyB1bmFmZmVjdGVkLCBzbyB0cmVlLXN0cnVjdHVyZWQKJiM0MzsJICBjb25zdW1lcnMgc3VjaCBhcyBmdHJhY2UgYm9vdC10aW1lIHRyYWNpbmcga2VlcCB3b3JraW5nLgomIzQzOwomIzQzOwkgIE5vdGU6IHdoZW4gYW4gaW5pdHJkIGFsc28gY2FycmllcyBhIGJvb3Rjb25maWcsIGl0cyAmIzM0O2tlcm5lbCYjMzQ7CiYjNDM7CSAgc3VidHJlZSBpcyBzdGlsbCBwYXJzZWQgYXQgcnVudGltZSwgYnV0IHRoZSBlbWJlZGRlZCAmIzM0O2tlcm5lbCYjMzQ7CiYjNDM7CSAga2V5cyByZW1haW4gaW4gYm9vdF9jb21tYW5kX2xpbmUgZm9yIHBhcnNlX2Vhcmx5X3BhcmFtKCkgYW5kCiYjNDM7CSAgZW5kIHVwIGxhdGVyIHRoYW4gdGhlIGluaXRyZCBrZXlzIGluIHNhdmVkX2NvbW1hbmRfbGluZSwgc28KJiM0MzsJICBwYXJzZV9hcmdzKCkgbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBJZiB5b3UgbmVlZAomIzQzOwkgIGluaXRyZCB0byBvdmVycmlkZSBlbWJlZGRlZCBrZXJuZWwuKiBrZXlzLCBsZWF2ZSB0aGlzIG9wdGlvbgomIzQzOwkgIG9mZi4KJiM0MzsKJiM0MzsJICBJZiB1bnN1cmUsIHNheSBOLgomIzQzOwogY29uZmlnIENNRExJTkVfTE9HX1dSQVBfSURFQUxfTEVOCiAJaW50ICYjMzQ7TGVuZ3RoIHRvIHRyeSB0byB3cmFwIHRoZSBjbWRsaW5lIHdoZW4gbG9nZ2VkIGF0IGJvb3QmIzM0OwogCWRlZmF1bHQgMTAyMQpkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCBlMzYzMjMyYjQyOGI0Ny4uMzlhNTE4YTQ3MjQyMjMgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2luaXQvbWFpbi5jCkBAIC0zNTYsNDUgJiM0MzszNTYsMzMgQEAgc3RhdGljIGNoYXIgKiBfX2luaXQgeGJjX21ha2VfY21kbGluZShjb25zdCBjaGFyICprZXkpCiAJcmV0dXJuIG5ld19jbWRsaW5lOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBib290Y29uZmlnX3BhcmFtcyhjaGFyICpwYXJhbSwgY2hhciAqdmFsLAotCQkJCSAgICBjb25zdCBjaGFyICp1bnVzZWQsIHZvaWQgKmFyZykKLXsKLQlpZiAoc3RyY21wKHBhcmFtLCAmIzM0O2Jvb3Rjb25maWcmIzM0OykgPT0gMCkgewotCQlib290Y29uZmlnX2ZvdW5kID0gdHJ1ZTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0IHdhcm5fYm9vdGNvbmZpZyhjaGFyICpzdHIpCiB7Ci0JLyogVGhlICYjMzk7Ym9vdGNvbmZpZyYjMzk7IGhhcyBiZWVuIGhhbmRsZWQgYnkgYm9vdGNvbmZpZ19wYXJhbXMoKS4gKi8KJiM0MzsJLyogVGhlICYjMzk7Ym9vdGNvbmZpZyYjMzk7IG9wdGlvbiBpcyBoYW5kbGVkIGJ5IHNldHVwX2Jvb3RfY29uZmlnKCkuICovCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290X2NvbmZpZyh2b2lkKQogewotCXN0YXRpYyBjaGFyIHRtcF9jbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXSBfX2luaXRkYXRhOwogCWNvbnN0IGNoYXIgKm1zZywgKmRhdGE7Ci0JaW50IHBvcywgcmV0OwomIzQzOwlpbnQgcG9zLCByZXQsIG9mZnM7CiAJc2l6ZV90IHNpemU7Ci0JY2hhciAqZXJyOwomIzQzOwlib29sIGZyb21fZW1iZWRkZWQgPSBmYWxzZTsKIAogCS8qIEN1dCBvdXQgdGhlIGJvb3Rjb25maWcgZGF0YSBldmVuIGlmIHdlIGhhdmUgbm8gYm9vdGNvbmZpZyBvcHRpb24gKi8KIAlkYXRhID0gZ2V0X2Jvb3RfY29uZmlnX2Zyb21faW5pdHJkKCZhbXA7c2l6ZSk7CiAJLyogSWYgdGhlcmUgaXMgbm8gYm9vdGNvbmZpZyBpbiBpbml0cmQsIHRyeSBlbWJlZGRlZCBvbmUuICovCi0JaWYgKCFkYXRhKQomIzQzOwlpZiAoIWRhdGEpIHsKIAkJZGF0YSA9IHhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZygmYW1wO3NpemUpOwomIzQzOwkJZnJvbV9lbWJlZGRlZCA9IHRydWU7CiYjNDM7CX0KIAotCXN0cnNjcHkodG1wX2NtZGxpbmUsIGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7Ci0JZXJyID0gcGFyc2VfYXJncygmIzM0O2Jvb3Rjb25maWcmIzM0OywgdG1wX2NtZGxpbmUsIE5VTEwsIDAsIDAsIDAsIE5VTEwsCi0JCQkgYm9vdGNvbmZpZ19wYXJhbXMpOwotCi0JaWYgKElTX0VSUihlcnIpIHx8ICEoYm9vdGNvbmZpZ19mb3VuZCB8fCBJU19FTkFCTEVEKENPTkZJR19CT09UX0NPTkZJR19GT1JDRSkpKQomIzQzOwlib290Y29uZmlnX2ZvdW5kID0gYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZChib290X2NvbW1hbmRfbGluZSwgJmFtcDtvZmZzKTsKJiM0MzsJaWYgKCEoYm9vdGNvbmZpZ19mb3VuZCB8fCBJU19FTkFCTEVEKENPTkZJR19CT09UX0NPTkZJR19GT1JDRSkpKQogCQlyZXR1cm47CiAKLQkvKiBwYXJzZV9hcmdzKCkgc3RvcHMgYXQgdGhlIG5leHQgcGFyYW0gb2YgJiMzOTstLSYjMzk7IGFuZCByZXR1cm5zIGFuIGFkZHJlc3MgKi8KLQlpZiAoZXJyKQotCQlpbml0YXJnc19vZmZzID0gZXJyIC0gdG1wX2NtZGxpbmU7CiYjNDM7CS8qIE9mZnNldCBvZiB0aGUgaW5pdCBhcmd1bWVudHMgYWZ0ZXIgYSAmIzM0Oy0tJiMzNDssIGxvY2F0ZWQgYnkgdGhlIGhlbHBlci4gKi8KJiM0MzsJaW5pdGFyZ3Nfb2ZmcyA9IG9mZnM7CiAKIAlpZiAoIWRhdGEpIHsKIAkJLyogSWYgdXNlciBpbnRlbmRlZCB0byB1c2UgYm9vdGNvbmZpZywgc2hvdyBhbiBlcnJvciBsZXZlbCBtZXNzYWdlICovCkBAIC00MjEsOCAmIzQzOzQwOSwyNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfYm9vdF9jb25maWcodm9pZCkKIAl9IGVsc2UgewogCQl4YmNfZ2V0X2luZm8oJmFtcDtyZXQsIE5VTEwpOwogCQlwcl9pbmZvKCYjMzQ7TG9hZCBib290Y29uZmlnOiAlbGQgYnl0ZXMgJWQgbm9kZXNcbiYjMzQ7LCAobG9uZylzaXplLCByZXQpOwotCQkvKiBrZXlzIHN0YXJ0aW5nIHdpdGggJiMzNDtrZXJuZWwuJiMzNDsgYXJlIHBhc3NlZCB2aWEgY21kbGluZSAqLwotCQlleHRyYV9jb21tYW5kX2xpbmUgPSB4YmNfbWFrZV9jbWRsaW5lKCYjMzQ7a2VybmVsJiMzNDspOwomIzQzOwkJLyoKJiM0MzsJCSAqIGtleXMgc3RhcnRpbmcgd2l0aCAmIzM0O2tlcm5lbC4mIzM0OyBhcmUgcGFzc2VkIHZpYSBjbWRsaW5lLiBXaGVuCiYjNDM7CQkgKiB0aGlzIGJvb3Rjb25maWcgY2FtZSBmcm9tIHRoZSBlbWJlZGRlZCBzb3VyY2UgYW5kCiYjNDM7CQkgKiBzZXR1cF9hcmNoKCkgYWxyZWFkeSBwcmVwZW5kZWQgdGhlIHJlbmRlcmVkICYjMzQ7a2VybmVsJiMzNDsgc3VidHJlZQomIzQzOwkJICogdG8gYm9vdF9jb21tYW5kX2xpbmUsIHJlbmRlcmluZyBhZ2FpbiBoZXJlIHdvdWxkIGR1cGxpY2F0ZQomIzQzOwkJICogdGhlIGtleXMgaW4gc2F2ZWRfY29tbWFuZF9saW5lIGFuZCBtYWtlIGFjY3VtdWxhdGluZyBoYW5kbGVycwomIzQzOwkJICogKGNvbnNvbGU9LCBlYXJseWNvbj0sIC4uLikgcmUtcmVnaXN0ZXIgdGhlIHNhbWUgdmFsdWUuIFNraXAKJiM0MzsJCSAqIG9ubHkgd2hlbiB0aGUgcHJlcGVuZCByZWFsbHkgaGFwcGVuZWQuCiYjNDM7CQkgKgomIzQzOwkJICogT24gYXJjaGVzIHRoYXQgZG8gbm90IHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHLAomIzQzOwkJICogQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHIGlzIHVuc2VsZWN0YWJsZSBhbmQKJiM0MzsJCSAqIHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQoKSBjb2xsYXBzZXMgdG8gYSBzdHViIHJldHVybmluZwomIzQzOwkJICogZmFsc2UsIHNvIHRoaXMgcGF0aCBzdGlsbCBydW5zIGFuZCB0aGUgZW1iZWRkZWQgJiMzNDtrZXJuZWwmIzM0OwomIzQzOwkJICoga2V5cyByZWFjaCB0aGUgY21kbGluZSB2aWEgdGhlIHJ1bnRpbWUgcGFyc2VyIGV4YWN0bHkgYXMKJiM0MzsJCSAqIGJlZm9yZSB0aGlzIHNlcmllcy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFmcm9tX2VtYmVkZGVkIHx8ICF4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkpCiYjNDM7CQkJZXh0cmFfY29tbWFuZF9saW5lID0geGJjX21ha2VfY21kbGluZSgmIzM0O2tlcm5lbCYjMzQ7KTsKIAkJLyogQWxzbywgJiMzNDtpbml0LiYjMzQ7IGtleXMgYXJlIGluaXQgYXJndW1lbnRzICovCiAJCWV4dHJhX2luaXRfYXJncyA9IHhiY19tYWtlX2NtZGxpbmUoJiMzNDtpbml0JiMzNDspOwogCX0KZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQppbmRleCA3Zjc1Y2M2ZWRmOTRhZi4uNGNjZGNlMmZkNWU1YjAgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9saWIvTWFrZWZpbGUKQEAgLTI3Myw2ICYjNDM7MjczLDIyIEBAIGZpbGVjaGtfZGVmYmNvbmYgPSBjYXQgJChvciAkKHJlYWwtcHJlcmVxcyksIC9kZXYvbnVsbCkKICQob2JqKS9kZWZhdWx0LmJjb25mOiAkKENPTkZJR19CT09UX0NPTkZJR19FTUJFRF9GSUxFKSBGT1JDRQogCSQoY2FsbCBmaWxlY2hrLGRlZmJjb25mKQogCiYjNDM7b2JqLSQoQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHKSAmIzQzOz0gZW1iZWRkZWQtY21kbGluZS5vCiYjNDM7JChvYmopL2VtYmVkZGVkLWNtZGxpbmUubzogJChvYmopL2VtYmVkZGVkX2NtZGxpbmUuYmluCiYjNDM7CiYjNDM7IyBSZW5kZXIgdGhlIGJvb3Rjb25maWcgJiMzNDtrZXJuZWwmIzM0OyBzdWJ0cmVlIHRvIGEgZmxhdCBjbWRsaW5lIHN0cmluZyB1c2luZwomIzQzOyMgdGhlIHVzZXJzcGFjZSB0b29scy9ib290Y29uZmlnIHBhcnNlciAoLUMgbW9kZSkuIFRoZSBydW50aW1lIHByZXBlbmQKJiM0MzsjIGhlbHBlciBlbmZvcmNlcyBDT01NQU5EX0xJTkVfU0laRSBhdCBib290LCBzbyBubyBidWlsZC10aW1lIHNpemUKJiM0MzsjIGNoZWNrIGlzIHBlcmZvcm1lZCBoZXJlIChDT01NQU5EX0xJTkVfU0laRSBpcyBhbiBhcmNoIGhlYWRlcgomIzQzOyMgY29uc3RhbnQsIG5vdCBhIEtjb25maWcgdmFsdWUpLgomIzQzO3F1aWV0X2NtZF9yZW5kZXJfY21kbGluZSA9IEJDT05GMkMgJEAKJiM0MzsgICAgICBjbWRfcmVuZGVyX2NtZGxpbmUgPSBcCiYjNDM7CSQob2JqdHJlZSkvdG9vbHMvYm9vdGNvbmZpZy9ib290Y29uZmlnIC1DICQmbHQ7ICZndDsgJEAKJiM0MzsKJiM0Mzt0YXJnZXRzICYjNDM7PSBlbWJlZGRlZF9jbWRsaW5lLmJpbgomIzQzOyQob2JqKS9lbWJlZGRlZF9jbWRsaW5lLmJpbjogJChvYmopL2RlZmF1bHQuYmNvbmYgJChvYmp0cmVlKS90b29scy9ib290Y29uZmlnL2Jvb3Rjb25maWcgRk9SQ0UKJiM0MzsJJChjYWxsIGlmX2NoYW5nZWQscmVuZGVyX2NtZGxpbmUpCiYjNDM7CiBvYmotJChDT05GSUdfUkJUUkVFX1RFU1QpICYjNDM7PSByYnRyZWVfdGVzdC5vCiBvYmotJChDT05GSUdfSU5URVJWQUxfVFJFRV9URVNUKSAmIzQzOz0gaW50ZXJ2YWxfdHJlZV90ZXN0Lm8KIApkaWZmIC0tZ2l0IGEvbGliL2Jvb3Rjb25maWcuYyBiL2xpYi9ib290Y29uZmlnLmMKaW5kZXggZjQ0NWI3NzAzZmRkOTYuLjg5Yzg4ZTM1OTE3OWYwIDEwMDY0NAotLS0gYS9saWIvYm9vdGNvbmZpZy5jCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9ib290Y29uZmlnLmMKQEAgLTE5LDkgJiM0MzsxOSwxMyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2Vycm5vLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2FjaGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb21waWxlci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZXBhcmFtLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3ByaW50ay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwcmludGYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZW1ibG9jay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDthc20vc2V0dXAuaCZndDsJCS8qIENPTU1BTkRfTElORV9TSVpFICovCiAKICNpZmRlZiBDT05GSUdfQk9PVF9DT05GSUdfRU1CRUQKIC8qIGVtYmVkZGVkX2Jvb3Rjb25maWdfZGF0YSBpcyBkZWZpbmVkIGluIGJvb3Rjb25maWctZGF0YS5TICovCkBAIC0zNCw3ICYjNDM7MzgsMTI5IEBAIGNvbnN0IGNoYXIgKiBfX2luaXQgeGJjX2dldF9lbWJlZGRlZF9ib290Y29uZmlnKHNpemVfdCAqc2l6ZSkKIAlyZXR1cm4gKCpzaXplKSA/IGVtYmVkZGVkX2Jvb3Rjb25maWdfZGF0YSA6IE5VTEw7CiB9CiAjZW5kaWYKLSNlbmRpZgomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcKJiM0MzsvKiBlbWJlZGRlZF9rZXJuZWxfY21kbGluZSBpcyBkZWZpbmVkIGluIGVtYmVkZGVkLWNtZGxpbmUuUyAqLwomIzQzO2V4dGVybiBfX3Zpc2libGUgY29uc3QgY2hhciBlbWJlZGRlZF9rZXJuZWxfY21kbGluZVtdOwomIzQzO2V4dGVybiBfX3Zpc2libGUgY29uc3QgY2hhciBlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmRbXTsKJiM0MzsKJiM0MzsvKiBTZXQgb25jZSB0aGUgZW1iZWRkZWQgY21kbGluZSBoYXMgYWN0dWFsbHkgYmVlbiBwcmVwZW5kZWQuICovCiYjNDM7c3RhdGljIGJvb2wgeGJjX2NtZGxpbmVfYXBwbGllZCBfX2luaXRkYXRhOwomIzQzOwomIzQzOy8qCiYjNDM7ICogc3RyX3ByZXBlbmQoKSAtIFByZXBlbmQgQHNyYyBpbiBmcm9udCBvZiB0aGUgc3RyaW5nIGluIEBkc3QsIGluIHBsYWNlCiYjNDM7ICogQGRzdDogTlVMLXRlcm1pbmF0ZWQgZGVzdGluYXRpb24gYnVmZmVyLCBjdXJyZW50bHkgQGRzdF9sZW4gYnl0ZXMgbG9uZwomIzQzOyAqIEBkc3RfbGVuOiBsZW5ndGggb2YgdGhlIGN1cnJlbnQgQGRzdCBzdHJpbmcgKGV4Y2x1ZGluZyBpdHMgTlVMKQomIzQzOyAqIEBzcmM6IGJ5dGVzIHRvIHByZXBlbmQgKG5vdCBOVUwtdGVybWluYXRlZCkKJiM0MzsgKiBAc3JjX2xlbjogbnVtYmVyIG9mIGJ5dGVzIGZyb20gQHNyYyB0byBwcmVwZW5kCiYjNDM7ICoKJiM0MzsgKiBUaGUgY2FsbGVyIG11c3QgZ3VhcmFudGVlIEBkc3QgaGFzIHJvb20gZm9yIHNyY19sZW4gJiM0MzsgZHN0X2xlbiAmIzQzOyAxIGJ5dGVzLgomIzQzOyAqIE1vdmluZyBkc3RfbGVuICYjNDM7IDEgYnl0ZXMgY2FycmllcyBAZHN0JiMzOTtzIE5VTCB0ZXJtaW5hdG9yIHRvbywgc28gYW4gZW1wdHkKJiM0MzsgKiBAZHN0IG5lZWRzIG5vIHNwZWNpYWwgY2FzZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBfX2luaXQgc3RyX3ByZXBlbmQoY2hhciAqZHN0LCBzaXplX3QgZHN0X2xlbiwKJiM0MzsJCQkgICAgICAgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjX2xlbikKJiM0Mzt7CiYjNDM7CW1lbW1vdmUoZHN0ICYjNDM7IHNyY19sZW4sIGRzdCwgZHN0X2xlbiAmIzQzOyAxKTsKJiM0MzsJbWVtY3B5KGRzdCwgc3JjLCBzcmNfbGVuKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIC0gUHJlcGVuZCBlbWJlZGRlZCBib290Y29uZmlnIGNtZGxpbmUKJiM0MzsgKiBAZHN0OiBjbWRsaW5lIGJ1ZmZlciB0byBwcmVwZW5kIGludG8gKG11c3QgYWxyZWFkeSBjb250YWluIGEgTlVMIGJ5dGUpCiYjNDM7ICogQHNpemU6IHRvdGFsIGNhcGFjaXR5IG9mIEBkc3QgaW4gYnl0ZXMKJiM0MzsgKgomIzQzOyAqIFByZXBlbmQgdGhlIGJ1aWxkLXRpbWUtcmVuZGVyZWQgJiMzNDtrZXJuZWwmIzM0OyBzdWJ0cmVlIG9mIHRoZSBlbWJlZGRlZAomIzQzOyAqIGJvb3Rjb25maWcgdG8gQGRzdC4gVGhlIHJlbmRlcmVkIHN0cmluZyBhbHJlYWR5IGVuZHMgd2l0aCBhIHNpbmdsZQomIzQzOyAqIHNwYWNlICh0aGUgeGJjX3NucHJpbnRfY21kbGluZSgpIGludmFyaWFudCksIHdoaWNoIHNlcnZlcyBhcyB0aGUKJiM0MzsgKiBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgZW1iZWRkZWQga2V5cyBhbmQgYW55IGV4aXN0aW5nIGNvbnRlbnQgb2YgQGRzdC4KJiM0MzsgKiBPbiBvdmVyZmxvdywgbG9nIGFuIGVycm9yIGFuZCBsZWF2ZSBAZHN0IHVudG91Y2hlZCByYXRoZXIgdGhhbgomIzQzOyAqIHNpbGVudGx5IHRydW5jYXRpbmc6IGJvb3Rpbmcgd2l0aG91dCB0aGUgZW1iZWRkZWQgdmFsdWVzIGlzIGJldHRlcgomIzQzOyAqIHRoYW4gcmVmdXNpbmcgdG8gYm9vdCwgYW5kIHRoZSBlcnJvciBtZXNzYWdlIHRlbGxzIHRoZSB1c2VyIHdoeQomIzQzOyAqIHRoZWlyIGVtYmVkZGVkIGtleXMgYXJlIG1pc3NpbmcuCiYjNDM7ICoKJiM0MzsgKiBJbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBzZXR1cF9hcmNoKCkgYmVmb3JlIHBhcnNlX2Vhcmx5X3BhcmFtKCkgc28KJiM0MzsgKiB0aGF0IGVhcmx5X3BhcmFtKCkgaGFuZGxlcnMgc2VlIHRoZSBlbWJlZGRlZCB2YWx1ZXMuCiYjNDM7ICovCiYjNDM7dm9pZCBfX2luaXQgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShjaGFyICpkc3QsIHNpemVfdCBzaXplKQomIzQzO3sKJiM0MzsJc2l6ZV90IGVtYmVkX2xlbiA9IGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZCAtIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lOwomIzQzOwlzaXplX3QgZHN0X2xlbjsKJiM0MzsKJiM0MzsJaWYgKCFzaXplIHx8IGVtYmVkX2xlbiAmbHQ7PSAxKQkvKiB0cmFpbGluZyBOVUwgb25seSAqLwomIzQzOwkJcmV0dXJuOwomIzQzOwllbWJlZF9sZW4tLTsJCQkvKiBleGNsdWRlIHRyYWlsaW5nIE5VTCBieXRlICovCiYjNDM7CiYjNDM7CWRzdF9sZW4gPSBzdHJubGVuKGRzdCwgc2l6ZSk7CiYjNDM7CWlmIChlbWJlZF9sZW4gJiM0MzsgZHN0X2xlbiAmIzQzOyAxICZndDsgc2l6ZSkgewomIzQzOwkJcHJfZXJyKCYjMzQ7ZW1iZWRkZWQgYm9vdGNvbmZpZyBjbWRsaW5lICglenUgYnl0ZXMpIGRvZXMgbm90IGZpdCBpbiBDT01NQU5EX0xJTkVfU0laRSB3aXRoICV6dSBieXRlcyBhbHJlYWR5IHVzZWQ7IGlnbm9yaW5nIGVtYmVkZGVkIHZhbHVlc1xuJiMzNDssCiYjNDM7CQkgICAgICAgZW1iZWRfbGVuLCBkc3RfbGVuKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlzdHJfcHJlcGVuZChkc3QsIGRzdF9sZW4sIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lLCBlbWJlZF9sZW4pOwomIzQzOwl4YmNfY21kbGluZV9hcHBsaWVkID0gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCgpIC0gRGlkIHRoZSBlbWJlZGRlZCBjbWRsaW5lIGdldCBwcmVwZW5kZWQ/CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm4gdHJ1ZSBpZiB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKCkgYWN0dWFsbHkgcHJlcGVuZGVkIHRoZQomIzQzOyAqIGVtYmVkZGVkICYjMzQ7a2VybmVsJiMzNDsgc3VidHJlZS4gc2V0dXBfYm9vdF9jb25maWcoKSB1c2VzIHRoaXMgdG8gYXZvaWQKJiM0MzsgKiByZW5kZXJpbmcgdGhlIHNhbWUga2V5cyBhIHNlY29uZCB0aW1lLgomIzQzOyAqLwomIzQzO2Jvb2wgX19pbml0IHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiB4YmNfY21kbGluZV9hcHBsaWVkOwomIzQzO30KJiM0MzsjZW5kaWYJLyogQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHICovCiYjNDM7CiYjNDM7LyogcGFyc2VfYXJncygpIGNhbGxiYWNrOiBmbGFnIHdoZW4gdGhlICYjMzQ7Ym9vdGNvbmZpZyYjMzQ7IHBhcmFtZXRlciBpcyBwcmVzZW50LiAqLwomIzQzO3N0YXRpYyBpbnQgX19pbml0IGJvb3Rjb25maWdfb3B0aW4oY2hhciAqcGFyYW0sIGNoYXIgKnZhbCwKJiM0MzsJCQkJICAgY29uc3QgY2hhciAqdW51c2VkLCB2b2lkICphcmcpCiYjNDM7ewomIzQzOwlpZiAoIXN0cmNtcChwYXJhbSwgJiMzNDtib290Y29uZmlnJiMzNDspKQomIzQzOwkJKihib29sICopYXJnID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoKSAtIFdhcyAmIzM0O2Jvb3Rjb25maWcmIzM0OyBwYXNzZWQgb24gdGhlIGNtZGxpbmU/CiYjNDM7ICogQGJvb3RfY21kbGluZToga2VybmVsIGNvbW1hbmQgbGluZSB0byBpbnNwZWN0IChub3QgbW9kaWZpZWQpCiYjNDM7ICogQGVuZF9vZmZzZXQ6IGlmIG5vbi1OVUxMLCBzZXQgdG8gdGhlIG9mZnNldCBvZiB0aGUgaW5pdCBhcmd1bWVudHMgdGhhdAomIzQzOyAqCQlmb2xsb3cgYSAmIzM0Oy0tJiMzNDsgc2VwYXJhdG9yLCBvciAwIHdoZW4gdGhlcmUgaXMgbm9uZQomIzQzOyAqCiYjNDM7ICogUGFyc2UgYSBwcml2YXRlIGNvcHkgb2YgQGJvb3RfY21kbGluZSAocGFyc2VfYXJncygpIGlzIGRlc3RydWN0aXZlKSBhbmQKJiM0MzsgKiByZXBvcnQgd2hldGhlciAmIzM0O2Jvb3Rjb25maWcmIzM0OyBpcyBwcmVzZW50IGJlZm9yZSB0aGUgJiMzNDstLSYjMzQ7IHNlcGFyYXRvci4KJiM0MzsgKiBzZXR1cF9hcmNoKCkgdXNlcyB0aGlzIHRvIGdhdGUgcHJlcGVuZGluZyB0aGUgYnVpbGQtdGltZSBlbWJlZGRlZCBjbWRsaW5lOwomIzQzOyAqIHNldHVwX2Jvb3RfY29uZmlnKCkgdXNlcyBpdCBmb3IgdGhlIHJ1bnRpbWUgb3B0LWluIGFuZCB0byBsb2NhdGUgdGhlIGluaXQKJiM0MzsgKiBhcmd1bWVudHMgdmlhIEBlbmRfb2Zmc2V0LiBTaGFyaW5nIG9uZSBwYXJzZXIga2VlcHMgdGhlIGVhcmx5IGFuZCBsYXRlCiYjNDM7ICogcGF0aHMgYWdyZWVpbmcgb24gd2hhdCBjb3VudHMgYXMgb3B0LWluLiBDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0UgaXMgbm90CiYjNDM7ICogZm9sZGVkIGluIGhlcmU7IGNhbGxlcnMgYXBwbHkgaXQgd2hlcmUgdGhleSBuZWVkIGl0LgomIzQzOyAqLwomIzQzO2Jvb2wgX19pbml0IGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoY29uc3QgY2hhciAqYm9vdF9jbWRsaW5lLCBpbnQgKmVuZF9vZmZzZXQpCiYjNDM7ewomIzQzOwlzdGF0aWMgY2hhciB0bXBfY21kbGluZVtDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTsKJiM0MzsJYm9vbCBmb3VuZCA9IGZhbHNlOwomIzQzOwljaGFyICplcnI7CiYjNDM7CiYjNDM7CWlmIChlbmRfb2Zmc2V0KQomIzQzOwkJKmVuZF9vZmZzZXQgPSAwOwomIzQzOwomIzQzOwlzdHJzY3B5KHRtcF9jbWRsaW5lLCBib290X2NtZGxpbmUsIENPTU1BTkRfTElORV9TSVpFKTsKJiM0MzsJZXJyID0gcGFyc2VfYXJncygmIzM0O2Jvb3Rjb25maWcmIzM0OywgdG1wX2NtZGxpbmUsIE5VTEwsIDAsIDAsIDAsCiYjNDM7CQkJICZhbXA7Zm91bmQsIGJvb3Rjb25maWdfb3B0aW4pOwomIzQzOwlpZiAoSVNfRVJSKGVycikpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CS8qIHBhcnNlX2FyZ3MoKSBzdG9wcyBhdCAmIzM0Oy0tJiMzNDsgYW5kIHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHJlc3QuICovCiYjNDM7CWlmIChlbmRfb2Zmc2V0ICZhbXA7JmFtcDsgZXJyKQomIzQzOwkJKmVuZF9vZmZzZXQgPSBlcnIgLSB0bXBfY21kbGluZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGZvdW5kOwomIzQzO30KJiM0MzsKJiM0MzsjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCiAvKgogICogRXh0cmEgQm9vdCBDb25maWcgKFhCQykgaXMgZ2l2ZW4gYXMgdHJlZS1zdHJ1Y3R1cmVkIGFzY2lpIHRleHQgb2YKQEAgLTQyNywxMSAmIzQzOzU1MywzMCBAQCBzdGF0aWMgY2hhciB4YmNfbmFtZWJ1ZltYQkNfS0VZTEVOX01BWF0gX19pbml0ZGF0YTsKIGludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpCiB7CiAJc3RydWN0IHhiY19ub2RlICprbm9kZSwgKnZub2RlOwotCWNoYXIgKmVuZCA9IGJ1ZiAmIzQzOyBzaXplOwogCWNvbnN0IGNoYXIgKnZhbCwgKnE7CiYjNDM7CXNpemVfdCBsZW4gPSAwOwogCWludCByZXQ7CiAKJiM0MzsJLyoKJiM0MzsJICogVHJhY2sgdGhlIHJ1bm5pbmcgd3JpdHRlbiBsZW5ndGggcmF0aGVyIHRoYW4gYWR2YW5jaW5nIEBidWYsIHNvIHdlCiYjNDM7CSAqIG5ldmVyIGZvcm0gJiMzNDtidWYgJiM0Mzsgc2l6ZSYjMzQ7IG9yICYjMzQ7YnVmICYjNDM7PSByZXQmIzM0OyB3aGlsZSBAYnVmIGlzIE5VTEwgKHRoZQomIzQzOwkgKiBzaXplLXByb2JlIGNhbGwgcGFzc2VzIGJ1Zj1OVUxMLCBzaXplPTApLiBOVUxMIHBvaW50ZXIgYXJpdGhtZXRpYwomIzQzOwkgKiBpcyB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIHRyaXBzIGhvc3QgVUJTYW4gLyBGT1JUSUZZX1NPVVJDRSB3aGVuCiYjNDM7CSAqIHRoaXMgcmVuZGVyZXIgcnVucyBhdCBrZXJuZWwgYnVpbGQgdGltZS4gc25wcmludGYoTlVMTCwgMCwgLi4uKQomIzQzOwkgKiBpdHNlbGYgaXMgd2VsbCBkZWZpbmVkIGFuZCByZXR1cm5zIHRoZSB3b3VsZC1iZSBsZW5ndGguCiYjNDM7CSAqLwogCXhiY19ub2RlX2Zvcl9lYWNoX2tleV92YWx1ZShyb290LCBrbm9kZSwgdmFsKSB7CiYjNDM7CQkvKgomIzQzOwkJICogQW4gZW1wdHkgb3IgdmFsdWUtb25seSBAcm9vdCAoZS5nLiAmIzM0O2tlcm5lbCB7fSYjMzQ7IG9yCiYjNDM7CQkgKiAmIzM0O2tlcm5lbCA9IHgmIzM0OywgcG9zc2libHkgYWxvbmdzaWRlICYjMzQ7a2VybmVsLmZvbyA9IGJhciYjMzQ7KQomIzQzOwkJICogeWllbGRzIEByb290IGl0c2VsZiBoZXJlLiBTa2lwIGl0OiBjb21wb3NpbmcgYSBrZXkgZm9yIGl0CiYjNDM7CQkgKiB3b3VsZCBmYWlsIHdpdGggLUVJTlZBTCwgeWV0IGFueSByZWFsIGRlc2NlbmRhbnQga2V5cyBtdXN0CiYjNDM7CQkgKiBzdGlsbCBiZSByZW5kZXJlZC4gQW4gZW50aXJlbHkgZW1wdHkgc3VidHJlZSB0aGVuIHJlbmRlcnMKJiM0MzsJCSAqIG5vdGhpbmcgYW5kIHJldHVybnMgMCByYXRoZXIgdGhhbiBhbiBlcnJvci4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGtub2RlID09IHJvb3QpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiAJCXJldCA9IHhiY19ub2RlX2NvbXBvc2Vfa2V5X2FmdGVyKHJvb3QsIGtub2RlLAogCQkJCQl4YmNfbmFtZWJ1ZiwgWEJDX0tFWUxFTl9NQVgpOwogCQlpZiAocmV0ICZsdDsgMCkKQEAgLTQzOSwxMCAmIzQzOzU4NCwxMSBAQCBpbnQgX19pbml0IHhiY19zbnByaW50X2NtZGxpbmUoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSwgc3RydWN0IHhiY19ub2RlICpyb290KQogCiAJCXZub2RlID0geGJjX25vZGVfZ2V0X2NoaWxkKGtub2RlKTsKIAkJaWYgKCF2bm9kZSkgewotCQkJcmV0ID0gc25wcmludGYoYnVmLCByZXN0KGJ1ZiwgZW5kKSwgJiMzNDslcyAmIzM0OywgeGJjX25hbWVidWYpOwomIzQzOwkJCXJldCA9IHNucHJpbnRmKGJ1ZiA/IGJ1ZiAmIzQzOyBsZW4gOiBOVUxMLCByZXN0KGxlbiwgc2l6ZSksCiYjNDM7CQkJCSAgICAgICAmIzM0OyVzICYjMzQ7LCB4YmNfbmFtZWJ1Zik7CiAJCQlpZiAocmV0ICZsdDsgMCkKIAkJCQlyZXR1cm4gcmV0OwotCQkJYnVmICYjNDM7PSByZXQ7CiYjNDM7CQkJbGVuICYjNDM7PSByZXQ7CiAJCQljb250aW51ZTsKIAkJfQogCQl4YmNfYXJyYXlfZm9yX2VhY2hfdmFsdWUodm5vZGUsIHZhbCkgewpAQCAtNDUyLDE1ICYjNDM7NTk4LDE1IEBAIGludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpCiAJCQkgKiB3aGl0ZXNwYWNlLgogCQkJICovCiAJCQlxID0gc3RycGJyayh2YWwsICYjMzQ7IFx0XHJcbiYjMzQ7KSA/ICYjMzQ7XCYjMzQ7JiMzNDsgOiAmIzM0OyYjMzQ7OwotCQkJcmV0ID0gc25wcmludGYoYnVmLCByZXN0KGJ1ZiwgZW5kKSwgJiMzNDslcz0lcyVzJXMgJiMzNDssCi0JCQkJICAgICAgIHhiY19uYW1lYnVmLCBxLCB2YWwsIHEpOwomIzQzOwkJCXJldCA9IHNucHJpbnRmKGJ1ZiA/IGJ1ZiAmIzQzOyBsZW4gOiBOVUxMLCByZXN0KGxlbiwgc2l6ZSksCiYjNDM7CQkJCSAgICAgICAmIzM0OyVzPSVzJXMlcyAmIzM0OywgeGJjX25hbWVidWYsIHEsIHZhbCwgcSk7CiAJCQlpZiAocmV0ICZsdDsgMCkKIAkJCQlyZXR1cm4gcmV0OwotCQkJYnVmICYjNDM7PSByZXQ7CiYjNDM7CQkJbGVuICYjNDM7PSByZXQ7CiAJCX0KIAl9CiAKLQlyZXR1cm4gYnVmIC0gKGVuZCAtIHNpemUpOwomIzQzOwlyZXR1cm4gbGVuOwogfQogI3VuZGVmIHJlc3QKIApkaWZmIC0tZ2l0IGEvbGliL2VtYmVkZGVkLWNtZGxpbmUuUyBiL2xpYi9lbWJlZGRlZC1jbWRsaW5lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJkYTgxYjRhNDJiZWFmCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvbGliL2VtYmVkZGVkLWNtZGxpbmUuUwpAQCAtMCwwICYjNDM7MSwxNiBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyoKJiM0MzsgKiBFbWJlZCB0aGUgYnVpbGQtdGltZS1yZW5kZXJlZCBib290Y29uZmlnICYjMzQ7a2VybmVsJiMzNDsgc3VidHJlZSBhcyBhIGZsYXQKJiM0MzsgKiBjbWRsaW5lIHN0cmluZy4gc2V0dXBfYXJjaCgpIHByZXBlbmRzIHRoaXMgdG8gYm9vdF9jb21tYW5kX2xpbmUgb24KJiM0MzsgKiBhcmNoaXRlY3R1cmVzIHRoYXQgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUcuCiYjNDM7ICoKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgQnJlbm8gTGVpdGFvICZsdDtsZWl0YW9AZGViaWFuLm9yZyZndDsKJiM0MzsgKi8KJiM0MzsJLnNlY3Rpb24gLmluaXQucm9kYXRhLmVtYmVkX2NtZGxpbmUsICYjMzQ7YSYjMzQ7LCAlcHJvZ2JpdHMKJiM0MzsJLmdsb2JhbCBlbWJlZGRlZF9rZXJuZWxfY21kbGluZQomIzQzO2VtYmVkZGVkX2tlcm5lbF9jbWRsaW5lOgomIzQzOwkuaW5jYmluICYjMzQ7bGliL2VtYmVkZGVkX2NtZGxpbmUuYmluJiMzNDsKJiM0MzsJLmJ5dGUgMAomIzQzOwkuZ2xvYmFsIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZAomIzQzO2VtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZDoKZGlmZiAtLWdpdCBhL3Rvb2xzL2Jvb3Rjb25maWcvTWFrZWZpbGUgYi90b29scy9ib290Y29uZmlnL01ha2VmaWxlCmluZGV4IDkwZWI0N2M5ZDhkZTY3Li4zY2I4MDY2ZDUxNDFiYiAxMDA2NDQKLS0tIGEvdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi90b29scy9ib290Y29uZmlnL01ha2VmaWxlCkBAIC0xNSw3ICYjNDM7MTUsNyBAQCBvdmVycmlkZSBDRkxBR1MgJiM0Mzs9IC1XYWxsIC1nIC1JJChDVVJESVIpL2luY2x1ZGUKIEFMTF9UQVJHRVRTIDo9IGJvb3Rjb25maWcKIEFMTF9QUk9HUkFNUyA6PSAkKHBhdHN1YnN0ICUsJChPVVRQVVQpJSwkKEFMTF9UQVJHRVRTKSkKIAotYWxsOiAkKEFMTF9QUk9HUkFNUykgdGVzdAomIzQzO2FsbDogJChBTExfUFJPR1JBTVMpCiAKICQoT1VUUFVUKWJvb3Rjb25maWc6IG1haW4uYyBpbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaCAkKExJQlNSQykKIAkkKENDKSAkKGZpbHRlciAlLmMsJF4pICQoQ0ZMQUdTKSAkKExERkxBR1MpIC1vICRACkBAIC0yNyw0ICYjNDM7MjcsNCBAQCBpbnN0YWxsOiAkKEFMTF9QUk9HUkFNUykKIAlpbnN0YWxsICQoT1VUUFVUKWJvb3Rjb25maWcgJChERVNURElSKSQoYmluZGlyKQogCiBjbGVhbjoKLQkkKFJNKSAtZiAkKE9VVFBVVCkqLm8gJChBTExfUFJPR1JBTVMpCiYjNDM7CXJtIC1mICQoT1VUUFVUKSoubyAkKEFMTF9QUk9HUkFNUykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMTg6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyODEKCQkJCQkJCW91dHB1dDogMTMyCgkJCQkJCQl0aG91Z2h0czogMTY2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzOiBgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHYCoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgaW1wbGVtZW50cyBgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHYC4gRXNzZW50aWFsbHksIGl0IGNvbXBpbGVzIGEgYm9vdGNvbmZpZyBzdWJ0cmVlIGludG8gYSBmbGF0IGNvbW1hbmQgbGluZSBzdHJpbmcgYW5kIHByZXBlbmRzIGl0IGR1cmluZyB0aGUgZWFybHkgYXJjaGl0ZWN0dXJlIHNldHVwLiBUaGlzIGFsbG93cyBlYXJseSBwYXJhbWV0ZXIgaGFuZGxlcnMgdG8gc2VlIHZhbHVlcyBkZWZpbmVkIGluIHRoZSBlbWJlZGRlZCBga2VybmVsYCBzdWJ0cmVlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGV2ZW4gZnV6emFibGUsIG9yIGlmIGl0JiMzOTtzIGRlYWQgY29kZSBhZnRlciB0aGUgYnVpbGQuCgpJIHNlZSB0aGF0IHRoZSBjaGFuZ2VzIGluY2x1ZGUgbW9kaWZpY2F0aW9ucyB0byBgYXJjaC94ODYva2VybmVsL3NldHVwLmNgICh0byBwcmVwZW5kIHRoZSBjbWRsaW5lKSwgYGluaXQvbWFpbi5jYCAoZm9yIGJvb3Rjb25maWcgaGFuZGxpbmcpLCBhZGRpdGlvbiBvZiBgbGliL2VtYmVkZGVkLWNtZGxpbmUuU2AgYW5kIG1vZGlmaWNhdGlvbnMgdG8gYGxpYi9ib290Y29uZmlnLmNgLCBhbmQgYSBuZXcgS2NvbmZpZyBvcHRpb24uCgpJcyB0aGlzIGNvZGUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nIHdpdGggc29tZXRoaW5nIGxpa2UgU3l6a2FsbGVyPyBUaGUgY29tbWFuZCBsaW5lIGNvbnN0cnVjdGlvbiBhdCBib290IHRpbWUgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCB0YXJnZXQuIEhvd2V2ZXIsIGl0JiMzOTtzICp2ZXJ5KiBlYXJseSBpbiB0aGUgYm9vdCBwcm9jZXNzLiBTeXprYWxsZXIgaXMgZ3JlYXQsIGJ1dCBpdCB0eXBpY2FsbHkgaGl0cyB0aGUgc3lzY2FsbCBsYXllciwgbmV0d29yaywgYW5kIFVTQiwgbm90IHRoZSBib290IHByb2Nlc3Mgb3IgdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgZGlyZWN0bHksIHdoaWNoIGFyZSBmaXhlZCBhdCBjb21waWxlIHRpbWUuCgpXYWl0LCB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBpcyAqZml4ZWQqLCBtZWFuaW5nIHRoZSBjb21tYW5kIGxpbmUgaXMgZml4ZWQsIGFuZCBjYW4mIzM5O3QgYmUgbXV0YXRlZCBwZXIgZnV6eiBjYXNlLiBCdXQgdGhlIGNvZGUgaW4gYGxpYi9ib290Y29uZmlnLmNgIGlzICpleGVjdXRlZCogZHVyaW5nIGJvb3QuIElmIGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgIGlzIGVuYWJsZWQsIHRoZW4gYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKWAgZXhlY3V0ZXMgZHVyaW5nIGBzZXR1cF9hcmNoKClgLiBJcyB0aGVyZSB1c2VyIGlucHV0IHRoYXQgY2FuIHJlYWNoIHRoaXM/IFRoZSBlbWJlZGRlZCBib290Y29uZmlnIGlzIGZpeGVkIGF0IGJ1aWxkIHRpbWUuIFRoZSBib290IGNvbW1hbmQgbGluZSBjb21lcyBmcm9tIHRoZSBib290bG9hZGVyLiBTeXprYWxsZXImIzM5O3MgYm9vdGxvYWRlciBpcyBmaXhlZCAoSSB0aGluaz8pLCBzbyBjYW4gc3l6a2FsbGVyIHBhc3MgYSBkaWZmZXJlbnQgY29tbWFuZCBsaW5lPyBObywgaXQmIzM5O3Mgbm90IGRlc2lnbmVkIHRvIGRvIHRoYXQuIFRoZSBgcGFyc2VfYXJnc2AgZnVuY3Rpb24gaXMgYWN0dWFsbHkgY2FsbGVkIG9uIHRoZSBib290IGNvbW1hbmQgbGluZS4KCk9rYXksIGlzIHRoZXJlICphbnkqIGZ1bmN0aW9uYWwgY2hhbmdlIFN5emthbGxlciBjYW4gZnV6ej8gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IG11dGF0ZSB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBvciBrZXJuZWwgY29tbWFuZCBsaW5lIGJldHdlZW4gZXhlY3V0aW9ucywgd2hpY2ggbWFrZXMgdGhpcyBjb2RlIG9ubHkgcnVuIG9uY2UgYXQgYm9vdC4gSXQmIzM5O3Mgbm90IHJlYWNoYWJsZSBmcm9tIHVzZXItc3BhY2Ugc3lzY2FsbHMsIHNvIGl0JiMzOTtzIG5vdCAqcmVhbGx5KiBmdXp6YWJsZS4KCkxldCBtZSBkb3VibGUtY2hlY2suIFRoZSBwYXRjaCBhZGRzIGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgLCBgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZWAsIGBib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkYCwgYHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWRgLiBUaGVzZSBhcmUgYWxsIGBfX2luaXRgIGZ1bmN0aW9ucy4gU3l6a2FsbGVyIHN0YXJ0cyBmdXp6aW5nICphZnRlciogdGhlIGtlcm5lbCBoYXMgYm9vdGVkLiBgX19pbml0YCBjb2RlIGdldHMgZnJlZWQsIHNvIHdlIGNhbiYjMzk7dCBnZXQgdG8gaXQgd2l0aCBvdXIgc3lzY2FsbCBmdXp6ZXIsIHdoaWNoIG9wZXJhdGVzIGF0IHJ1bnRpbWUuIFN5emthbGxlciAqZG9lcyogY2F0Y2ggYm9vdC10aW1lIGNyYXNoZXMsIGJ1dCBpdCBkb2VzbiYjMzk7dCByZWFsbHkgZnV6eiB0aGUgaW5wdXRzIHRvIHRoZXNlIGVhcmx5IGZ1bmN0aW9ucyBiZWNhdXNlIHRob3NlIGlucHV0cyAodGhlIGJvb3Rjb25maWcsIHRoZSBjbWRsaW5lKSBhcmUgc3RhdGljLgoKU28sIHRoaXMgbG9va3MgcHJldHR5IHVuLWZ1enphYmxlIGluIHRoZSB0cmFkaXRpb25hbCBTeXprYWxsZXIgc2Vuc2UuIEFueSBub24taW5pdCBjb2RlPyBgeGJjX3NucHJpbnRfY21kbGluZWAgaXMgbW9kaWZpZWQsIGJ1dCBpdCYjMzk7cyBhbHNvIGBfX2luaXRgLiBMb29raW5nIGF0IGBsaWIvYm9vdGNvbmZpZy5jYCwgaXQmIzM5O3MgYWxsIGBfX2luaXRgIGZ1bmN0aW9uczogYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgLCBgYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZGAsIGB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkYCwgYGJvb3Rjb25maWdfb3B0aW5gLCBhbmQgYHN0cl9wcmVwZW5kYC4gQWxzbywgYHNldHVwX2FyY2hgLCBgc2V0dXBfYm9vdF9jb25maWdgLCBhbmQgYHdhcm5fYm9vdGNvbmZpZ2AgYXJlIGBfX2luaXRgLgoKWWVwLCBhbGwgdGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgaW4gYF9faW5pdGAgZnVuY3Rpb25zLiBUaGV5JiMzOTtyZSBleGVjdXRlZCBvbmx5IG9uY2UgYXQgYm9vdCB3aXRoIHN0YXRpYyBpbnB1dHMgKHRoZSBlbWJlZGRlZCBib290Y29uZmlnIGFuZCBib290bG9hZGVyIGNtZGxpbmUpLiBTeXprYWxsZXIgY2FuJiMzOTt0IHByb3ZpZGUgdmFyaWVkIGlucHV0cyB0byBleHBsb3JlIGRpZmZlcmVudCBjb2RlIHBhdGhzLiBUaGlzIGlzIG5vdCB3b3J0aCBmdXp6aW5nLgoKSnVzdCBjaGVja2luZyBmb3Igbm9uLWluaXQgZnVuY3Rpb25zLi4uIGB0b29scy9ib290Y29uZmlnL01ha2VmaWxlYCBpcyB1c2Vyc3BhY2UuIFRoZW4gaXQmIzM5O3MgZGF0YSwgYnVpbGQgcnVsZXMsIGBpbml0L21haW4uY2Agd2l0aCB0aG9zZSBpbml0IGZ1bmN0aW9ucywgS2NvbmZpZywgZGVjbGFyYXRpb25zLCBhcmNoL3g4NiBjb2RlIHdpdGggYF9faW5pdGAgZnVuY3Rpb25zLCBidWlsZCBydWxlcywgYW5kIGRvY3VtZW50YXRpb24uIEV2ZXJ5dGhpbmcgaXMgYnVpbGQtdGltZSwgZG9jdW1lbnRhdGlvbiwgb3IgYF9faW5pdGAgY29kZS4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGZ1enogYF9faW5pdGAgY29kZSBiZWNhdXNlIGl0IHJ1bnMgdG9vIGVhcmx5LCBhbmQgdGhlIGlucHV0cyBhcmVuJiMzOTt0IG11dGF0ZWQgYnkgU3l6a2FsbGVyLgoKSSYjMzk7bSByZXR1cm5pbmcgYFdvcnRoRnV6emluZzogZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgYWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyByZXNpZGUgd2l0aGluIGBfX2luaXRgIGZ1bmN0aW9ucyBhbmQgYnVpbGQtdGltZSB0b29scy4gVGhpcyBjb2RlIGdldHMgZXhlY3V0ZWQgZHVyaW5nIGJvb3Qgd2l0aCBzdGF0aWMgaW5wdXRzIHdoaWNoIG1lYW5zIHRoYXQgc3l6a2FsbGVy4oCZcyBydW50aW1lIHN5c2NhbGwgZnV6emluZyBjYW5ub3QgcmVhY2ggaXQuCgpMZXQgbWUganVzdCBxdWlja2x5IGNoZWNrIHRoYXQgdGhlcmUgaXNuJiMzOTt0IHNvbWUgZWRnZSBjYXNlLCBsaWtlIGZpcm13YXJlIGZpbGVzLiBCdXQgbm8sIHRoZSBib290Y29uZmlnIGlzIGVtYmVkZGVkCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAxODoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBidWlsZC10aW1lIGZlYXR1cmUgdG8gcmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gQWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUga2VybmVsIGFyZSBjb25maW5lZCB0byBgX19pbml0YCBmdW5jdGlvbnMgKGUuZy4sIGBzZXR1cF9hcmNoYCwgYHNldHVwX2Jvb3RfY29uZmlnYCwgYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgKSwgd2hpY2ggcnVuIG9ubHkgb25jZSBkdXJpbmcgZWFybHkgYm9vdCB3aXRoIHN0YXRpYyBpbnB1dHMgKGNvbXBpbGUtdGltZSBlbWJlZGRlZCBmaWxlcyBhbmQgdGhlIGJvb3Rsb2FkZXIgY29tbWFuZCBsaW5lKS4gU3l6a2FsbGVyIGNhbm5vdCBtdXRhdGUgdGhlc2UgaW5wdXRzIG9yIHJlYWNoIHRoaXMgY29kZSBkdXJpbmcgcnVudGltZSBzeXNjYWxsIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYnVpbGQtdGltZSBmZWF0dXJlIHRvIHJlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGludG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuIEFsbCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGtlcm5lbCBhcmUgY29uZmluZWQgdG8gYF9faW5pdGAgZnVuY3Rpb25zIChlLmcuLCBgc2V0dXBfYXJjaGAsIGBzZXR1cF9ib290X2NvbmZpZ2AsIGB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lYCksIHdoaWNoIHJ1biBvbmx5IG9uY2UgZHVyaW5nIGVhcmx5IGJvb3Qgd2l0aCBzdGF0aWMgaW5wdXRzIChjb21waWxlLXRpbWUgZW1iZWRkZWQgZmlsZXMgYW5kIHRoZSBib290bG9hZGVyIGNvbW1hbmQgbGluZSkuIFN5emthbGxlciBjYW5ub3QgbXV0YXRlIHRoZXNlIGlucHV0cyBvciByZWFjaCB0aGlzIGNvZGUgZHVyaW5nIHJ1bnRpbWUgc3lzY2FsbCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjE1OjI3LjU1MzU5NzY4M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzY1NTU3ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgYnVpbGQtdGltZSBmZWF0dXJlIHRvIHJlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGludG8gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuIEFsbCBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGtlcm5lbCBhcmUgY29uZmluZWQgdG8gYF9faW5pdGAgZnVuY3Rpb25zIChlLmcuLCBgc2V0dXBfYXJjaGAsIGBzZXR1cF9ib290X2NvbmZpZ2AsIGB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lYCksIHdoaWNoIHJ1biBvbmx5IG9uY2UgZHVyaW5nIGVhcmx5IGJvb3Qgd2l0aCBzdGF0aWMgaW5wdXRzIChjb21waWxlLXRpbWUgZW1iZWRkZWQgZmlsZXMgYW5kIHRoZSBib290bG9hZGVyIGNvbW1hbmQgbGluZSkuIFN5emthbGxlciBjYW5ub3QgbXV0YXRlIHRoZXNlIGlucHV0cyBvciByZWFjaCB0aGlzIGNvZGUgZHVyaW5nIHJ1bnRpbWUgc3lzY2FsbCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTU6MjcuNTUzNjAyODgzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzc5MjI4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlMTgxZDMwMWM5YmQwNzZjZWFiNjM1YTQ3MzdlOGJmNWM2YTI0NWUxXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVuIDI2IDE4OjE1OjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0XFxuaW5kZXggZjcxMjc1ODQ3MmQ1YzYuLjNkNjQxMjQ1OGM4YjY5IDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jvb3Rjb25maWcucnN0XFxuQEAgLTIzNCw2ICsyMzQsODcgQEAgS2NvbmZpZyBvcHRpb24gc2VsZWN0ZWQuXFxuIE5vdGUgdGhhdCBldmVuIGlmIHlvdSBzZXQgdGhpcyBvcHRpb24sIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIGVtYmVkZGVkXFxuIGJvb3Rjb25maWcgYnkgYW5vdGhlciBib290Y29uZmlnIHdoaWNoIGF0dGFjaGVkIHRvIHRoZSBpbml0cmQuXFxuIFxcbitSZW5kZXJpbmcgRW1iZWRkZWQga2VybmVsLiogS2V5cyBhdCBCdWlsZCBUaW1lXFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rXFxuK0J5IGRlZmF1bHQsIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIChgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRD15YGApIGlzXFxuK3BhcnNlZCBhdCBydW50aW1lLCBhZnRlciBgYHBhcnNlX2Vhcmx5X3BhcmFtKClgYCBoYXMgYWxyZWFkeSBydW4uIEVhcmx5XFxuK3BhcmFtZXRlciBoYW5kbGVycyAoYGBtZW09YGAsIGBgZWFybHljb249YGAsIGBgbG9nbGV2ZWw9YGAsIC4uLikgdGhlcmVmb3JlXFxuK2Nhbm5vdCBzZWUgdmFsdWVzIHN1cHBsaWVkIHZpYSB0aGUgZW1iZWRkZWQgYGBrZXJuZWxgYCBzdWJ0cmVlLlxcbitcXG4rYGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgYCByZXNvbHZlcyB0aGlzIGJ5IHJlbmRlcmluZyB0aGVcXG4rYGBrZXJuZWxgYCBzdWJ0cmVlIG9mIGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEX0ZJTEVgYCBpbnRvIGEgZmxhdCBjbWRsaW5lXFxuK3N0cmluZyBhdCBrZXJuZWwgYnVpbGQgdGltZSAodmlhIGBgdG9vbHMvYm9vdGNvbmZpZyAtQ2BgKSBhbmQgcHJlcGVuZGluZ1xcbitpdCB0byBgYGJvb3RfY29tbWFuZF9saW5lYGAgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cCwgc28gdGhlIGtleXNcXG4rYXJlIHZpc2libGUgdG8gYGBwYXJzZV9lYXJseV9wYXJhbSgpYGAuXFxuK1xcbitUaGUgb3B0aW9uIHJlcXVpcmVzIGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEPXlgYCwgYSBub24tZW1wdHlcXG4rYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURfRklMRWBgLCBgYENPTkZJR19DTURMSU5FYGAgdG8gYmUgZW1wdHksIGFuZFxcbithbiBhcmNoaXRlY3R1cmUgdGhhdCBzZWxlY3RzIGBgQ09ORklHX0FSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgYC5cXG4rQ3VycmVudGx5IG9ubHkgeDg2IHNlbGVjdHMgaXQ7IG9uIG90aGVyIGFyY2hpdGVjdHVyZXMgdGhlIGVtYmVkZGVkXFxuK2Jvb3Rjb25maWcgc3RpbGwgd29ya3MsIGJ1dCBvbmx5IHRocm91Z2ggdGhlIGxhdGUgcnVudGltZSBwYXJzZXIuXFxuK1xcbitUaGUgc2FtZSBgYGJvb3Rjb25maWdgYCBvcHQtaW4gYXBwbGllcyBhcyBlbHNld2hlcmU6IHRoZSByZW5kZXJlZCBrZXlzXFxuK2FyZSBwcmVwZW5kZWQgb25seSB3aGVuIGBgYm9vdGNvbmZpZ2BgIChpbiBhbnkgZm9ybSkgYXBwZWFycyBvbiB0aGVcXG4ra2VybmVsIGNvbW1hbmQgbGluZSwgb3Igd2hlbiBgYENPTkZJR19CT09UX0NPTkZJR19GT1JDRWBgIGlzIHNldCwgd2hpY2hcXG4rZGVmYXVsdHMgdG8gYGB5YGAgd2hlbiBgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRGBgIGlzIHNldC5cXG4rXFxuK0ZvciBleGFtcGxlLCBnaXZlbjo6XFxuK1xcbisga2VybmVsIHtcXG4rICAgbG9nbGV2ZWwgPSA3XFxuKyAgIG1lbSA9IDRHXFxuKyB9XFxuK1xcbit0aGUga2VybmVsIGJvb3RzIGFzIGlmIGBgbG9nbGV2ZWw9NyBtZW09NEdgYCBoYWQgYmVlbiBwcmVwZW5kZWQgdG8gdGhlXFxuK2Jvb3Rsb2FkZXIgY29tbWFuZCBsaW5lLCB3aXRoIHRoZSB2YWx1ZXMgdmlzaWJsZSB0byBlYXJseS1wYXJzZWRcXG4raGFuZGxlcnMuIENvbW1hLXNlcGFyYXRlZCB2YWx1ZXMgYXJlIHN0aWxsIGV4cGFuZGVkIGludG8gbXVsdGlwbGVcXG4rY21kbGluZSBlbnRyaWVzIHBlciB0aGUgYm9vdGNvbmZpZyBhcnJheSBjb252ZW50aW9uIC0tIHRoZSBlbWJlZGRlZFxcbitgYGtlcm5lbC5lYXJseWNvbiA9IFxcXCJ1YXJ0ODI1MCxpbywweDNmOFxcXCJgYCBtdXN0IGJlIHF1b3RlZCB0byBsYW5kIGFzIGFcXG4rc2luZ2xlIGBgZWFybHljb249YGAgZW50cnksIGV4YWN0bHkgYXMgZm9yIHRoZSBydW50aW1lIHBhcnNlci5cXG4rXFxuK0lmIHRoZSByZW5kZXJlZCBzdHJpbmcgd291bGQgbm90IGZpdCBpbiBgYENPTU1BTkRfTElORV9TSVpFYGAgdG9nZXRoZXJcXG4rd2l0aCB0aGUgZXhpc3RpbmcgY29tbWFuZCBsaW5lLCB0aGUgcHJlcGVuZCBpcyBza2lwcGVkIGFuZCBhbiBlcnJvciBpc1xcbitsb2dnZWQsIHNvIGFuIG92ZXJzaXplZCBlbWJlZGRlZCBib290Y29uZmlnIGNhbm5vdCBicmljayBhIGJvb3QuXFxuK1xcbitJbnRlcmFjdGlvbiB3aXRoIG90aGVyIGNvbW1hbmQgbGluZSBhbmQgYm9vdGNvbmZpZyBzb3VyY2VzXFxuK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cXG4rXFxuK1dpdGggYGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUc9eWBgIHRoZSByZW5kZXJlZCBgYGtlcm5lbGBgXFxuK3N1YnRyZWUgYmVoYXZlcyBsaWtlIGEgYnVpbGQtdGltZSBjb21tYW5kIGxpbmUgKHNpbWlsYXIgdG9cXG4rYGBDT05GSUdfQ01ETElORWBgKSwgbm90IGxpa2UgYSBib290Y29uZmlnIHNvdXJjZS4gSXQgaXMgcHJlcGVuZGVkIHRvXFxuK2BgYm9vdF9jb21tYW5kX2xpbmVgYCBpbiBgYHNldHVwX2FyY2goKWBgLCBiZWZvcmUgYGBwYXJzZV9lYXJseV9wYXJhbSgpYGBcXG4rYW5kIGxvbmcgYmVmb3JlIHRoZSBydW50aW1lIHBhcnNlciBsb29rcyBhdCBhbiBpbml0cmQuIE9wdGlvbnMgY2FuIHJlYWNoXFxuK3RoZSBrZXJuZWwgZnJvbSB1cCB0byBmb3VyIHBsYWNlczpcXG4rXFxuKy0gQm9vdGxvYWRlciBjb21tYW5kIGxpbmU6IHRoZSBhcmd1bWVudHMgdGhlIGJvb3QgbG9hZGVyIHBhc3Nlcy4gVGhlXFxuKyAgZW1iZWRkZWQgY21kbGluZSBpcyBwcmVwZW5kZWQgaW4gZnJvbnQgb2YgdGhlbSwgc28gZm9yIGxhc3Qtb25lLXdpbnNcXG4rICBwYXJhbWV0ZXJzIGEgYm9vdGxvYWRlciBvcHRpb24gc3RpbGwgb3ZlcnJpZGVzIHRoZSBlbWJlZGRlZCB2YWx1ZS5cXG4rICBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUuXFxuKy0gRW1iZWRkZWQgY21kbGluZSAodGhpcyBvcHRpb24pOiB0aGUgcmVuZGVyZWQgYGBrZXJuZWxgYCBzdWJ0cmVlLFxcbisgIHByZXBlbmRlZCBlYXJseSBzbyBpdCBpcyBzZWVuIGJ5IGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgLiBWaXNpYmxlIGluXFxuKyAgL3Byb2MvY21kbGluZS5cXG4rLSBJbml0cmQgYm9vdGNvbmZpZzogcGFyc2VkIGxhdGUgaW4gYGBzZXR1cF9ib290X2NvbmZpZygpYGA7IGl0c1xcbisgIGBga2VybmVsYGAga2V5cyBhcmUgcGxhY2VkIGFoZWFkIG9mIGBgYm9vdF9jb21tYW5kX2xpbmVgYCwgaS5lLiBiZWZvcmVcXG4rICB0aGUgZW1iZWRkZWQgY21kbGluZSwgc28gbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBBcyBhXFxuKyAgYm9vdGNvbmZpZyBzb3VyY2UsIGFuIGluaXRyZCBib290Y29uZmlnIHN0aWxsIHJlcGxhY2VzIHRoZSBlbWJlZGRlZFxcbisgIGJvb3Rjb25maWcuIFZpc2libGUgaW4gL3Byb2MvY21kbGluZSBhbmQgL3Byb2MvYm9vdGNvbmZpZy5cXG4rLSBFbWJlZGRlZCBib290Y29uZmlnIChydW50aW1lKTogcGFyc2VkIGxhdGUsIG9ubHkgd2hlbiBubyBpbml0cmRcXG4rICBib290Y29uZmlnIGlzIHByZXNlbnQuIFZpc2libGUgaW4gL3Byb2MvY21kbGluZSBhbmQgL3Byb2MvYm9vdGNvbmZpZy5cXG4rXFxuK1NvIHdpdGggdGhpcyBvcHRpb24gdGhlIGVtYmVkZGVkIGBga2VybmVsLipgYCB2YWx1ZXMgdGFrZSBwcmVjZWRlbmNlXFxuK292ZXIgYW4gaW5pdHJkIGJvb3Rjb25maWcncyBgYGtlcm5lbC4qYGAgdmFsdWVzOiBmb3IgZWFybHkgcGFyYW1ldGVyc1xcbit0aGUgaW5pdHJkIGlzIG5vdCBwYXJzZWQgeWV0LCBhbmQgZm9yIG9yZGluYXJ5IHBhcmFtZXRlcnMgdGhlIGVtYmVkZGVkXFxuK2tleXMgbGFuZCBsYXRlciBpbiB0aGUgY29tbWFuZCBsaW5lLiBJZiB5b3UgbmVlZCBhbiBpbml0cmQgYm9vdGNvbmZpZyB0b1xcbitvdmVycmlkZSB0aGUgZW1iZWRkZWQgYGBrZXJuZWwuKmBgIGtleXMsIGxlYXZlIHRoaXMgb3B0aW9uIG9mZiBhbmQgcmVseVxcbitvbiB0aGUgcnVudGltZSBwYXJzZXIuXFxuK1xcbitUaGUgcmVuZGVyZWQgc3RyaW5nIGlzIHBhcnQgb2YgdGhlIGNvbW1hbmQgbGluZSwgc28gaXQgYXBwZWFycyBpblxcbisvcHJvYy9jbWRsaW5lLiBJdCBpcyBkZWxpYmVyYXRlbHkgbm90IHNob3duIGluIC9wcm9jL2Jvb3Rjb25maWc6IHRoYXRcXG4rZmlsZSBrZWVwcyByZXBvcnRpbmcgdGhlIHBhcnNlZCBib290Y29uZmlnIHRyZWUgLS0gdGhlIGluaXRyZCBib290Y29uZmlnXFxuK2lmIHByZXNlbnQsIG90aGVyd2lzZSB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyAtLSBpbmRlcGVuZGVudCBvZiB3aGV0aGVyXFxuK2J1aWxkLXRpbWUgY21kbGluZSByZW5kZXJpbmcgaXMgZW5hYmxlZC5cXG4rXFxuIEtlcm5lbCBwYXJhbWV0ZXJzIHZpYSBCb290IENvbmZpZ1xcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gXFxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcXG5pbmRleCBiZjk3Mzk5ZDM1N2ZhMC4uNDgzNDA2NWE0YmYyZjcgMTAwNjQ0XFxuLS0tIGEvTUFJTlRBSU5FUlNcXG4rKysgYi9NQUlOVEFJTkVSU1xcbkBAIC05ODQ2LDYgKzk4NDYsNyBAQCBGOlxcdGZzL3Byb2MvYm9vdGNvbmZpZy5jXFxuIEY6XFx0aW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcXG4gRjpcXHRsaWIvYm9vdGNvbmZpZy1kYXRhLlNcXG4gRjpcXHRsaWIvYm9vdGNvbmZpZy5jXFxuK0Y6XFx0bGliL2VtYmVkZGVkLWNtZGxpbmUuU1xcbiBGOlxcdHRvb2xzL2Jvb3Rjb25maWcvKlxcbiBGOlxcdHRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy8qXFxuIFxcbmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlXFxuaW5kZXggMTJmZDNkMmQ0N2I1ODIuLjM0ZmIzNTcxYmVjODFkIDEwMDY0NFxcbi0tLSBhL01ha2VmaWxlXFxuKysrIGIvTWFrZWZpbGVcXG5AQCAtMTU1Miw2ICsxNTUyLDIyIEBAIHByZXBhcmU6IHRvb2xzL2JwZi9yZXNvbHZlX2J0Zmlkc1xcbiBlbmRpZlxcbiBlbmRpZlxcbiBcXG4rIyB0b29scy9ib290Y29uZmlnIHJlbmRlcnMgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byBhIGNtZGxpbmUgYXQgYnVpbGQgdGltZS5cXG4raWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuK3ByZXBhcmU6IHRvb2xzL2Jvb3Rjb25maWdcXG4rZW5kaWZcXG4rXFxuKyMgdG9vbHMvYm9vdGNvbmZpZyBpcyBydW4gb24gdGhlIGJ1aWxkIGhvc3QgZHVyaW5nIHByZXBhcmUsIHNvIGZvcmNlIGEgaG9zdFxcbisjIGJpbmFyeSBoZXJlOyBpdHMgb3duIE1ha2VmaWxlIGtlZXBzICQoQ0MpIGZvciBzdGFuZGFsb25lIGFuZCBjcm9zcyBidWlsZHMuXFxuKyMgQ1JPU1NfQ09NUElMRT0gaXMgY2xlYXJlZCBzbyB0b29scy9zY3JpcHRzL01ha2VmaWxlLmluY2x1ZGUgZG9lcyBub3QgaW5qZWN0XFxuKyMgdGhlIHRhcmdldCdzIC0tdGFyZ2V0PS8tLXN5c3Jvb3Q9IGZsYWdzIGludG8gdGhlIGhvc3QgY2xhbmcgaW52b2NhdGlvbiB1bmRlclxcbisjIExMVk09MSBjcm9zcyBidWlsZHMgKHdoaWNoIHdvdWxkIHByb2R1Y2UgYSB0YXJnZXQgYmluYXJ5IHRoYXQgZmFpbHMgdG8gZXhlYykuXFxuK3Rvb2xzL2Jvb3Rjb25maWc6IGV4cG9ydCBDQyA6PSAkKEhPU1RDQylcXG4rdG9vbHMvYm9vdGNvbmZpZzogRk9SQ0VcXG4rXFx0JChRKW1rZGlyIC1wICQob2JqdHJlZSkvdG9vbHNcXG4rXFx0JChRKSQoTUFLRSkgTz0kKGFic3BhdGggJChvYmp0cmVlKSkgc3ViZGlyPXRvb2xzIC1DICQoc3JjdHJlZSkvdG9vbHMvIFxcXFxcXG4rXFx0XFx0Ym9vdGNvbmZpZyBDUk9TU19DT01QSUxFPVxcbitcXG4gIyBUaGUgdG9vbHMgYnVpbGQgc3lzdGVtIGlzIG5vdCBhIHBhcnQgb2YgS2J1aWxkIGFuZCB0ZW5kcyB0byBpbnRyb2R1Y2VcXG4gIyBpdHMgb3duIHVuaXF1ZSBpc3N1ZXMuIElmIHlvdSBuZWVkIHRvIGludGVncmF0ZSBhIG5ldyB0b29sIGludG8gS2J1aWxkLFxcbiAjIHBsZWFzZSBjb25zaWRlciBsb2NhdGluZyB0aGF0IHRvb2wgb3V0c2lkZSB0aGUgdG9vbHMvIHRyZWUgYW5kIHVzaW5nIHRoZVxcbkBAIC0xNTc4LDYgKzE1OTQsMTUgQEAgaWZuZXEgKCQod2lsZGNhcmQgJChvYmp0b29sX08pKSwpXFxuIFxcdCQoUSkkKE1BS0UpIC1zQyAkKGFic19zcmN0cmVlKS90b29scy9vYmp0b29sIE89JChvYmp0b29sX08pIHNyY3RyZWU9JChhYnNfc3JjdHJlZSkgJChwYXRzdWJzdCBvYmp0b29sXyUsJSwkQClcXG4gZW5kaWZcXG4gXFxuK1BIT05ZICs9IGJvb3Rjb25maWdfY2xlYW5cXG4rXFxuK2Jvb3Rjb25maWdfTyA9ICQoYWJzcGF0aCAkKG9ianRyZWUpKS90b29scy9ib290Y29uZmlnXFxuK1xcbitib290Y29uZmlnX2NsZWFuOlxcbitpZm5lcSAoJCh3aWxkY2FyZCAkKGJvb3Rjb25maWdfTykpLClcXG4rXFx0JChRKSQoTUFLRSkgLXNDICQoc3JjdHJlZSkvdG9vbHMvYm9vdGNvbmZpZyBPPSQoYm9vdGNvbmZpZ19PKSBjbGVhblxcbitlbmRpZlxcbitcXG4gdG9vbHMvOiBGT1JDRVxcbiBcXHQkKFEpbWtkaXIgLXAgJChvYmp0cmVlKS90b29sc1xcbiBcXHQkKFEpJChNQUtFKSBPPSQoYWJzcGF0aCAkKG9ianRyZWUpKSBzdWJkaXI9dG9vbHMgLUMgJChzcmN0cmVlKS90b29scy9cXG5AQCAtMTc1Myw3ICsxNzc4LDcgQEAgdm1saW51eGNsZWFuOlxcbiBcXHQkKFEpJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9saW5rLXZtbGludXguc2ggY2xlYW5cXG4gXFx0JChRKSQoaWYgJChBUkNIX1BPU1RMSU5LKSwgJChNQUtFKSAtZiAkKEFSQ0hfUE9TVExJTkspIGNsZWFuKVxcbiBcXG4tY2xlYW46IGFyY2hjbGVhbiB2bWxpbnV4Y2xlYW4gcmVzb2x2ZV9idGZpZHNfY2xlYW4gb2JqdG9vbF9jbGVhblxcbitjbGVhbjogYXJjaGNsZWFuIHZtbGludXhjbGVhbiByZXNvbHZlX2J0Zmlkc19jbGVhbiBvYmp0b29sX2NsZWFuIGJvb3Rjb25maWdfY2xlYW5cXG4gXFxuICMgbXJwcm9wZXIgLSBEZWxldGUgYWxsIGdlbmVyYXRlZCBmaWxlcywgaW5jbHVkaW5nIC5jb25maWdcXG4gI1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xcbmluZGV4IGJkYWQ5MGYyMTBlNGJmLi5mZDk3OWUwYmUxZjBlMCAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9LY29uZmlnXFxuKysrIGIvYXJjaC94ODYvS2NvbmZpZ1xcbkBAIC0xMjcsNiArMTI3LDcgQEAgY29uZmlnIFg4NlxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lOR1xcdGlmIFg4Nl82NFxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19LTUFQX0xPQ0FMX0ZPUkNFX01BUFxcdGlmIE5SX0NQVVMgXFx1MDAzYz0gNDA5NlxcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19DRklcXHRcXHRpZiBYODZfNjRcXG4rXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcXG4gXFx0c2VsZWN0IEFSQ0hfVVNFU19DRklfVFJBUFNcXHRcXHRpZiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgQ0ZJXFxuIFxcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0xUT19DTEFOR1xcbiBcXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkdfVEhJTlxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jXFxuaW5kZXggNDY4ODJjZTc5YzNhNGQuLjg4YjA1NWE0NjU5MWVmIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jXFxuKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmNcXG5AQCAtNiw2ICs2LDcgQEBcXG4gICogcGFydHMgb2YgZWFybHkga2VybmVsIGluaXRpYWxpemF0aW9uLlxcbiAgKi9cXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FjcGkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Jvb3Rjb25maWcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbnNvbGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NwdS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXFx1MDAzZVxcbkBAIC04ODAsNyArODgxLDYgQEAgc3RhdGljIHZvaWQgX19pbml0IHg4Nl9yZXBvcnRfbngodm9pZClcXG4gICpcXG4gICogTm90ZTogT24geDg2XzY0LCBmaXhtYXBzIGFyZSByZWFkeSBmb3IgdXNlIGV2ZW4gYmVmb3JlIHRoaXMgaXMgY2FsbGVkLlxcbiAgKi9cXG4tXFxuIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcXG4ge1xcbiAjaWZkZWYgQ09ORklHX1g4Nl8zMlxcbkBAIC05MjQsNiArOTI0LDE4IEBAIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcXG4gXFx0YnVpbHRpbl9jbWRsaW5lX2FkZGVkID0gdHJ1ZTtcXG4gI2VuZGlmXFxuIFxcbisjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuK1xcdC8qXFxuK1xcdCAqIFByZXBlbmQgdGhlIGJ1aWxkLXRpbWUtcmVuZGVyZWQgZW1iZWRkZWQgXFxcImtlcm5lbFxcXCIga2V5cyBoZXJlIHNvXFxuK1xcdCAqIHBhcnNlX2Vhcmx5X3BhcmFtKCkgYmVsb3cgc2VlcyB0aGVtLCB1c2luZyB0aGUgc2FtZSBvcHQtaW4gYXMgdGhlXFxuK1xcdCAqIHJ1bnRpbWUgcGFyc2VyLCBwbHVzIHRoZSBidWlsZC10aW1lIENPTkZJR19CT09UX0NPTkZJR19GT1JDRS5cXG4rXFx0ICovXFxuK1xcdGlmIChib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkKGJvb3RfY29tbWFuZF9saW5lLCBOVUxMKSB8fFxcbitcXHQgICAgSVNfRU5BQkxFRChDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0UpKVxcbitcXHRcXHR4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGJvb3RfY29tbWFuZF9saW5lLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIENPTU1BTkRfTElORV9TSVpFKTtcXG4rI2VuZGlmXFxuK1xcbiBcXHRzdHJzY3B5KGNvbW1hbmRfbGluZSwgYm9vdF9jb21tYW5kX2xpbmUsIENPTU1BTkRfTElORV9TSVpFKTtcXG4gXFx0KmNtZGxpbmVfcCA9IGNvbW1hbmRfbGluZTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oIGIvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcXG5pbmRleCAxYzdmM2I3NGZmY2YzOC4uZGVkYTUwNzUwMGRhMjMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaFxcbkBAIC0zMDgsNCArMzA4LDE4IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqeGJjX2dldF9lbWJlZGRlZF9ib290Y29uZmlnKHNpemVfdCAqc2l6ZSlcXG4gfVxcbiAjZW5kaWZcXG4gXFxuKy8qIEJvb3Rjb25maWcgb3B0LWluIGRldGVjdGlvbiwgc2hhcmVkIGJ5IHNldHVwX2FyY2goKSBhbmQgc2V0dXBfYm9vdF9jb25maWcoKSAqL1xcbisjaWZkZWYgQ09ORklHX0JPT1RfQ09ORklHXFxuK2Jvb2wgX19pbml0IGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoY29uc3QgY2hhciAqYm9vdF9jbWRsaW5lLCBpbnQgKmVuZF9vZmZzZXQpO1xcbisjZW5kaWZcXG4rXFxuKy8qIEJ1aWxkLXRpbWUtcmVuZGVyZWQgYm9vdGNvbmZpZyBjbWRsaW5lIHByZXBlbmRlZCBpbiBzZXR1cF9hcmNoKCkgKi9cXG4rI2lmZGVmIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xcbit2b2lkIF9faW5pdCB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpO1xcbitib29sIF9faW5pdCB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKHZvaWQpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShjaGFyICpkc3QsIHNpemVfdCBzaXplKSB7IH1cXG4rc3RhdGljIGlubGluZSBib29sIHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG4rI2VuZGlmXFxuK1xcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnXFxuaW5kZXggNTIzMGQ0ODc5YjFjODQuLjU5ODY5MGVjMzEzYTI5IDEwMDY0NFxcbi0tLSBhL2luaXQvS2NvbmZpZ1xcbisrKyBiL2luaXQvS2NvbmZpZ1xcbkBAIC0xNTY2LDYgKzE1NjYsNDIgQEAgY29uZmlnIEJPT1RfQ09ORklHX0VNQkVEX0ZJTEVcXG4gXFx0ICBUaGlzIGJvb3Rjb25maWcgd2lsbCBiZSB1c2VkIGlmIHRoZXJlIGlzIG5vIGluaXRyZCBvciBubyBvdGhlclxcbiBcXHQgIGJvb3Rjb25maWcgaW4gdGhlIGluaXRyZC5cXG4gXFxuK2NvbmZpZyBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuK1xcdGJvb2xcXG4rXFx0aGVscFxcbitcXHQgIFNpbGVudCBzeW1ib2w7IG5vIEMgY29kZSByZWFkcyBpdCBkaXJlY3RseS4gQXJjaGl0ZWN0dXJlc1xcbitcXHQgIHNlbGVjdCBpdCBvbmNlIHRoZWlyIHNldHVwX2FyY2goKSBjYWxsc1xcbitcXHQgIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSBiZWZvcmUgcGFyc2VfZWFybHlfcGFyYW0oKS5cXG4rXFx0ICBJdHMgb25seSByb2xlIGlzIHRvIGdhdGUgdGhlIHVzZXItdmlzaWJsZVxcbitcXHQgIENNRExJTkVfRlJPTV9CT09UQ09ORklHIG9wdGlvbiBwZXItYXJjaCwgdGhlIHNhbWVcXG4rXFx0ICBBUkNIX1NVUFBPUlRTXyogaWRpb20gdXNlZCBieSBBUkNIX1NVUFBPUlRTX0NGSSwgZXRjLlxcbitcXG4rY29uZmlnIENNRExJTkVfRlJPTV9CT09UQ09ORklHXFxuK1xcdGJvb2wgXFxcIlJlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGFzIGtlcm5lbCBjbWRsaW5lIGF0IGJ1aWxkIHRpbWVcXFwiXFxuK1xcdGRlcGVuZHMgb24gQk9PVF9DT05GSUdfRU1CRURfRklMRSAhPSBcXFwiXFxcIlxcbitcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcXG4rXFx0ZGVwZW5kcyBvbiBDTURMSU5FID0gXFxcIlxcXCJcXG4rXFx0ZGVmYXVsdCBuXFxuK1xcdGhlbHBcXG4rXFx0ICBSZW5kZXIgdGhlIFxcXCJrZXJuZWxcXFwiIHN1YnRyZWUgb2YgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgZmlsZSBpbnRvIGFcXG4rXFx0ICBmbGF0IGNtZGxpbmUgc3RyaW5nIGF0IGtlcm5lbCBidWlsZCB0aW1lIGFuZCBwcmVwZW5kIGl0IHRvXFxuK1xcdCAgYm9vdF9jb21tYW5kX2xpbmUgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cC4gVGhpcyBtYWtlc1xcbitcXHQgIGVhcmx5X3BhcmFtKCkgaGFuZGxlcnMgKGUuZy4gbWVtPSwgZWFybHljb249LCBsb2dsZXZlbD0pIHNlZSB0aGVcXG4rXFx0ICB2YWx1ZXMgc3VwcGxpZWQgdmlhIHRoZSBlbWJlZGRlZCBib290Y29uZmlnLlxcbitcXG4rXFx0ICBUaGUgcnVudGltZSBib290Y29uZmlnIHBhcnNlciBpcyB1bmFmZmVjdGVkLCBzbyB0cmVlLXN0cnVjdHVyZWRcXG4rXFx0ICBjb25zdW1lcnMgc3VjaCBhcyBmdHJhY2UgYm9vdC10aW1lIHRyYWNpbmcga2VlcCB3b3JraW5nLlxcbitcXG4rXFx0ICBOb3RlOiB3aGVuIGFuIGluaXRyZCBhbHNvIGNhcnJpZXMgYSBib290Y29uZmlnLCBpdHMgXFxcImtlcm5lbFxcXCJcXG4rXFx0ICBzdWJ0cmVlIGlzIHN0aWxsIHBhcnNlZCBhdCBydW50aW1lLCBidXQgdGhlIGVtYmVkZGVkIFxcXCJrZXJuZWxcXFwiXFxuK1xcdCAga2V5cyByZW1haW4gaW4gYm9vdF9jb21tYW5kX2xpbmUgZm9yIHBhcnNlX2Vhcmx5X3BhcmFtKCkgYW5kXFxuK1xcdCAgZW5kIHVwIGxhdGVyIHRoYW4gdGhlIGluaXRyZCBrZXlzIGluIHNhdmVkX2NvbW1hbmRfbGluZSwgc29cXG4rXFx0ICBwYXJzZV9hcmdzKCkgbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBJZiB5b3UgbmVlZFxcbitcXHQgIGluaXRyZCB0byBvdmVycmlkZSBlbWJlZGRlZCBrZXJuZWwuKiBrZXlzLCBsZWF2ZSB0aGlzIG9wdGlvblxcbitcXHQgIG9mZi5cXG4rXFxuK1xcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4rXFxuIGNvbmZpZyBDTURMSU5FX0xPR19XUkFQX0lERUFMX0xFTlxcbiBcXHRpbnQgXFxcIkxlbmd0aCB0byB0cnkgdG8gd3JhcCB0aGUgY21kbGluZSB3aGVuIGxvZ2dlZCBhdCBib290XFxcIlxcbiBcXHRkZWZhdWx0IDEwMjFcXG5kaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uY1xcbmluZGV4IGUzNjMyMzJiNDI4YjQ3Li4zOWE1MThhNDcyNDIyMyAxMDA2NDRcXG4tLS0gYS9pbml0L21haW4uY1xcbisrKyBiL2luaXQvbWFpbi5jXFxuQEAgLTM1Niw0NSArMzU2LDMzIEBAIHN0YXRpYyBjaGFyICogX19pbml0IHhiY19tYWtlX2NtZGxpbmUoY29uc3QgY2hhciAqa2V5KVxcbiBcXHRyZXR1cm4gbmV3X2NtZGxpbmU7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgX19pbml0IGJvb3Rjb25maWdfcGFyYW1zKGNoYXIgKnBhcmFtLCBjaGFyICp2YWwsXFxuLVxcdFxcdFxcdFxcdCAgICBjb25zdCBjaGFyICp1bnVzZWQsIHZvaWQgKmFyZylcXG4te1xcbi1cXHRpZiAoc3RyY21wKHBhcmFtLCBcXFwiYm9vdGNvbmZpZ1xcXCIpID09IDApIHtcXG4tXFx0XFx0Ym9vdGNvbmZpZ19mb3VuZCA9IHRydWU7XFxuLVxcdH1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgX19pbml0IHdhcm5fYm9vdGNvbmZpZyhjaGFyICpzdHIpXFxuIHtcXG4tXFx0LyogVGhlICdib290Y29uZmlnJyBoYXMgYmVlbiBoYW5kbGVkIGJ5IGJvb3Rjb25maWdfcGFyYW1zKCkuICovXFxuK1xcdC8qIFRoZSAnYm9vdGNvbmZpZycgb3B0aW9uIGlzIGhhbmRsZWQgYnkgc2V0dXBfYm9vdF9jb25maWcoKS4gKi9cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290X2NvbmZpZyh2b2lkKVxcbiB7XFxuLVxcdHN0YXRpYyBjaGFyIHRtcF9jbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXSBfX2luaXRkYXRhO1xcbiBcXHRjb25zdCBjaGFyICptc2csICpkYXRhO1xcbi1cXHRpbnQgcG9zLCByZXQ7XFxuK1xcdGludCBwb3MsIHJldCwgb2ZmcztcXG4gXFx0c2l6ZV90IHNpemU7XFxuLVxcdGNoYXIgKmVycjtcXG4rXFx0Ym9vbCBmcm9tX2VtYmVkZGVkID0gZmFsc2U7XFxuIFxcbiBcXHQvKiBDdXQgb3V0IHRoZSBib290Y29uZmlnIGRhdGEgZXZlbiBpZiB3ZSBoYXZlIG5vIGJvb3Rjb25maWcgb3B0aW9uICovXFxuIFxcdGRhdGEgPSBnZXRfYm9vdF9jb25maWdfZnJvbV9pbml0cmQoXFx1MDAyNnNpemUpO1xcbiBcXHQvKiBJZiB0aGVyZSBpcyBubyBib290Y29uZmlnIGluIGluaXRyZCwgdHJ5IGVtYmVkZGVkIG9uZS4gKi9cXG4tXFx0aWYgKCFkYXRhKVxcbitcXHRpZiAoIWRhdGEpIHtcXG4gXFx0XFx0ZGF0YSA9IHhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhcXHUwMDI2c2l6ZSk7XFxuK1xcdFxcdGZyb21fZW1iZWRkZWQgPSB0cnVlO1xcbitcXHR9XFxuIFxcbi1cXHRzdHJzY3B5KHRtcF9jbWRsaW5lLCBib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpO1xcbi1cXHRlcnIgPSBwYXJzZV9hcmdzKFxcXCJib290Y29uZmlnXFxcIiwgdG1wX2NtZGxpbmUsIE5VTEwsIDAsIDAsIDAsIE5VTEwsXFxuLVxcdFxcdFxcdCBib290Y29uZmlnX3BhcmFtcyk7XFxuLVxcbi1cXHRpZiAoSVNfRVJSKGVycikgfHwgIShib290Y29uZmlnX2ZvdW5kIHx8IElTX0VOQUJMRUQoQ09ORklHX0JPT1RfQ09ORklHX0ZPUkNFKSkpXFxuK1xcdGJvb3Rjb25maWdfZm91bmQgPSBib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkKGJvb3RfY29tbWFuZF9saW5lLCBcXHUwMDI2b2Zmcyk7XFxuK1xcdGlmICghKGJvb3Rjb25maWdfZm91bmQgfHwgSVNfRU5BQkxFRChDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0UpKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0LyogcGFyc2VfYXJncygpIHN0b3BzIGF0IHRoZSBuZXh0IHBhcmFtIG9mICctLScgYW5kIHJldHVybnMgYW4gYWRkcmVzcyAqL1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRpbml0YXJnc19vZmZzID0gZXJyIC0gdG1wX2NtZGxpbmU7XFxuK1xcdC8qIE9mZnNldCBvZiB0aGUgaW5pdCBhcmd1bWVudHMgYWZ0ZXIgYSBcXFwiLS1cXFwiLCBsb2NhdGVkIGJ5IHRoZSBoZWxwZXIuICovXFxuK1xcdGluaXRhcmdzX29mZnMgPSBvZmZzO1xcbiBcXG4gXFx0aWYgKCFkYXRhKSB7XFxuIFxcdFxcdC8qIElmIHVzZXIgaW50ZW5kZWQgdG8gdXNlIGJvb3Rjb25maWcsIHNob3cgYW4gZXJyb3IgbGV2ZWwgbWVzc2FnZSAqL1xcbkBAIC00MjEsOCArNDA5LDI0IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290X2NvbmZpZyh2b2lkKVxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHR4YmNfZ2V0X2luZm8oXFx1MDAyNnJldCwgTlVMTCk7XFxuIFxcdFxcdHByX2luZm8oXFxcIkxvYWQgYm9vdGNvbmZpZzogJWxkIGJ5dGVzICVkIG5vZGVzXFxcXG5cXFwiLCAobG9uZylzaXplLCByZXQpO1xcbi1cXHRcXHQvKiBrZXlzIHN0YXJ0aW5nIHdpdGggXFxcImtlcm5lbC5cXFwiIGFyZSBwYXNzZWQgdmlhIGNtZGxpbmUgKi9cXG4tXFx0XFx0ZXh0cmFfY29tbWFuZF9saW5lID0geGJjX21ha2VfY21kbGluZShcXFwia2VybmVsXFxcIik7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIGtleXMgc3RhcnRpbmcgd2l0aCBcXFwia2VybmVsLlxcXCIgYXJlIHBhc3NlZCB2aWEgY21kbGluZS4gV2hlblxcbitcXHRcXHQgKiB0aGlzIGJvb3Rjb25maWcgY2FtZSBmcm9tIHRoZSBlbWJlZGRlZCBzb3VyY2UgYW5kXFxuK1xcdFxcdCAqIHNldHVwX2FyY2goKSBhbHJlYWR5IHByZXBlbmRlZCB0aGUgcmVuZGVyZWQgXFxcImtlcm5lbFxcXCIgc3VidHJlZVxcbitcXHRcXHQgKiB0byBib290X2NvbW1hbmRfbGluZSwgcmVuZGVyaW5nIGFnYWluIGhlcmUgd291bGQgZHVwbGljYXRlXFxuK1xcdFxcdCAqIHRoZSBrZXlzIGluIHNhdmVkX2NvbW1hbmRfbGluZSBhbmQgbWFrZSBhY2N1bXVsYXRpbmcgaGFuZGxlcnNcXG4rXFx0XFx0ICogKGNvbnNvbGU9LCBlYXJseWNvbj0sIC4uLikgcmUtcmVnaXN0ZXIgdGhlIHNhbWUgdmFsdWUuIFNraXBcXG4rXFx0XFx0ICogb25seSB3aGVuIHRoZSBwcmVwZW5kIHJlYWxseSBoYXBwZW5lZC5cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogT24gYXJjaGVzIHRoYXQgZG8gbm90IHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHLFxcbitcXHRcXHQgKiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcgaXMgdW5zZWxlY3RhYmxlIGFuZFxcbitcXHRcXHQgKiB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkgY29sbGFwc2VzIHRvIGEgc3R1YiByZXR1cm5pbmdcXG4rXFx0XFx0ICogZmFsc2UsIHNvIHRoaXMgcGF0aCBzdGlsbCBydW5zIGFuZCB0aGUgZW1iZWRkZWQgXFxcImtlcm5lbFxcXCJcXG4rXFx0XFx0ICoga2V5cyByZWFjaCB0aGUgY21kbGluZSB2aWEgdGhlIHJ1bnRpbWUgcGFyc2VyIGV4YWN0bHkgYXNcXG4rXFx0XFx0ICogYmVmb3JlIHRoaXMgc2VyaWVzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFmcm9tX2VtYmVkZGVkIHx8ICF4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkpXFxuK1xcdFxcdFxcdGV4dHJhX2NvbW1hbmRfbGluZSA9IHhiY19tYWtlX2NtZGxpbmUoXFxcImtlcm5lbFxcXCIpO1xcbiBcXHRcXHQvKiBBbHNvLCBcXFwiaW5pdC5cXFwiIGtleXMgYXJlIGluaXQgYXJndW1lbnRzICovXFxuIFxcdFxcdGV4dHJhX2luaXRfYXJncyA9IHhiY19tYWtlX2NtZGxpbmUoXFxcImluaXRcXFwiKTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGVcXG5pbmRleCA3Zjc1Y2M2ZWRmOTRhZi4uNGNjZGNlMmZkNWU1YjAgMTAwNjQ0XFxuLS0tIGEvbGliL01ha2VmaWxlXFxuKysrIGIvbGliL01ha2VmaWxlXFxuQEAgLTI3Myw2ICsyNzMsMjIgQEAgZmlsZWNoa19kZWZiY29uZiA9IGNhdCAkKG9yICQocmVhbC1wcmVyZXFzKSwgL2Rldi9udWxsKVxcbiAkKG9iaikvZGVmYXVsdC5iY29uZjogJChDT05GSUdfQk9PVF9DT05GSUdfRU1CRURfRklMRSkgRk9SQ0VcXG4gXFx0JChjYWxsIGZpbGVjaGssZGVmYmNvbmYpXFxuIFxcbitvYmotJChDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcpICs9IGVtYmVkZGVkLWNtZGxpbmUub1xcbiskKG9iaikvZW1iZWRkZWQtY21kbGluZS5vOiAkKG9iaikvZW1iZWRkZWRfY21kbGluZS5iaW5cXG4rXFxuKyMgUmVuZGVyIHRoZSBib290Y29uZmlnIFxcXCJrZXJuZWxcXFwiIHN1YnRyZWUgdG8gYSBmbGF0IGNtZGxpbmUgc3RyaW5nIHVzaW5nXFxuKyMgdGhlIHVzZXJzcGFjZSB0b29scy9ib290Y29uZmlnIHBhcnNlciAoLUMgbW9kZSkuIFRoZSBydW50aW1lIHByZXBlbmRcXG4rIyBoZWxwZXIgZW5mb3JjZXMgQ09NTUFORF9MSU5FX1NJWkUgYXQgYm9vdCwgc28gbm8gYnVpbGQtdGltZSBzaXplXFxuKyMgY2hlY2sgaXMgcGVyZm9ybWVkIGhlcmUgKENPTU1BTkRfTElORV9TSVpFIGlzIGFuIGFyY2ggaGVhZGVyXFxuKyMgY29uc3RhbnQsIG5vdCBhIEtjb25maWcgdmFsdWUpLlxcbitxdWlldF9jbWRfcmVuZGVyX2NtZGxpbmUgPSBCQ09ORjJDICRAXFxuKyAgICAgIGNtZF9yZW5kZXJfY21kbGluZSA9IFxcXFxcXG4rXFx0JChvYmp0cmVlKS90b29scy9ib290Y29uZmlnL2Jvb3Rjb25maWcgLUMgJFxcdTAwM2MgXFx1MDAzZSAkQFxcbitcXG4rdGFyZ2V0cyArPSBlbWJlZGRlZF9jbWRsaW5lLmJpblxcbiskKG9iaikvZW1iZWRkZWRfY21kbGluZS5iaW46ICQob2JqKS9kZWZhdWx0LmJjb25mICQob2JqdHJlZSkvdG9vbHMvYm9vdGNvbmZpZy9ib290Y29uZmlnIEZPUkNFXFxuK1xcdCQoY2FsbCBpZl9jaGFuZ2VkLHJlbmRlcl9jbWRsaW5lKVxcbitcXG4gb2JqLSQoQ09ORklHX1JCVFJFRV9URVNUKSArPSByYnRyZWVfdGVzdC5vXFxuIG9iai0kKENPTkZJR19JTlRFUlZBTF9UUkVFX1RFU1QpICs9IGludGVydmFsX3RyZWVfdGVzdC5vXFxuIFxcbmRpZmYgLS1naXQgYS9saWIvYm9vdGNvbmZpZy5jIGIvbGliL2Jvb3Rjb25maWcuY1xcbmluZGV4IGY0NDViNzcwM2ZkZDk2Li44OWM4OGUzNTkxNzlmMCAxMDA2NDRcXG4tLS0gYS9saWIvYm9vdGNvbmZpZy5jXFxuKysrIGIvbGliL2Jvb3Rjb25maWcuY1xcbkBAIC0xOSw5ICsxOSwxMyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJybm8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NhY2hlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21waWxlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5pdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlcGFyYW0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByaW50ay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3ByaW50Zi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtYmxvY2suaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3NldHVwLmhcXHUwMDNlXFx0XFx0LyogQ09NTUFORF9MSU5FX1NJWkUgKi9cXG4gXFxuICNpZmRlZiBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURcXG4gLyogZW1iZWRkZWRfYm9vdGNvbmZpZ19kYXRhIGlzIGRlZmluZWQgaW4gYm9vdGNvbmZpZy1kYXRhLlMgKi9cXG5AQCAtMzQsNyArMzgsMTI5IEBAIGNvbnN0IGNoYXIgKiBfX2luaXQgeGJjX2dldF9lbWJlZGRlZF9ib290Y29uZmlnKHNpemVfdCAqc2l6ZSlcXG4gXFx0cmV0dXJuICgqc2l6ZSkgPyBlbWJlZGRlZF9ib290Y29uZmlnX2RhdGEgOiBOVUxMO1xcbiB9XFxuICNlbmRpZlxcbi0jZW5kaWZcXG4rXFxuKyNpZmRlZiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcXG4rLyogZW1iZWRkZWRfa2VybmVsX2NtZGxpbmUgaXMgZGVmaW5lZCBpbiBlbWJlZGRlZC1jbWRsaW5lLlMgKi9cXG4rZXh0ZXJuIF9fdmlzaWJsZSBjb25zdCBjaGFyIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lW107XFxuK2V4dGVybiBfX3Zpc2libGUgY29uc3QgY2hhciBlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmRbXTtcXG4rXFxuKy8qIFNldCBvbmNlIHRoZSBlbWJlZGRlZCBjbWRsaW5lIGhhcyBhY3R1YWxseSBiZWVuIHByZXBlbmRlZC4gKi9cXG4rc3RhdGljIGJvb2wgeGJjX2NtZGxpbmVfYXBwbGllZCBfX2luaXRkYXRhO1xcbitcXG4rLypcXG4rICogc3RyX3ByZXBlbmQoKSAtIFByZXBlbmQgQHNyYyBpbiBmcm9udCBvZiB0aGUgc3RyaW5nIGluIEBkc3QsIGluIHBsYWNlXFxuKyAqIEBkc3Q6IE5VTC10ZXJtaW5hdGVkIGRlc3RpbmF0aW9uIGJ1ZmZlciwgY3VycmVudGx5IEBkc3RfbGVuIGJ5dGVzIGxvbmdcXG4rICogQGRzdF9sZW46IGxlbmd0aCBvZiB0aGUgY3VycmVudCBAZHN0IHN0cmluZyAoZXhjbHVkaW5nIGl0cyBOVUwpXFxuKyAqIEBzcmM6IGJ5dGVzIHRvIHByZXBlbmQgKG5vdCBOVUwtdGVybWluYXRlZClcXG4rICogQHNyY19sZW46IG51bWJlciBvZiBieXRlcyBmcm9tIEBzcmMgdG8gcHJlcGVuZFxcbisgKlxcbisgKiBUaGUgY2FsbGVyIG11c3QgZ3VhcmFudGVlIEBkc3QgaGFzIHJvb20gZm9yIHNyY19sZW4gKyBkc3RfbGVuICsgMSBieXRlcy5cXG4rICogTW92aW5nIGRzdF9sZW4gKyAxIGJ5dGVzIGNhcnJpZXMgQGRzdCdzIE5VTCB0ZXJtaW5hdG9yIHRvbywgc28gYW4gZW1wdHlcXG4rICogQGRzdCBuZWVkcyBubyBzcGVjaWFsIGNhc2UuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBfX2luaXQgc3RyX3ByZXBlbmQoY2hhciAqZHN0LCBzaXplX3QgZHN0X2xlbixcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY19sZW4pXFxuK3tcXG4rXFx0bWVtbW92ZShkc3QgKyBzcmNfbGVuLCBkc3QsIGRzdF9sZW4gKyAxKTtcXG4rXFx0bWVtY3B5KGRzdCwgc3JjLCBzcmNfbGVuKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSAtIFByZXBlbmQgZW1iZWRkZWQgYm9vdGNvbmZpZyBjbWRsaW5lXFxuKyAqIEBkc3Q6IGNtZGxpbmUgYnVmZmVyIHRvIHByZXBlbmQgaW50byAobXVzdCBhbHJlYWR5IGNvbnRhaW4gYSBOVUwgYnl0ZSlcXG4rICogQHNpemU6IHRvdGFsIGNhcGFjaXR5IG9mIEBkc3QgaW4gYnl0ZXNcXG4rICpcXG4rICogUHJlcGVuZCB0aGUgYnVpbGQtdGltZS1yZW5kZXJlZCBcXFwia2VybmVsXFxcIiBzdWJ0cmVlIG9mIHRoZSBlbWJlZGRlZFxcbisgKiBib290Y29uZmlnIHRvIEBkc3QuIFRoZSByZW5kZXJlZCBzdHJpbmcgYWxyZWFkeSBlbmRzIHdpdGggYSBzaW5nbGVcXG4rICogc3BhY2UgKHRoZSB4YmNfc25wcmludF9jbWRsaW5lKCkgaW52YXJpYW50KSwgd2hpY2ggc2VydmVzIGFzIHRoZVxcbisgKiBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgZW1iZWRkZWQga2V5cyBhbmQgYW55IGV4aXN0aW5nIGNvbnRlbnQgb2YgQGRzdC5cXG4rICogT24gb3ZlcmZsb3csIGxvZyBhbiBlcnJvciBhbmQgbGVhdmUgQGRzdCB1bnRvdWNoZWQgcmF0aGVyIHRoYW5cXG4rICogc2lsZW50bHkgdHJ1bmNhdGluZzogYm9vdGluZyB3aXRob3V0IHRoZSBlbWJlZGRlZCB2YWx1ZXMgaXMgYmV0dGVyXFxuKyAqIHRoYW4gcmVmdXNpbmcgdG8gYm9vdCwgYW5kIHRoZSBlcnJvciBtZXNzYWdlIHRlbGxzIHRoZSB1c2VyIHdoeVxcbisgKiB0aGVpciBlbWJlZGRlZCBrZXlzIGFyZSBtaXNzaW5nLlxcbisgKlxcbisgKiBJbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBzZXR1cF9hcmNoKCkgYmVmb3JlIHBhcnNlX2Vhcmx5X3BhcmFtKCkgc29cXG4rICogdGhhdCBlYXJseV9wYXJhbSgpIGhhbmRsZXJzIHNlZSB0aGUgZW1iZWRkZWQgdmFsdWVzLlxcbisgKi9cXG4rdm9pZCBfX2luaXQgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShjaGFyICpkc3QsIHNpemVfdCBzaXplKVxcbit7XFxuK1xcdHNpemVfdCBlbWJlZF9sZW4gPSBlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmQgLSBlbWJlZGRlZF9rZXJuZWxfY21kbGluZTtcXG4rXFx0c2l6ZV90IGRzdF9sZW47XFxuK1xcbitcXHRpZiAoIXNpemUgfHwgZW1iZWRfbGVuIFxcdTAwM2M9IDEpXFx0LyogdHJhaWxpbmcgTlVMIG9ubHkgKi9cXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRlbWJlZF9sZW4tLTtcXHRcXHRcXHQvKiBleGNsdWRlIHRyYWlsaW5nIE5VTCBieXRlICovXFxuK1xcbitcXHRkc3RfbGVuID0gc3Rybmxlbihkc3QsIHNpemUpO1xcbitcXHRpZiAoZW1iZWRfbGVuICsgZHN0X2xlbiArIDEgXFx1MDAzZSBzaXplKSB7XFxuK1xcdFxcdHByX2VycihcXFwiZW1iZWRkZWQgYm9vdGNvbmZpZyBjbWRsaW5lICglenUgYnl0ZXMpIGRvZXMgbm90IGZpdCBpbiBDT01NQU5EX0xJTkVfU0laRSB3aXRoICV6dSBieXRlcyBhbHJlYWR5IHVzZWQ7IGlnbm9yaW5nIGVtYmVkZGVkIHZhbHVlc1xcXFxuXFxcIixcXG4rXFx0XFx0ICAgICAgIGVtYmVkX2xlbiwgZHN0X2xlbik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0c3RyX3ByZXBlbmQoZHN0LCBkc3RfbGVuLCBlbWJlZGRlZF9rZXJuZWxfY21kbGluZSwgZW1iZWRfbGVuKTtcXG4rXFx0eGJjX2NtZGxpbmVfYXBwbGllZCA9IHRydWU7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkgLSBEaWQgdGhlIGVtYmVkZGVkIGNtZGxpbmUgZ2V0IHByZXBlbmRlZD9cXG4rICpcXG4rICogUmV0dXJuIHRydWUgaWYgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZSgpIGFjdHVhbGx5IHByZXBlbmRlZCB0aGVcXG4rICogZW1iZWRkZWQgXFxcImtlcm5lbFxcXCIgc3VidHJlZS4gc2V0dXBfYm9vdF9jb25maWcoKSB1c2VzIHRoaXMgdG8gYXZvaWRcXG4rICogcmVuZGVyaW5nIHRoZSBzYW1lIGtleXMgYSBzZWNvbmQgdGltZS5cXG4rICovXFxuK2Jvb2wgX19pbml0IHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZClcXG4re1xcbitcXHRyZXR1cm4geGJjX2NtZGxpbmVfYXBwbGllZDtcXG4rfVxcbisjZW5kaWZcXHQvKiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcgKi9cXG4rXFxuKy8qIHBhcnNlX2FyZ3MoKSBjYWxsYmFjazogZmxhZyB3aGVuIHRoZSBcXFwiYm9vdGNvbmZpZ1xcXCIgcGFyYW1ldGVyIGlzIHByZXNlbnQuICovXFxuK3N0YXRpYyBpbnQgX19pbml0IGJvb3Rjb25maWdfb3B0aW4oY2hhciAqcGFyYW0sIGNoYXIgKnZhbCxcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3QgY2hhciAqdW51c2VkLCB2b2lkICphcmcpXFxuK3tcXG4rXFx0aWYgKCFzdHJjbXAocGFyYW0sIFxcXCJib290Y29uZmlnXFxcIikpXFxuK1xcdFxcdCooYm9vbCAqKWFyZyA9IHRydWU7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZCgpIC0gV2FzIFxcXCJib290Y29uZmlnXFxcIiBwYXNzZWQgb24gdGhlIGNtZGxpbmU/XFxuKyAqIEBib290X2NtZGxpbmU6IGtlcm5lbCBjb21tYW5kIGxpbmUgdG8gaW5zcGVjdCAobm90IG1vZGlmaWVkKVxcbisgKiBAZW5kX29mZnNldDogaWYgbm9uLU5VTEwsIHNldCB0byB0aGUgb2Zmc2V0IG9mIHRoZSBpbml0IGFyZ3VtZW50cyB0aGF0XFxuKyAqXFx0XFx0Zm9sbG93IGEgXFxcIi0tXFxcIiBzZXBhcmF0b3IsIG9yIDAgd2hlbiB0aGVyZSBpcyBub25lXFxuKyAqXFxuKyAqIFBhcnNlIGEgcHJpdmF0ZSBjb3B5IG9mIEBib290X2NtZGxpbmUgKHBhcnNlX2FyZ3MoKSBpcyBkZXN0cnVjdGl2ZSkgYW5kXFxuKyAqIHJlcG9ydCB3aGV0aGVyIFxcXCJib290Y29uZmlnXFxcIiBpcyBwcmVzZW50IGJlZm9yZSB0aGUgXFxcIi0tXFxcIiBzZXBhcmF0b3IuXFxuKyAqIHNldHVwX2FyY2goKSB1c2VzIHRoaXMgdG8gZ2F0ZSBwcmVwZW5kaW5nIHRoZSBidWlsZC10aW1lIGVtYmVkZGVkIGNtZGxpbmU7XFxuKyAqIHNldHVwX2Jvb3RfY29uZmlnKCkgdXNlcyBpdCBmb3IgdGhlIHJ1bnRpbWUgb3B0LWluIGFuZCB0byBsb2NhdGUgdGhlIGluaXRcXG4rICogYXJndW1lbnRzIHZpYSBAZW5kX29mZnNldC4gU2hhcmluZyBvbmUgcGFyc2VyIGtlZXBzIHRoZSBlYXJseSBhbmQgbGF0ZVxcbisgKiBwYXRocyBhZ3JlZWluZyBvbiB3aGF0IGNvdW50cyBhcyBvcHQtaW4uIENPTkZJR19CT09UX0NPTkZJR19GT1JDRSBpcyBub3RcXG4rICogZm9sZGVkIGluIGhlcmU7IGNhbGxlcnMgYXBwbHkgaXQgd2hlcmUgdGhleSBuZWVkIGl0LlxcbisgKi9cXG4rYm9vbCBfX2luaXQgYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZChjb25zdCBjaGFyICpib290X2NtZGxpbmUsIGludCAqZW5kX29mZnNldClcXG4re1xcbitcXHRzdGF0aWMgY2hhciB0bXBfY21kbGluZVtDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTtcXG4rXFx0Ym9vbCBmb3VuZCA9IGZhbHNlO1xcbitcXHRjaGFyICplcnI7XFxuK1xcbitcXHRpZiAoZW5kX29mZnNldClcXG4rXFx0XFx0KmVuZF9vZmZzZXQgPSAwO1xcbitcXG4rXFx0c3Ryc2NweSh0bXBfY21kbGluZSwgYm9vdF9jbWRsaW5lLCBDT01NQU5EX0xJTkVfU0laRSk7XFxuK1xcdGVyciA9IHBhcnNlX2FyZ3MoXFxcImJvb3Rjb25maWdcXFwiLCB0bXBfY21kbGluZSwgTlVMTCwgMCwgMCwgMCxcXG4rXFx0XFx0XFx0IFxcdTAwMjZmb3VuZCwgYm9vdGNvbmZpZ19vcHRpbik7XFxuK1xcdGlmIChJU19FUlIoZXJyKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0LyogcGFyc2VfYXJncygpIHN0b3BzIGF0IFxcXCItLVxcXCIgYW5kIHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHJlc3QuICovXFxuK1xcdGlmIChlbmRfb2Zmc2V0IFxcdTAwMjZcXHUwMDI2IGVycilcXG4rXFx0XFx0KmVuZF9vZmZzZXQgPSBlcnIgLSB0bXBfY21kbGluZTtcXG4rXFxuK1xcdHJldHVybiBmb3VuZDtcXG4rfVxcbitcXG4rI2VuZGlmXFx0LyogX19LRVJORUxfXyAqL1xcbiBcXG4gLypcXG4gICogRXh0cmEgQm9vdCBDb25maWcgKFhCQykgaXMgZ2l2ZW4gYXMgdHJlZS1zdHJ1Y3R1cmVkIGFzY2lpIHRleHQgb2ZcXG5AQCAtNDI3LDExICs1NTMsMzAgQEAgc3RhdGljIGNoYXIgeGJjX25hbWVidWZbWEJDX0tFWUxFTl9NQVhdIF9faW5pdGRhdGE7XFxuIGludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpXFxuIHtcXG4gXFx0c3RydWN0IHhiY19ub2RlICprbm9kZSwgKnZub2RlO1xcbi1cXHRjaGFyICplbmQgPSBidWYgKyBzaXplO1xcbiBcXHRjb25zdCBjaGFyICp2YWwsICpxO1xcbitcXHRzaXplX3QgbGVuID0gMDtcXG4gXFx0aW50IHJldDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIFRyYWNrIHRoZSBydW5uaW5nIHdyaXR0ZW4gbGVuZ3RoIHJhdGhlciB0aGFuIGFkdmFuY2luZyBAYnVmLCBzbyB3ZVxcbitcXHQgKiBuZXZlciBmb3JtIFxcXCJidWYgKyBzaXplXFxcIiBvciBcXFwiYnVmICs9IHJldFxcXCIgd2hpbGUgQGJ1ZiBpcyBOVUxMICh0aGVcXG4rXFx0ICogc2l6ZS1wcm9iZSBjYWxsIHBhc3NlcyBidWY9TlVMTCwgc2l6ZT0wKS4gTlVMTCBwb2ludGVyIGFyaXRobWV0aWNcXG4rXFx0ICogaXMgdW5kZWZpbmVkIGJlaGF2aW9yIGFuZCB0cmlwcyBob3N0IFVCU2FuIC8gRk9SVElGWV9TT1VSQ0Ugd2hlblxcbitcXHQgKiB0aGlzIHJlbmRlcmVyIHJ1bnMgYXQga2VybmVsIGJ1aWxkIHRpbWUuIHNucHJpbnRmKE5VTEwsIDAsIC4uLilcXG4rXFx0ICogaXRzZWxmIGlzIHdlbGwgZGVmaW5lZCBhbmQgcmV0dXJucyB0aGUgd291bGQtYmUgbGVuZ3RoLlxcbitcXHQgKi9cXG4gXFx0eGJjX25vZGVfZm9yX2VhY2hfa2V5X3ZhbHVlKHJvb3QsIGtub2RlLCB2YWwpIHtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQW4gZW1wdHkgb3IgdmFsdWUtb25seSBAcm9vdCAoZS5nLiBcXFwia2VybmVsIHt9XFxcIiBvclxcbitcXHRcXHQgKiBcXFwia2VybmVsID0geFxcXCIsIHBvc3NpYmx5IGFsb25nc2lkZSBcXFwia2VybmVsLmZvbyA9IGJhclxcXCIpXFxuK1xcdFxcdCAqIHlpZWxkcyBAcm9vdCBpdHNlbGYgaGVyZS4gU2tpcCBpdDogY29tcG9zaW5nIGEga2V5IGZvciBpdFxcbitcXHRcXHQgKiB3b3VsZCBmYWlsIHdpdGggLUVJTlZBTCwgeWV0IGFueSByZWFsIGRlc2NlbmRhbnQga2V5cyBtdXN0XFxuK1xcdFxcdCAqIHN0aWxsIGJlIHJlbmRlcmVkLiBBbiBlbnRpcmVseSBlbXB0eSBzdWJ0cmVlIHRoZW4gcmVuZGVyc1xcbitcXHRcXHQgKiBub3RoaW5nIGFuZCByZXR1cm5zIDAgcmF0aGVyIHRoYW4gYW4gZXJyb3IuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoa25vZGUgPT0gcm9vdClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbiBcXHRcXHRyZXQgPSB4YmNfbm9kZV9jb21wb3NlX2tleV9hZnRlcihyb290LCBrbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0eGJjX25hbWVidWYsIFhCQ19LRVlMRU5fTUFYKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuQEAgLTQzOSwxMCArNTg0LDExIEBAIGludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpXFxuIFxcbiBcXHRcXHR2bm9kZSA9IHhiY19ub2RlX2dldF9jaGlsZChrbm9kZSk7XFxuIFxcdFxcdGlmICghdm5vZGUpIHtcXG4tXFx0XFx0XFx0cmV0ID0gc25wcmludGYoYnVmLCByZXN0KGJ1ZiwgZW5kKSwgXFxcIiVzIFxcXCIsIHhiY19uYW1lYnVmKTtcXG4rXFx0XFx0XFx0cmV0ID0gc25wcmludGYoYnVmID8gYnVmICsgbGVuIDogTlVMTCwgcmVzdChsZW4sIHNpemUpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFxcIiVzIFxcXCIsIHhiY19uYW1lYnVmKTtcXG4gXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuLVxcdFxcdFxcdGJ1ZiArPSByZXQ7XFxuK1xcdFxcdFxcdGxlbiArPSByZXQ7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHhiY19hcnJheV9mb3JfZWFjaF92YWx1ZSh2bm9kZSwgdmFsKSB7XFxuQEAgLTQ1MiwxNSArNTk4LDE1IEBAIGludCBfX2luaXQgeGJjX3NucHJpbnRfY21kbGluZShjaGFyICpidWYsIHNpemVfdCBzaXplLCBzdHJ1Y3QgeGJjX25vZGUgKnJvb3QpXFxuIFxcdFxcdFxcdCAqIHdoaXRlc3BhY2UuXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRxID0gc3RycGJyayh2YWwsIFxcXCIgXFxcXHRcXFxcclxcXFxuXFxcIikgPyBcXFwiXFxcXFxcXCJcXFwiIDogXFxcIlxcXCI7XFxuLVxcdFxcdFxcdHJldCA9IHNucHJpbnRmKGJ1ZiwgcmVzdChidWYsIGVuZCksIFxcXCIlcz0lcyVzJXMgXFxcIixcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHhiY19uYW1lYnVmLCBxLCB2YWwsIHEpO1xcbitcXHRcXHRcXHRyZXQgPSBzbnByaW50ZihidWYgPyBidWYgKyBsZW4gOiBOVUxMLCByZXN0KGxlbiwgc2l6ZSksXFxuK1xcdFxcdFxcdFxcdCAgICAgICBcXFwiJXM9JXMlcyVzIFxcXCIsIHhiY19uYW1lYnVmLCBxLCB2YWwsIHEpO1xcbiBcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4tXFx0XFx0XFx0YnVmICs9IHJldDtcXG4rXFx0XFx0XFx0bGVuICs9IHJldDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRyZXR1cm4gYnVmIC0gKGVuZCAtIHNpemUpO1xcbitcXHRyZXR1cm4gbGVuO1xcbiB9XFxuICN1bmRlZiByZXN0XFxuIFxcbmRpZmYgLS1naXQgYS9saWIvZW1iZWRkZWQtY21kbGluZS5TIGIvbGliL2VtYmVkZGVkLWNtZGxpbmUuU1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJkYTgxYjRhNDJiZWFmXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2xpYi9lbWJlZGRlZC1jbWRsaW5lLlNcXG5AQCAtMCwwICsxLDE2IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKy8qXFxuKyAqIEVtYmVkIHRoZSBidWlsZC10aW1lLXJlbmRlcmVkIGJvb3Rjb25maWcgXFxcImtlcm5lbFxcXCIgc3VidHJlZSBhcyBhIGZsYXRcXG4rICogY21kbGluZSBzdHJpbmcuIHNldHVwX2FyY2goKSBwcmVwZW5kcyB0aGlzIHRvIGJvb3RfY29tbWFuZF9saW5lIG9uXFxuKyAqIGFyY2hpdGVjdHVyZXMgdGhhdCBzZWxlY3QgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJRy5cXG4rICpcXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBCcmVubyBMZWl0YW8gXFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXFx1MDAzZVxcbisgKi9cXG4rXFx0LnNlY3Rpb24gLmluaXQucm9kYXRhLmVtYmVkX2NtZGxpbmUsIFxcXCJhXFxcIiwgJXByb2diaXRzXFxuK1xcdC5nbG9iYWwgZW1iZWRkZWRfa2VybmVsX2NtZGxpbmVcXG4rZW1iZWRkZWRfa2VybmVsX2NtZGxpbmU6XFxuK1xcdC5pbmNiaW4gXFxcImxpYi9lbWJlZGRlZF9jbWRsaW5lLmJpblxcXCJcXG4rXFx0LmJ5dGUgMFxcbitcXHQuZ2xvYmFsIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZFxcbitlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmQ6XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL2Jvb3Rjb25maWcvTWFrZWZpbGUgYi90b29scy9ib290Y29uZmlnL01ha2VmaWxlXFxuaW5kZXggOTBlYjQ3YzlkOGRlNjcuLjNjYjgwNjZkNTE0MWJiIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL2Jvb3Rjb25maWcvTWFrZWZpbGVcXG4rKysgYi90b29scy9ib290Y29uZmlnL01ha2VmaWxlXFxuQEAgLTE1LDcgKzE1LDcgQEAgb3ZlcnJpZGUgQ0ZMQUdTICs9IC1XYWxsIC1nIC1JJChDVVJESVIpL2luY2x1ZGVcXG4gQUxMX1RBUkdFVFMgOj0gYm9vdGNvbmZpZ1xcbiBBTExfUFJPR1JBTVMgOj0gJChwYXRzdWJzdCAlLCQoT1VUUFVUKSUsJChBTExfVEFSR0VUUykpXFxuIFxcbi1hbGw6ICQoQUxMX1BST0dSQU1TKSB0ZXN0XFxuK2FsbDogJChBTExfUFJPR1JBTVMpXFxuIFxcbiAkKE9VVFBVVClib290Y29uZmlnOiBtYWluLmMgaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmggJChMSUJTUkMpXFxuIFxcdCQoQ0MpICQoZmlsdGVyICUuYywkXikgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEBcXG5AQCAtMjcsNCArMjcsNCBAQCBpbnN0YWxsOiAkKEFMTF9QUk9HUkFNUylcXG4gXFx0aW5zdGFsbCAkKE9VVFBVVClib290Y29uZmlnICQoREVTVERJUikkKGJpbmRpcilcXG4gXFxuIGNsZWFuOlxcbi1cXHQkKFJNKSAtZiAkKE9VVFBVVCkqLm8gJChBTExfUFJPR1JBTVMpXFxuK1xcdHJtIC1mICQoT1VUUFVUKSoubyAkKEFMTF9QUk9HUkFNUylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMTg6MTU6MjguMTkyMzcyNzA2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTEyNjc3NTI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGJ1aWxkLXRpbWUgZmVhdHVyZSB0byByZW5kZXIgZW1iZWRkZWQgYm9vdGNvbmZpZyBpbnRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiBBbGwgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBrZXJuZWwgYXJlIGNvbmZpbmVkIHRvIGBfX2luaXRgIGZ1bmN0aW9ucyAoZS5nLiwgYHNldHVwX2FyY2hgLCBgc2V0dXBfYm9vdF9jb25maWdgLCBgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZWApLCB3aGljaCBydW4gb25seSBvbmNlIGR1cmluZyBlYXJseSBib290IHdpdGggc3RhdGljIGlucHV0cyAoY29tcGlsZS10aW1lIGVtYmVkZGVkIGZpbGVzIGFuZCB0aGUgYm9vdGxvYWRlciBjb21tYW5kIGxpbmUpLiBTeXprYWxsZXIgY2Fubm90IG11dGF0ZSB0aGVzZSBpbnB1dHMgb3IgcmVhY2ggdGhpcyBjb2RlIGR1cmluZyBydW50aW1lIHN5c2NhbGwgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTE4MWQzMDFjOWJkMDc2Y2VhYjYzNWE0NzM3ZThiZjVjNmEyNDVlMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDE4OjE1OjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ib290Y29uZmlnLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3RcbmluZGV4IGY3MTI3NTg0NzJkNWM2Li4zZDY0MTI0NThjOGI2OSAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYm9vdGNvbmZpZy5yc3RcbkBAIC0yMzQsNiArMjM0LDg3IEBAIEtjb25maWcgb3B0aW9uIHNlbGVjdGVkLlxuIE5vdGUgdGhhdCBldmVuIGlmIHlvdSBzZXQgdGhpcyBvcHRpb24sIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIGVtYmVkZGVkXG4gYm9vdGNvbmZpZyBieSBhbm90aGVyIGJvb3Rjb25maWcgd2hpY2ggYXR0YWNoZWQgdG8gdGhlIGluaXRyZC5cbiBcbitSZW5kZXJpbmcgRW1iZWRkZWQga2VybmVsLiogS2V5cyBhdCBCdWlsZCBUaW1lXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuK1xuK0J5IGRlZmF1bHQsIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIChgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRD15YGApIGlzXG4rcGFyc2VkIGF0IHJ1bnRpbWUsIGFmdGVyIGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgIGhhcyBhbHJlYWR5IHJ1bi4gRWFybHlcbitwYXJhbWV0ZXIgaGFuZGxlcnMgKGBgbWVtPWBgLCBgYGVhcmx5Y29uPWBgLCBgYGxvZ2xldmVsPWBgLCAuLi4pIHRoZXJlZm9yZVxuK2Nhbm5vdCBzZWUgdmFsdWVzIHN1cHBsaWVkIHZpYSB0aGUgZW1iZWRkZWQgYGBrZXJuZWxgYCBzdWJ0cmVlLlxuK1xuK2BgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHYGAgcmVzb2x2ZXMgdGhpcyBieSByZW5kZXJpbmcgdGhlXG4rYGBrZXJuZWxgYCBzdWJ0cmVlIG9mIGBgQ09ORklHX0JPT1RfQ09ORklHX0VNQkVEX0ZJTEVgYCBpbnRvIGEgZmxhdCBjbWRsaW5lXG4rc3RyaW5nIGF0IGtlcm5lbCBidWlsZCB0aW1lICh2aWEgYGB0b29scy9ib290Y29uZmlnIC1DYGApIGFuZCBwcmVwZW5kaW5nXG4raXQgdG8gYGBib290X2NvbW1hbmRfbGluZWBgIGR1cmluZyBlYXJseSBhcmNoaXRlY3R1cmUgc2V0dXAsIHNvIHRoZSBrZXlzXG4rYXJlIHZpc2libGUgdG8gYGBwYXJzZV9lYXJseV9wYXJhbSgpYGAuXG4rXG4rVGhlIG9wdGlvbiByZXF1aXJlcyBgYENPTkZJR19CT09UX0NPTkZJR19FTUJFRD15YGAsIGEgbm9uLWVtcHR5XG4rYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURfRklMRWBgLCBgYENPTkZJR19DTURMSU5FYGAgdG8gYmUgZW1wdHksIGFuZFxuK2FuIGFyY2hpdGVjdHVyZSB0aGF0IHNlbGVjdHMgYGBDT05GSUdfQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR2BgLlxuK0N1cnJlbnRseSBvbmx5IHg4NiBzZWxlY3RzIGl0OyBvbiBvdGhlciBhcmNoaXRlY3R1cmVzIHRoZSBlbWJlZGRlZFxuK2Jvb3Rjb25maWcgc3RpbGwgd29ya3MsIGJ1dCBvbmx5IHRocm91Z2ggdGhlIGxhdGUgcnVudGltZSBwYXJzZXIuXG4rXG4rVGhlIHNhbWUgYGBib290Y29uZmlnYGAgb3B0LWluIGFwcGxpZXMgYXMgZWxzZXdoZXJlOiB0aGUgcmVuZGVyZWQga2V5c1xuK2FyZSBwcmVwZW5kZWQgb25seSB3aGVuIGBgYm9vdGNvbmZpZ2BgIChpbiBhbnkgZm9ybSkgYXBwZWFycyBvbiB0aGVcbitrZXJuZWwgY29tbWFuZCBsaW5lLCBvciB3aGVuIGBgQ09ORklHX0JPT1RfQ09ORklHX0ZPUkNFYGAgaXMgc2V0LCB3aGljaFxuK2RlZmF1bHRzIHRvIGBgeWBgIHdoZW4gYGBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURgYCBpcyBzZXQuXG4rXG4rRm9yIGV4YW1wbGUsIGdpdmVuOjpcbitcbisga2VybmVsIHtcbisgICBsb2dsZXZlbCA9IDdcbisgICBtZW0gPSA0R1xuKyB9XG4rXG4rdGhlIGtlcm5lbCBib290cyBhcyBpZiBgYGxvZ2xldmVsPTcgbWVtPTRHYGAgaGFkIGJlZW4gcHJlcGVuZGVkIHRvIHRoZVxuK2Jvb3Rsb2FkZXIgY29tbWFuZCBsaW5lLCB3aXRoIHRoZSB2YWx1ZXMgdmlzaWJsZSB0byBlYXJseS1wYXJzZWRcbitoYW5kbGVycy4gQ29tbWEtc2VwYXJhdGVkIHZhbHVlcyBhcmUgc3RpbGwgZXhwYW5kZWQgaW50byBtdWx0aXBsZVxuK2NtZGxpbmUgZW50cmllcyBwZXIgdGhlIGJvb3Rjb25maWcgYXJyYXkgY29udmVudGlvbiAtLSB0aGUgZW1iZWRkZWRcbitgYGtlcm5lbC5lYXJseWNvbiA9IFwidWFydDgyNTAsaW8sMHgzZjhcImBgIG11c3QgYmUgcXVvdGVkIHRvIGxhbmQgYXMgYVxuK3NpbmdsZSBgYGVhcmx5Y29uPWBgIGVudHJ5LCBleGFjdGx5IGFzIGZvciB0aGUgcnVudGltZSBwYXJzZXIuXG4rXG4rSWYgdGhlIHJlbmRlcmVkIHN0cmluZyB3b3VsZCBub3QgZml0IGluIGBgQ09NTUFORF9MSU5FX1NJWkVgYCB0b2dldGhlclxuK3dpdGggdGhlIGV4aXN0aW5nIGNvbW1hbmQgbGluZSwgdGhlIHByZXBlbmQgaXMgc2tpcHBlZCBhbmQgYW4gZXJyb3IgaXNcbitsb2dnZWQsIHNvIGFuIG92ZXJzaXplZCBlbWJlZGRlZCBib290Y29uZmlnIGNhbm5vdCBicmljayBhIGJvb3QuXG4rXG4rSW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21tYW5kIGxpbmUgYW5kIGJvb3Rjb25maWcgc291cmNlc1xuK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cbitcbitXaXRoIGBgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHPXlgYCB0aGUgcmVuZGVyZWQgYGBrZXJuZWxgYFxuK3N1YnRyZWUgYmVoYXZlcyBsaWtlIGEgYnVpbGQtdGltZSBjb21tYW5kIGxpbmUgKHNpbWlsYXIgdG9cbitgYENPTkZJR19DTURMSU5FYGApLCBub3QgbGlrZSBhIGJvb3Rjb25maWcgc291cmNlLiBJdCBpcyBwcmVwZW5kZWQgdG9cbitgYGJvb3RfY29tbWFuZF9saW5lYGAgaW4gYGBzZXR1cF9hcmNoKClgYCwgYmVmb3JlIGBgcGFyc2VfZWFybHlfcGFyYW0oKWBgXG4rYW5kIGxvbmcgYmVmb3JlIHRoZSBydW50aW1lIHBhcnNlciBsb29rcyBhdCBhbiBpbml0cmQuIE9wdGlvbnMgY2FuIHJlYWNoXG4rdGhlIGtlcm5lbCBmcm9tIHVwIHRvIGZvdXIgcGxhY2VzOlxuK1xuKy0gQm9vdGxvYWRlciBjb21tYW5kIGxpbmU6IHRoZSBhcmd1bWVudHMgdGhlIGJvb3QgbG9hZGVyIHBhc3Nlcy4gVGhlXG4rICBlbWJlZGRlZCBjbWRsaW5lIGlzIHByZXBlbmRlZCBpbiBmcm9udCBvZiB0aGVtLCBzbyBmb3IgbGFzdC1vbmUtd2luc1xuKyAgcGFyYW1ldGVycyBhIGJvb3Rsb2FkZXIgb3B0aW9uIHN0aWxsIG92ZXJyaWRlcyB0aGUgZW1iZWRkZWQgdmFsdWUuXG4rICBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUuXG4rLSBFbWJlZGRlZCBjbWRsaW5lICh0aGlzIG9wdGlvbik6IHRoZSByZW5kZXJlZCBgYGtlcm5lbGBgIHN1YnRyZWUsXG4rICBwcmVwZW5kZWQgZWFybHkgc28gaXQgaXMgc2VlbiBieSBgYHBhcnNlX2Vhcmx5X3BhcmFtKClgYC4gVmlzaWJsZSBpblxuKyAgL3Byb2MvY21kbGluZS5cbistIEluaXRyZCBib290Y29uZmlnOiBwYXJzZWQgbGF0ZSBpbiBgYHNldHVwX2Jvb3RfY29uZmlnKClgYDsgaXRzXG4rICBgYGtlcm5lbGBgIGtleXMgYXJlIHBsYWNlZCBhaGVhZCBvZiBgYGJvb3RfY29tbWFuZF9saW5lYGAsIGkuZS4gYmVmb3JlXG4rICB0aGUgZW1iZWRkZWQgY21kbGluZSwgc28gbGFzdC13aW5zIGZhdm9ycyB0aGUgZW1iZWRkZWQgdmFsdWVzLiBBcyBhXG4rICBib290Y29uZmlnIHNvdXJjZSwgYW4gaW5pdHJkIGJvb3Rjb25maWcgc3RpbGwgcmVwbGFjZXMgdGhlIGVtYmVkZGVkXG4rICBib290Y29uZmlnLiBWaXNpYmxlIGluIC9wcm9jL2NtZGxpbmUgYW5kIC9wcm9jL2Jvb3Rjb25maWcuXG4rLSBFbWJlZGRlZCBib290Y29uZmlnIChydW50aW1lKTogcGFyc2VkIGxhdGUsIG9ubHkgd2hlbiBubyBpbml0cmRcbisgIGJvb3Rjb25maWcgaXMgcHJlc2VudC4gVmlzaWJsZSBpbiAvcHJvYy9jbWRsaW5lIGFuZCAvcHJvYy9ib290Y29uZmlnLlxuK1xuK1NvIHdpdGggdGhpcyBvcHRpb24gdGhlIGVtYmVkZGVkIGBga2VybmVsLipgYCB2YWx1ZXMgdGFrZSBwcmVjZWRlbmNlXG4rb3ZlciBhbiBpbml0cmQgYm9vdGNvbmZpZydzIGBga2VybmVsLipgYCB2YWx1ZXM6IGZvciBlYXJseSBwYXJhbWV0ZXJzXG4rdGhlIGluaXRyZCBpcyBub3QgcGFyc2VkIHlldCwgYW5kIGZvciBvcmRpbmFyeSBwYXJhbWV0ZXJzIHRoZSBlbWJlZGRlZFxuK2tleXMgbGFuZCBsYXRlciBpbiB0aGUgY29tbWFuZCBsaW5lLiBJZiB5b3UgbmVlZCBhbiBpbml0cmQgYm9vdGNvbmZpZyB0b1xuK292ZXJyaWRlIHRoZSBlbWJlZGRlZCBgYGtlcm5lbC4qYGAga2V5cywgbGVhdmUgdGhpcyBvcHRpb24gb2ZmIGFuZCByZWx5XG4rb24gdGhlIHJ1bnRpbWUgcGFyc2VyLlxuK1xuK1RoZSByZW5kZXJlZCBzdHJpbmcgaXMgcGFydCBvZiB0aGUgY29tbWFuZCBsaW5lLCBzbyBpdCBhcHBlYXJzIGluXG4rL3Byb2MvY21kbGluZS4gSXQgaXMgZGVsaWJlcmF0ZWx5IG5vdCBzaG93biBpbiAvcHJvYy9ib290Y29uZmlnOiB0aGF0XG4rZmlsZSBrZWVwcyByZXBvcnRpbmcgdGhlIHBhcnNlZCBib290Y29uZmlnIHRyZWUgLS0gdGhlIGluaXRyZCBib290Y29uZmlnXG4raWYgcHJlc2VudCwgb3RoZXJ3aXNlIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIC0tIGluZGVwZW5kZW50IG9mIHdoZXRoZXJcbitidWlsZC10aW1lIGNtZGxpbmUgcmVuZGVyaW5nIGlzIGVuYWJsZWQuXG4rXG4gS2VybmVsIHBhcmFtZXRlcnMgdmlhIEJvb3QgQ29uZmlnXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggYmY5NzM5OWQzNTdmYTAuLjQ4MzQwNjVhNGJmMmY3IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbisrKyBiL01BSU5UQUlORVJTXG5AQCAtOTg0Niw2ICs5ODQ2LDcgQEAgRjpcdGZzL3Byb2MvYm9vdGNvbmZpZy5jXG4gRjpcdGluY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oXG4gRjpcdGxpYi9ib290Y29uZmlnLWRhdGEuU1xuIEY6XHRsaWIvYm9vdGNvbmZpZy5jXG4rRjpcdGxpYi9lbWJlZGRlZC1jbWRsaW5lLlNcbiBGOlx0dG9vbHMvYm9vdGNvbmZpZy8qXG4gRjpcdHRvb2xzL2Jvb3Rjb25maWcvc2NyaXB0cy8qXG4gXG5kaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZVxuaW5kZXggMTJmZDNkMmQ0N2I1ODIuLjM0ZmIzNTcxYmVjODFkIDEwMDY0NFxuLS0tIGEvTWFrZWZpbGVcbisrKyBiL01ha2VmaWxlXG5AQCAtMTU1Miw2ICsxNTUyLDIyIEBAIHByZXBhcmU6IHRvb2xzL2JwZi9yZXNvbHZlX2J0Zmlkc1xuIGVuZGlmXG4gZW5kaWZcbiBcbisjIHRvb2xzL2Jvb3Rjb25maWcgcmVuZGVycyB0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBpbnRvIGEgY21kbGluZSBhdCBidWlsZCB0aW1lLlxuK2lmZGVmIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuK3ByZXBhcmU6IHRvb2xzL2Jvb3Rjb25maWdcbitlbmRpZlxuK1xuKyMgdG9vbHMvYm9vdGNvbmZpZyBpcyBydW4gb24gdGhlIGJ1aWxkIGhvc3QgZHVyaW5nIHByZXBhcmUsIHNvIGZvcmNlIGEgaG9zdFxuKyMgYmluYXJ5IGhlcmU7IGl0cyBvd24gTWFrZWZpbGUga2VlcHMgJChDQykgZm9yIHN0YW5kYWxvbmUgYW5kIGNyb3NzIGJ1aWxkcy5cbisjIENST1NTX0NPTVBJTEU9IGlzIGNsZWFyZWQgc28gdG9vbHMvc2NyaXB0cy9NYWtlZmlsZS5pbmNsdWRlIGRvZXMgbm90IGluamVjdFxuKyMgdGhlIHRhcmdldCdzIC0tdGFyZ2V0PS8tLXN5c3Jvb3Q9IGZsYWdzIGludG8gdGhlIGhvc3QgY2xhbmcgaW52b2NhdGlvbiB1bmRlclxuKyMgTExWTT0xIGNyb3NzIGJ1aWxkcyAod2hpY2ggd291bGQgcHJvZHVjZSBhIHRhcmdldCBiaW5hcnkgdGhhdCBmYWlscyB0byBleGVjKS5cbit0b29scy9ib290Y29uZmlnOiBleHBvcnQgQ0MgOj0gJChIT1NUQ0MpXG4rdG9vbHMvYm9vdGNvbmZpZzogRk9SQ0VcbitcdCQoUSlta2RpciAtcCAkKG9ianRyZWUpL3Rvb2xzXG4rXHQkKFEpJChNQUtFKSBPPSQoYWJzcGF0aCAkKG9ianRyZWUpKSBzdWJkaXI9dG9vbHMgLUMgJChzcmN0cmVlKS90b29scy8gXFxcbitcdFx0Ym9vdGNvbmZpZyBDUk9TU19DT01QSUxFPVxuK1xuICMgVGhlIHRvb2xzIGJ1aWxkIHN5c3RlbSBpcyBub3QgYSBwYXJ0IG9mIEtidWlsZCBhbmQgdGVuZHMgdG8gaW50cm9kdWNlXG4gIyBpdHMgb3duIHVuaXF1ZSBpc3N1ZXMuIElmIHlvdSBuZWVkIHRvIGludGVncmF0ZSBhIG5ldyB0b29sIGludG8gS2J1aWxkLFxuICMgcGxlYXNlIGNvbnNpZGVyIGxvY2F0aW5nIHRoYXQgdG9vbCBvdXRzaWRlIHRoZSB0b29scy8gdHJlZSBhbmQgdXNpbmcgdGhlXG5AQCAtMTU3OCw2ICsxNTk0LDE1IEBAIGlmbmVxICgkKHdpbGRjYXJkICQob2JqdG9vbF9PKSksKVxuIFx0JChRKSQoTUFLRSkgLXNDICQoYWJzX3NyY3RyZWUpL3Rvb2xzL29ianRvb2wgTz0kKG9ianRvb2xfTykgc3JjdHJlZT0kKGFic19zcmN0cmVlKSAkKHBhdHN1YnN0IG9ianRvb2xfJSwlLCRAKVxuIGVuZGlmXG4gXG4rUEhPTlkgKz0gYm9vdGNvbmZpZ19jbGVhblxuK1xuK2Jvb3Rjb25maWdfTyA9ICQoYWJzcGF0aCAkKG9ianRyZWUpKS90b29scy9ib290Y29uZmlnXG4rXG4rYm9vdGNvbmZpZ19jbGVhbjpcbitpZm5lcSAoJCh3aWxkY2FyZCAkKGJvb3Rjb25maWdfTykpLClcbitcdCQoUSkkKE1BS0UpIC1zQyAkKHNyY3RyZWUpL3Rvb2xzL2Jvb3Rjb25maWcgTz0kKGJvb3Rjb25maWdfTykgY2xlYW5cbitlbmRpZlxuK1xuIHRvb2xzLzogRk9SQ0VcbiBcdCQoUSlta2RpciAtcCAkKG9ianRyZWUpL3Rvb2xzXG4gXHQkKFEpJChNQUtFKSBPPSQoYWJzcGF0aCAkKG9ianRyZWUpKSBzdWJkaXI9dG9vbHMgLUMgJChzcmN0cmVlKS90b29scy9cbkBAIC0xNzUzLDcgKzE3NzgsNyBAQCB2bWxpbnV4Y2xlYW46XG4gXHQkKFEpJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9saW5rLXZtbGludXguc2ggY2xlYW5cbiBcdCQoUSkkKGlmICQoQVJDSF9QT1NUTElOSyksICQoTUFLRSkgLWYgJChBUkNIX1BPU1RMSU5LKSBjbGVhbilcbiBcbi1jbGVhbjogYXJjaGNsZWFuIHZtbGludXhjbGVhbiByZXNvbHZlX2J0Zmlkc19jbGVhbiBvYmp0b29sX2NsZWFuXG4rY2xlYW46IGFyY2hjbGVhbiB2bWxpbnV4Y2xlYW4gcmVzb2x2ZV9idGZpZHNfY2xlYW4gb2JqdG9vbF9jbGVhbiBib290Y29uZmlnX2NsZWFuXG4gXG4gIyBtcnByb3BlciAtIERlbGV0ZSBhbGwgZ2VuZXJhdGVkIGZpbGVzLCBpbmNsdWRpbmcgLmNvbmZpZ1xuICNcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZ1xuaW5kZXggYmRhZDkwZjIxMGU0YmYuLmZkOTc5ZTBiZTFmMGUwIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvS2NvbmZpZ1xuKysrIGIvYXJjaC94ODYvS2NvbmZpZ1xuQEAgLTEyNyw2ICsxMjcsNyBAQCBjb25maWcgWDg2XG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lOR1x0aWYgWDg2XzY0XG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19LTUFQX0xPQ0FMX0ZPUkNFX01BUFx0aWYgTlJfQ1BVUyBcdTAwM2M9IDQwOTZcbiBcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NGSVx0XHRpZiBYODZfNjRcbitcdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4gXHRzZWxlY3QgQVJDSF9VU0VTX0NGSV9UUkFQU1x0XHRpZiBYODZfNjQgXHUwMDI2XHUwMDI2IENGSVxuIFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfTFRPX0NMQU5HXG4gXHRzZWxlY3QgQVJDSF9TVVBQT1JUU19MVE9fQ0xBTkdfVEhJTlxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmNcbmluZGV4IDQ2ODgyY2U3OWMzYTRkLi44OGIwNTVhNDY1OTFlZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jXG4rKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuY1xuQEAgLTYsNiArNiw3IEBAXG4gICogcGFydHMgb2YgZWFybHkga2VybmVsIGluaXRpYWxpemF0aW9uLlxuICAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2FjcGkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jvb3Rjb25maWcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbnNvbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3Jhc2hfZHVtcC5oXHUwMDNlXG5AQCAtODgwLDcgKzg4MSw2IEBAIHN0YXRpYyB2b2lkIF9faW5pdCB4ODZfcmVwb3J0X254KHZvaWQpXG4gICpcbiAgKiBOb3RlOiBPbiB4ODZfNjQsIGZpeG1hcHMgYXJlIHJlYWR5IGZvciB1c2UgZXZlbiBiZWZvcmUgdGhpcyBpcyBjYWxsZWQuXG4gICovXG4tXG4gdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxuIHtcbiAjaWZkZWYgQ09ORklHX1g4Nl8zMlxuQEAgLTkyNCw2ICs5MjQsMTggQEAgdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxuIFx0YnVpbHRpbl9jbWRsaW5lX2FkZGVkID0gdHJ1ZTtcbiAjZW5kaWZcbiBcbisjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4rXHQvKlxuK1x0ICogUHJlcGVuZCB0aGUgYnVpbGQtdGltZS1yZW5kZXJlZCBlbWJlZGRlZCBcImtlcm5lbFwiIGtleXMgaGVyZSBzb1xuK1x0ICogcGFyc2VfZWFybHlfcGFyYW0oKSBiZWxvdyBzZWVzIHRoZW0sIHVzaW5nIHRoZSBzYW1lIG9wdC1pbiBhcyB0aGVcbitcdCAqIHJ1bnRpbWUgcGFyc2VyLCBwbHVzIHRoZSBidWlsZC10aW1lIENPTkZJR19CT09UX0NPTkZJR19GT1JDRS5cbitcdCAqL1xuK1x0aWYgKGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoYm9vdF9jb21tYW5kX2xpbmUsIE5VTEwpIHx8XG4rXHQgICAgSVNfRU5BQkxFRChDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0UpKVxuK1x0XHR4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGJvb3RfY29tbWFuZF9saW5lLFxuK1x0XHRcdFx0XHQgICAgIENPTU1BTkRfTElORV9TSVpFKTtcbisjZW5kaWZcbitcbiBcdHN0cnNjcHkoY29tbWFuZF9saW5lLCBib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpO1xuIFx0KmNtZGxpbmVfcCA9IGNvbW1hbmRfbGluZTtcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaCBiL2luY2x1ZGUvbGludXgvYm9vdGNvbmZpZy5oXG5pbmRleCAxYzdmM2I3NGZmY2YzOC4uZGVkYTUwNzUwMGRhMjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaFxuKysrIGIvaW5jbHVkZS9saW51eC9ib290Y29uZmlnLmhcbkBAIC0zMDgsNCArMzA4LDE4IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqeGJjX2dldF9lbWJlZGRlZF9ib290Y29uZmlnKHNpemVfdCAqc2l6ZSlcbiB9XG4gI2VuZGlmXG4gXG4rLyogQm9vdGNvbmZpZyBvcHQtaW4gZGV0ZWN0aW9uLCBzaGFyZWQgYnkgc2V0dXBfYXJjaCgpIGFuZCBzZXR1cF9ib290X2NvbmZpZygpICovXG4rI2lmZGVmIENPTkZJR19CT09UX0NPTkZJR1xuK2Jvb2wgX19pbml0IGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoY29uc3QgY2hhciAqYm9vdF9jbWRsaW5lLCBpbnQgKmVuZF9vZmZzZXQpO1xuKyNlbmRpZlxuK1xuKy8qIEJ1aWxkLXRpbWUtcmVuZGVyZWQgYm9vdGNvbmZpZyBjbWRsaW5lIHByZXBlbmRlZCBpbiBzZXR1cF9hcmNoKCkgKi9cbisjaWZkZWYgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHXG4rdm9pZCBfX2luaXQgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZShjaGFyICpkc3QsIHNpemVfdCBzaXplKTtcbitib29sIF9faW5pdCB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKHZvaWQpO1xuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkgeyB9XG4rc3RhdGljIGlubGluZSBib29sIHhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbisjZW5kaWZcbitcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWdcbmluZGV4IDUyMzBkNDg3OWIxYzg0Li41OTg2OTBlYzMxM2EyOSAxMDA2NDRcbi0tLSBhL2luaXQvS2NvbmZpZ1xuKysrIGIvaW5pdC9LY29uZmlnXG5AQCAtMTU2Niw2ICsxNTY2LDQyIEBAIGNvbmZpZyBCT09UX0NPTkZJR19FTUJFRF9GSUxFXG4gXHQgIFRoaXMgYm9vdGNvbmZpZyB3aWxsIGJlIHVzZWQgaWYgdGhlcmUgaXMgbm8gaW5pdHJkIG9yIG5vIG90aGVyXG4gXHQgIGJvb3Rjb25maWcgaW4gdGhlIGluaXRyZC5cbiBcbitjb25maWcgQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuK1x0Ym9vbFxuK1x0aGVscFxuK1x0ICBTaWxlbnQgc3ltYm9sOyBubyBDIGNvZGUgcmVhZHMgaXQgZGlyZWN0bHkuIEFyY2hpdGVjdHVyZXNcbitcdCAgc2VsZWN0IGl0IG9uY2UgdGhlaXIgc2V0dXBfYXJjaCgpIGNhbGxzXG4rXHQgIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSBiZWZvcmUgcGFyc2VfZWFybHlfcGFyYW0oKS5cbitcdCAgSXRzIG9ubHkgcm9sZSBpcyB0byBnYXRlIHRoZSB1c2VyLXZpc2libGVcbitcdCAgQ01ETElORV9GUk9NX0JPT1RDT05GSUcgb3B0aW9uIHBlci1hcmNoLCB0aGUgc2FtZVxuK1x0ICBBUkNIX1NVUFBPUlRTXyogaWRpb20gdXNlZCBieSBBUkNIX1NVUFBPUlRTX0NGSSwgZXRjLlxuK1xuK2NvbmZpZyBDTURMSU5FX0ZST01fQk9PVENPTkZJR1xuK1x0Ym9vbCBcIlJlbmRlciBlbWJlZGRlZCBib290Y29uZmlnIGFzIGtlcm5lbCBjbWRsaW5lIGF0IGJ1aWxkIHRpbWVcIlxuK1x0ZGVwZW5kcyBvbiBCT09UX0NPTkZJR19FTUJFRF9GSUxFICE9IFwiXCJcbitcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19DTURMSU5FX0ZST01fQk9PVENPTkZJR1xuK1x0ZGVwZW5kcyBvbiBDTURMSU5FID0gXCJcIlxuK1x0ZGVmYXVsdCBuXG4rXHRoZWxwXG4rXHQgIFJlbmRlciB0aGUgXCJrZXJuZWxcIiBzdWJ0cmVlIG9mIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIGZpbGUgaW50byBhXG4rXHQgIGZsYXQgY21kbGluZSBzdHJpbmcgYXQga2VybmVsIGJ1aWxkIHRpbWUgYW5kIHByZXBlbmQgaXQgdG9cbitcdCAgYm9vdF9jb21tYW5kX2xpbmUgZHVyaW5nIGVhcmx5IGFyY2hpdGVjdHVyZSBzZXR1cC4gVGhpcyBtYWtlc1xuK1x0ICBlYXJseV9wYXJhbSgpIGhhbmRsZXJzIChlLmcuIG1lbT0sIGVhcmx5Y29uPSwgbG9nbGV2ZWw9KSBzZWUgdGhlXG4rXHQgIHZhbHVlcyBzdXBwbGllZCB2aWEgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcuXG4rXG4rXHQgIFRoZSBydW50aW1lIGJvb3Rjb25maWcgcGFyc2VyIGlzIHVuYWZmZWN0ZWQsIHNvIHRyZWUtc3RydWN0dXJlZFxuK1x0ICBjb25zdW1lcnMgc3VjaCBhcyBmdHJhY2UgYm9vdC10aW1lIHRyYWNpbmcga2VlcCB3b3JraW5nLlxuK1xuK1x0ICBOb3RlOiB3aGVuIGFuIGluaXRyZCBhbHNvIGNhcnJpZXMgYSBib290Y29uZmlnLCBpdHMgXCJrZXJuZWxcIlxuK1x0ICBzdWJ0cmVlIGlzIHN0aWxsIHBhcnNlZCBhdCBydW50aW1lLCBidXQgdGhlIGVtYmVkZGVkIFwia2VybmVsXCJcbitcdCAga2V5cyByZW1haW4gaW4gYm9vdF9jb21tYW5kX2xpbmUgZm9yIHBhcnNlX2Vhcmx5X3BhcmFtKCkgYW5kXG4rXHQgIGVuZCB1cCBsYXRlciB0aGFuIHRoZSBpbml0cmQga2V5cyBpbiBzYXZlZF9jb21tYW5kX2xpbmUsIHNvXG4rXHQgIHBhcnNlX2FyZ3MoKSBsYXN0LXdpbnMgZmF2b3JzIHRoZSBlbWJlZGRlZCB2YWx1ZXMuIElmIHlvdSBuZWVkXG4rXHQgIGluaXRyZCB0byBvdmVycmlkZSBlbWJlZGRlZCBrZXJuZWwuKiBrZXlzLCBsZWF2ZSB0aGlzIG9wdGlvblxuK1x0ICBvZmYuXG4rXG4rXHQgIElmIHVuc3VyZSwgc2F5IE4uXG4rXG4gY29uZmlnIENNRExJTkVfTE9HX1dSQVBfSURFQUxfTEVOXG4gXHRpbnQgXCJMZW5ndGggdG8gdHJ5IHRvIHdyYXAgdGhlIGNtZGxpbmUgd2hlbiBsb2dnZWQgYXQgYm9vdFwiXG4gXHRkZWZhdWx0IDEwMjFcbmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jXG5pbmRleCBlMzYzMjMyYjQyOGI0Ny4uMzlhNTE4YTQ3MjQyMjMgMTAwNjQ0XG4tLS0gYS9pbml0L21haW4uY1xuKysrIGIvaW5pdC9tYWluLmNcbkBAIC0zNTYsNDUgKzM1NiwzMyBAQCBzdGF0aWMgY2hhciAqIF9faW5pdCB4YmNfbWFrZV9jbWRsaW5lKGNvbnN0IGNoYXIgKmtleSlcbiBcdHJldHVybiBuZXdfY21kbGluZTtcbiB9XG4gXG4tc3RhdGljIGludCBfX2luaXQgYm9vdGNvbmZpZ19wYXJhbXMoY2hhciAqcGFyYW0sIGNoYXIgKnZhbCxcbi1cdFx0XHRcdCAgICBjb25zdCBjaGFyICp1bnVzZWQsIHZvaWQgKmFyZylcbi17XG4tXHRpZiAoc3RyY21wKHBhcmFtLCBcImJvb3Rjb25maWdcIikgPT0gMCkge1xuLVx0XHRib290Y29uZmlnX2ZvdW5kID0gdHJ1ZTtcbi1cdH1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IF9faW5pdCB3YXJuX2Jvb3Rjb25maWcoY2hhciAqc3RyKVxuIHtcbi1cdC8qIFRoZSAnYm9vdGNvbmZpZycgaGFzIGJlZW4gaGFuZGxlZCBieSBib290Y29uZmlnX3BhcmFtcygpLiAqL1xuK1x0LyogVGhlICdib290Y29uZmlnJyBvcHRpb24gaXMgaGFuZGxlZCBieSBzZXR1cF9ib290X2NvbmZpZygpLiAqL1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290X2NvbmZpZyh2b2lkKVxuIHtcbi1cdHN0YXRpYyBjaGFyIHRtcF9jbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXSBfX2luaXRkYXRhO1xuIFx0Y29uc3QgY2hhciAqbXNnLCAqZGF0YTtcbi1cdGludCBwb3MsIHJldDtcbitcdGludCBwb3MsIHJldCwgb2ZmcztcbiBcdHNpemVfdCBzaXplO1xuLVx0Y2hhciAqZXJyO1xuK1x0Ym9vbCBmcm9tX2VtYmVkZGVkID0gZmFsc2U7XG4gXG4gXHQvKiBDdXQgb3V0IHRoZSBib290Y29uZmlnIGRhdGEgZXZlbiBpZiB3ZSBoYXZlIG5vIGJvb3Rjb25maWcgb3B0aW9uICovXG4gXHRkYXRhID0gZ2V0X2Jvb3RfY29uZmlnX2Zyb21faW5pdHJkKFx1MDAyNnNpemUpO1xuIFx0LyogSWYgdGhlcmUgaXMgbm8gYm9vdGNvbmZpZyBpbiBpbml0cmQsIHRyeSBlbWJlZGRlZCBvbmUuICovXG4tXHRpZiAoIWRhdGEpXG4rXHRpZiAoIWRhdGEpIHtcbiBcdFx0ZGF0YSA9IHhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhcdTAwMjZzaXplKTtcbitcdFx0ZnJvbV9lbWJlZGRlZCA9IHRydWU7XG4rXHR9XG4gXG4tXHRzdHJzY3B5KHRtcF9jbWRsaW5lLCBib290X2NvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpO1xuLVx0ZXJyID0gcGFyc2VfYXJncyhcImJvb3Rjb25maWdcIiwgdG1wX2NtZGxpbmUsIE5VTEwsIDAsIDAsIDAsIE5VTEwsXG4tXHRcdFx0IGJvb3Rjb25maWdfcGFyYW1zKTtcbi1cbi1cdGlmIChJU19FUlIoZXJyKSB8fCAhKGJvb3Rjb25maWdfZm91bmQgfHwgSVNfRU5BQkxFRChDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0UpKSlcbitcdGJvb3Rjb25maWdfZm91bmQgPSBib290Y29uZmlnX2NtZGxpbmVfcmVxdWVzdGVkKGJvb3RfY29tbWFuZF9saW5lLCBcdTAwMjZvZmZzKTtcbitcdGlmICghKGJvb3Rjb25maWdfZm91bmQgfHwgSVNfRU5BQkxFRChDT05GSUdfQk9PVF9DT05GSUdfRk9SQ0UpKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0LyogcGFyc2VfYXJncygpIHN0b3BzIGF0IHRoZSBuZXh0IHBhcmFtIG9mICctLScgYW5kIHJldHVybnMgYW4gYWRkcmVzcyAqL1xuLVx0aWYgKGVycilcbi1cdFx0aW5pdGFyZ3Nfb2ZmcyA9IGVyciAtIHRtcF9jbWRsaW5lO1xuK1x0LyogT2Zmc2V0IG9mIHRoZSBpbml0IGFyZ3VtZW50cyBhZnRlciBhIFwiLS1cIiwgbG9jYXRlZCBieSB0aGUgaGVscGVyLiAqL1xuK1x0aW5pdGFyZ3Nfb2ZmcyA9IG9mZnM7XG4gXG4gXHRpZiAoIWRhdGEpIHtcbiBcdFx0LyogSWYgdXNlciBpbnRlbmRlZCB0byB1c2UgYm9vdGNvbmZpZywgc2hvdyBhbiBlcnJvciBsZXZlbCBtZXNzYWdlICovXG5AQCAtNDIxLDggKzQwOSwyNCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfYm9vdF9jb25maWcodm9pZClcbiBcdH0gZWxzZSB7XG4gXHRcdHhiY19nZXRfaW5mbyhcdTAwMjZyZXQsIE5VTEwpO1xuIFx0XHRwcl9pbmZvKFwiTG9hZCBib290Y29uZmlnOiAlbGQgYnl0ZXMgJWQgbm9kZXNcXG5cIiwgKGxvbmcpc2l6ZSwgcmV0KTtcbi1cdFx0Lyoga2V5cyBzdGFydGluZyB3aXRoIFwia2VybmVsLlwiIGFyZSBwYXNzZWQgdmlhIGNtZGxpbmUgKi9cbi1cdFx0ZXh0cmFfY29tbWFuZF9saW5lID0geGJjX21ha2VfY21kbGluZShcImtlcm5lbFwiKTtcbitcdFx0LypcbitcdFx0ICoga2V5cyBzdGFydGluZyB3aXRoIFwia2VybmVsLlwiIGFyZSBwYXNzZWQgdmlhIGNtZGxpbmUuIFdoZW5cbitcdFx0ICogdGhpcyBib290Y29uZmlnIGNhbWUgZnJvbSB0aGUgZW1iZWRkZWQgc291cmNlIGFuZFxuK1x0XHQgKiBzZXR1cF9hcmNoKCkgYWxyZWFkeSBwcmVwZW5kZWQgdGhlIHJlbmRlcmVkIFwia2VybmVsXCIgc3VidHJlZVxuK1x0XHQgKiB0byBib290X2NvbW1hbmRfbGluZSwgcmVuZGVyaW5nIGFnYWluIGhlcmUgd291bGQgZHVwbGljYXRlXG4rXHRcdCAqIHRoZSBrZXlzIGluIHNhdmVkX2NvbW1hbmRfbGluZSBhbmQgbWFrZSBhY2N1bXVsYXRpbmcgaGFuZGxlcnNcbitcdFx0ICogKGNvbnNvbGU9LCBlYXJseWNvbj0sIC4uLikgcmUtcmVnaXN0ZXIgdGhlIHNhbWUgdmFsdWUuIFNraXBcbitcdFx0ICogb25seSB3aGVuIHRoZSBwcmVwZW5kIHJlYWxseSBoYXBwZW5lZC5cbitcdFx0ICpcbitcdFx0ICogT24gYXJjaGVzIHRoYXQgZG8gbm90IHNlbGVjdCBBUkNIX1NVUFBPUlRTX0NNRExJTkVfRlJPTV9CT09UQ09ORklHLFxuK1x0XHQgKiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUcgaXMgdW5zZWxlY3RhYmxlIGFuZFxuK1x0XHQgKiB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkgY29sbGFwc2VzIHRvIGEgc3R1YiByZXR1cm5pbmdcbitcdFx0ICogZmFsc2UsIHNvIHRoaXMgcGF0aCBzdGlsbCBydW5zIGFuZCB0aGUgZW1iZWRkZWQgXCJrZXJuZWxcIlxuK1x0XHQgKiBrZXlzIHJlYWNoIHRoZSBjbWRsaW5lIHZpYSB0aGUgcnVudGltZSBwYXJzZXIgZXhhY3RseSBhc1xuK1x0XHQgKiBiZWZvcmUgdGhpcyBzZXJpZXMuXG4rXHRcdCAqL1xuK1x0XHRpZiAoIWZyb21fZW1iZWRkZWQgfHwgIXhiY19lbWJlZGRlZF9jbWRsaW5lX2FwcGxpZWQoKSlcbitcdFx0XHRleHRyYV9jb21tYW5kX2xpbmUgPSB4YmNfbWFrZV9jbWRsaW5lKFwia2VybmVsXCIpO1xuIFx0XHQvKiBBbHNvLCBcImluaXQuXCIga2V5cyBhcmUgaW5pdCBhcmd1bWVudHMgKi9cbiBcdFx0ZXh0cmFfaW5pdF9hcmdzID0geGJjX21ha2VfY21kbGluZShcImluaXRcIik7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlXG5pbmRleCA3Zjc1Y2M2ZWRmOTRhZi4uNGNjZGNlMmZkNWU1YjAgMTAwNjQ0XG4tLS0gYS9saWIvTWFrZWZpbGVcbisrKyBiL2xpYi9NYWtlZmlsZVxuQEAgLTI3Myw2ICsyNzMsMjIgQEAgZmlsZWNoa19kZWZiY29uZiA9IGNhdCAkKG9yICQocmVhbC1wcmVyZXFzKSwgL2Rldi9udWxsKVxuICQob2JqKS9kZWZhdWx0LmJjb25mOiAkKENPTkZJR19CT09UX0NPTkZJR19FTUJFRF9GSUxFKSBGT1JDRVxuIFx0JChjYWxsIGZpbGVjaGssZGVmYmNvbmYpXG4gXG4rb2JqLSQoQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHKSArPSBlbWJlZGRlZC1jbWRsaW5lLm9cbiskKG9iaikvZW1iZWRkZWQtY21kbGluZS5vOiAkKG9iaikvZW1iZWRkZWRfY21kbGluZS5iaW5cbitcbisjIFJlbmRlciB0aGUgYm9vdGNvbmZpZyBcImtlcm5lbFwiIHN1YnRyZWUgdG8gYSBmbGF0IGNtZGxpbmUgc3RyaW5nIHVzaW5nXG4rIyB0aGUgdXNlcnNwYWNlIHRvb2xzL2Jvb3Rjb25maWcgcGFyc2VyICgtQyBtb2RlKS4gVGhlIHJ1bnRpbWUgcHJlcGVuZFxuKyMgaGVscGVyIGVuZm9yY2VzIENPTU1BTkRfTElORV9TSVpFIGF0IGJvb3QsIHNvIG5vIGJ1aWxkLXRpbWUgc2l6ZVxuKyMgY2hlY2sgaXMgcGVyZm9ybWVkIGhlcmUgKENPTU1BTkRfTElORV9TSVpFIGlzIGFuIGFyY2ggaGVhZGVyXG4rIyBjb25zdGFudCwgbm90IGEgS2NvbmZpZyB2YWx1ZSkuXG4rcXVpZXRfY21kX3JlbmRlcl9jbWRsaW5lID0gQkNPTkYyQyAkQFxuKyAgICAgIGNtZF9yZW5kZXJfY21kbGluZSA9IFxcXG4rXHQkKG9ianRyZWUpL3Rvb2xzL2Jvb3Rjb25maWcvYm9vdGNvbmZpZyAtQyAkXHUwMDNjIFx1MDAzZSAkQFxuK1xuK3RhcmdldHMgKz0gZW1iZWRkZWRfY21kbGluZS5iaW5cbiskKG9iaikvZW1iZWRkZWRfY21kbGluZS5iaW46ICQob2JqKS9kZWZhdWx0LmJjb25mICQob2JqdHJlZSkvdG9vbHMvYm9vdGNvbmZpZy9ib290Y29uZmlnIEZPUkNFXG4rXHQkKGNhbGwgaWZfY2hhbmdlZCxyZW5kZXJfY21kbGluZSlcbitcbiBvYmotJChDT05GSUdfUkJUUkVFX1RFU1QpICs9IHJidHJlZV90ZXN0Lm9cbiBvYmotJChDT05GSUdfSU5URVJWQUxfVFJFRV9URVNUKSArPSBpbnRlcnZhbF90cmVlX3Rlc3Qub1xuIFxuZGlmZiAtLWdpdCBhL2xpYi9ib290Y29uZmlnLmMgYi9saWIvYm9vdGNvbmZpZy5jXG5pbmRleCBmNDQ1Yjc3MDNmZGQ5Ni4uODljODhlMzU5MTc5ZjAgMTAwNjQ0XG4tLS0gYS9saWIvYm9vdGNvbmZpZy5jXG4rKysgYi9saWIvYm9vdGNvbmZpZy5jXG5AQCAtMTksOSArMTksMTMgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FjaGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGVwYXJhbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcHJpbnRmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1ibG9jay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vc2V0dXAuaFx1MDAzZVx0XHQvKiBDT01NQU5EX0xJTkVfU0laRSAqL1xuIFxuICNpZmRlZiBDT05GSUdfQk9PVF9DT05GSUdfRU1CRURcbiAvKiBlbWJlZGRlZF9ib290Y29uZmlnX2RhdGEgaXMgZGVmaW5lZCBpbiBib290Y29uZmlnLWRhdGEuUyAqL1xuQEAgLTM0LDcgKzM4LDEyOSBAQCBjb25zdCBjaGFyICogX19pbml0IHhiY19nZXRfZW1iZWRkZWRfYm9vdGNvbmZpZyhzaXplX3QgKnNpemUpXG4gXHRyZXR1cm4gKCpzaXplKSA/IGVtYmVkZGVkX2Jvb3Rjb25maWdfZGF0YSA6IE5VTEw7XG4gfVxuICNlbmRpZlxuLSNlbmRpZlxuK1xuKyNpZmRlZiBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdcbisvKiBlbWJlZGRlZF9rZXJuZWxfY21kbGluZSBpcyBkZWZpbmVkIGluIGVtYmVkZGVkLWNtZGxpbmUuUyAqL1xuK2V4dGVybiBfX3Zpc2libGUgY29uc3QgY2hhciBlbWJlZGRlZF9rZXJuZWxfY21kbGluZVtdO1xuK2V4dGVybiBfX3Zpc2libGUgY29uc3QgY2hhciBlbWJlZGRlZF9rZXJuZWxfY21kbGluZV9lbmRbXTtcbitcbisvKiBTZXQgb25jZSB0aGUgZW1iZWRkZWQgY21kbGluZSBoYXMgYWN0dWFsbHkgYmVlbiBwcmVwZW5kZWQuICovXG4rc3RhdGljIGJvb2wgeGJjX2NtZGxpbmVfYXBwbGllZCBfX2luaXRkYXRhO1xuK1xuKy8qXG4rICogc3RyX3ByZXBlbmQoKSAtIFByZXBlbmQgQHNyYyBpbiBmcm9udCBvZiB0aGUgc3RyaW5nIGluIEBkc3QsIGluIHBsYWNlXG4rICogQGRzdDogTlVMLXRlcm1pbmF0ZWQgZGVzdGluYXRpb24gYnVmZmVyLCBjdXJyZW50bHkgQGRzdF9sZW4gYnl0ZXMgbG9uZ1xuKyAqIEBkc3RfbGVuOiBsZW5ndGggb2YgdGhlIGN1cnJlbnQgQGRzdCBzdHJpbmcgKGV4Y2x1ZGluZyBpdHMgTlVMKVxuKyAqIEBzcmM6IGJ5dGVzIHRvIHByZXBlbmQgKG5vdCBOVUwtdGVybWluYXRlZClcbisgKiBAc3JjX2xlbjogbnVtYmVyIG9mIGJ5dGVzIGZyb20gQHNyYyB0byBwcmVwZW5kXG4rICpcbisgKiBUaGUgY2FsbGVyIG11c3QgZ3VhcmFudGVlIEBkc3QgaGFzIHJvb20gZm9yIHNyY19sZW4gKyBkc3RfbGVuICsgMSBieXRlcy5cbisgKiBNb3ZpbmcgZHN0X2xlbiArIDEgYnl0ZXMgY2FycmllcyBAZHN0J3MgTlVMIHRlcm1pbmF0b3IgdG9vLCBzbyBhbiBlbXB0eVxuKyAqIEBkc3QgbmVlZHMgbm8gc3BlY2lhbCBjYXNlLlxuKyAqL1xuK3N0YXRpYyB2b2lkIF9faW5pdCBzdHJfcHJlcGVuZChjaGFyICpkc3QsIHNpemVfdCBkc3RfbGVuLFxuK1x0XHRcdCAgICAgICBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNfbGVuKVxuK3tcbitcdG1lbW1vdmUoZHN0ICsgc3JjX2xlbiwgZHN0LCBkc3RfbGVuICsgMSk7XG4rXHRtZW1jcHkoZHN0LCBzcmMsIHNyY19sZW4pO1xuK31cbitcbisvKipcbisgKiB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKCkgLSBQcmVwZW5kIGVtYmVkZGVkIGJvb3Rjb25maWcgY21kbGluZVxuKyAqIEBkc3Q6IGNtZGxpbmUgYnVmZmVyIHRvIHByZXBlbmQgaW50byAobXVzdCBhbHJlYWR5IGNvbnRhaW4gYSBOVUwgYnl0ZSlcbisgKiBAc2l6ZTogdG90YWwgY2FwYWNpdHkgb2YgQGRzdCBpbiBieXRlc1xuKyAqXG4rICogUHJlcGVuZCB0aGUgYnVpbGQtdGltZS1yZW5kZXJlZCBcImtlcm5lbFwiIHN1YnRyZWUgb2YgdGhlIGVtYmVkZGVkXG4rICogYm9vdGNvbmZpZyB0byBAZHN0LiBUaGUgcmVuZGVyZWQgc3RyaW5nIGFscmVhZHkgZW5kcyB3aXRoIGEgc2luZ2xlXG4rICogc3BhY2UgKHRoZSB4YmNfc25wcmludF9jbWRsaW5lKCkgaW52YXJpYW50KSwgd2hpY2ggc2VydmVzIGFzIHRoZVxuKyAqIHNlcGFyYXRvciBiZXR3ZWVuIHRoZSBlbWJlZGRlZCBrZXlzIGFuZCBhbnkgZXhpc3RpbmcgY29udGVudCBvZiBAZHN0LlxuKyAqIE9uIG92ZXJmbG93LCBsb2cgYW4gZXJyb3IgYW5kIGxlYXZlIEBkc3QgdW50b3VjaGVkIHJhdGhlciB0aGFuXG4rICogc2lsZW50bHkgdHJ1bmNhdGluZzogYm9vdGluZyB3aXRob3V0IHRoZSBlbWJlZGRlZCB2YWx1ZXMgaXMgYmV0dGVyXG4rICogdGhhbiByZWZ1c2luZyB0byBib290LCBhbmQgdGhlIGVycm9yIG1lc3NhZ2UgdGVsbHMgdGhlIHVzZXIgd2h5XG4rICogdGhlaXIgZW1iZWRkZWQga2V5cyBhcmUgbWlzc2luZy5cbisgKlxuKyAqIEludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIHNldHVwX2FyY2goKSBiZWZvcmUgcGFyc2VfZWFybHlfcGFyYW0oKSBzb1xuKyAqIHRoYXQgZWFybHlfcGFyYW0oKSBoYW5kbGVycyBzZWUgdGhlIGVtYmVkZGVkIHZhbHVlcy5cbisgKi9cbit2b2lkIF9faW5pdCB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lKGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpXG4re1xuK1x0c2l6ZV90IGVtYmVkX2xlbiA9IGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZCAtIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lO1xuK1x0c2l6ZV90IGRzdF9sZW47XG4rXG4rXHRpZiAoIXNpemUgfHwgZW1iZWRfbGVuIFx1MDAzYz0gMSlcdC8qIHRyYWlsaW5nIE5VTCBvbmx5ICovXG4rXHRcdHJldHVybjtcbitcdGVtYmVkX2xlbi0tO1x0XHRcdC8qIGV4Y2x1ZGUgdHJhaWxpbmcgTlVMIGJ5dGUgKi9cbitcbitcdGRzdF9sZW4gPSBzdHJubGVuKGRzdCwgc2l6ZSk7XG4rXHRpZiAoZW1iZWRfbGVuICsgZHN0X2xlbiArIDEgXHUwMDNlIHNpemUpIHtcbitcdFx0cHJfZXJyKFwiZW1iZWRkZWQgYm9vdGNvbmZpZyBjbWRsaW5lICglenUgYnl0ZXMpIGRvZXMgbm90IGZpdCBpbiBDT01NQU5EX0xJTkVfU0laRSB3aXRoICV6dSBieXRlcyBhbHJlYWR5IHVzZWQ7IGlnbm9yaW5nIGVtYmVkZGVkIHZhbHVlc1xcblwiLFxuK1x0XHQgICAgICAgZW1iZWRfbGVuLCBkc3RfbGVuKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0c3RyX3ByZXBlbmQoZHN0LCBkc3RfbGVuLCBlbWJlZGRlZF9rZXJuZWxfY21kbGluZSwgZW1iZWRfbGVuKTtcbitcdHhiY19jbWRsaW5lX2FwcGxpZWQgPSB0cnVlO1xuK31cbitcbisvKipcbisgKiB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkKCkgLSBEaWQgdGhlIGVtYmVkZGVkIGNtZGxpbmUgZ2V0IHByZXBlbmRlZD9cbisgKlxuKyAqIFJldHVybiB0cnVlIGlmIHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKSBhY3R1YWxseSBwcmVwZW5kZWQgdGhlXG4rICogZW1iZWRkZWQgXCJrZXJuZWxcIiBzdWJ0cmVlLiBzZXR1cF9ib290X2NvbmZpZygpIHVzZXMgdGhpcyB0byBhdm9pZFxuKyAqIHJlbmRlcmluZyB0aGUgc2FtZSBrZXlzIGEgc2Vjb25kIHRpbWUuXG4rICovXG4rYm9vbCBfX2luaXQgeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZCh2b2lkKVxuK3tcbitcdHJldHVybiB4YmNfY21kbGluZV9hcHBsaWVkO1xuK31cbisjZW5kaWZcdC8qIENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJRyAqL1xuK1xuKy8qIHBhcnNlX2FyZ3MoKSBjYWxsYmFjazogZmxhZyB3aGVuIHRoZSBcImJvb3Rjb25maWdcIiBwYXJhbWV0ZXIgaXMgcHJlc2VudC4gKi9cbitzdGF0aWMgaW50IF9faW5pdCBib290Y29uZmlnX29wdGluKGNoYXIgKnBhcmFtLCBjaGFyICp2YWwsXG4rXHRcdFx0XHQgICBjb25zdCBjaGFyICp1bnVzZWQsIHZvaWQgKmFyZylcbit7XG4rXHRpZiAoIXN0cmNtcChwYXJhbSwgXCJib290Y29uZmlnXCIpKVxuK1x0XHQqKGJvb2wgKilhcmcgPSB0cnVlO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWQoKSAtIFdhcyBcImJvb3Rjb25maWdcIiBwYXNzZWQgb24gdGhlIGNtZGxpbmU/XG4rICogQGJvb3RfY21kbGluZToga2VybmVsIGNvbW1hbmQgbGluZSB0byBpbnNwZWN0IChub3QgbW9kaWZpZWQpXG4rICogQGVuZF9vZmZzZXQ6IGlmIG5vbi1OVUxMLCBzZXQgdG8gdGhlIG9mZnNldCBvZiB0aGUgaW5pdCBhcmd1bWVudHMgdGhhdFxuKyAqXHRcdGZvbGxvdyBhIFwiLS1cIiBzZXBhcmF0b3IsIG9yIDAgd2hlbiB0aGVyZSBpcyBub25lXG4rICpcbisgKiBQYXJzZSBhIHByaXZhdGUgY29weSBvZiBAYm9vdF9jbWRsaW5lIChwYXJzZV9hcmdzKCkgaXMgZGVzdHJ1Y3RpdmUpIGFuZFxuKyAqIHJlcG9ydCB3aGV0aGVyIFwiYm9vdGNvbmZpZ1wiIGlzIHByZXNlbnQgYmVmb3JlIHRoZSBcIi0tXCIgc2VwYXJhdG9yLlxuKyAqIHNldHVwX2FyY2goKSB1c2VzIHRoaXMgdG8gZ2F0ZSBwcmVwZW5kaW5nIHRoZSBidWlsZC10aW1lIGVtYmVkZGVkIGNtZGxpbmU7XG4rICogc2V0dXBfYm9vdF9jb25maWcoKSB1c2VzIGl0IGZvciB0aGUgcnVudGltZSBvcHQtaW4gYW5kIHRvIGxvY2F0ZSB0aGUgaW5pdFxuKyAqIGFyZ3VtZW50cyB2aWEgQGVuZF9vZmZzZXQuIFNoYXJpbmcgb25lIHBhcnNlciBrZWVwcyB0aGUgZWFybHkgYW5kIGxhdGVcbisgKiBwYXRocyBhZ3JlZWluZyBvbiB3aGF0IGNvdW50cyBhcyBvcHQtaW4uIENPTkZJR19CT09UX0NPTkZJR19GT1JDRSBpcyBub3RcbisgKiBmb2xkZWQgaW4gaGVyZTsgY2FsbGVycyBhcHBseSBpdCB3aGVyZSB0aGV5IG5lZWQgaXQuXG4rICovXG4rYm9vbCBfX2luaXQgYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZChjb25zdCBjaGFyICpib290X2NtZGxpbmUsIGludCAqZW5kX29mZnNldClcbit7XG4rXHRzdGF0aWMgY2hhciB0bXBfY21kbGluZVtDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTtcbitcdGJvb2wgZm91bmQgPSBmYWxzZTtcbitcdGNoYXIgKmVycjtcbitcbitcdGlmIChlbmRfb2Zmc2V0KVxuK1x0XHQqZW5kX29mZnNldCA9IDA7XG4rXG4rXHRzdHJzY3B5KHRtcF9jbWRsaW5lLCBib290X2NtZGxpbmUsIENPTU1BTkRfTElORV9TSVpFKTtcbitcdGVyciA9IHBhcnNlX2FyZ3MoXCJib290Y29uZmlnXCIsIHRtcF9jbWRsaW5lLCBOVUxMLCAwLCAwLCAwLFxuK1x0XHRcdCBcdTAwMjZmb3VuZCwgYm9vdGNvbmZpZ19vcHRpbik7XG4rXHRpZiAoSVNfRVJSKGVycikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIHBhcnNlX2FyZ3MoKSBzdG9wcyBhdCBcIi0tXCIgYW5kIHJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHJlc3QuICovXG4rXHRpZiAoZW5kX29mZnNldCBcdTAwMjZcdTAwMjYgZXJyKVxuK1x0XHQqZW5kX29mZnNldCA9IGVyciAtIHRtcF9jbWRsaW5lO1xuK1xuK1x0cmV0dXJuIGZvdW5kO1xuK31cbitcbisjZW5kaWZcdC8qIF9fS0VSTkVMX18gKi9cbiBcbiAvKlxuICAqIEV4dHJhIEJvb3QgQ29uZmlnIChYQkMpIGlzIGdpdmVuIGFzIHRyZWUtc3RydWN0dXJlZCBhc2NpaSB0ZXh0IG9mXG5AQCAtNDI3LDExICs1NTMsMzAgQEAgc3RhdGljIGNoYXIgeGJjX25hbWVidWZbWEJDX0tFWUxFTl9NQVhdIF9faW5pdGRhdGE7XG4gaW50IF9faW5pdCB4YmNfc25wcmludF9jbWRsaW5lKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIHN0cnVjdCB4YmNfbm9kZSAqcm9vdClcbiB7XG4gXHRzdHJ1Y3QgeGJjX25vZGUgKmtub2RlLCAqdm5vZGU7XG4tXHRjaGFyICplbmQgPSBidWYgKyBzaXplO1xuIFx0Y29uc3QgY2hhciAqdmFsLCAqcTtcbitcdHNpemVfdCBsZW4gPSAwO1xuIFx0aW50IHJldDtcbiBcbitcdC8qXG4rXHQgKiBUcmFjayB0aGUgcnVubmluZyB3cml0dGVuIGxlbmd0aCByYXRoZXIgdGhhbiBhZHZhbmNpbmcgQGJ1Ziwgc28gd2VcbitcdCAqIG5ldmVyIGZvcm0gXCJidWYgKyBzaXplXCIgb3IgXCJidWYgKz0gcmV0XCIgd2hpbGUgQGJ1ZiBpcyBOVUxMICh0aGVcbitcdCAqIHNpemUtcHJvYmUgY2FsbCBwYXNzZXMgYnVmPU5VTEwsIHNpemU9MCkuIE5VTEwgcG9pbnRlciBhcml0aG1ldGljXG4rXHQgKiBpcyB1bmRlZmluZWQgYmVoYXZpb3IgYW5kIHRyaXBzIGhvc3QgVUJTYW4gLyBGT1JUSUZZX1NPVVJDRSB3aGVuXG4rXHQgKiB0aGlzIHJlbmRlcmVyIHJ1bnMgYXQga2VybmVsIGJ1aWxkIHRpbWUuIHNucHJpbnRmKE5VTEwsIDAsIC4uLilcbitcdCAqIGl0c2VsZiBpcyB3ZWxsIGRlZmluZWQgYW5kIHJldHVybnMgdGhlIHdvdWxkLWJlIGxlbmd0aC5cbitcdCAqL1xuIFx0eGJjX25vZGVfZm9yX2VhY2hfa2V5X3ZhbHVlKHJvb3QsIGtub2RlLCB2YWwpIHtcbitcdFx0LypcbitcdFx0ICogQW4gZW1wdHkgb3IgdmFsdWUtb25seSBAcm9vdCAoZS5nLiBcImtlcm5lbCB7fVwiIG9yXG4rXHRcdCAqIFwia2VybmVsID0geFwiLCBwb3NzaWJseSBhbG9uZ3NpZGUgXCJrZXJuZWwuZm9vID0gYmFyXCIpXG4rXHRcdCAqIHlpZWxkcyBAcm9vdCBpdHNlbGYgaGVyZS4gU2tpcCBpdDogY29tcG9zaW5nIGEga2V5IGZvciBpdFxuK1x0XHQgKiB3b3VsZCBmYWlsIHdpdGggLUVJTlZBTCwgeWV0IGFueSByZWFsIGRlc2NlbmRhbnQga2V5cyBtdXN0XG4rXHRcdCAqIHN0aWxsIGJlIHJlbmRlcmVkLiBBbiBlbnRpcmVseSBlbXB0eSBzdWJ0cmVlIHRoZW4gcmVuZGVyc1xuK1x0XHQgKiBub3RoaW5nIGFuZCByZXR1cm5zIDAgcmF0aGVyIHRoYW4gYW4gZXJyb3IuXG4rXHRcdCAqL1xuK1x0XHRpZiAoa25vZGUgPT0gcm9vdClcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0cmV0ID0geGJjX25vZGVfY29tcG9zZV9rZXlfYWZ0ZXIocm9vdCwga25vZGUsXG4gXHRcdFx0XHRcdHhiY19uYW1lYnVmLCBYQkNfS0VZTEVOX01BWCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG5AQCAtNDM5LDEwICs1ODQsMTEgQEAgaW50IF9faW5pdCB4YmNfc25wcmludF9jbWRsaW5lKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIHN0cnVjdCB4YmNfbm9kZSAqcm9vdClcbiBcbiBcdFx0dm5vZGUgPSB4YmNfbm9kZV9nZXRfY2hpbGQoa25vZGUpO1xuIFx0XHRpZiAoIXZub2RlKSB7XG4tXHRcdFx0cmV0ID0gc25wcmludGYoYnVmLCByZXN0KGJ1ZiwgZW5kKSwgXCIlcyBcIiwgeGJjX25hbWVidWYpO1xuK1x0XHRcdHJldCA9IHNucHJpbnRmKGJ1ZiA/IGJ1ZiArIGxlbiA6IE5VTEwsIHJlc3QobGVuLCBzaXplKSxcbitcdFx0XHRcdCAgICAgICBcIiVzIFwiLCB4YmNfbmFtZWJ1Zik7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdFx0YnVmICs9IHJldDtcbitcdFx0XHRsZW4gKz0gcmV0O1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdHhiY19hcnJheV9mb3JfZWFjaF92YWx1ZSh2bm9kZSwgdmFsKSB7XG5AQCAtNDUyLDE1ICs1OTgsMTUgQEAgaW50IF9faW5pdCB4YmNfc25wcmludF9jbWRsaW5lKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIHN0cnVjdCB4YmNfbm9kZSAqcm9vdClcbiBcdFx0XHQgKiB3aGl0ZXNwYWNlLlxuIFx0XHRcdCAqL1xuIFx0XHRcdHEgPSBzdHJwYnJrKHZhbCwgXCIgXFx0XFxyXFxuXCIpID8gXCJcXFwiXCIgOiBcIlwiO1xuLVx0XHRcdHJldCA9IHNucHJpbnRmKGJ1ZiwgcmVzdChidWYsIGVuZCksIFwiJXM9JXMlcyVzIFwiLFxuLVx0XHRcdFx0ICAgICAgIHhiY19uYW1lYnVmLCBxLCB2YWwsIHEpO1xuK1x0XHRcdHJldCA9IHNucHJpbnRmKGJ1ZiA/IGJ1ZiArIGxlbiA6IE5VTEwsIHJlc3QobGVuLCBzaXplKSxcbitcdFx0XHRcdCAgICAgICBcIiVzPSVzJXMlcyBcIiwgeGJjX25hbWVidWYsIHEsIHZhbCwgcSk7XG4gXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0XHRcdHJldHVybiByZXQ7XG4tXHRcdFx0YnVmICs9IHJldDtcbitcdFx0XHRsZW4gKz0gcmV0O1xuIFx0XHR9XG4gXHR9XG4gXG4tXHRyZXR1cm4gYnVmIC0gKGVuZCAtIHNpemUpO1xuK1x0cmV0dXJuIGxlbjtcbiB9XG4gI3VuZGVmIHJlc3RcbiBcbmRpZmYgLS1naXQgYS9saWIvZW1iZWRkZWQtY21kbGluZS5TIGIvbGliL2VtYmVkZGVkLWNtZGxpbmUuU1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iZGE4MWI0YTQyYmVhZlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvbGliL2VtYmVkZGVkLWNtZGxpbmUuU1xuQEAgLTAsMCArMSwxNiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLypcbisgKiBFbWJlZCB0aGUgYnVpbGQtdGltZS1yZW5kZXJlZCBib290Y29uZmlnIFwia2VybmVsXCIgc3VidHJlZSBhcyBhIGZsYXRcbisgKiBjbWRsaW5lIHN0cmluZy4gc2V0dXBfYXJjaCgpIHByZXBlbmRzIHRoaXMgdG8gYm9vdF9jb21tYW5kX2xpbmUgb25cbisgKiBhcmNoaXRlY3R1cmVzIHRoYXQgc2VsZWN0IEFSQ0hfU1VQUE9SVFNfQ01ETElORV9GUk9NX0JPT1RDT05GSUcuXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXNcbisgKiBDb3B5cmlnaHQgKGMpIDIwMjYgQnJlbm8gTGVpdGFvIFx1MDAzY2xlaXRhb0BkZWJpYW4ub3JnXHUwMDNlXG4rICovXG4rXHQuc2VjdGlvbiAuaW5pdC5yb2RhdGEuZW1iZWRfY21kbGluZSwgXCJhXCIsICVwcm9nYml0c1xuK1x0Lmdsb2JhbCBlbWJlZGRlZF9rZXJuZWxfY21kbGluZVxuK2VtYmVkZGVkX2tlcm5lbF9jbWRsaW5lOlxuK1x0LmluY2JpbiBcImxpYi9lbWJlZGRlZF9jbWRsaW5lLmJpblwiXG4rXHQuYnl0ZSAwXG4rXHQuZ2xvYmFsIGVtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZFxuK2VtYmVkZGVkX2tlcm5lbF9jbWRsaW5lX2VuZDpcbmRpZmYgLS1naXQgYS90b29scy9ib290Y29uZmlnL01ha2VmaWxlIGIvdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZVxuaW5kZXggOTBlYjQ3YzlkOGRlNjcuLjNjYjgwNjZkNTE0MWJiIDEwMDY0NFxuLS0tIGEvdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZVxuKysrIGIvdG9vbHMvYm9vdGNvbmZpZy9NYWtlZmlsZVxuQEAgLTE1LDcgKzE1LDcgQEAgb3ZlcnJpZGUgQ0ZMQUdTICs9IC1XYWxsIC1nIC1JJChDVVJESVIpL2luY2x1ZGVcbiBBTExfVEFSR0VUUyA6PSBib290Y29uZmlnXG4gQUxMX1BST0dSQU1TIDo9ICQocGF0c3Vic3QgJSwkKE9VVFBVVCklLCQoQUxMX1RBUkdFVFMpKVxuIFxuLWFsbDogJChBTExfUFJPR1JBTVMpIHRlc3RcbithbGw6ICQoQUxMX1BST0dSQU1TKVxuIFxuICQoT1VUUFVUKWJvb3Rjb25maWc6IG1haW4uYyBpbmNsdWRlL2xpbnV4L2Jvb3Rjb25maWcuaCAkKExJQlNSQylcbiBcdCQoQ0MpICQoZmlsdGVyICUuYywkXikgJChDRkxBR1MpICQoTERGTEFHUykgLW8gJEBcbkBAIC0yNyw0ICsyNyw0IEBAIGluc3RhbGw6ICQoQUxMX1BST0dSQU1TKVxuIFx0aW5zdGFsbCAkKE9VVFBVVClib290Y29uZmlnICQoREVTVERJUikkKGJpbmRpcilcbiBcbiBjbGVhbjpcbi1cdCQoUk0pIC1mICQoT1VUUFVUKSoubyAkKEFMTF9QUk9HUkFNUylcbitcdHJtIC1mICQoT1VUUFVUKSoubyAkKEFMTF9QUk9HUkFNUylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjE1OjI4LjE5MjM3NDM0NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIxMTI2NzQyMjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgKipcblxuT2theSwgc28gd2UndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgaW1wbGVtZW50cyBgQ09ORklHX0NNRExJTkVfRlJPTV9CT09UQ09ORklHYC4gRXNzZW50aWFsbHksIGl0IGNvbXBpbGVzIGEgYm9vdGNvbmZpZyBzdWJ0cmVlIGludG8gYSBmbGF0IGNvbW1hbmQgbGluZSBzdHJpbmcgYW5kIHByZXBlbmRzIGl0IGR1cmluZyB0aGUgZWFybHkgYXJjaGl0ZWN0dXJlIHNldHVwLiBUaGlzIGFsbG93cyBlYXJseSBwYXJhbWV0ZXIgaGFuZGxlcnMgdG8gc2VlIHZhbHVlcyBkZWZpbmVkIGluIHRoZSBlbWJlZGRlZCBga2VybmVsYCBzdWJ0cmVlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGV2ZW4gZnV6emFibGUsIG9yIGlmIGl0J3MgZGVhZCBjb2RlIGFmdGVyIHRoZSBidWlsZC5cblxuSSBzZWUgdGhhdCB0aGUgY2hhbmdlcyBpbmNsdWRlIG1vZGlmaWNhdGlvbnMgdG8gYGFyY2gveDg2L2tlcm5lbC9zZXR1cC5jYCAodG8gcHJlcGVuZCB0aGUgY21kbGluZSksIGBpbml0L21haW4uY2AgKGZvciBib290Y29uZmlnIGhhbmRsaW5nKSwgYWRkaXRpb24gb2YgYGxpYi9lbWJlZGRlZC1jbWRsaW5lLlNgIGFuZCBtb2RpZmljYXRpb25zIHRvIGBsaWIvYm9vdGNvbmZpZy5jYCwgYW5kIGEgbmV3IEtjb25maWcgb3B0aW9uLlxuXG5JcyB0aGlzIGNvZGUgcmVhY2hhYmxlIGFuZCB3b3J0aCBmdXp6aW5nIHdpdGggc29tZXRoaW5nIGxpa2UgU3l6a2FsbGVyPyBUaGUgY29tbWFuZCBsaW5lIGNvbnN0cnVjdGlvbiBhdCBib290IHRpbWUgc2VlbXMgbGlrZSBhIHBvdGVudGlhbCB0YXJnZXQuIEhvd2V2ZXIsIGl0J3MgKnZlcnkqIGVhcmx5IGluIHRoZSBib290IHByb2Nlc3MuIFN5emthbGxlciBpcyBncmVhdCwgYnV0IGl0IHR5cGljYWxseSBoaXRzIHRoZSBzeXNjYWxsIGxheWVyLCBuZXR3b3JrLCBhbmQgVVNCLCBub3QgdGhlIGJvb3QgcHJvY2VzcyBvciB0aGUga2VybmVsIGNvbW1hbmQgbGluZSBkaXJlY3RseSwgd2hpY2ggYXJlIGZpeGVkIGF0IGNvbXBpbGUgdGltZS5cblxuV2FpdCwgdGhlIGVtYmVkZGVkIGJvb3Rjb25maWcgaXMgKmZpeGVkKiwgbWVhbmluZyB0aGUgY29tbWFuZCBsaW5lIGlzIGZpeGVkLCBhbmQgY2FuJ3QgYmUgbXV0YXRlZCBwZXIgZnV6eiBjYXNlLiBCdXQgdGhlIGNvZGUgaW4gYGxpYi9ib290Y29uZmlnLmNgIGlzICpleGVjdXRlZCogZHVyaW5nIGJvb3QuIElmIGBDT05GSUdfQ01ETElORV9GUk9NX0JPT1RDT05GSUdgIGlzIGVuYWJsZWQsIHRoZW4gYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmUoKWAgZXhlY3V0ZXMgZHVyaW5nIGBzZXR1cF9hcmNoKClgLiBJcyB0aGVyZSB1c2VyIGlucHV0IHRoYXQgY2FuIHJlYWNoIHRoaXM/IFRoZSBlbWJlZGRlZCBib290Y29uZmlnIGlzIGZpeGVkIGF0IGJ1aWxkIHRpbWUuIFRoZSBib290IGNvbW1hbmQgbGluZSBjb21lcyBmcm9tIHRoZSBib290bG9hZGVyLiBTeXprYWxsZXIncyBib290bG9hZGVyIGlzIGZpeGVkIChJIHRoaW5rPyksIHNvIGNhbiBzeXprYWxsZXIgcGFzcyBhIGRpZmZlcmVudCBjb21tYW5kIGxpbmU/IE5vLCBpdCdzIG5vdCBkZXNpZ25lZCB0byBkbyB0aGF0LiBUaGUgYHBhcnNlX2FyZ3NgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNhbGxlZCBvbiB0aGUgYm9vdCBjb21tYW5kIGxpbmUuXG5cbk9rYXksIGlzIHRoZXJlICphbnkqIGZ1bmN0aW9uYWwgY2hhbmdlIFN5emthbGxlciBjYW4gZnV6ej8gU3l6a2FsbGVyIGRvZXNuJ3QgbXV0YXRlIHRoZSBlbWJlZGRlZCBib290Y29uZmlnIG9yIGtlcm5lbCBjb21tYW5kIGxpbmUgYmV0d2VlbiBleGVjdXRpb25zLCB3aGljaCBtYWtlcyB0aGlzIGNvZGUgb25seSBydW4gb25jZSBhdCBib290LiBJdCdzIG5vdCByZWFjaGFibGUgZnJvbSB1c2VyLXNwYWNlIHN5c2NhbGxzLCBzbyBpdCdzIG5vdCAqcmVhbGx5KiBmdXp6YWJsZS5cblxuTGV0IG1lIGRvdWJsZS1jaGVjay4gVGhlIHBhdGNoIGFkZHMgYENPTkZJR19DTURMSU5FX0ZST01fQk9PVENPTkZJR2AsIGB4YmNfcHJlcGVuZF9lbWJlZGRlZF9jbWRsaW5lYCwgYGJvb3Rjb25maWdfY21kbGluZV9yZXF1ZXN0ZWRgLCBgeGJjX2VtYmVkZGVkX2NtZGxpbmVfYXBwbGllZGAuIFRoZXNlIGFyZSBhbGwgYF9faW5pdGAgZnVuY3Rpb25zLiBTeXprYWxsZXIgc3RhcnRzIGZ1enppbmcgKmFmdGVyKiB0aGUga2VybmVsIGhhcyBib290ZWQuIGBfX2luaXRgIGNvZGUgZ2V0cyBmcmVlZCwgc28gd2UgY2FuJ3QgZ2V0IHRvIGl0IHdpdGggb3VyIHN5c2NhbGwgZnV6emVyLCB3aGljaCBvcGVyYXRlcyBhdCBydW50aW1lLiBTeXprYWxsZXIgKmRvZXMqIGNhdGNoIGJvb3QtdGltZSBjcmFzaGVzLCBidXQgaXQgZG9lc24ndCByZWFsbHkgZnV6eiB0aGUgaW5wdXRzIHRvIHRoZXNlIGVhcmx5IGZ1bmN0aW9ucyBiZWNhdXNlIHRob3NlIGlucHV0cyAodGhlIGJvb3Rjb25maWcsIHRoZSBjbWRsaW5lKSBhcmUgc3RhdGljLlxuXG5TbywgdGhpcyBsb29rcyBwcmV0dHkgdW4tZnV6emFibGUgaW4gdGhlIHRyYWRpdGlvbmFsIFN5emthbGxlciBzZW5zZS4gQW55IG5vbi1pbml0IGNvZGU/IGB4YmNfc25wcmludF9jbWRsaW5lYCBpcyBtb2RpZmllZCwgYnV0IGl0J3MgYWxzbyBgX19pbml0YC4gTG9va2luZyBhdCBgbGliL2Jvb3Rjb25maWcuY2AsIGl0J3MgYWxsIGBfX2luaXRgIGZ1bmN0aW9uczogYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgLCBgYm9vdGNvbmZpZ19jbWRsaW5lX3JlcXVlc3RlZGAsIGB4YmNfZW1iZWRkZWRfY21kbGluZV9hcHBsaWVkYCwgYGJvb3Rjb25maWdfb3B0aW5gLCBhbmQgYHN0cl9wcmVwZW5kYC4gQWxzbywgYHNldHVwX2FyY2hgLCBgc2V0dXBfYm9vdF9jb25maWdgLCBhbmQgYHdhcm5fYm9vdGNvbmZpZ2AgYXJlIGBfX2luaXRgLlxuXG5ZZXAsIGFsbCB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBpbiBgX19pbml0YCBmdW5jdGlvbnMuIFRoZXkncmUgZXhlY3V0ZWQgb25seSBvbmNlIGF0IGJvb3Qgd2l0aCBzdGF0aWMgaW5wdXRzICh0aGUgZW1iZWRkZWQgYm9vdGNvbmZpZyBhbmQgYm9vdGxvYWRlciBjbWRsaW5lKS4gU3l6a2FsbGVyIGNhbid0IHByb3ZpZGUgdmFyaWVkIGlucHV0cyB0byBleHBsb3JlIGRpZmZlcmVudCBjb2RlIHBhdGhzLiBUaGlzIGlzIG5vdCB3b3J0aCBmdXp6aW5nLlxuXG5KdXN0IGNoZWNraW5nIGZvciBub24taW5pdCBmdW5jdGlvbnMuLi4gYHRvb2xzL2Jvb3Rjb25maWcvTWFrZWZpbGVgIGlzIHVzZXJzcGFjZS4gVGhlbiBpdCdzIGRhdGEsIGJ1aWxkIHJ1bGVzLCBgaW5pdC9tYWluLmNgIHdpdGggdGhvc2UgaW5pdCBmdW5jdGlvbnMsIEtjb25maWcsIGRlY2xhcmF0aW9ucywgYXJjaC94ODYgY29kZSB3aXRoIGBfX2luaXRgIGZ1bmN0aW9ucywgYnVpbGQgcnVsZXMsIGFuZCBkb2N1bWVudGF0aW9uLiBFdmVyeXRoaW5nIGlzIGJ1aWxkLXRpbWUsIGRvY3VtZW50YXRpb24sIG9yIGBfX2luaXRgIGNvZGUuIFN5emthbGxlciBkb2Vzbid0IGZ1enogYF9faW5pdGAgY29kZSBiZWNhdXNlIGl0IHJ1bnMgdG9vIGVhcmx5LCBhbmQgdGhlIGlucHV0cyBhcmVuJ3QgbXV0YXRlZCBieSBTeXprYWxsZXIuXG5cbkknbSByZXR1cm5pbmcgYFdvcnRoRnV6emluZzogZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIHRoYXQgYWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyByZXNpZGUgd2l0aGluIGBfX2luaXRgIGZ1bmN0aW9ucyBhbmQgYnVpbGQtdGltZSB0b29scy4gVGhpcyBjb2RlIGdldHMgZXhlY3V0ZWQgZHVyaW5nIGJvb3Qgd2l0aCBzdGF0aWMgaW5wdXRzIHdoaWNoIG1lYW5zIHRoYXQgc3l6a2FsbGVy4oCZcyBydW50aW1lIHN5c2NhbGwgZnV6emluZyBjYW5ub3QgcmVhY2ggaXQuXG5cbkxldCBtZSBqdXN0IHF1aWNrbHkgY2hlY2sgdGhhdCB0aGVyZSBpc24ndCBzb21lIGVkZ2UgY2FzZSwgbGlrZSBmaXJtd2FyZSBmaWxlcy4gQnV0IG5vLCB0aGUgYm9vdGNvbmZpZyBpcyBlbWJlZGRlZFxuXG4iLCJJbnB1dFRva2VucyI6MTAyODEsIk91dHB1dFRva2VucyI6MTMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY2MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDE4OjE1OjQ5LjMxOTExOTQ1OFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGJ1aWxkLXRpbWUgZmVhdHVyZSB0byByZW5kZXIgZW1iZWRkZWQgYm9vdGNvbmZpZyBpbnRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lLiBBbGwgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBrZXJuZWwgYXJlIGNvbmZpbmVkIHRvIGBfX2luaXRgIGZ1bmN0aW9ucyAoZS5nLiwgYHNldHVwX2FyY2hgLCBgc2V0dXBfYm9vdF9jb25maWdgLCBgeGJjX3ByZXBlbmRfZW1iZWRkZWRfY21kbGluZWApLCB3aGljaCBydW4gb25seSBvbmNlIGR1cmluZyBlYXJseSBib290IHdpdGggc3RhdGljIGlucHV0cyAoY29tcGlsZS10aW1lIGVtYmVkZGVkIGZpbGVzIGFuZCB0aGUgYm9vdGxvYWRlciBjb21tYW5kIGxpbmUpLiBTeXprYWxsZXIgY2Fubm90IG11dGF0ZSB0aGVzZSBpbnB1dHMgb3IgcmVhY2ggdGhpcyBjb2RlIGR1cmluZyBydW50aW1lIHN5c2NhbGwgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBidWlsZC10aW1lIGZlYXR1cmUgdG8gcmVuZGVyIGVtYmVkZGVkIGJvb3Rjb25maWcgaW50byB0aGUga2VybmVsIGNvbW1hbmQgbGluZS4gQWxsIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUga2VybmVsIGFyZSBjb25maW5lZCB0byBgX19pbml0YCBmdW5jdGlvbnMgKGUuZy4sIGBzZXR1cF9hcmNoYCwgYHNldHVwX2Jvb3RfY29uZmlnYCwgYHhiY19wcmVwZW5kX2VtYmVkZGVkX2NtZGxpbmVgKSwgd2hpY2ggcnVuIG9ubHkgb25jZSBkdXJpbmcgZWFybHkgYm9vdCB3aXRoIHN0YXRpYyBpbnB1dHMgKGNvbXBpbGUtdGltZSBlbWJlZGRlZCBmaWxlcyBhbmQgdGhlIGJvb3Rsb2FkZXIgY29tbWFuZCBsaW5lKS4gU3l6a2FsbGVyIGNhbm5vdCBtdXRhdGUgdGhlc2UgaW5wdXRzIG9yIHJlYWNoIHRoaXMgY29kZSBkdXJpbmcgcnVudGltZSBzeXNjYWxsIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowk4rr6[1] Phase: Running StartedAt: 2026-06-26 18:16:12 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk4rr6[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-26 18:16:12 +0000 UTC FinishedAt: 2026-06-26 18:16:20 +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,}