Name: series-workflow2jb6f Phase: Succeeded StartedAt: 2026-07-26 12:02:26 +0000 UTC FinishedAt: 2026-07-26 16:37:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[0] Phase: Succeeded StartedAt: 2026-07-26 12:02:26 +0000 UTC FinishedAt: 2026-07-26 12:13:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[0].run-triage Phase: Succeeded StartedAt: 2026-07-26 12:02:26 +0000 UTC FinishedAt: 2026-07-26 12:13:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78f75d632f74b8de0f081a128588f7c37d0d1164", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78f75d632f74b8de0f081a128588f7c37d0d1164", "config_name": "upstream-apparmor-kasan.config", "series_id": "85d514a6-17cd-4852-8a31-c09831e218c7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEyOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUQ1AgcmVjZWl2ZSBwYXRoIGJ5IHJlcGxhY2luZyBhIGNhbGwgdG8gdGNwX3NldF93aW5kb3dfY2xhbXAgd2l0aCBhIGRpcmVjdCBXUklURV9PTkNFIHRvIHRwLVx1MDAzZXdpbmRvd19jbGFtcCBpbiB0Y3BfbWVhc3VyZV9yY3ZfbXNzLiBUaGlzIGF2b2lkcyB0aGUgYWRkaXRpb25hbCBsb2dpYyBpbiB0Y3Bfc2V0X3dpbmRvd19jbGFtcCAoc3VjaCBhcyBhZGp1c3RpbmcgcmN2X3NzdGhyZXNoKSBhbmQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFRDUCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMjoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI4ZjNjMzhlOTQyMWI4NTEzZWJjN2VhZGVjODQ0OTQxNjZhOGM2YzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAxMjoxMjo0MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXG5pbmRleCBkYWZmOTNkNTEzNDI4Ny4uNWI2Mzc4Yjk0NzAxZWYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcbkBAIC0yNTIsNyAmIzQzOzI1Miw3IEBAIHN0YXRpYyB2b2lkIHRjcF9tZWFzdXJlX3Jjdl9tc3Moc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4gXG4gXHRcdFx0XHR2YWwgPSB0Y3Bfd2luX2Zyb21fc3BhY2Uoc2ssIHNrLVx1MDAzZXNrX3JjdmJ1Zik7XG4tXHRcdFx0XHR0Y3Bfc2V0X3dpbmRvd19jbGFtcChzaywgdmFsKTtcbiYjNDM7XHRcdFx0XHRXUklURV9PTkNFKHRwLVx1MDAzZXdpbmRvd19jbGFtcCwgdmFsKTtcbiBcbiBcdFx0XHRcdGlmICh0cC1cdTAwM2V3aW5kb3dfY2xhbXAgXHUwMDNjIHRwLVx1MDAzZXJjdnFfc3BhY2Uuc3BhY2UpXG4gXHRcdFx0XHRcdHRwLVx1MDAzZXJjdnFfc3BhY2Uuc3BhY2UgPSB0cC1cdTAwM2V3aW5kb3dfY2xhbXA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTI6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUQ1AgcmVjZWl2ZSBwYXRoIGJ5IHJlcGxhY2luZyBhIGNhbGwgdG8gdGNwX3NldF93aW5kb3dfY2xhbXAgd2l0aCBhIGRpcmVjdCBXUklURV9PTkNFIHRvIHRwLVx1MDAzZXdpbmRvd19jbGFtcCBpbiB0Y3BfbWVhc3VyZV9yY3ZfbXNzLiBUaGlzIGF2b2lkcyB0aGUgYWRkaXRpb25hbCBsb2dpYyBpbiB0Y3Bfc2V0X3dpbmRvd19jbGFtcCAoc3VjaCBhcyBhZGp1c3RpbmcgcmN2X3NzdGhyZXNoKSBhbmQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFRDUCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI4ZjNjMzhlOTQyMWI4NTEzZWJjN2VhZGVjODQ0OTQxNjZhOGM2YzYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1bCAyNiAxMjoxMjo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggZGFmZjkzZDUxMzQyODcuLjViNjM3OGI5NDcwMWVmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtMjUyLDcgJiM0MzsyNTIsNyBAQCBzdGF0aWMgdm9pZCB0Y3BfbWVhc3VyZV9yY3ZfbXNzKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJCQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAogCQkJCXZhbCA9IHRjcF93aW5fZnJvbV9zcGFjZShzaywgc2stJmd0O3NrX3JjdmJ1Zik7Ci0JCQkJdGNwX3NldF93aW5kb3dfY2xhbXAoc2ssIHZhbCk7CiYjNDM7CQkJCVdSSVRFX09OQ0UodHAtJmd0O3dpbmRvd19jbGFtcCwgdmFsKTsKIAogCQkJCWlmICh0cC0mZ3Q7d2luZG93X2NsYW1wICZsdDsgdHAtJmd0O3JjdnFfc3BhY2Uuc3BhY2UpCiAJCQkJCXRwLSZndDtyY3ZxX3NwYWNlLnNwYWNlID0gdHAtJmd0O3dpbmRvd19jbGFtcDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRDUCBJbnB1dCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIEl0IHNlZW1zIHRoZXkmIzM5O3ZlIG1hZGUgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHRjcF9tZWFzdXJlX3Jjdl9tc3NgIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgbGluZSwgYHRjcF9zZXRfd2luZG93X2NsYW1wKHNrLCB2YWwpO2AsIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYFdSSVRFX09OQ0UodHAtJmd0O3dpbmRvd19jbGFtcCwgdmFsKTtgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgaXMgcHJvYmFibHkgYSBmdW5jdGlvbiBjYWxsLCBzbyBJIG5lZWQgdG8gY2hlY2sgaXRzIGltcGxlbWVudGF0aW9uIGFuZCB1bmRlcnN0YW5kIHdoYXQgaXQgYWN0dWFsbHkgKmRvZXMqIGluIHRoZSBjb250ZXh0IG9mIHJlY2VpdmluZyBNU1MgYW5kIHRoZSB3aW5kb3cgY2xhbXAuIEtub3dpbmcgdGhlIHNwZWNpZmljcyB3aWxsIHByb3ZpZGUgdGhlIGNvbnRleHQgZm9yIHdoYXQgdGhpcyByZXdyaXRlIGltcGxpZXMuIElzIHRoaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IEEgY29uY3VycmVuY3kgaXNzdWUgZml4PyBJcyBgV1JJVEVfT05DRWAgbW9yZSBlZmZpY2llbnQsIG9yIHNhZmVyIHNvbWVob3c/CgpJJiMzOTtsbCBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHRjcF9zZXRfd2luZG93X2NsYW1wYCBuZXh0LiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgYFdSSVRFX09OQ0VgIHJlcGxhY2VtZW50IGJyaW5ncyBhbnkgcGVyZm9ybWFuY2UgYmVuZWZpdHMgb3IgcG90ZW50aWFsIGZvciBsb2NraW5nIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9zZXRfd2luZG93X2NsYW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIFRDUCBXaW5kb3cgQ2xhbXAgQ2hhbmdlKioKCkhtbSwgKndhaXQgYSBtaW51dGUqLiBEaWQgSSBqdXN0IHJlYWQgdGhhdCBgdGNwX3NldF93aW5kb3dfY2xhbXBgIHdhcyBlaXRoZXIgcmVtb3ZlZCBlbnRpcmVseSwgb3IgaXRzIGJlaGF2aW91ciBzdWJzdGFudGlhbGx5IGFsdGVyZWQ/IFRoYXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgbWFuYWdpbmcgcmVjZWl2ZSB3aW5kb3cgc2l6aW5nLCBhbmQgYW55IGNoYW5nZSB0aGVyZSBuZWVkcyBpbW1lZGlhdGUgYXR0ZW50aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuCgpSaWdodCwgbGV04oCZcyBnZXQgYSBoYW5kbGUgb24gd2hhdCBtaWdodCBiZSBnb2luZyBvbiwgSSBzaG91bGQgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBjb3JlIGxvZ2ljLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjbGFtcGluZyBiZWhhdmlvciBoYXMganVzdCBiZWVuIG1vdmVkIGVsc2V3aGVyZSBpbiB0aGUgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHdoYXQmIzM5O3MgZGlyZWN0bHkgY29ubmVjdGVkIHRvIHRoZSByZWNlaXZlIHdpbmRvdyBzaXppbmcuIEFoLCB5ZXMsIGB0Y3BfbWVhc3VyZV9yY3ZfbXNzYC4gSWYgdGhlIGNsYW1wIGlzIGdvbmUsIG1heWJlIHRoZSByZWNlaXZlIE1TUyBsb2dpYyBpcyBkaXJlY3RseSByZXNwb25zaWJsZSBmb3IgaW5mbHVlbmNpbmcgdGhlIHdpbmRvdyBzaXplLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aG9zZSB0d28gdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LiBUaGlzIGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgY2hhbmdlIGFmZmVjdGluZyBwZXJmb3JtYW5jZSBhbmQgZmxvdyBjb250cm9sLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyB0aGUgbW9kaWZpY2F0aW9ucyBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9tZWFzdXJlX3Jjdl9tc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYy01MS0gKlx0XHRcdFx0XHRhIGZhdGFsIGVycm9yIGlmIGl0IG1pZ2h0IHN0aWxsIGhhcHBlbi5cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjUyOiAqXHRcdEFuZGkgS2xlZW46XHRcdEFkZCB0Y3BfbWVhc3VyZV9yY3ZfbXNzIHRvIG1ha2Vcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTUzLSAqXHRcdFx0XHRcdGNvbm5lY3Rpb25zIHdpdGggTVNTXHUwMDNjbWluKE1UVSxhbm4uIE1TUylcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0yMTE9c3RhdGljIF9fY29sZCB2b2lkIHRjcF9ncm9fZGV2X3dhcm4oY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTIyNi0gKi9cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjIyNzpzdGF0aWMgdm9pZCB0Y3BfbWVhc3VyZV9yY3ZfbXNzKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTIyOC17XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9Nzc4PXN0YXRpYyB2b2lkIHRjcF9jbGFtcF93aW5kb3coc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTgwMy0gKiBPdmVyZXN0aW1hdGlvbnMgbWFrZSB1cyBBQ0tpbmcgbGVzcyBmcmVxdWVudGx5IHRoYW4gbmVlZGVkLlxubmV0L2lwdjQvdGNwX2lucHV0LmM6ODA0OiAqIFVuZGVyZXN0aW1hdGlvbnMgYXJlIG1vcmUgZWFzeSB0byBkZXRlY3QgYW5kIGZpeCBieSB0Y3BfbWVhc3VyZV9yY3ZfbXNzKCkuXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy04MDUtICovXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9MTAxNT1zdGF0aWMgdm9pZCB0Y3BfZXZlbnRfZGF0YV9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMDIyLVxubmV0L2lwdjQvdGNwX2lucHV0LmM6MTAyMzpcdHRjcF9tZWFzdXJlX3Jjdl9tc3Moc2ssIHNrYik7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMDI0LVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTUzODE9c3RhdGljIHZvaWQgdGNwX2RhdGFfcXVldWVfb2ZvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01Mzk4LVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NTM5OTpcdHRjcF9tZWFzdXJlX3Jjdl9tc3Moc2ssIHNrYik7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01NDAwLVx0LyogRGlzYWJsZSBoZWFkZXIgcHJlZGljdGlvbi4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzAxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkFuYWx5emluZyB0aGUgV2luZG93IENsYW1wIE1vZGlmaWNhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgY29tbWl0JiMzOTtzIHJlcGxhY2VkIGEgY2FsbCB0byBgdGNwX3NldF93aW5kb3dfY2xhbXAoc2ssIHZhbClgIHdpdGggYSBgV1JJVEVfT05DRSh0cC0mZ3Q7d2luZG93X2NsYW1wLCB2YWwpYC4gSG1tLCB0aGlzIGlzIGludGVyZXN0aW5nLiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgcmVhc29uaW5nLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiB3YXMgYHRjcF9zZXRfd2luZG93X2NsYW1wYCByZWFsbHkgYSBmdWxsLWJsb3duIGZ1bmN0aW9uLCBvciB3YXMgaXQgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIG9yIGV2ZW4ganVzdCBhIG1hY3JvPyBTb21ldGltZXMgdGhlc2UgY2hhbmdlcyBhcmUgYWJvdXQgcGVyZm9ybWFuY2UsIHBvdGVudGlhbGx5IHJlbW92aW5nIGEgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZC4gT3RoZXIgdGltZXMsIGl0JiMzOTtzIGFib3V0IG1lbW9yeSBvcmRlcmluZyBhbmQgc3luY2hyb25pemF0aW9uLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIG5hdHVyZSBvZiBgdGNwX3NldF93aW5kb3dfY2xhbXBgIHRvIHVuZGVyc3RhbmQgdGhlIHRydWUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLCBzbyBJJiMzOTtsbCBjaGVjayBpdHMgZGVmaW5pdGlvbi4gVGhpcyB3aWxsIHJldmVhbCB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24sIGFuZCBmcm9tIHRoZXJlIEkgY2FuIGJldHRlciByZWFzb24gYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBtb3ZpbmcgdG8gYFdSSVRFX09OQ0VgLiBXYXMgdGhlcmUgc29tZSBpbXBsaWNpdCBsb2NraW5nIG9yIG1lbW9yeSBiYXJyaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24/IEhhcyB0aGlzIG5vdyBiZWVuIG1hZGUgZXhwbGljaXQ/IEkgc2hvdWxkIGxvb2sgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIElzIHRoaXMgcG90ZW50aWFsbHkgYSBjcml0aWNhbCBjaGFuZ2UgdG8gdGhlIG1lbW9yeSBtb2RlbD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3Bfc2V0X3dpbmRvd19jbGFtcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD01MTY9dm9pZCB0Y3Bfc2V0X3JjdmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpO1xuaW5jbHVkZS9uZXQvdGNwLmg6NTE3OmludCB0Y3Bfc2V0X3dpbmRvd19jbGFtcChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpO1xuaW5jbHVkZS9uZXQvdGNwLmgtNTE4LVxuLS1cbm5ldC9pcHY0L3RjcC5jPTE4NTc9dm9pZCB0Y3Bfc2V0X3JjdmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXG5uZXQvaXB2NC90Y3AuYy0xODU4LXtcbm5ldC9pcHY0L3RjcC5jOjE4NTk6XHR0Y3Bfc2V0X3dpbmRvd19jbGFtcChzaywgdGNwX3dpbl9mcm9tX3NwYWNlKHNrLCB2YWwpKTtcbm5ldC9pcHY0L3RjcC5jLTE4NjAtfVxuLS1cbm5ldC9pcHY0L3RjcC5jPTM3ODc9RVhQT1JUX1NZTUJPTCh0Y3Bfc29ja19zZXRfa2VlcGNudCk7XG5uZXQvaXB2NC90Y3AuYy0zNzg4LVxubmV0L2lwdjQvdGNwLmM6Mzc4OTppbnQgdGNwX3NldF93aW5kb3dfY2xhbXAoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxubmV0L2lwdjQvdGNwLmMtMzc5MC17XG4tLVxubmV0L2lwdjQvdGNwLmM9MzgzNz1pbnQgZG9fdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTQwNTUtXHRjYXNlIFRDUF9XSU5ET1dfQ0xBTVA6XG5uZXQvaXB2NC90Y3AuYzo0MDU2Olx0XHRlcnIgPSB0Y3Bfc2V0X3dpbmRvd19jbGFtcChzaywgdmFsKTtcbm5ldC9pcHY0L3RjcC5jLTQwNTctXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNDYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gYHRjcF9zZXRfd2luZG93X2NsYW1wYCoqCgpIbW0sIHNvIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAuLi4gcmlnaHQsIEkgc2VlIGl0JiMzOTtzIGFuICpleHBvcnRlZCogZnVuY3Rpb24sIG9yIGF0IGxlYXN0IGEgZnVuY3Rpb24gZGVmaW5lZCB3aXRoaW4gYG5ldC9pcHY0L3RjcC5jYC4gT2theSwgdGhhdCYjMzk7cyB0aGUgZmlyc3QgY2x1ZS4gQnV0IHdhaXQsIHRoaXMgaXNuJiMzOTt0ICpqdXN0KiBzZXR0aW5nIGB0cC0mZ3Q7d2luZG93X2NsYW1wYCwgaXMgaXQ/IFRoZXJlJiMzOTtzIGdvdCB0byBiZSBtb3JlIHRvIGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24mIzM5O3MgZnVsbCBwdXJwb3NlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgd2hhdCBgdGNwX3NldF93aW5kb3dfY2xhbXBgIGlzIGRvaW5nLiBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGltcGFjdCBhbmQgdXNhZ2Ugb2YgdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3ODksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzc4OTpcdGludCB0Y3Bfc2V0X3dpbmRvd19jbGFtcChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXG4zNzkwOlx0e1xuMzc5MTpcdFx0dTMyIG9sZF93aW5kb3dfY2xhbXAsIG5ld193aW5kb3dfY2xhbXAsIG5ld19yY3Zfc3N0aHJlc2g7XG4zNzkyOlx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbjM3OTM6XHRcbjM3OTQ6XHRcdGlmICghdmFsKSB7XG4zNzk1Olx0XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfQ0xPU0UpXG4zNzk2Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zNzk3Olx0XHRcdFdSSVRFX09OQ0UodHAtXHUwMDNld2luZG93X2NsYW1wLCAwKTtcbjM3OTg6XHRcdFx0cmV0dXJuIDA7XG4zNzk5Olx0XHR9XG4zODAwOlx0XG4zODAxOlx0XHRvbGRfd2luZG93X2NsYW1wID0gdHAtXHUwMDNld2luZG93X2NsYW1wO1xuMzgwMjpcdFx0bmV3X3dpbmRvd19jbGFtcCA9IG1heF90KGludCwgU09DS19NSU5fUkNWQlVGIC8gMiwgdmFsKTtcbjM4MDM6XHRcbjM4MDQ6XHRcdGlmIChuZXdfd2luZG93X2NsYW1wID09IG9sZF93aW5kb3dfY2xhbXApXG4zODA1Olx0XHRcdHJldHVybiAwO1xuMzgwNjpcdFxuMzgwNzpcdFx0V1JJVEVfT05DRSh0cC1cdTAwM2V3aW5kb3dfY2xhbXAsIG5ld193aW5kb3dfY2xhbXApO1xuMzgwODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjMwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHRjcF9zZXRfd2luZG93X2NsYW1wYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdGNwX3NldF93aW5kb3dfY2xhbXBgIGZ1bmN0aW9uIGFuZCwgd2FpdCBhIG1pbnV0ZSwgaXQgZG9lcyBtb3JlIHRoYW4gSSBpbml0aWFsbHkgdGhvdWdodC4gSXQmIzM5O3Mgbm90IGp1c3QgYSBzdHJhaWdodGZvcndhcmQgd2luZG93IGNsYW1wIHNldHRlci4gSXQgc2VlbXMgdG8gaGF2ZSBzb21lIGV4dHJhIGxvZ2ljIGVtYmVkZGVkIHdpdGhpbiBpdC4gSSBzZWUgdGhhdCBpdCBjaGVja3MgZm9yIGEgemVybyB2YWx1ZSwgYW5kIGlmIGl0IHJlY2VpdmVzIG9uZSAqYW5kKiB0aGUgc29ja2V0IHN0YXRlIGlzbiYjMzk7dCBgVENQX0NMT1NFYCwgaXQgcmV0dXJucyBhbiBlcnJvci4gT3RoZXJ3aXNlLCBpdCB1cGRhdGVzIGB0cC0mZ3Q7d2luZG93X2NsYW1wYCB3aXRoIGVpdGhlciB0aGUgbWluaW11bSBidWZmZXIgc2l6ZSBkaXZpZGVkIGJ5IHR3byBvciB0aGUgcHJvdmlkZWQgdmFsdWUsIHdoaWNoZXZlciBpcyBsYXJnZXIsIGFmdGVyIGFsc28gd3JpdGluZyB0aGUgdmFsdWUgd2l0aCBgV1JJVEVfT05DRWAuCgpOb3csIHRoZSBwYXRjaCBpcyByZXBsYWNpbmcgdGhpcyBlbnRpcmUgZnVuY3Rpb24gY2FsbCB3aXRoIGEgZGlyZWN0IGBXUklURV9PTkNFYCB3cml0ZSB0byBgdHAtJmd0O3dpbmRvd19jbGFtcGAgaW4gYHRjcF9tZWFzdXJlX3Jjdl9tc3NgLiBUaGF0JiMzOTtzIGEgbGl0dGxlIGNvbmNlcm5pbmcuLi4gSSB3b25kZXIgd2h5LiBCeSBkb2luZyB0aGF0LCB0aGUgcGF0Y2ggaXMgYnlwYXNzaW5nIGFsbCB0aGUgYWRkaXRpb25hbCBjaGVja3MgYW5kIHBvdGVudGlhbGx5IHRoZSBgcmN2X3NzdGhyZXNoYCBhbmQgYHNrX3N0YXRlYCB1cGRhdGUuCgpJIG5lZWQgdG8gc2VlIHRoZSByZW1haW5pbmcgcGFydHMgb2YgdGhpcyBmdW5jdGlvbiB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIElzIHRoaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yIGlzIGl0IGdvaW5nIHRvIGNhdXNlIHNvbWUgdW5leHBlY3RlZCBiZWhhdmlvcj8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGlmIGJ5cGFzc2luZyB0aG9zZSBleHRyYSBjaGVja3MgaXMgYWN0dWFsbHkgc2FmZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgwOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszODA5Olx0XHQvKiBOZWVkIHRvIGFwcGx5IHRoZSByZXNlcnZlZCBtZW0gcHJvdmlzaW9uaW5nIG9ubHlcbjM4MTA6XHRcdCAqIHdoZW4gc2hyaW5raW5nIHRoZSB3aW5kb3cgY2xhbXAuXG4zODExOlx0XHQgKi9cbjM4MTI6XHRcdGlmIChuZXdfd2luZG93X2NsYW1wIFx1MDAzYyBvbGRfd2luZG93X2NsYW1wKSB7XG4zODEzOlx0XHRcdF9fdGNwX2FkanVzdF9yY3Zfc3N0aHJlc2goc2ssIG5ld193aW5kb3dfY2xhbXApO1xuMzgxNDpcdFx0fSBlbHNlIHtcbjM4MTU6XHRcdFx0bmV3X3Jjdl9zc3RocmVzaCA9IG1pbih0cC1cdTAwM2VyY3Zfd25kLCBuZXdfd2luZG93X2NsYW1wKTtcbjM4MTY6XHRcdFx0dHAtXHUwMDNlcmN2X3NzdGhyZXNoID0gbWF4KG5ld19yY3Zfc3N0aHJlc2gsIHRwLVx1MDAzZXJjdl9zc3RocmVzaCk7XG4zODE3Olx0XHR9XG4zODE4Olx0XHRyZXR1cm4gMDtcbjM4MTk6XHR9XG4zODIwOlx0XG4zODIxOlx0aW50IHRjcF9zb2NrX3NldF9tYXhzZWcoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxuMzgyMjpcdHtcbjM4MjM6XHRcdC8qIFZhbHVlcyBncmVhdGVyIHRoYW4gaW50ZXJmYWNlIE1UVSB3b24mIzM5O3QgdGFrZSBlZmZlY3QuIEhvd2V2ZXJcbjM4MjQ6XHRcdCAqIGF0IHRoZSBwb2ludCB3aGVuIHRoaXMgY2FsbCBpcyBkb25lIHdlIHR5cGljYWxseSBkb24mIzM5O3QgeWV0XG4zODI1Olx0XHQgKiBrbm93IHdoaWNoIGludGVyZmFjZSBpcyBnb2luZyB0byBiZSB1c2VkXG4zODI2Olx0XHQgKi9cbjM4Mjc6XHRcdGlmICh2YWwgXHUwMDI2XHUwMDI2ICh2YWwgXHUwMDNjIFRDUF9NSU5fTVNTIHx8IHZhbCBcdTAwM2UgTUFYX1RDUF9XSU5ET1cpKVxuMzgyODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYxOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUQ1AgUmVjZWl2ZSBQYXRoIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIHVzaW5nIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYF9fdGNwX2FkanVzdF9yY3Zfc3N0aHJlc2hgIGFuZCB1cGRhdGVzIGByY3Zfc3N0aHJlc2hgLiBCdXQsIGJ5IHN3YXBwaW5nIHRoYXQgb3V0IHdpdGggYFdSSVRFX09OQ0UodHAtJmd0O3dpbmRvd19jbGFtcCwgdmFsKWAsIHRoZSBwYXRjaCBpcyBieXBhc3NpbmcgdGhlIGByY3Zfc3N0aHJlc2hgIHVwZGF0ZSBhbmQgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgaXQmIzM5O3MgYWx0ZXJpbmcgaG93IHRoZSBUQ1AgcmVjZWl2ZSBwYXRoIGJlaGF2ZXMuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgd2FycmFudCBmdXp6aW5nPyBBYnNvbHV0ZWx5LCBpdCBkb2VzLiBBbnkgY2hhbmdlIHRvIHRoZSBUQ1AgcmVjZWl2ZSB3aW5kb3cgbG9naWMgaXMgYSBwb3RlbnRpYWwgYXR0YWNrIHZlY3Rvciwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGEgc291cmNlIG9mIHN1YnRsZSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlcy4gVGhpcyBpcyBjcml0aWNhbC4KCk5vdywgYSByZWxhdGVkIHRob3VnaHQgcG9wcGVkIHVwLiBJIG5lZWQgdG8gYmUgc3VyZS4gSSYjMzk7bSByZWNhbGxpbmcgdGhhdCBgdGNwX21lYXN1cmVfcmN2X21zc2AgaXMgaW52b2x2ZWQgd2hlbiBkYXRhIGlzIHJlY2VpdmVkLiBJIHNob3VsZCBjaGVjayBob3cgdGhhdCBmaXRzIGludG8gdGhpcyBwaWN0dXJlLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBgdGNwX21lYXN1cmVfcmN2X21zc2AgZnVuY3Rpb24uIExldCBtZSBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjI3Olx0c3RhdGljIHZvaWQgdGNwX21lYXN1cmVfcmN2X21zcyhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4gMjI4Olx0e1xuIDIyOTpcdFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuIDIzMDpcdFx0Y29uc3QgdW5zaWduZWQgaW50IGxzcyA9IGljc2stXHUwMDNlaWNza19hY2subGFzdF9zZWdfc2l6ZTtcbiAyMzE6XHRcdHVuc2lnbmVkIGludCBsZW47XG4gMjMyOlx0XG4gMjMzOlx0XHRpY3NrLVx1MDAzZWljc2tfYWNrLmxhc3Rfc2VnX3NpemUgPSAwO1xuIDIzNDpcdFxuIDIzNTpcdFx0Lyogc2tiLVx1MDAzZWxlbiBtYXkgaml0dGVyIGJlY2F1c2Ugb2YgU0FDS3MsIGV2ZW4gaWYgcGVlclxuIDIzNjpcdFx0ICogc2VuZHMgZ29vZCBmdWxsLXNpemVkIGZyYW1lcy5cbiAyMzc6XHRcdCAqL1xuIDIzODpcdFx0bGVuID0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb19zaXplID8gOiBza2ItXHUwMDNlbGVuO1xuIDIzOTpcdFx0aWYgKGxlbiBcdTAwM2U9IGljc2stXHUwMDNlaWNza19hY2sucmN2X21zcykge1xuIDI0MDpcdFx0XHQvKiBOb3RlOiBkaXZpZGVzIGFyZSBzdGlsbCBhIGJpdCBleHBlbnNpdmUuXG4gMjQxOlx0XHRcdCAqIEZvciB0aGUgbW9tZW50LCBvbmx5IGFkanVzdCBzY2FsaW5nX3JhdGlvXG4gMjQyOlx0XHRcdCAqIHdoZW4gd2UgdXBkYXRlIGljc2tfYWNrLnJjdl9tc3MuXG4gMjQzOlx0XHRcdCAqL1xuIDI0NDpcdFx0XHRpZiAodW5saWtlbHkobGVuICE9IGljc2stXHUwMDNlaWNza19hY2sucmN2X21zcykpIHtcbiAyNDU6XHRcdFx0XHR1NjQgdmFsID0gKHU2NClza2ItXHUwMDNlbGVuIFx1MDAzY1x1MDAzYyBUQ1BfUk1FTV9UT19XSU5fU0NBTEU7XG4gMjQ2Olx0XHRcdFx0dTggb2xkX3JhdGlvID0gdGNwX3NrKHNrKS1cdTAwM2VzY2FsaW5nX3JhdGlvO1xuIDI0NzpcdFxuIDI0ODpcdFx0XHRcdGRvX2Rpdih2YWwsIHNrYi1cdTAwM2V0cnVlc2l6ZSk7XG4gMjQ5Olx0XHRcdFx0dGNwX3NrKHNrKS1cdTAwM2VzY2FsaW5nX3JhdGlvID0gdmFsID8gdmFsIDogMTtcbiAyNTA6XHRcbiAyNTE6XHRcdFx0XHRpZiAob2xkX3JhdGlvICE9IHRjcF9zayhzayktXHUwMDNlc2NhbGluZ19yYXRpbykge1xuIDI1MjpcdFx0XHRcdFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4gMjUzOlx0XG4gMjU0Olx0XHRcdFx0XHR2YWwgPSB0Y3Bfd2luX2Zyb21fc3BhY2Uoc2ssIHNrLVx1MDAzZXNrX3JjdmJ1Zik7XG4gMjU1Olx0XHRcdFx0XHRXUklURV9PTkNFKHRwLVx1MDAzZXdpbmRvd19jbGFtcCwgdmFsKTtcbiAyNTY6XHRcbiAyNTc6XHRcdFx0XHRcdGlmICh0cC1cdTAwM2V3aW5kb3dfY2xhbXAgXHUwMDNjIHRwLVx1MDAzZXJjdnFfc3BhY2Uuc3BhY2UpXG4gMjU4Olx0XHRcdFx0XHRcdHRwLVx1MDAzZXJjdnFfc3BhY2Uuc3BhY2UgPSB0cC1cdTAwM2V3aW5kb3dfY2xhbXA7XG4gMjU5Olx0XHRcdFx0fVxuIDI2MDpcdFx0XHR9XG4gMjYxOlx0XHRcdGljc2stXHUwMDNlaWNza19hY2sucmN2X21zcyA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLFxuIDI2MjpcdFx0XHRcdFx0XHQgICAgICAgdGNwX3NrKHNrKS1cdTAwM2VhZHZtc3MpO1xuIDI2MzpcdFx0XHQvKiBBY2NvdW50IGZvciBwb3NzaWJseS1yZW1vdmVkIG9wdGlvbnMgKi9cbiAyNjQ6XHRcdFx0RE9fT05DRV9MSVRFX0lGKGxlbiBcdTAwM2UgaWNzay1cdTAwM2VpY3NrX2Fjay5yY3ZfbXNzICYjNDM7IE1BWF9UQ1BfT1BUSU9OX1NQQUNFLFxuIDI2NTpcdFx0XHRcdFx0dGNwX2dyb19kZXZfd2Fybiwgc2ssIHNrYiwgbGVuKTtcbiAyNjY6XHRcdFx0LyogSWYgdGhlIHNrYiBoYXMgYSBsZW4gb2YgZXhhY3RseSAxKk1TUyBhbmQgaGFzIHRoZSBQU0ggYml0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MTYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVENQIFN0YWNrIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgYHRjcF9zZXRfd2luZG93X2NsYW1wKHNrLCB2YWwpYCB0byBgV1JJVEVfT05DRSh0cC0mZ3Q7d2luZG93X2NsYW1wLCB2YWwpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdhcyBgdGNwX3NldF93aW5kb3dfY2xhbXBgIGludHJvZHVjZWQgcmVjZW50bHksIG9yIHdhcyBpdCBtb2RpZmllZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGhhZCBhIGZsYXcg4oCTIHBlcmhhcHMgYSBsb2NrZGVwIHdhcm5pbmcsIGEgY3Jhc2gsIG9yIGp1c3QgYSBsb2dpYyBlcnJvciBpbiBpdHMgdXNlLgoKRGlnZ2luZyBkZWVwZXIsIEkgc2VlIHRoYXQgYHRjcF9zZXRfd2luZG93X2NsYW1wYCBjYWxscyBgX190Y3BfYWRqdXN0X3Jjdl9zc3RocmVzaGAsIGFuZCB0aGF0IGZ1bmN0aW9uICpjb3VsZCogYmUgZG9pbmcgc29tZXRoaW5nIHF1aXRlIGludm9sdmVkLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBUQ1Agc3RhY2s7IHdlJiMzOTtyZSBub3QganVzdCB0YWxraW5nIGFib3V0IGNvc21ldGljIGNvZGUuIEFuZCwgY3JpdGljYWxseSwgdGhpcyBpcyByZWFjaGFibGUgdGhyb3VnaCBub3JtYWwgVENQIGRhdGEgcmVjZXB0aW9uLiBUaGF0IG1ha2VzIHRoaXMgV29ydGhGdXp6aW5nPXRydWUgaW4gbXkgYm9vay4KCk5vdywgYXMgSSYjMzk7bSB0aGlua2luZyBhYm91dCBmdXp6aW5nLCB0aGUgYEZvY3VzU3ltYm9sc2Agc2VjdGlvbiBoaWdobGlnaHRzIHRoYXQgYHRjcF9tZWFzdXJlX3Jjdl9tc3NgIGlzIHN0YXRpYy4gSG1tLCBsZXQgbWUgY2hlY2sgdGhlIGNhbGwgc2l0ZXMgZm9yIGl0LiBBaCwgYHRjcF9tZWFzdXJlX3Jjdl9tc3NgIGlzIGNhbGxlZCBmcm9tIGB0Y3BfZXZlbnRfZGF0YV9yZWN2YCBhbmQgYHRjcF9kYXRhX3F1ZXVlX29mb2AuIE9rYXksIGFuZCBgdGNwX2V2ZW50X2RhdGFfcmVjdmAgaXMgY2FsbGVkIGZyb20gYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLCBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCwgYW5kIGxpa2VseSBvdGhlciBwbGFjZXMuIEdpdmVuIGl0cyByb2xlIGFzIGEga2V5IGZ1bmN0aW9uIGluIFRDUCBkYXRhIHJlY2VwdGlvbiBhbmQgdGhlIGNvcmUgbmF0dXJlIG9mIHRoaXMgY2hhbmdlLCBJIHdpbGwgZGVmaW5pdGVseSB3YW50IHRvIGludmVzdGlnYXRlIGB0Y3BfZXZlbnRfZGF0YV9yZWN2YCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfZXZlbnRfZGF0YV9yZWN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmM9OTk1PXN0YXRpYyB2b2lkIHRjcF9zYXZlX2xyY3ZfZmxvd2xhYmVsKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMDE0LSAqL1xubmV0L2lwdjQvdGNwX2lucHV0LmM6MTAxNTpzdGF0aWMgdm9pZCB0Y3BfZXZlbnRfZGF0YV9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTEwMTYte1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTU2MDc9c3RhdGljIHZvaWQgdGNwX2RhdGFfcXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU2NzEtXHRcdGlmIChza2ItXHUwMDNlbGVuKVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NTY3MjpcdFx0XHR0Y3BfZXZlbnRfZGF0YV9yZWN2KHNrLCBza2IpO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNTY3My1cdFx0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2V0Y3BfZmxhZ3MgXHUwMDI2IFRDUEhEUl9GSU4pXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NjUwMD12b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY2MzctXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2NjM4Olx0XHRcdHRjcF9ldmVudF9kYXRhX3JlY3Yoc2ssIHNrYik7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02NjM5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODMwCgkJCQkJCQlvdXRwdXQ6IDEwNwoJCQkJCQkJdGhvdWdodHM6IDEwMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUQ1AgUmVjZWl2ZSBQYXRoIGZvciBGdXp6aW5nIEZvY3VzKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZW50cnkgcG9pbnRzIG9yIGZ1bmN0aW9ucyB0byBoaWdobGlnaHQgZm9yIGZ1enppbmcsIGdpdmVuIHRoaXMgcGF0Y2gmIzM5O3MgY2hhbmdlcy4gVGhlIHByaW1hcnkgZ29hbCBpcyB0byBhdm9pZCBsaXN0aW5nIGZ1bmN0aW9ucyB0aGF0IGFyZSBvdmVybHkgZ2VuZXJpYyBvciBob3QtcGF0aCwgYmVjYXVzZSB0aGF0JiMzOTtsbCBza2V3IHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbnMuCgpJJiMzOTttIHN0YXJ0aW5nIHdpdGggdGhlIGVudHJ5IHBvaW50czogYHRjcF9kYXRhX3F1ZXVlYCBhbmQgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLiBgdGNwX2RhdGFfcXVldWVgIGlzIGNhbGxlZCBieSBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCwgYW5kIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyB0aGUgZmFzdCBwYXRoLiBUaGUgcHJvbXB0IHN0ZWVycyBtZSBhd2F5IGZyb20gaG90LXBhdGhzLCBhbmQgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGRlZmluaXRlbHkgZml0cyB0aGF0IGRlc2NyaXB0aW9uLiBgdGNwX2RhdGFfcXVldWVgLCB0aG91Z2gsIGlzIHN0YXRpYy4gSG1tLi4uCgpUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYHRjcF9tZWFzdXJlX3Jjdl9tc3NgLCB3aGljaCBjYWxscyBgdGNwX3NldF93aW5kb3dfY2xhbXBgLiAgYHRjcF9tZWFzdXJlX3Jjdl9tc3NgIGlzIHN0YXRpYy4gU28sIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXJlIGFyZSByZWxldmFudCBub24tc3RhdGljIGZ1bmN0aW9ucyBpbnZvbHZlZC4KCmB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NgIGFuZCBgdGNwX3NldF93aW5kb3dfY2xhbXBgIGFyZSBib3RoIG5vbi1zdGF0aWMuIFRoZSBwYXRjaCB0b3VjaGVzIHRoZSAqY2FsbCogdG8gYHRjcF9zZXRfd2luZG93X2NsYW1wYCwgYnV0IGlzbiYjMzk7dCBtb2RpZnlpbmcgdGhhdCBmdW5jdGlvbiBkaXJlY3RseS4gSSYjMzk7dmUgcmUtZXhhbWluZWQgdGhlIGNvZGUuIFRoZSBwYXRjaCByZW1vdmVzIHRoZSBjYWxsIHRvIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgd2l0aGluIGB0Y3BfbWVhc3VyZV9yY3ZfbXNzYC4KCkxldCYjMzk7cyBsb29rIGF0IHRoZSBjYWxsZXJzIG9mIGB0Y3BfbWVhc3VyZV9yY3ZfbXNzYC4gV2UgaGF2ZSBgdGNwX2V2ZW50X2RhdGFfcmVjdmAgYW5kIGB0Y3BfZGF0YV9xdWV1ZV9vZm9gLCBib3RoIHN0YXRpYy4gIFNpbmNlIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHVuZGVyIHNjcnV0aW55IChgdGNwX21lYXN1cmVfcmN2X21zc2ApIGFuZCBpdHMgaW1tZWRpYXRlIGNhbGxlcnMgYXJlIHN0YXRpYywgbXkgaW5zdGluY3QgaXMgdG8gbG9vayBlbHNld2hlcmUuIEJ1dCB0aGUgbm9uLXN0YXRpYyBjYWxsZXJzIGluY2x1ZGUgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIChob3QtcGF0aCkgYW5kIGB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NgIChhbHNvIGhvdC1wYXRoKSwgYW5kLCBJJiMzOTttIHRyeWluZyB0byBhdm9pZCBsaXN0aW5nIGhvdCBwYXRocy4KCkNvdWxkIEkganVzdCBsaXN0IGB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NgIHNpbmNlIHRoZSBwYXRjaCBpcyB0b3VjaGluZyB0aGUgVENQIHJlY2VpdmUgcGF0aD8gQnV0IHRoZSBwcm9tcHQgYWR2aXNlcyBhZ2FpbnN0IHRoaXMuIE1heWJlIGxlYXZlIGBGb2N1c1N5bWJvbHNgIGVtcHR5LiBUaGUgcGF0Y2ggZGlyZWN0bHkgdG91Y2hlcyBhIHN0YXRpYyBmdW5jdGlvbiwgYW5kIGlmIEkgZG9uJiMzOTt0IGxpc3QgYW55dGhpbmcsIHRoZSBmdXp6ZXIgbWlnaHQgdGVzdCBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCBhcyB3ZWxsLgoKVGhlIHBhdGNoIGNoYW5nZXMgdGhlIGNhbGwgdG8gYHRjcF9zZXRfd2luZG93X2NsYW1wYCBhbmQgaXQgc2VlbXMgdGhlIGNoYW5nZSBpcyBpbXBvcnRhbnQsIGluIHdoaWNoIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgaXMgdW5uZWNlc3NhcnkuCgpMZXQmIzM5O3MgZG8gb25lIGxhc3QgY2hlY2sgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgcGFydCBvZiB0aGUgY29kZS4gQWdhaW4sIGB0Y3BfZGF0YV9xdWV1ZWAsIGB0Y3BfZGF0YV9xdWV1ZV9vZm9gLCBhbmQgYHRjcF9ldmVudF9kYXRhX3JlY3ZgIGFyZSBzdGF0aWMuICBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgc3RhdGljIChgdGNwX21lYXN1cmVfcmN2X21zc2ApLgoKU28sIEkmIzM5O20gbGVhbmluZyB0b3dhcmQgbGVhdmluZyBgRm9jdXNTeW1ib2xzYCBlbXB0eS4gVGhpcyBzaG91bGQgZGlyZWN0IHRoZSBmdXp6ZXIgdG93YXJkIHRoZSBtb3N0IHJlbGV2YW50IGNvZGUgYW5kIGF2b2lkIHNrZXdpbmcgaXQgdG93YXJkcyBob3QtcGF0aCBmdW5jdGlvbnMuIENvcmUgVENQIGlzIGFsd2F5cyBlbmFibGVkLCBzbyBubyBzcGVjaWZpYyBDT05GSUcgb3B0aW9ucyBhcmUgbmVlZGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gVENQJiMzOTtzIGNvcmUgcmVjZWl2ZSBsb2dpYywgd29ydGggdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIHJlY2VpdmUgcGF0aCBieSByZXBsYWNpbmcgYSBjYWxsIHRvIHRjcF9zZXRfd2luZG93X2NsYW1wIHdpdGggYSBkaXJlY3QgV1JJVEVfT05DRSB0byB0cC1cdTAwM2V3aW5kb3dfY2xhbXAgaW4gdGNwX21lYXN1cmVfcmN2X21zcy4gVGhpcyBhdm9pZHMgdGhlIGFkZGl0aW9uYWwgbG9naWMgaW4gdGNwX3NldF93aW5kb3dfY2xhbXAgKHN1Y2ggYXMgYWRqdXN0aW5nIHJjdl9zc3RocmVzaCkgYW5kIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBUQ1AgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUQ1AgcmVjZWl2ZSBwYXRoIGJ5IHJlcGxhY2luZyBhIGNhbGwgdG8gdGNwX3NldF93aW5kb3dfY2xhbXAgd2l0aCBhIGRpcmVjdCBXUklURV9PTkNFIHRvIHRwLVx1MDAzZXdpbmRvd19jbGFtcCBpbiB0Y3BfbWVhc3VyZV9yY3ZfbXNzLiBUaGlzIGF2b2lkcyB0aGUgYWRkaXRpb25hbCBsb2dpYyBpbiB0Y3Bfc2V0X3dpbmRvd19jbGFtcCAoc3VjaCBhcyBhZGp1c3RpbmcgcmN2X3NzdGhyZXNoKSBhbmQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFRDUCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEyOjQ0LjY3MjQ2MDczWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMTA0ODAxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUQ1AgcmVjZWl2ZSBwYXRoIGJ5IHJlcGxhY2luZyBhIGNhbGwgdG8gdGNwX3NldF93aW5kb3dfY2xhbXAgd2l0aCBhIGRpcmVjdCBXUklURV9PTkNFIHRvIHRwLVxcdTAwM2V3aW5kb3dfY2xhbXAgaW4gdGNwX21lYXN1cmVfcmN2X21zcy4gVGhpcyBhdm9pZHMgdGhlIGFkZGl0aW9uYWwgbG9naWMgaW4gdGNwX3NldF93aW5kb3dfY2xhbXAgKHN1Y2ggYXMgYWRqdXN0aW5nIHJjdl9zc3RocmVzaCkgYW5kIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBUQ1AgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEyOjQ0LjY3MjQ2NzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMzgwNjk3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI4ZjNjMzhlOTQyMWI4NTEzZWJjN2VhZGVjODQ0OTQxNjZhOGM2YzZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMjYgMTI6MTI6NDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xcbmluZGV4IGRhZmY5M2Q1MTM0Mjg3Li41YjYzNzhiOTQ3MDFlZiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuY1xcbisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXFxuQEAgLTI1Miw3ICsyNTIsNyBAQCBzdGF0aWMgdm9pZCB0Y3BfbWVhc3VyZV9yY3ZfbXNzKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0XFx0XFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuIFxcbiBcXHRcXHRcXHRcXHR2YWwgPSB0Y3Bfd2luX2Zyb21fc3BhY2Uoc2ssIHNrLVxcdTAwM2Vza19yY3ZidWYpO1xcbi1cXHRcXHRcXHRcXHR0Y3Bfc2V0X3dpbmRvd19jbGFtcChzaywgdmFsKTtcXG4rXFx0XFx0XFx0XFx0V1JJVEVfT05DRSh0cC1cXHUwMDNld2luZG93X2NsYW1wLCB2YWwpO1xcbiBcXG4gXFx0XFx0XFx0XFx0aWYgKHRwLVxcdTAwM2V3aW5kb3dfY2xhbXAgXFx1MDAzYyB0cC1cXHUwMDNlcmN2cV9zcGFjZS5zcGFjZSlcXG4gXFx0XFx0XFx0XFx0XFx0dHAtXFx1MDAzZXJjdnFfc3BhY2Uuc3BhY2UgPSB0cC1cXHUwMDNld2luZG93X2NsYW1wO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMjoxMjo0NS4yNzY5MDkyNThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MzYwNjAyNDc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRDUCByZWNlaXZlIHBhdGggYnkgcmVwbGFjaW5nIGEgY2FsbCB0byB0Y3Bfc2V0X3dpbmRvd19jbGFtcCB3aXRoIGEgZGlyZWN0IFdSSVRFX09OQ0UgdG8gdHAtXFx1MDAzZXdpbmRvd19jbGFtcCBpbiB0Y3BfbWVhc3VyZV9yY3ZfbXNzLiBUaGlzIGF2b2lkcyB0aGUgYWRkaXRpb25hbCBsb2dpYyBpbiB0Y3Bfc2V0X3dpbmRvd19jbGFtcCAoc3VjaCBhcyBhZGp1c3RpbmcgcmN2X3NzdGhyZXNoKSBhbmQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFRDUCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjhmM2MzOGU5NDIxYjg1MTNlYmM3ZWFkZWM4NDQ5NDE2NmE4YzZjNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDEyOjEyOjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuaW5kZXggZGFmZjkzZDUxMzQyODcuLjViNjM3OGI5NDcwMWVmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmNcbisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXG5AQCAtMjUyLDcgKzI1Miw3IEBAIHN0YXRpYyB2b2lkIHRjcF9tZWFzdXJlX3Jjdl9tc3Moc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4gXG4gXHRcdFx0XHR2YWwgPSB0Y3Bfd2luX2Zyb21fc3BhY2Uoc2ssIHNrLVx1MDAzZXNrX3JjdmJ1Zik7XG4tXHRcdFx0XHR0Y3Bfc2V0X3dpbmRvd19jbGFtcChzaywgdmFsKTtcbitcdFx0XHRcdFdSSVRFX09OQ0UodHAtXHUwMDNld2luZG93X2NsYW1wLCB2YWwpO1xuIFxuIFx0XHRcdFx0aWYgKHRwLVx1MDAzZXdpbmRvd19jbGFtcCBcdTAwM2MgdHAtXHUwMDNlcmN2cV9zcGFjZS5zcGFjZSlcbiBcdFx0XHRcdFx0dHAtXHUwMDNlcmN2cV9zcGFjZS5zcGFjZSA9IHRwLVx1MDAzZXdpbmRvd19jbGFtcDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEyOjQ1LjI3NjkxMDIxOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODQwMTc4MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVENQIElucHV0IE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIEl0IHNlZW1zIHRoZXkndmUgbWFkZSBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgdGNwX21lYXN1cmVfcmN2X21zc2AgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBsaW5lLCBgdGNwX3NldF93aW5kb3dfY2xhbXAoc2ssIHZhbCk7YCwgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBgV1JJVEVfT05DRSh0cC1cdTAwM2V3aW5kb3dfY2xhbXAsIHZhbCk7YC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgaXMgcHJvYmFibHkgYSBmdW5jdGlvbiBjYWxsLCBzbyBJIG5lZWQgdG8gY2hlY2sgaXRzIGltcGxlbWVudGF0aW9uIGFuZCB1bmRlcnN0YW5kIHdoYXQgaXQgYWN0dWFsbHkgKmRvZXMqIGluIHRoZSBjb250ZXh0IG9mIHJlY2VpdmluZyBNU1MgYW5kIHRoZSB3aW5kb3cgY2xhbXAuIEtub3dpbmcgdGhlIHNwZWNpZmljcyB3aWxsIHByb3ZpZGUgdGhlIGNvbnRleHQgZm9yIHdoYXQgdGhpcyByZXdyaXRlIGltcGxpZXMuIElzIHRoaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IEEgY29uY3VycmVuY3kgaXNzdWUgZml4PyBJcyBgV1JJVEVfT05DRWAgbW9yZSBlZmZpY2llbnQsIG9yIHNhZmVyIHNvbWVob3c/XG5cbkknbGwgZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgbmV4dC4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGBXUklURV9PTkNFYCByZXBsYWNlbWVudCBicmluZ3MgYW55IHBlcmZvcm1hbmNlIGJlbmVmaXRzIG9yIHBvdGVudGlhbCBmb3IgbG9ja2luZyBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEyOjQ4LjU2MDkzMDMxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDEzNTM1NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3NldF93aW5kb3dfY2xhbXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2lucHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEyOjQ4LjY1MTA3MjU3NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTUwMjEwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBUQ1AgV2luZG93IENsYW1wIENoYW5nZSoqXG5cbkhtbSwgKndhaXQgYSBtaW51dGUqLiBEaWQgSSBqdXN0IHJlYWQgdGhhdCBgdGNwX3NldF93aW5kb3dfY2xhbXBgIHdhcyBlaXRoZXIgcmVtb3ZlZCBlbnRpcmVseSwgb3IgaXRzIGJlaGF2aW91ciBzdWJzdGFudGlhbGx5IGFsdGVyZWQ/IFRoYXQncyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBtYW5hZ2luZyByZWNlaXZlIHdpbmRvdyBzaXppbmcsIGFuZCBhbnkgY2hhbmdlIHRoZXJlIG5lZWRzIGltbWVkaWF0ZSBhdHRlbnRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy5cblxuUmlnaHQsIGxldOKAmXMgZ2V0IGEgaGFuZGxlIG9uIHdoYXQgbWlnaHQgYmUgZ29pbmcgb24sIEkgc2hvdWxkIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgY29yZSBsb2dpYy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY2xhbXBpbmcgYmVoYXZpb3IgaGFzIGp1c3QgYmVlbiBtb3ZlZCBlbHNld2hlcmUgaW4gdGhlIGNvZGUuIEknbGwgbmVlZCB0byBsb29rIGF0IHdoYXQncyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gdGhlIHJlY2VpdmUgd2luZG93IHNpemluZy4gQWgsIHllcywgYHRjcF9tZWFzdXJlX3Jjdl9tc3NgLiBJZiB0aGUgY2xhbXAgaXMgZ29uZSwgbWF5YmUgdGhlIHJlY2VpdmUgTVNTIGxvZ2ljIGlzIGRpcmVjdGx5IHJlc3BvbnNpYmxlIGZvciBpbmZsdWVuY2luZyB0aGUgd2luZG93IHNpemUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhvc2UgdHdvIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGNoYW5nZSBhZmZlY3RpbmcgcGVyZm9ybWFuY2UgYW5kIGZsb3cgY29udHJvbCwgYW5kIEkgbmVlZCB0byBhc3Nlc3MgdGhlIG1vZGlmaWNhdGlvbnMgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEyOjUxLjkwNjA5NTMxNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTQ5MjM3NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX21lYXN1cmVfcmN2X21zc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuYy01MS0gKlxcdFxcdFxcdFxcdFxcdGEgZmF0YWwgZXJyb3IgaWYgaXQgbWlnaHQgc3RpbGwgaGFwcGVuLlxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjUyOiAqXFx0XFx0QW5kaSBLbGVlbjpcXHRcXHRBZGQgdGNwX21lYXN1cmVfcmN2X21zcyB0byBtYWtlXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTMtICpcXHRcXHRcXHRcXHRcXHRjb25uZWN0aW9ucyB3aXRoIE1TU1xcdTAwM2NtaW4oTVRVLGFubi4gTVNTKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9MjExPXN0YXRpYyBfX2NvbGQgdm9pZCB0Y3BfZ3JvX2Rldl93YXJuKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTIyNi0gKi9cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzoyMjc6c3RhdGljIHZvaWQgdGNwX21lYXN1cmVfcmN2X21zcyhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMjI4LXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTc3OD1zdGF0aWMgdm9pZCB0Y3BfY2xhbXBfd2luZG93KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTgwMy0gKiBPdmVyZXN0aW1hdGlvbnMgbWFrZSB1cyBBQ0tpbmcgbGVzcyBmcmVxdWVudGx5IHRoYW4gbmVlZGVkLlxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjgwNDogKiBVbmRlcmVzdGltYXRpb25zIGFyZSBtb3JlIGVhc3kgdG8gZGV0ZWN0IGFuZCBmaXggYnkgdGNwX21lYXN1cmVfcmN2X21zcygpLlxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTgwNS0gKi9cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTEwMTU9c3RhdGljIHZvaWQgdGNwX2V2ZW50X2RhdGFfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMDIyLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjEwMjM6XFx0dGNwX21lYXN1cmVfcmN2X21zcyhzaywgc2tiKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMDI0LVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NTM4MT1zdGF0aWMgdm9pZCB0Y3BfZGF0YV9xdWV1ZV9vZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTM5OC1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1Mzk5OlxcdHRjcF9tZWFzdXJlX3Jjdl9tc3Moc2ssIHNrYik7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTQwMC1cXHQvKiBEaXNhYmxlIGhlYWRlciBwcmVkaWN0aW9uLiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMjoxMjo1Mi4zMDEwMjMzNjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjgwODgxMjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQW5hbHl6aW5nIHRoZSBXaW5kb3cgQ2xhbXAgTW9kaWZpY2F0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGNvbW1pdCdzIHJlcGxhY2VkIGEgY2FsbCB0byBgdGNwX3NldF93aW5kb3dfY2xhbXAoc2ssIHZhbClgIHdpdGggYSBgV1JJVEVfT05DRSh0cC1cdTAwM2V3aW5kb3dfY2xhbXAsIHZhbClgLiBIbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEltbWVkaWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIHJlYXNvbmluZy4gTXkgZmlyc3QgdGhvdWdodCBpczogd2FzIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgcmVhbGx5IGEgZnVsbC1ibG93biBmdW5jdGlvbiwgb3Igd2FzIGl0IGEgc3RhdGljIGlubGluZSBmdW5jdGlvbiBvciBldmVuIGp1c3QgYSBtYWNybz8gU29tZXRpbWVzIHRoZXNlIGNoYW5nZXMgYXJlIGFib3V0IHBlcmZvcm1hbmNlLCBwb3RlbnRpYWxseSByZW1vdmluZyBhIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQuIE90aGVyIHRpbWVzLCBpdCdzIGFib3V0IG1lbW9yeSBvcmRlcmluZyBhbmQgc3luY2hyb25pemF0aW9uLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgbmF0dXJlIG9mIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgdG8gdW5kZXJzdGFuZCB0aGUgdHJ1ZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UsIHNvIEknbGwgY2hlY2sgaXRzIGRlZmluaXRpb24uIFRoaXMgd2lsbCByZXZlYWwgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uLCBhbmQgZnJvbSB0aGVyZSBJIGNhbiBiZXR0ZXIgcmVhc29uIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgbW92aW5nIHRvIGBXUklURV9PTkNFYC4gV2FzIHRoZXJlIHNvbWUgaW1wbGljaXQgbG9ja2luZyBvciBtZW1vcnkgYmFycmllciBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbmFsIGZ1bmN0aW9uPyBIYXMgdGhpcyBub3cgYmVlbiBtYWRlIGV4cGxpY2l0PyBJIHNob3VsZCBsb29rIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJcyB0aGlzIHBvdGVudGlhbGx5IGEgY3JpdGljYWwgY2hhbmdlIHRvIHRoZSBtZW1vcnkgbW9kZWw/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMDEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMjoxMjo1Ni41ODE5MDYzNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODAxMDY0MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9zZXRfd2luZG93X2NsYW1wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD01MTY9dm9pZCB0Y3Bfc2V0X3JjdmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpO1xcbmluY2x1ZGUvbmV0L3RjcC5oOjUxNzppbnQgdGNwX3NldF93aW5kb3dfY2xhbXAoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKTtcXG5pbmNsdWRlL25ldC90Y3AuaC01MTgtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xODU3PXZvaWQgdGNwX3NldF9yY3ZidWYoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxcbm5ldC9pcHY0L3RjcC5jLTE4NTgte1xcbm5ldC9pcHY0L3RjcC5jOjE4NTk6XFx0dGNwX3NldF93aW5kb3dfY2xhbXAoc2ssIHRjcF93aW5fZnJvbV9zcGFjZShzaywgdmFsKSk7XFxubmV0L2lwdjQvdGNwLmMtMTg2MC19XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0zNzg3PUVYUE9SVF9TWU1CT0wodGNwX3NvY2tfc2V0X2tlZXBjbnQpO1xcbm5ldC9pcHY0L3RjcC5jLTM3ODgtXFxubmV0L2lwdjQvdGNwLmM6Mzc4OTppbnQgdGNwX3NldF93aW5kb3dfY2xhbXAoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxcbm5ldC9pcHY0L3RjcC5jLTM3OTAte1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9MzgzNz1pbnQgZG9fdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDA1NS1cXHRjYXNlIFRDUF9XSU5ET1dfQ0xBTVA6XFxubmV0L2lwdjQvdGNwLmM6NDA1NjpcXHRcXHRlcnIgPSB0Y3Bfc2V0X3dpbmRvd19jbGFtcChzaywgdmFsKTtcXG5uZXQvaXB2NC90Y3AuYy00MDU3LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMjoxMjo1OC4zODI5NzQ4NjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTk1NDk0NTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAqKlxuXG5IbW0sIHNvIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAuLi4gcmlnaHQsIEkgc2VlIGl0J3MgYW4gKmV4cG9ydGVkKiBmdW5jdGlvbiwgb3IgYXQgbGVhc3QgYSBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiBgbmV0L2lwdjQvdGNwLmNgLiBPa2F5LCB0aGF0J3MgdGhlIGZpcnN0IGNsdWUuIEJ1dCB3YWl0LCB0aGlzIGlzbid0ICpqdXN0KiBzZXR0aW5nIGB0cC1cdTAwM2V3aW5kb3dfY2xhbXBgLCBpcyBpdD8gVGhlcmUncyBnb3QgdG8gYmUgbW9yZSB0byBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJ3MgZnVsbCBwdXJwb3NlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgd2hhdCBgdGNwX3NldF93aW5kb3dfY2xhbXBgIGlzIGRvaW5nLiBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGltcGFjdCBhbmQgdXNhZ2Ugb2YgdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA0NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEzOjAxLjU3ODQ3MTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3ODksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM3ODk6XFx0aW50IHRjcF9zZXRfd2luZG93X2NsYW1wKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcXG4zNzkwOlxcdHtcXG4zNzkxOlxcdFxcdHUzMiBvbGRfd2luZG93X2NsYW1wLCBuZXdfd2luZG93X2NsYW1wLCBuZXdfcmN2X3NzdGhyZXNoO1xcbjM3OTI6XFx0XFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuMzc5MzpcXHRcXG4zNzk0OlxcdFxcdGlmICghdmFsKSB7XFxuMzc5NTpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TRSlcXG4zNzk2OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM3OTc6XFx0XFx0XFx0V1JJVEVfT05DRSh0cC1cXHUwMDNld2luZG93X2NsYW1wLCAwKTtcXG4zNzk4OlxcdFxcdFxcdHJldHVybiAwO1xcbjM3OTk6XFx0XFx0fVxcbjM4MDA6XFx0XFxuMzgwMTpcXHRcXHRvbGRfd2luZG93X2NsYW1wID0gdHAtXFx1MDAzZXdpbmRvd19jbGFtcDtcXG4zODAyOlxcdFxcdG5ld193aW5kb3dfY2xhbXAgPSBtYXhfdChpbnQsIFNPQ0tfTUlOX1JDVkJVRiAvIDIsIHZhbCk7XFxuMzgwMzpcXHRcXG4zODA0OlxcdFxcdGlmIChuZXdfd2luZG93X2NsYW1wID09IG9sZF93aW5kb3dfY2xhbXApXFxuMzgwNTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zODA2OlxcdFxcbjM4MDc6XFx0XFx0V1JJVEVfT05DRSh0cC1cXHUwMDNld2luZG93X2NsYW1wLCBuZXdfd2luZG93X2NsYW1wKTtcXG4zODA4OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMjoxMzowMS41Nzg2ODAzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NzQ2MDI3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdGNwX3NldF93aW5kb3dfY2xhbXBgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdGNwX3NldF93aW5kb3dfY2xhbXBgIGZ1bmN0aW9uIGFuZCwgd2FpdCBhIG1pbnV0ZSwgaXQgZG9lcyBtb3JlIHRoYW4gSSBpbml0aWFsbHkgdGhvdWdodC4gSXQncyBub3QganVzdCBhIHN0cmFpZ2h0Zm9yd2FyZCB3aW5kb3cgY2xhbXAgc2V0dGVyLiBJdCBzZWVtcyB0byBoYXZlIHNvbWUgZXh0cmEgbG9naWMgZW1iZWRkZWQgd2l0aGluIGl0LiBJIHNlZSB0aGF0IGl0IGNoZWNrcyBmb3IgYSB6ZXJvIHZhbHVlLCBhbmQgaWYgaXQgcmVjZWl2ZXMgb25lICphbmQqIHRoZSBzb2NrZXQgc3RhdGUgaXNuJ3QgYFRDUF9DTE9TRWAsIGl0IHJldHVybnMgYW4gZXJyb3IuIE90aGVyd2lzZSwgaXQgdXBkYXRlcyBgdHAtXHUwMDNld2luZG93X2NsYW1wYCB3aXRoIGVpdGhlciB0aGUgbWluaW11bSBidWZmZXIgc2l6ZSBkaXZpZGVkIGJ5IHR3byBvciB0aGUgcHJvdmlkZWQgdmFsdWUsIHdoaWNoZXZlciBpcyBsYXJnZXIsIGFmdGVyIGFsc28gd3JpdGluZyB0aGUgdmFsdWUgd2l0aCBgV1JJVEVfT05DRWAuXG5cbk5vdywgdGhlIHBhdGNoIGlzIHJlcGxhY2luZyB0aGlzIGVudGlyZSBmdW5jdGlvbiBjYWxsIHdpdGggYSBkaXJlY3QgYFdSSVRFX09OQ0VgIHdyaXRlIHRvIGB0cC1cdTAwM2V3aW5kb3dfY2xhbXBgIGluIGB0Y3BfbWVhc3VyZV9yY3ZfbXNzYC4gVGhhdCdzIGEgbGl0dGxlIGNvbmNlcm5pbmcuLi4gSSB3b25kZXIgd2h5LiBCeSBkb2luZyB0aGF0LCB0aGUgcGF0Y2ggaXMgYnlwYXNzaW5nIGFsbCB0aGUgYWRkaXRpb25hbCBjaGVja3MgYW5kIHBvdGVudGlhbGx5IHRoZSBgcmN2X3NzdGhyZXNoYCBhbmQgYHNrX3N0YXRlYCB1cGRhdGUuXG5cbkkgbmVlZCB0byBzZWUgdGhlIHJlbWFpbmluZyBwYXJ0cyBvZiB0aGlzIGZ1bmN0aW9uIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgb3IgaXMgaXQgZ29pbmcgdG8gY2F1c2Ugc29tZSB1bmV4cGVjdGVkIGJlaGF2aW9yPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaWYgYnlwYXNzaW5nIHRob3NlIGV4dHJhIGNoZWNrcyBpcyBhY3R1YWxseSBzYWZlIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MzAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMjoxMzowNi41NTMyODU2MTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MDksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM4MDk6XFx0XFx0LyogTmVlZCB0byBhcHBseSB0aGUgcmVzZXJ2ZWQgbWVtIHByb3Zpc2lvbmluZyBvbmx5XFxuMzgxMDpcXHRcXHQgKiB3aGVuIHNocmlua2luZyB0aGUgd2luZG93IGNsYW1wLlxcbjM4MTE6XFx0XFx0ICovXFxuMzgxMjpcXHRcXHRpZiAobmV3X3dpbmRvd19jbGFtcCBcXHUwMDNjIG9sZF93aW5kb3dfY2xhbXApIHtcXG4zODEzOlxcdFxcdFxcdF9fdGNwX2FkanVzdF9yY3Zfc3N0aHJlc2goc2ssIG5ld193aW5kb3dfY2xhbXApO1xcbjM4MTQ6XFx0XFx0fSBlbHNlIHtcXG4zODE1OlxcdFxcdFxcdG5ld19yY3Zfc3N0aHJlc2ggPSBtaW4odHAtXFx1MDAzZXJjdl93bmQsIG5ld193aW5kb3dfY2xhbXApO1xcbjM4MTY6XFx0XFx0XFx0dHAtXFx1MDAzZXJjdl9zc3RocmVzaCA9IG1heChuZXdfcmN2X3NzdGhyZXNoLCB0cC1cXHUwMDNlcmN2X3NzdGhyZXNoKTtcXG4zODE3OlxcdFxcdH1cXG4zODE4OlxcdFxcdHJldHVybiAwO1xcbjM4MTk6XFx0fVxcbjM4MjA6XFx0XFxuMzgyMTpcXHRpbnQgdGNwX3NvY2tfc2V0X21heHNlZyhzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXFxuMzgyMjpcXHR7XFxuMzgyMzpcXHRcXHQvKiBWYWx1ZXMgZ3JlYXRlciB0aGFuIGludGVyZmFjZSBNVFUgd29uJ3QgdGFrZSBlZmZlY3QuIEhvd2V2ZXJcXG4zODI0OlxcdFxcdCAqIGF0IHRoZSBwb2ludCB3aGVuIHRoaXMgY2FsbCBpcyBkb25lIHdlIHR5cGljYWxseSBkb24ndCB5ZXRcXG4zODI1OlxcdFxcdCAqIGtub3cgd2hpY2ggaW50ZXJmYWNlIGlzIGdvaW5nIHRvIGJlIHVzZWRcXG4zODI2OlxcdFxcdCAqL1xcbjM4Mjc6XFx0XFx0aWYgKHZhbCBcXHUwMDI2XFx1MDAyNiAodmFsIFxcdTAwM2MgVENQX01JTl9NU1MgfHwgdmFsIFxcdTAwM2UgTUFYX1RDUF9XSU5ET1cpKVxcbjM4Mjg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEzOjA2LjU1MzQ5MTYyNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ3MjA1NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFRDUCBSZWNlaXZlIFBhdGggUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyB1c2luZyBgdGNwX3NldF93aW5kb3dfY2xhbXBgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBfX3RjcF9hZGp1c3RfcmN2X3NzdGhyZXNoYCBhbmQgdXBkYXRlcyBgcmN2X3NzdGhyZXNoYC4gQnV0LCBieSBzd2FwcGluZyB0aGF0IG91dCB3aXRoIGBXUklURV9PTkNFKHRwLVx1MDAzZXdpbmRvd19jbGFtcCwgdmFsKWAsIHRoZSBwYXRjaCBpcyBieXBhc3NpbmcgdGhlIGByY3Zfc3N0aHJlc2hgIHVwZGF0ZSBhbmQgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgaXQncyBhbHRlcmluZyBob3cgdGhlIFRDUCByZWNlaXZlIHBhdGggYmVoYXZlcy5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8gQWJzb2x1dGVseSwgaXQgZG9lcy4gQW55IGNoYW5nZSB0byB0aGUgVENQIHJlY2VpdmUgd2luZG93IGxvZ2ljIGlzIGEgcG90ZW50aWFsIGF0dGFjayB2ZWN0b3IsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhIHNvdXJjZSBvZiBzdWJ0bGUgcGVyZm9ybWFuY2UgZGlmZmVyZW5jZXMuIFRoaXMgaXMgY3JpdGljYWwuXG5cbk5vdywgYSByZWxhdGVkIHRob3VnaHQgcG9wcGVkIHVwLiBJIG5lZWQgdG8gYmUgc3VyZS4gSSdtIHJlY2FsbGluZyB0aGF0IGB0Y3BfbWVhc3VyZV9yY3ZfbXNzYCBpcyBpbnZvbHZlZCB3aGVuIGRhdGEgaXMgcmVjZWl2ZWQuIEkgc2hvdWxkIGNoZWNrIGhvdyB0aGF0IGZpdHMgaW50byB0aGlzIHBpY3R1cmUuIFRpbWUgdG8gZGlnIGludG8gdGhlIGB0Y3BfbWVhc3VyZV9yY3ZfbXNzYCBmdW5jdGlvbi4gTGV0IG1lIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjE4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTI6MTM6MTAuODAwNzAwMzEzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMjE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjcsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjc6XFx0c3RhdGljIHZvaWQgdGNwX21lYXN1cmVfcmN2X21zcyhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIDIyODpcXHR7XFxuIDIyOTpcXHRcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxuIDIzMDpcXHRcXHRjb25zdCB1bnNpZ25lZCBpbnQgbHNzID0gaWNzay1cXHUwMDNlaWNza19hY2subGFzdF9zZWdfc2l6ZTtcXG4gMjMxOlxcdFxcdHVuc2lnbmVkIGludCBsZW47XFxuIDIzMjpcXHRcXG4gMjMzOlxcdFxcdGljc2stXFx1MDAzZWljc2tfYWNrLmxhc3Rfc2VnX3NpemUgPSAwO1xcbiAyMzQ6XFx0XFxuIDIzNTpcXHRcXHQvKiBza2ItXFx1MDAzZWxlbiBtYXkgaml0dGVyIGJlY2F1c2Ugb2YgU0FDS3MsIGV2ZW4gaWYgcGVlclxcbiAyMzY6XFx0XFx0ICogc2VuZHMgZ29vZCBmdWxsLXNpemVkIGZyYW1lcy5cXG4gMjM3OlxcdFxcdCAqL1xcbiAyMzg6XFx0XFx0bGVuID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vnc29fc2l6ZSA/IDogc2tiLVxcdTAwM2VsZW47XFxuIDIzOTpcXHRcXHRpZiAobGVuIFxcdTAwM2U9IGljc2stXFx1MDAzZWljc2tfYWNrLnJjdl9tc3MpIHtcXG4gMjQwOlxcdFxcdFxcdC8qIE5vdGU6IGRpdmlkZXMgYXJlIHN0aWxsIGEgYml0IGV4cGVuc2l2ZS5cXG4gMjQxOlxcdFxcdFxcdCAqIEZvciB0aGUgbW9tZW50LCBvbmx5IGFkanVzdCBzY2FsaW5nX3JhdGlvXFxuIDI0MjpcXHRcXHRcXHQgKiB3aGVuIHdlIHVwZGF0ZSBpY3NrX2Fjay5yY3ZfbXNzLlxcbiAyNDM6XFx0XFx0XFx0ICovXFxuIDI0NDpcXHRcXHRcXHRpZiAodW5saWtlbHkobGVuICE9IGljc2stXFx1MDAzZWljc2tfYWNrLnJjdl9tc3MpKSB7XFxuIDI0NTpcXHRcXHRcXHRcXHR1NjQgdmFsID0gKHU2NClza2ItXFx1MDAzZWxlbiBcXHUwMDNjXFx1MDAzYyBUQ1BfUk1FTV9UT19XSU5fU0NBTEU7XFxuIDI0NjpcXHRcXHRcXHRcXHR1OCBvbGRfcmF0aW8gPSB0Y3Bfc2soc2spLVxcdTAwM2VzY2FsaW5nX3JhdGlvO1xcbiAyNDc6XFx0XFxuIDI0ODpcXHRcXHRcXHRcXHRkb19kaXYodmFsLCBza2ItXFx1MDAzZXRydWVzaXplKTtcXG4gMjQ5OlxcdFxcdFxcdFxcdHRjcF9zayhzayktXFx1MDAzZXNjYWxpbmdfcmF0aW8gPSB2YWwgPyB2YWwgOiAxO1xcbiAyNTA6XFx0XFxuIDI1MTpcXHRcXHRcXHRcXHRpZiAob2xkX3JhdGlvICE9IHRjcF9zayhzayktXFx1MDAzZXNjYWxpbmdfcmF0aW8pIHtcXG4gMjUyOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbiAyNTM6XFx0XFxuIDI1NDpcXHRcXHRcXHRcXHRcXHR2YWwgPSB0Y3Bfd2luX2Zyb21fc3BhY2Uoc2ssIHNrLVxcdTAwM2Vza19yY3ZidWYpO1xcbiAyNTU6XFx0XFx0XFx0XFx0XFx0V1JJVEVfT05DRSh0cC1cXHUwMDNld2luZG93X2NsYW1wLCB2YWwpO1xcbiAyNTY6XFx0XFxuIDI1NzpcXHRcXHRcXHRcXHRcXHRpZiAodHAtXFx1MDAzZXdpbmRvd19jbGFtcCBcXHUwMDNjIHRwLVxcdTAwM2VyY3ZxX3NwYWNlLnNwYWNlKVxcbiAyNTg6XFx0XFx0XFx0XFx0XFx0XFx0dHAtXFx1MDAzZXJjdnFfc3BhY2Uuc3BhY2UgPSB0cC1cXHUwMDNld2luZG93X2NsYW1wO1xcbiAyNTk6XFx0XFx0XFx0XFx0fVxcbiAyNjA6XFx0XFx0XFx0fVxcbiAyNjE6XFx0XFx0XFx0aWNzay1cXHUwMDNlaWNza19hY2sucmN2X21zcyA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLFxcbiAyNjI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHRjcF9zayhzayktXFx1MDAzZWFkdm1zcyk7XFxuIDI2MzpcXHRcXHRcXHQvKiBBY2NvdW50IGZvciBwb3NzaWJseS1yZW1vdmVkIG9wdGlvbnMgKi9cXG4gMjY0OlxcdFxcdFxcdERPX09OQ0VfTElURV9JRihsZW4gXFx1MDAzZSBpY3NrLVxcdTAwM2VpY3NrX2Fjay5yY3ZfbXNzICsgTUFYX1RDUF9PUFRJT05fU1BBQ0UsXFxuIDI2NTpcXHRcXHRcXHRcXHRcXHR0Y3BfZ3JvX2Rldl93YXJuLCBzaywgc2tiLCBsZW4pO1xcbiAyNjY6XFx0XFx0XFx0LyogSWYgdGhlIHNrYiBoYXMgYSBsZW4gb2YgZXhhY3RseSAxKk1TUyBhbmQgaGFzIHRoZSBQU0ggYml0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEzOjEwLjgwMTAxNDE5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjEyMDYyMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFRDUCBTdGFjayBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgYHRjcF9zZXRfd2luZG93X2NsYW1wKHNrLCB2YWwpYCB0byBgV1JJVEVfT05DRSh0cC1cdTAwM2V3aW5kb3dfY2xhbXAsIHZhbClgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2FzIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgaW50cm9kdWNlZCByZWNlbnRseSwgb3Igd2FzIGl0IG1vZGlmaWVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gaGFkIGEgZmxhdyDigJMgcGVyaGFwcyBhIGxvY2tkZXAgd2FybmluZywgYSBjcmFzaCwgb3IganVzdCBhIGxvZ2ljIGVycm9yIGluIGl0cyB1c2UuXG5cbkRpZ2dpbmcgZGVlcGVyLCBJIHNlZSB0aGF0IGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgY2FsbHMgYF9fdGNwX2FkanVzdF9yY3Zfc3N0aHJlc2hgLCBhbmQgdGhhdCBmdW5jdGlvbiAqY291bGQqIGJlIGRvaW5nIHNvbWV0aGluZyBxdWl0ZSBpbnZvbHZlZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgVENQIHN0YWNrOyB3ZSdyZSBub3QganVzdCB0YWxraW5nIGFib3V0IGNvc21ldGljIGNvZGUuIEFuZCwgY3JpdGljYWxseSwgdGhpcyBpcyByZWFjaGFibGUgdGhyb3VnaCBub3JtYWwgVENQIGRhdGEgcmVjZXB0aW9uLiBUaGF0IG1ha2VzIHRoaXMgV29ydGhGdXp6aW5nPXRydWUgaW4gbXkgYm9vay5cblxuTm93LCBhcyBJJ20gdGhpbmtpbmcgYWJvdXQgZnV6emluZywgdGhlIGBGb2N1c1N5bWJvbHNgIHNlY3Rpb24gaGlnaGxpZ2h0cyB0aGF0IGB0Y3BfbWVhc3VyZV9yY3ZfbXNzYCBpcyBzdGF0aWMuIEhtbSwgbGV0IG1lIGNoZWNrIHRoZSBjYWxsIHNpdGVzIGZvciBpdC4gQWgsIGB0Y3BfbWVhc3VyZV9yY3ZfbXNzYCBpcyBjYWxsZWQgZnJvbSBgdGNwX2V2ZW50X2RhdGFfcmVjdmAgYW5kIGB0Y3BfZGF0YV9xdWV1ZV9vZm9gLiBPa2F5LCBhbmQgYHRjcF9ldmVudF9kYXRhX3JlY3ZgIGlzIGNhbGxlZCBmcm9tIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCwgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AsIGFuZCBsaWtlbHkgb3RoZXIgcGxhY2VzLiBHaXZlbiBpdHMgcm9sZSBhcyBhIGtleSBmdW5jdGlvbiBpbiBUQ1AgZGF0YSByZWNlcHRpb24gYW5kIHRoZSBjb3JlIG5hdHVyZSBvZiB0aGlzIGNoYW5nZSwgSSB3aWxsIGRlZmluaXRlbHkgd2FudCB0byBpbnZlc3RpZ2F0ZSBgdGNwX2V2ZW50X2RhdGFfcmVjdmAgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgxNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEzOjE2LjQxMzA3ODg0M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwNTAxNTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9ldmVudF9kYXRhX3JlY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2lucHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2lucHV0LmM9OTk1PXN0YXRpYyB2b2lkIHRjcF9zYXZlX2xyY3ZfZmxvd2xhYmVsKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTEwMTQtICovXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6MTAxNTpzdGF0aWMgdm9pZCB0Y3BfZXZlbnRfZGF0YV9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMDE2LXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTU2MDc9c3RhdGljIHZvaWQgdGNwX2RhdGFfcXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTY3MS1cXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4pXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NTY3MjpcXHRcXHRcXHR0Y3BfZXZlbnRfZGF0YV9yZWN2KHNrLCBza2IpO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU2NzMtXFx0XFx0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNldGNwX2ZsYWdzIFxcdTAwMjYgVENQSERSX0ZJTilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTY1MDA9dm9pZCB0Y3BfcmN2X2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY2MzctXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NjYzODpcXHRcXHRcXHR0Y3BfZXZlbnRfZGF0YV9yZWN2KHNrLCBza2IpO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY2MzktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEzOjE2Ljg1MzU4NTMwMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjAyOTMxNjcwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRDUCBSZWNlaXZlIFBhdGggZm9yIEZ1enppbmcgRm9jdXMqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBlbnRyeSBwb2ludHMgb3IgZnVuY3Rpb25zIHRvIGhpZ2hsaWdodCBmb3IgZnV6emluZywgZ2l2ZW4gdGhpcyBwYXRjaCdzIGNoYW5nZXMuIFRoZSBwcmltYXJ5IGdvYWwgaXMgdG8gYXZvaWQgbGlzdGluZyBmdW5jdGlvbnMgdGhhdCBhcmUgb3Zlcmx5IGdlbmVyaWMgb3IgaG90LXBhdGgsIGJlY2F1c2UgdGhhdCdsbCBza2V3IHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG5cbkknbSBzdGFydGluZyB3aXRoIHRoZSBlbnRyeSBwb2ludHM6IGB0Y3BfZGF0YV9xdWV1ZWAgYW5kIGB0Y3BfcmN2X2VzdGFibGlzaGVkYC4gYHRjcF9kYXRhX3F1ZXVlYCBpcyBjYWxsZWQgYnkgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AsIGFuZCBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgaXMgdGhlIGZhc3QgcGF0aC4gVGhlIHByb21wdCBzdGVlcnMgbWUgYXdheSBmcm9tIGhvdC1wYXRocywgYW5kIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBkZWZpbml0ZWx5IGZpdHMgdGhhdCBkZXNjcmlwdGlvbi4gYHRjcF9kYXRhX3F1ZXVlYCwgdGhvdWdoLCBpcyBzdGF0aWMuIEhtbS4uLlxuXG5UaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYHRjcF9tZWFzdXJlX3Jjdl9tc3NgLCB3aGljaCBjYWxscyBgdGNwX3NldF93aW5kb3dfY2xhbXBgLiAgYHRjcF9tZWFzdXJlX3Jjdl9tc3NgIGlzIHN0YXRpYy4gU28sIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXJlIGFyZSByZWxldmFudCBub24tc3RhdGljIGZ1bmN0aW9ucyBpbnZvbHZlZC5cblxuYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AgYW5kIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgYXJlIGJvdGggbm9uLXN0YXRpYy4gVGhlIHBhdGNoIHRvdWNoZXMgdGhlICpjYWxsKiB0byBgdGNwX3NldF93aW5kb3dfY2xhbXBgLCBidXQgaXNuJ3QgbW9kaWZ5aW5nIHRoYXQgZnVuY3Rpb24gZGlyZWN0bHkuIEkndmUgcmUtZXhhbWluZWQgdGhlIGNvZGUuIFRoZSBwYXRjaCByZW1vdmVzIHRoZSBjYWxsIHRvIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgd2l0aGluIGB0Y3BfbWVhc3VyZV9yY3ZfbXNzYC5cblxuTGV0J3MgbG9vayBhdCB0aGUgY2FsbGVycyBvZiBgdGNwX21lYXN1cmVfcmN2X21zc2AuIFdlIGhhdmUgYHRjcF9ldmVudF9kYXRhX3JlY3ZgIGFuZCBgdGNwX2RhdGFfcXVldWVfb2ZvYCwgYm90aCBzdGF0aWMuICBTaW5jZSB0aGUgcHJpbWFyeSBmdW5jdGlvbiB1bmRlciBzY3J1dGlueSAoYHRjcF9tZWFzdXJlX3Jjdl9tc3NgKSBhbmQgaXRzIGltbWVkaWF0ZSBjYWxsZXJzIGFyZSBzdGF0aWMsIG15IGluc3RpbmN0IGlzIHRvIGxvb2sgZWxzZXdoZXJlLiBCdXQgdGhlIG5vbi1zdGF0aWMgY2FsbGVycyBpbmNsdWRlIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCAoaG90LXBhdGgpIGFuZCBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCAoYWxzbyBob3QtcGF0aCksIGFuZCwgSSdtIHRyeWluZyB0byBhdm9pZCBsaXN0aW5nIGhvdCBwYXRocy5cblxuQ291bGQgSSBqdXN0IGxpc3QgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2Agc2luY2UgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBUQ1AgcmVjZWl2ZSBwYXRoPyBCdXQgdGhlIHByb21wdCBhZHZpc2VzIGFnYWluc3QgdGhpcy4gTWF5YmUgbGVhdmUgYEZvY3VzU3ltYm9sc2AgZW1wdHkuIFRoZSBwYXRjaCBkaXJlY3RseSB0b3VjaGVzIGEgc3RhdGljIGZ1bmN0aW9uLCBhbmQgaWYgSSBkb24ndCBsaXN0IGFueXRoaW5nLCB0aGUgZnV6emVyIG1pZ2h0IHRlc3QgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AgYXMgd2VsbC5cblxuVGhlIHBhdGNoIGNoYW5nZXMgdGhlIGNhbGwgdG8gYHRjcF9zZXRfd2luZG93X2NsYW1wYCBhbmQgaXQgc2VlbXMgdGhlIGNoYW5nZSBpcyBpbXBvcnRhbnQsIGluIHdoaWNoIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgaXMgdW5uZWNlc3NhcnkuXG5cbkxldCdzIGRvIG9uZSBsYXN0IGNoZWNrIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGUuIEFnYWluLCBgdGNwX2RhdGFfcXVldWVgLCBgdGNwX2RhdGFfcXVldWVfb2ZvYCwgYW5kIGB0Y3BfZXZlbnRfZGF0YV9yZWN2YCBhcmUgc3RhdGljLiAgVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIHN0YXRpYyAoYHRjcF9tZWFzdXJlX3Jjdl9tc3NgKS5cblxuU28sIEknbSBsZWFuaW5nIHRvd2FyZCBsZWF2aW5nIGBGb2N1c1N5bWJvbHNgIGVtcHR5LiBUaGlzIHNob3VsZCBkaXJlY3QgdGhlIGZ1enplciB0b3dhcmQgdGhlIG1vc3QgcmVsZXZhbnQgY29kZSBhbmQgYXZvaWQgc2tld2luZyBpdCB0b3dhcmRzIGhvdC1wYXRoIGZ1bmN0aW9ucy4gQ29yZSBUQ1AgaXMgYWx3YXlzIGVuYWJsZWQsIHNvIG5vIHNwZWNpZmljIENPTkZJRyBvcHRpb25zIGFyZSBuZWVkZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBUQ1AncyBjb3JlIHJlY2VpdmUgbG9naWMsIHdvcnRoIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MzAsIk91dHB1dFRva2VucyI6MTA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMjoxMzoyOC44ODI5MDQ2OTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIHJlY2VpdmUgcGF0aCBieSByZXBsYWNpbmcgYSBjYWxsIHRvIHRjcF9zZXRfd2luZG93X2NsYW1wIHdpdGggYSBkaXJlY3QgV1JJVEVfT05DRSB0byB0cC1cXHUwMDNld2luZG93X2NsYW1wIGluIHRjcF9tZWFzdXJlX3Jjdl9tc3MuIFRoaXMgYXZvaWRzIHRoZSBhZGRpdGlvbmFsIGxvZ2ljIGluIHRjcF9zZXRfd2luZG93X2NsYW1wIChzdWNoIGFzIGFkanVzdGluZyByY3Zfc3N0aHJlc2gpIGFuZCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVENQIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIHJlY2VpdmUgcGF0aCBieSByZXBsYWNpbmcgYSBjYWxsIHRvIHRjcF9zZXRfd2luZG93X2NsYW1wIHdpdGggYSBkaXJlY3QgV1JJVEVfT05DRSB0byB0cC1cXHUwMDNld2luZG93X2NsYW1wIGluIHRjcF9tZWFzdXJlX3Jjdl9tc3MuIFRoaXMgYXZvaWRzIHRoZSBhZGRpdGlvbmFsIGxvZ2ljIGluIHRjcF9zZXRfd2luZG93X2NsYW1wIChzdWNoIGFzIGFkanVzdGluZyByY3Zfc3N0aHJlc2gpIGFuZCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVENQIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow2jb6f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-26 12:02:26 +0000 UTC FinishedAt: 2026-07-26 12:13:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78f75d632f74b8de0f081a128588f7c37d0d1164", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78f75d632f74b8de0f081a128588f7c37d0d1164", "config_name": "upstream-apparmor-kasan.config", "series_id": "85d514a6-17cd-4852-8a31-c09831e218c7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEyOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUQ1AgcmVjZWl2ZSBwYXRoIGJ5IHJlcGxhY2luZyBhIGNhbGwgdG8gdGNwX3NldF93aW5kb3dfY2xhbXAgd2l0aCBhIGRpcmVjdCBXUklURV9PTkNFIHRvIHRwLVx1MDAzZXdpbmRvd19jbGFtcCBpbiB0Y3BfbWVhc3VyZV9yY3ZfbXNzLiBUaGlzIGF2b2lkcyB0aGUgYWRkaXRpb25hbCBsb2dpYyBpbiB0Y3Bfc2V0X3dpbmRvd19jbGFtcCAoc3VjaCBhcyBhZGp1c3RpbmcgcmN2X3NzdGhyZXNoKSBhbmQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFRDUCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMjoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDI4ZjNjMzhlOTQyMWI4NTEzZWJjN2VhZGVjODQ0OTQxNjZhOGM2YzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAxMjoxMjo0MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXG5pbmRleCBkYWZmOTNkNTEzNDI4Ny4uNWI2Mzc4Yjk0NzAxZWYgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvdGNwX2lucHV0LmNcbkBAIC0yNTIsNyAmIzQzOzI1Miw3IEBAIHN0YXRpYyB2b2lkIHRjcF9tZWFzdXJlX3Jjdl9tc3Moc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4gXG4gXHRcdFx0XHR2YWwgPSB0Y3Bfd2luX2Zyb21fc3BhY2Uoc2ssIHNrLVx1MDAzZXNrX3JjdmJ1Zik7XG4tXHRcdFx0XHR0Y3Bfc2V0X3dpbmRvd19jbGFtcChzaywgdmFsKTtcbiYjNDM7XHRcdFx0XHRXUklURV9PTkNFKHRwLVx1MDAzZXdpbmRvd19jbGFtcCwgdmFsKTtcbiBcbiBcdFx0XHRcdGlmICh0cC1cdTAwM2V3aW5kb3dfY2xhbXAgXHUwMDNjIHRwLVx1MDAzZXJjdnFfc3BhY2Uuc3BhY2UpXG4gXHRcdFx0XHRcdHRwLVx1MDAzZXJjdnFfc3BhY2Uuc3BhY2UgPSB0cC1cdTAwM2V3aW5kb3dfY2xhbXA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTI6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUQ1AgcmVjZWl2ZSBwYXRoIGJ5IHJlcGxhY2luZyBhIGNhbGwgdG8gdGNwX3NldF93aW5kb3dfY2xhbXAgd2l0aCBhIGRpcmVjdCBXUklURV9PTkNFIHRvIHRwLVx1MDAzZXdpbmRvd19jbGFtcCBpbiB0Y3BfbWVhc3VyZV9yY3ZfbXNzLiBUaGlzIGF2b2lkcyB0aGUgYWRkaXRpb25hbCBsb2dpYyBpbiB0Y3Bfc2V0X3dpbmRvd19jbGFtcCAoc3VjaCBhcyBhZGp1c3RpbmcgcmN2X3NzdGhyZXNoKSBhbmQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFRDUCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI4ZjNjMzhlOTQyMWI4NTEzZWJjN2VhZGVjODQ0OTQxNjZhOGM2YzYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEp1bCAyNiAxMjoxMjo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggZGFmZjkzZDUxMzQyODcuLjViNjM3OGI5NDcwMWVmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtMjUyLDcgJiM0MzsyNTIsNyBAQCBzdGF0aWMgdm9pZCB0Y3BfbWVhc3VyZV9yY3ZfbXNzKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJCQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAogCQkJCXZhbCA9IHRjcF93aW5fZnJvbV9zcGFjZShzaywgc2stJmd0O3NrX3JjdmJ1Zik7Ci0JCQkJdGNwX3NldF93aW5kb3dfY2xhbXAoc2ssIHZhbCk7CiYjNDM7CQkJCVdSSVRFX09OQ0UodHAtJmd0O3dpbmRvd19jbGFtcCwgdmFsKTsKIAogCQkJCWlmICh0cC0mZ3Q7d2luZG93X2NsYW1wICZsdDsgdHAtJmd0O3JjdnFfc3BhY2Uuc3BhY2UpCiAJCQkJCXRwLSZndDtyY3ZxX3NwYWNlLnNwYWNlID0gdHAtJmd0O3dpbmRvd19jbGFtcDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTI6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA4MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRDUCBJbnB1dCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIEl0IHNlZW1zIHRoZXkmIzM5O3ZlIG1hZGUgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYHRjcF9tZWFzdXJlX3Jjdl9tc3NgIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgbGluZSwgYHRjcF9zZXRfd2luZG93X2NsYW1wKHNrLCB2YWwpO2AsIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYFdSSVRFX09OQ0UodHAtJmd0O3dpbmRvd19jbGFtcCwgdmFsKTtgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgaXMgcHJvYmFibHkgYSBmdW5jdGlvbiBjYWxsLCBzbyBJIG5lZWQgdG8gY2hlY2sgaXRzIGltcGxlbWVudGF0aW9uIGFuZCB1bmRlcnN0YW5kIHdoYXQgaXQgYWN0dWFsbHkgKmRvZXMqIGluIHRoZSBjb250ZXh0IG9mIHJlY2VpdmluZyBNU1MgYW5kIHRoZSB3aW5kb3cgY2xhbXAuIEtub3dpbmcgdGhlIHNwZWNpZmljcyB3aWxsIHByb3ZpZGUgdGhlIGNvbnRleHQgZm9yIHdoYXQgdGhpcyByZXdyaXRlIGltcGxpZXMuIElzIHRoaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IEEgY29uY3VycmVuY3kgaXNzdWUgZml4PyBJcyBgV1JJVEVfT05DRWAgbW9yZSBlZmZpY2llbnQsIG9yIHNhZmVyIHNvbWVob3c/CgpJJiMzOTtsbCBkaXZlIGludG8gdGhlIGRlZmluaXRpb24gb2YgYHRjcF9zZXRfd2luZG93X2NsYW1wYCBuZXh0LiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgYFdSSVRFX09OQ0VgIHJlcGxhY2VtZW50IGJyaW5ncyBhbnkgcGVyZm9ybWFuY2UgYmVuZWZpdHMgb3IgcG90ZW50aWFsIGZvciBsb2NraW5nIGlzc3Vlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9zZXRfd2luZG93X2NsYW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MzgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBhIFRDUCBXaW5kb3cgQ2xhbXAgQ2hhbmdlKioKCkhtbSwgKndhaXQgYSBtaW51dGUqLiBEaWQgSSBqdXN0IHJlYWQgdGhhdCBgdGNwX3NldF93aW5kb3dfY2xhbXBgIHdhcyBlaXRoZXIgcmVtb3ZlZCBlbnRpcmVseSwgb3IgaXRzIGJlaGF2aW91ciBzdWJzdGFudGlhbGx5IGFsdGVyZWQ/IFRoYXQmIzM5O3MgYSBjcml0aWNhbCBmdW5jdGlvbiBmb3IgbWFuYWdpbmcgcmVjZWl2ZSB3aW5kb3cgc2l6aW5nLCBhbmQgYW55IGNoYW5nZSB0aGVyZSBuZWVkcyBpbW1lZGlhdGUgYXR0ZW50aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuCgpSaWdodCwgbGV04oCZcyBnZXQgYSBoYW5kbGUgb24gd2hhdCBtaWdodCBiZSBnb2luZyBvbiwgSSBzaG91bGQgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIHRoZSBjb3JlIGxvZ2ljLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoZSBjbGFtcGluZyBiZWhhdmlvciBoYXMganVzdCBiZWVuIG1vdmVkIGVsc2V3aGVyZSBpbiB0aGUgY29kZS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHdoYXQmIzM5O3MgZGlyZWN0bHkgY29ubmVjdGVkIHRvIHRoZSByZWNlaXZlIHdpbmRvdyBzaXppbmcuIEFoLCB5ZXMsIGB0Y3BfbWVhc3VyZV9yY3ZfbXNzYC4gSWYgdGhlIGNsYW1wIGlzIGdvbmUsIG1heWJlIHRoZSByZWNlaXZlIE1TUyBsb2dpYyBpcyBkaXJlY3RseSByZXNwb25zaWJsZSBmb3IgaW5mbHVlbmNpbmcgdGhlIHdpbmRvdyBzaXplLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aG9zZSB0d28gdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LiBUaGlzIGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgY2hhbmdlIGFmZmVjdGluZyBwZXJmb3JtYW5jZSBhbmQgZmxvdyBjb250cm9sLCBhbmQgSSBuZWVkIHRvIGFzc2VzcyB0aGUgbW9kaWZpY2F0aW9ucyBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEyOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF9tZWFzdXJlX3Jjdl9tc3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYy01MS0gKlx0XHRcdFx0XHRhIGZhdGFsIGVycm9yIGlmIGl0IG1pZ2h0IHN0aWxsIGhhcHBlbi5cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjUyOiAqXHRcdEFuZGkgS2xlZW46XHRcdEFkZCB0Y3BfbWVhc3VyZV9yY3ZfbXNzIHRvIG1ha2Vcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTUzLSAqXHRcdFx0XHRcdGNvbm5lY3Rpb25zIHdpdGggTVNTXHUwMDNjbWluKE1UVSxhbm4uIE1TUylcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYz0yMTE9c3RhdGljIF9fY29sZCB2b2lkIHRjcF9ncm9fZGV2X3dhcm4oY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTIyNi0gKi9cbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjIyNzpzdGF0aWMgdm9pZCB0Y3BfbWVhc3VyZV9yY3ZfbXNzKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTIyOC17XG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9Nzc4PXN0YXRpYyB2b2lkIHRjcF9jbGFtcF93aW5kb3coc3RydWN0IHNvY2sgKnNrKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTgwMy0gKiBPdmVyZXN0aW1hdGlvbnMgbWFrZSB1cyBBQ0tpbmcgbGVzcyBmcmVxdWVudGx5IHRoYW4gbmVlZGVkLlxubmV0L2lwdjQvdGNwX2lucHV0LmM6ODA0OiAqIFVuZGVyZXN0aW1hdGlvbnMgYXJlIG1vcmUgZWFzeSB0byBkZXRlY3QgYW5kIGZpeCBieSB0Y3BfbWVhc3VyZV9yY3ZfbXNzKCkuXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy04MDUtICovXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9MTAxNT1zdGF0aWMgdm9pZCB0Y3BfZXZlbnRfZGF0YV9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMDIyLVxubmV0L2lwdjQvdGNwX2lucHV0LmM6MTAyMzpcdHRjcF9tZWFzdXJlX3Jjdl9tc3Moc2ssIHNrYik7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMDI0LVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTUzODE9c3RhdGljIHZvaWQgdGNwX2RhdGFfcXVldWVfb2ZvKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01Mzk4LVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NTM5OTpcdHRjcF9tZWFzdXJlX3Jjdl9tc3Moc2ssIHNrYik7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy01NDAwLVx0LyogRGlzYWJsZSBoZWFkZXIgcHJlZGljdGlvbi4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzAxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkFuYWx5emluZyB0aGUgV2luZG93IENsYW1wIE1vZGlmaWNhdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgY29tbWl0JiMzOTtzIHJlcGxhY2VkIGEgY2FsbCB0byBgdGNwX3NldF93aW5kb3dfY2xhbXAoc2ssIHZhbClgIHdpdGggYSBgV1JJVEVfT05DRSh0cC0mZ3Q7d2luZG93X2NsYW1wLCB2YWwpYC4gSG1tLCB0aGlzIGlzIGludGVyZXN0aW5nLiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgcmVhc29uaW5nLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiB3YXMgYHRjcF9zZXRfd2luZG93X2NsYW1wYCByZWFsbHkgYSBmdWxsLWJsb3duIGZ1bmN0aW9uLCBvciB3YXMgaXQgYSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIG9yIGV2ZW4ganVzdCBhIG1hY3JvPyBTb21ldGltZXMgdGhlc2UgY2hhbmdlcyBhcmUgYWJvdXQgcGVyZm9ybWFuY2UsIHBvdGVudGlhbGx5IHJlbW92aW5nIGEgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZC4gT3RoZXIgdGltZXMsIGl0JiMzOTtzIGFib3V0IG1lbW9yeSBvcmRlcmluZyBhbmQgc3luY2hyb25pemF0aW9uLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlIG5hdHVyZSBvZiBgdGNwX3NldF93aW5kb3dfY2xhbXBgIHRvIHVuZGVyc3RhbmQgdGhlIHRydWUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLCBzbyBJJiMzOTtsbCBjaGVjayBpdHMgZGVmaW5pdGlvbi4gVGhpcyB3aWxsIHJldmVhbCB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24sIGFuZCBmcm9tIHRoZXJlIEkgY2FuIGJldHRlciByZWFzb24gYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBtb3ZpbmcgdG8gYFdSSVRFX09OQ0VgLiBXYXMgdGhlcmUgc29tZSBpbXBsaWNpdCBsb2NraW5nIG9yIG1lbW9yeSBiYXJyaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luYWwgZnVuY3Rpb24/IEhhcyB0aGlzIG5vdyBiZWVuIG1hZGUgZXhwbGljaXQ/IEkgc2hvdWxkIGxvb2sgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIElzIHRoaXMgcG90ZW50aWFsbHkgYSBjcml0aWNhbCBjaGFuZ2UgdG8gdGhlIG1lbW9yeSBtb2RlbD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3Bfc2V0X3dpbmRvd19jbGFtcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC90Y3AuaD01MTY9dm9pZCB0Y3Bfc2V0X3JjdmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpO1xuaW5jbHVkZS9uZXQvdGNwLmg6NTE3OmludCB0Y3Bfc2V0X3dpbmRvd19jbGFtcChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpO1xuaW5jbHVkZS9uZXQvdGNwLmgtNTE4LVxuLS1cbm5ldC9pcHY0L3RjcC5jPTE4NTc9dm9pZCB0Y3Bfc2V0X3JjdmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXG5uZXQvaXB2NC90Y3AuYy0xODU4LXtcbm5ldC9pcHY0L3RjcC5jOjE4NTk6XHR0Y3Bfc2V0X3dpbmRvd19jbGFtcChzaywgdGNwX3dpbl9mcm9tX3NwYWNlKHNrLCB2YWwpKTtcbm5ldC9pcHY0L3RjcC5jLTE4NjAtfVxuLS1cbm5ldC9pcHY0L3RjcC5jPTM3ODc9RVhQT1JUX1NZTUJPTCh0Y3Bfc29ja19zZXRfa2VlcGNudCk7XG5uZXQvaXB2NC90Y3AuYy0zNzg4LVxubmV0L2lwdjQvdGNwLmM6Mzc4OTppbnQgdGNwX3NldF93aW5kb3dfY2xhbXAoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxubmV0L2lwdjQvdGNwLmMtMzc5MC17XG4tLVxubmV0L2lwdjQvdGNwLmM9MzgzNz1pbnQgZG9fdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTQwNTUtXHRjYXNlIFRDUF9XSU5ET1dfQ0xBTVA6XG5uZXQvaXB2NC90Y3AuYzo0MDU2Olx0XHRlcnIgPSB0Y3Bfc2V0X3dpbmRvd19jbGFtcChzaywgdmFsKTtcbm5ldC9pcHY0L3RjcC5jLTQwNTctXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEyOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNDYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gYHRjcF9zZXRfd2luZG93X2NsYW1wYCoqCgpIbW0sIHNvIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAuLi4gcmlnaHQsIEkgc2VlIGl0JiMzOTtzIGFuICpleHBvcnRlZCogZnVuY3Rpb24sIG9yIGF0IGxlYXN0IGEgZnVuY3Rpb24gZGVmaW5lZCB3aXRoaW4gYG5ldC9pcHY0L3RjcC5jYC4gT2theSwgdGhhdCYjMzk7cyB0aGUgZmlyc3QgY2x1ZS4gQnV0IHdhaXQsIHRoaXMgaXNuJiMzOTt0ICpqdXN0KiBzZXR0aW5nIGB0cC0mZ3Q7d2luZG93X2NsYW1wYCwgaXMgaXQ/IFRoZXJlJiMzOTtzIGdvdCB0byBiZSBtb3JlIHRvIGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24mIzM5O3MgZnVsbCBwdXJwb3NlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgd2hhdCBgdGNwX3NldF93aW5kb3dfY2xhbXBgIGlzIGRvaW5nLiBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGltcGFjdCBhbmQgdXNhZ2Ugb2YgdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM3ODksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mzc4OTpcdGludCB0Y3Bfc2V0X3dpbmRvd19jbGFtcChzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXG4zNzkwOlx0e1xuMzc5MTpcdFx0dTMyIG9sZF93aW5kb3dfY2xhbXAsIG5ld193aW5kb3dfY2xhbXAsIG5ld19yY3Zfc3N0aHJlc2g7XG4zNzkyOlx0XHRzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTtcbjM3OTM6XHRcbjM3OTQ6XHRcdGlmICghdmFsKSB7XG4zNzk1Olx0XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfQ0xPU0UpXG4zNzk2Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4zNzk3Olx0XHRcdFdSSVRFX09OQ0UodHAtXHUwMDNld2luZG93X2NsYW1wLCAwKTtcbjM3OTg6XHRcdFx0cmV0dXJuIDA7XG4zNzk5Olx0XHR9XG4zODAwOlx0XG4zODAxOlx0XHRvbGRfd2luZG93X2NsYW1wID0gdHAtXHUwMDNld2luZG93X2NsYW1wO1xuMzgwMjpcdFx0bmV3X3dpbmRvd19jbGFtcCA9IG1heF90KGludCwgU09DS19NSU5fUkNWQlVGIC8gMiwgdmFsKTtcbjM4MDM6XHRcbjM4MDQ6XHRcdGlmIChuZXdfd2luZG93X2NsYW1wID09IG9sZF93aW5kb3dfY2xhbXApXG4zODA1Olx0XHRcdHJldHVybiAwO1xuMzgwNjpcdFxuMzgwNzpcdFx0V1JJVEVfT05DRSh0cC1cdTAwM2V3aW5kb3dfY2xhbXAsIG5ld193aW5kb3dfY2xhbXApO1xuMzgwODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjMwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHRjcF9zZXRfd2luZG93X2NsYW1wYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdGNwX3NldF93aW5kb3dfY2xhbXBgIGZ1bmN0aW9uIGFuZCwgd2FpdCBhIG1pbnV0ZSwgaXQgZG9lcyBtb3JlIHRoYW4gSSBpbml0aWFsbHkgdGhvdWdodC4gSXQmIzM5O3Mgbm90IGp1c3QgYSBzdHJhaWdodGZvcndhcmQgd2luZG93IGNsYW1wIHNldHRlci4gSXQgc2VlbXMgdG8gaGF2ZSBzb21lIGV4dHJhIGxvZ2ljIGVtYmVkZGVkIHdpdGhpbiBpdC4gSSBzZWUgdGhhdCBpdCBjaGVja3MgZm9yIGEgemVybyB2YWx1ZSwgYW5kIGlmIGl0IHJlY2VpdmVzIG9uZSAqYW5kKiB0aGUgc29ja2V0IHN0YXRlIGlzbiYjMzk7dCBgVENQX0NMT1NFYCwgaXQgcmV0dXJucyBhbiBlcnJvci4gT3RoZXJ3aXNlLCBpdCB1cGRhdGVzIGB0cC0mZ3Q7d2luZG93X2NsYW1wYCB3aXRoIGVpdGhlciB0aGUgbWluaW11bSBidWZmZXIgc2l6ZSBkaXZpZGVkIGJ5IHR3byBvciB0aGUgcHJvdmlkZWQgdmFsdWUsIHdoaWNoZXZlciBpcyBsYXJnZXIsIGFmdGVyIGFsc28gd3JpdGluZyB0aGUgdmFsdWUgd2l0aCBgV1JJVEVfT05DRWAuCgpOb3csIHRoZSBwYXRjaCBpcyByZXBsYWNpbmcgdGhpcyBlbnRpcmUgZnVuY3Rpb24gY2FsbCB3aXRoIGEgZGlyZWN0IGBXUklURV9PTkNFYCB3cml0ZSB0byBgdHAtJmd0O3dpbmRvd19jbGFtcGAgaW4gYHRjcF9tZWFzdXJlX3Jjdl9tc3NgLiBUaGF0JiMzOTtzIGEgbGl0dGxlIGNvbmNlcm5pbmcuLi4gSSB3b25kZXIgd2h5LiBCeSBkb2luZyB0aGF0LCB0aGUgcGF0Y2ggaXMgYnlwYXNzaW5nIGFsbCB0aGUgYWRkaXRpb25hbCBjaGVja3MgYW5kIHBvdGVudGlhbGx5IHRoZSBgcmN2X3NzdGhyZXNoYCBhbmQgYHNrX3N0YXRlYCB1cGRhdGUuCgpJIG5lZWQgdG8gc2VlIHRoZSByZW1haW5pbmcgcGFydHMgb2YgdGhpcyBmdW5jdGlvbiB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIElzIHRoaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIG9yIGlzIGl0IGdvaW5nIHRvIGNhdXNlIHNvbWUgdW5leHBlY3RlZCBiZWhhdmlvcj8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGlmIGJ5cGFzc2luZyB0aG9zZSBleHRyYSBjaGVja3MgaXMgYWN0dWFsbHkgc2FmZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgwOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszODA5Olx0XHQvKiBOZWVkIHRvIGFwcGx5IHRoZSByZXNlcnZlZCBtZW0gcHJvdmlzaW9uaW5nIG9ubHlcbjM4MTA6XHRcdCAqIHdoZW4gc2hyaW5raW5nIHRoZSB3aW5kb3cgY2xhbXAuXG4zODExOlx0XHQgKi9cbjM4MTI6XHRcdGlmIChuZXdfd2luZG93X2NsYW1wIFx1MDAzYyBvbGRfd2luZG93X2NsYW1wKSB7XG4zODEzOlx0XHRcdF9fdGNwX2FkanVzdF9yY3Zfc3N0aHJlc2goc2ssIG5ld193aW5kb3dfY2xhbXApO1xuMzgxNDpcdFx0fSBlbHNlIHtcbjM4MTU6XHRcdFx0bmV3X3Jjdl9zc3RocmVzaCA9IG1pbih0cC1cdTAwM2VyY3Zfd25kLCBuZXdfd2luZG93X2NsYW1wKTtcbjM4MTY6XHRcdFx0dHAtXHUwMDNlcmN2X3NzdGhyZXNoID0gbWF4KG5ld19yY3Zfc3N0aHJlc2gsIHRwLVx1MDAzZXJjdl9zc3RocmVzaCk7XG4zODE3Olx0XHR9XG4zODE4Olx0XHRyZXR1cm4gMDtcbjM4MTk6XHR9XG4zODIwOlx0XG4zODIxOlx0aW50IHRjcF9zb2NrX3NldF9tYXhzZWcoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxuMzgyMjpcdHtcbjM4MjM6XHRcdC8qIFZhbHVlcyBncmVhdGVyIHRoYW4gaW50ZXJmYWNlIE1UVSB3b24mIzM5O3QgdGFrZSBlZmZlY3QuIEhvd2V2ZXJcbjM4MjQ6XHRcdCAqIGF0IHRoZSBwb2ludCB3aGVuIHRoaXMgY2FsbCBpcyBkb25lIHdlIHR5cGljYWxseSBkb24mIzM5O3QgeWV0XG4zODI1Olx0XHQgKiBrbm93IHdoaWNoIGludGVyZmFjZSBpcyBnb2luZyB0byBiZSB1c2VkXG4zODI2Olx0XHQgKi9cbjM4Mjc6XHRcdGlmICh2YWwgXHUwMDI2XHUwMDI2ICh2YWwgXHUwMDNjIFRDUF9NSU5fTVNTIHx8IHZhbCBcdTAwM2UgTUFYX1RDUF9XSU5ET1cpKVxuMzgyODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTI6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYxOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDE0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUQ1AgUmVjZWl2ZSBQYXRoIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIHVzaW5nIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYF9fdGNwX2FkanVzdF9yY3Zfc3N0aHJlc2hgIGFuZCB1cGRhdGVzIGByY3Zfc3N0aHJlc2hgLiBCdXQsIGJ5IHN3YXBwaW5nIHRoYXQgb3V0IHdpdGggYFdSSVRFX09OQ0UodHAtJmd0O3dpbmRvd19jbGFtcCwgdmFsKWAsIHRoZSBwYXRjaCBpcyBieXBhc3NpbmcgdGhlIGByY3Zfc3N0aHJlc2hgIHVwZGF0ZSBhbmQgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgaXQmIzM5O3MgYWx0ZXJpbmcgaG93IHRoZSBUQ1AgcmVjZWl2ZSBwYXRoIGJlaGF2ZXMuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgd2FycmFudCBmdXp6aW5nPyBBYnNvbHV0ZWx5LCBpdCBkb2VzLiBBbnkgY2hhbmdlIHRvIHRoZSBUQ1AgcmVjZWl2ZSB3aW5kb3cgbG9naWMgaXMgYSBwb3RlbnRpYWwgYXR0YWNrIHZlY3Rvciwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIGEgc291cmNlIG9mIHN1YnRsZSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlcy4gVGhpcyBpcyBjcml0aWNhbC4KCk5vdywgYSByZWxhdGVkIHRob3VnaHQgcG9wcGVkIHVwLiBJIG5lZWQgdG8gYmUgc3VyZS4gSSYjMzk7bSByZWNhbGxpbmcgdGhhdCBgdGNwX21lYXN1cmVfcmN2X21zc2AgaXMgaW52b2x2ZWQgd2hlbiBkYXRhIGlzIHJlY2VpdmVkLiBJIHNob3VsZCBjaGVjayBob3cgdGhhdCBmaXRzIGludG8gdGhpcyBwaWN0dXJlLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBgdGNwX21lYXN1cmVfcmN2X21zc2AgZnVuY3Rpb24uIExldCBtZSBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3BfaW5wdXQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjI3Olx0c3RhdGljIHZvaWQgdGNwX21lYXN1cmVfcmN2X21zcyhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4gMjI4Olx0e1xuIDIyOTpcdFx0c3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spO1xuIDIzMDpcdFx0Y29uc3QgdW5zaWduZWQgaW50IGxzcyA9IGljc2stXHUwMDNlaWNza19hY2subGFzdF9zZWdfc2l6ZTtcbiAyMzE6XHRcdHVuc2lnbmVkIGludCBsZW47XG4gMjMyOlx0XG4gMjMzOlx0XHRpY3NrLVx1MDAzZWljc2tfYWNrLmxhc3Rfc2VnX3NpemUgPSAwO1xuIDIzNDpcdFxuIDIzNTpcdFx0Lyogc2tiLVx1MDAzZWxlbiBtYXkgaml0dGVyIGJlY2F1c2Ugb2YgU0FDS3MsIGV2ZW4gaWYgcGVlclxuIDIzNjpcdFx0ICogc2VuZHMgZ29vZCBmdWxsLXNpemVkIGZyYW1lcy5cbiAyMzc6XHRcdCAqL1xuIDIzODpcdFx0bGVuID0gc2tiX3NoaW5mbyhza2IpLVx1MDAzZWdzb19zaXplID8gOiBza2ItXHUwMDNlbGVuO1xuIDIzOTpcdFx0aWYgKGxlbiBcdTAwM2U9IGljc2stXHUwMDNlaWNza19hY2sucmN2X21zcykge1xuIDI0MDpcdFx0XHQvKiBOb3RlOiBkaXZpZGVzIGFyZSBzdGlsbCBhIGJpdCBleHBlbnNpdmUuXG4gMjQxOlx0XHRcdCAqIEZvciB0aGUgbW9tZW50LCBvbmx5IGFkanVzdCBzY2FsaW5nX3JhdGlvXG4gMjQyOlx0XHRcdCAqIHdoZW4gd2UgdXBkYXRlIGljc2tfYWNrLnJjdl9tc3MuXG4gMjQzOlx0XHRcdCAqL1xuIDI0NDpcdFx0XHRpZiAodW5saWtlbHkobGVuICE9IGljc2stXHUwMDNlaWNza19hY2sucmN2X21zcykpIHtcbiAyNDU6XHRcdFx0XHR1NjQgdmFsID0gKHU2NClza2ItXHUwMDNlbGVuIFx1MDAzY1x1MDAzYyBUQ1BfUk1FTV9UT19XSU5fU0NBTEU7XG4gMjQ2Olx0XHRcdFx0dTggb2xkX3JhdGlvID0gdGNwX3NrKHNrKS1cdTAwM2VzY2FsaW5nX3JhdGlvO1xuIDI0NzpcdFxuIDI0ODpcdFx0XHRcdGRvX2Rpdih2YWwsIHNrYi1cdTAwM2V0cnVlc2l6ZSk7XG4gMjQ5Olx0XHRcdFx0dGNwX3NrKHNrKS1cdTAwM2VzY2FsaW5nX3JhdGlvID0gdmFsID8gdmFsIDogMTtcbiAyNTA6XHRcbiAyNTE6XHRcdFx0XHRpZiAob2xkX3JhdGlvICE9IHRjcF9zayhzayktXHUwMDNlc2NhbGluZ19yYXRpbykge1xuIDI1MjpcdFx0XHRcdFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4gMjUzOlx0XG4gMjU0Olx0XHRcdFx0XHR2YWwgPSB0Y3Bfd2luX2Zyb21fc3BhY2Uoc2ssIHNrLVx1MDAzZXNrX3JjdmJ1Zik7XG4gMjU1Olx0XHRcdFx0XHRXUklURV9PTkNFKHRwLVx1MDAzZXdpbmRvd19jbGFtcCwgdmFsKTtcbiAyNTY6XHRcbiAyNTc6XHRcdFx0XHRcdGlmICh0cC1cdTAwM2V3aW5kb3dfY2xhbXAgXHUwMDNjIHRwLVx1MDAzZXJjdnFfc3BhY2Uuc3BhY2UpXG4gMjU4Olx0XHRcdFx0XHRcdHRwLVx1MDAzZXJjdnFfc3BhY2Uuc3BhY2UgPSB0cC1cdTAwM2V3aW5kb3dfY2xhbXA7XG4gMjU5Olx0XHRcdFx0fVxuIDI2MDpcdFx0XHR9XG4gMjYxOlx0XHRcdGljc2stXHUwMDNlaWNza19hY2sucmN2X21zcyA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLFxuIDI2MjpcdFx0XHRcdFx0XHQgICAgICAgdGNwX3NrKHNrKS1cdTAwM2VhZHZtc3MpO1xuIDI2MzpcdFx0XHQvKiBBY2NvdW50IGZvciBwb3NzaWJseS1yZW1vdmVkIG9wdGlvbnMgKi9cbiAyNjQ6XHRcdFx0RE9fT05DRV9MSVRFX0lGKGxlbiBcdTAwM2UgaWNzay1cdTAwM2VpY3NrX2Fjay5yY3ZfbXNzICYjNDM7IE1BWF9UQ1BfT1BUSU9OX1NQQUNFLFxuIDI2NTpcdFx0XHRcdFx0dGNwX2dyb19kZXZfd2Fybiwgc2ssIHNrYiwgbGVuKTtcbiAyNjY6XHRcdFx0LyogSWYgdGhlIHNrYiBoYXMgYSBsZW4gb2YgZXhhY3RseSAxKk1TUyBhbmQgaGFzIHRoZSBQU0ggYml0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDEyOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MTYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVENQIFN0YWNrIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgYHRjcF9zZXRfd2luZG93X2NsYW1wKHNrLCB2YWwpYCB0byBgV1JJVEVfT05DRSh0cC0mZ3Q7d2luZG93X2NsYW1wLCB2YWwpYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdhcyBgdGNwX3NldF93aW5kb3dfY2xhbXBgIGludHJvZHVjZWQgcmVjZW50bHksIG9yIHdhcyBpdCBtb2RpZmllZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGhhZCBhIGZsYXcg4oCTIHBlcmhhcHMgYSBsb2NrZGVwIHdhcm5pbmcsIGEgY3Jhc2gsIG9yIGp1c3QgYSBsb2dpYyBlcnJvciBpbiBpdHMgdXNlLgoKRGlnZ2luZyBkZWVwZXIsIEkgc2VlIHRoYXQgYHRjcF9zZXRfd2luZG93X2NsYW1wYCBjYWxscyBgX190Y3BfYWRqdXN0X3Jjdl9zc3RocmVzaGAsIGFuZCB0aGF0IGZ1bmN0aW9uICpjb3VsZCogYmUgZG9pbmcgc29tZXRoaW5nIHF1aXRlIGludm9sdmVkLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBUQ1Agc3RhY2s7IHdlJiMzOTtyZSBub3QganVzdCB0YWxraW5nIGFib3V0IGNvc21ldGljIGNvZGUuIEFuZCwgY3JpdGljYWxseSwgdGhpcyBpcyByZWFjaGFibGUgdGhyb3VnaCBub3JtYWwgVENQIGRhdGEgcmVjZXB0aW9uLiBUaGF0IG1ha2VzIHRoaXMgV29ydGhGdXp6aW5nPXRydWUgaW4gbXkgYm9vay4KCk5vdywgYXMgSSYjMzk7bSB0aGlua2luZyBhYm91dCBmdXp6aW5nLCB0aGUgYEZvY3VzU3ltYm9sc2Agc2VjdGlvbiBoaWdobGlnaHRzIHRoYXQgYHRjcF9tZWFzdXJlX3Jjdl9tc3NgIGlzIHN0YXRpYy4gSG1tLCBsZXQgbWUgY2hlY2sgdGhlIGNhbGwgc2l0ZXMgZm9yIGl0LiBBaCwgYHRjcF9tZWFzdXJlX3Jjdl9tc3NgIGlzIGNhbGxlZCBmcm9tIGB0Y3BfZXZlbnRfZGF0YV9yZWN2YCBhbmQgYHRjcF9kYXRhX3F1ZXVlX29mb2AuIE9rYXksIGFuZCBgdGNwX2V2ZW50X2RhdGFfcmVjdmAgaXMgY2FsbGVkIGZyb20gYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLCBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCwgYW5kIGxpa2VseSBvdGhlciBwbGFjZXMuIEdpdmVuIGl0cyByb2xlIGFzIGEga2V5IGZ1bmN0aW9uIGluIFRDUCBkYXRhIHJlY2VwdGlvbiBhbmQgdGhlIGNvcmUgbmF0dXJlIG9mIHRoaXMgY2hhbmdlLCBJIHdpbGwgZGVmaW5pdGVseSB3YW50IHRvIGludmVzdGlnYXRlIGB0Y3BfZXZlbnRfZGF0YV9yZWN2YCBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMjoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y3BfZXZlbnRfZGF0YV9yZWN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvdGNwX2lucHV0LmM9OTk1PXN0YXRpYyB2b2lkIHRjcF9zYXZlX2xyY3ZfZmxvd2xhYmVsKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMDE0LSAqL1xubmV0L2lwdjQvdGNwX2lucHV0LmM6MTAxNTpzdGF0aWMgdm9pZCB0Y3BfZXZlbnRfZGF0YV9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTEwMTYte1xuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTU2MDc9c3RhdGljIHZvaWQgdGNwX2RhdGFfcXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU2NzEtXHRcdGlmIChza2ItXHUwMDNlbGVuKVxubmV0L2lwdjQvdGNwX2lucHV0LmM6NTY3MjpcdFx0XHR0Y3BfZXZlbnRfZGF0YV9yZWN2KHNrLCBza2IpO1xubmV0L2lwdjQvdGNwX2lucHV0LmMtNTY3My1cdFx0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cdTAwM2V0Y3BfZmxhZ3MgXHUwMDI2IFRDUEhEUl9GSU4pXG4tLVxubmV0L2lwdjQvdGNwX2lucHV0LmM9NjUwMD12b2lkIHRjcF9yY3ZfZXN0YWJsaXNoZWQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY2MzctXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo2NjM4Olx0XHRcdHRjcF9ldmVudF9kYXRhX3JlY3Yoc2ssIHNrYik7XG5uZXQvaXB2NC90Y3BfaW5wdXQuYy02NjM5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMjoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODMwCgkJCQkJCQlvdXRwdXQ6IDEwNwoJCQkJCQkJdGhvdWdodHM6IDEwMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUQ1AgUmVjZWl2ZSBQYXRoIGZvciBGdXp6aW5nIEZvY3VzKioKCk9rYXksIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTttIHRoaW5raW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZW50cnkgcG9pbnRzIG9yIGZ1bmN0aW9ucyB0byBoaWdobGlnaHQgZm9yIGZ1enppbmcsIGdpdmVuIHRoaXMgcGF0Y2gmIzM5O3MgY2hhbmdlcy4gVGhlIHByaW1hcnkgZ29hbCBpcyB0byBhdm9pZCBsaXN0aW5nIGZ1bmN0aW9ucyB0aGF0IGFyZSBvdmVybHkgZ2VuZXJpYyBvciBob3QtcGF0aCwgYmVjYXVzZSB0aGF0JiMzOTtsbCBza2V3IHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbnMuCgpJJiMzOTttIHN0YXJ0aW5nIHdpdGggdGhlIGVudHJ5IHBvaW50czogYHRjcF9kYXRhX3F1ZXVlYCBhbmQgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgLiBgdGNwX2RhdGFfcXVldWVgIGlzIGNhbGxlZCBieSBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCwgYW5kIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBpcyB0aGUgZmFzdCBwYXRoLiBUaGUgcHJvbXB0IHN0ZWVycyBtZSBhd2F5IGZyb20gaG90LXBhdGhzLCBhbmQgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIGRlZmluaXRlbHkgZml0cyB0aGF0IGRlc2NyaXB0aW9uLiBgdGNwX2RhdGFfcXVldWVgLCB0aG91Z2gsIGlzIHN0YXRpYy4gSG1tLi4uCgpUaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYHRjcF9tZWFzdXJlX3Jjdl9tc3NgLCB3aGljaCBjYWxscyBgdGNwX3NldF93aW5kb3dfY2xhbXBgLiAgYHRjcF9tZWFzdXJlX3Jjdl9tc3NgIGlzIHN0YXRpYy4gU28sIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXJlIGFyZSByZWxldmFudCBub24tc3RhdGljIGZ1bmN0aW9ucyBpbnZvbHZlZC4KCmB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NgIGFuZCBgdGNwX3NldF93aW5kb3dfY2xhbXBgIGFyZSBib3RoIG5vbi1zdGF0aWMuIFRoZSBwYXRjaCB0b3VjaGVzIHRoZSAqY2FsbCogdG8gYHRjcF9zZXRfd2luZG93X2NsYW1wYCwgYnV0IGlzbiYjMzk7dCBtb2RpZnlpbmcgdGhhdCBmdW5jdGlvbiBkaXJlY3RseS4gSSYjMzk7dmUgcmUtZXhhbWluZWQgdGhlIGNvZGUuIFRoZSBwYXRjaCByZW1vdmVzIHRoZSBjYWxsIHRvIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgd2l0aGluIGB0Y3BfbWVhc3VyZV9yY3ZfbXNzYC4KCkxldCYjMzk7cyBsb29rIGF0IHRoZSBjYWxsZXJzIG9mIGB0Y3BfbWVhc3VyZV9yY3ZfbXNzYC4gV2UgaGF2ZSBgdGNwX2V2ZW50X2RhdGFfcmVjdmAgYW5kIGB0Y3BfZGF0YV9xdWV1ZV9vZm9gLCBib3RoIHN0YXRpYy4gIFNpbmNlIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHVuZGVyIHNjcnV0aW55IChgdGNwX21lYXN1cmVfcmN2X21zc2ApIGFuZCBpdHMgaW1tZWRpYXRlIGNhbGxlcnMgYXJlIHN0YXRpYywgbXkgaW5zdGluY3QgaXMgdG8gbG9vayBlbHNld2hlcmUuIEJ1dCB0aGUgbm9uLXN0YXRpYyBjYWxsZXJzIGluY2x1ZGUgYHRjcF9yY3ZfZXN0YWJsaXNoZWRgIChob3QtcGF0aCkgYW5kIGB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NgIChhbHNvIGhvdC1wYXRoKSwgYW5kLCBJJiMzOTttIHRyeWluZyB0byBhdm9pZCBsaXN0aW5nIGhvdCBwYXRocy4KCkNvdWxkIEkganVzdCBsaXN0IGB0Y3BfcmN2X3N0YXRlX3Byb2Nlc3NgIHNpbmNlIHRoZSBwYXRjaCBpcyB0b3VjaGluZyB0aGUgVENQIHJlY2VpdmUgcGF0aD8gQnV0IHRoZSBwcm9tcHQgYWR2aXNlcyBhZ2FpbnN0IHRoaXMuIE1heWJlIGxlYXZlIGBGb2N1c1N5bWJvbHNgIGVtcHR5LiBUaGUgcGF0Y2ggZGlyZWN0bHkgdG91Y2hlcyBhIHN0YXRpYyBmdW5jdGlvbiwgYW5kIGlmIEkgZG9uJiMzOTt0IGxpc3QgYW55dGhpbmcsIHRoZSBmdXp6ZXIgbWlnaHQgdGVzdCBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCBhcyB3ZWxsLgoKVGhlIHBhdGNoIGNoYW5nZXMgdGhlIGNhbGwgdG8gYHRjcF9zZXRfd2luZG93X2NsYW1wYCBhbmQgaXQgc2VlbXMgdGhlIGNoYW5nZSBpcyBpbXBvcnRhbnQsIGluIHdoaWNoIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgaXMgdW5uZWNlc3NhcnkuCgpMZXQmIzM5O3MgZG8gb25lIGxhc3QgY2hlY2sgZm9yIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGluIHRoaXMgcGFydCBvZiB0aGUgY29kZS4gQWdhaW4sIGB0Y3BfZGF0YV9xdWV1ZWAsIGB0Y3BfZGF0YV9xdWV1ZV9vZm9gLCBhbmQgYHRjcF9ldmVudF9kYXRhX3JlY3ZgIGFyZSBzdGF0aWMuICBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgc3RhdGljIChgdGNwX21lYXN1cmVfcmN2X21zc2ApLgoKU28sIEkmIzM5O20gbGVhbmluZyB0b3dhcmQgbGVhdmluZyBgRm9jdXNTeW1ib2xzYCBlbXB0eS4gVGhpcyBzaG91bGQgZGlyZWN0IHRoZSBmdXp6ZXIgdG93YXJkIHRoZSBtb3N0IHJlbGV2YW50IGNvZGUgYW5kIGF2b2lkIHNrZXdpbmcgaXQgdG93YXJkcyBob3QtcGF0aCBmdW5jdGlvbnMuIENvcmUgVENQIGlzIGFsd2F5cyBlbmFibGVkLCBzbyBubyBzcGVjaWZpYyBDT05GSUcgb3B0aW9ucyBhcmUgbmVlZGVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gVENQJiMzOTtzIGNvcmUgcmVjZWl2ZSBsb2dpYywgd29ydGggdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTI6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIHJlY2VpdmUgcGF0aCBieSByZXBsYWNpbmcgYSBjYWxsIHRvIHRjcF9zZXRfd2luZG93X2NsYW1wIHdpdGggYSBkaXJlY3QgV1JJVEVfT05DRSB0byB0cC1cdTAwM2V3aW5kb3dfY2xhbXAgaW4gdGNwX21lYXN1cmVfcmN2X21zcy4gVGhpcyBhdm9pZHMgdGhlIGFkZGl0aW9uYWwgbG9naWMgaW4gdGNwX3NldF93aW5kb3dfY2xhbXAgKHN1Y2ggYXMgYWRqdXN0aW5nIHJjdl9zc3RocmVzaCkgYW5kIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBUQ1AgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUQ1AgcmVjZWl2ZSBwYXRoIGJ5IHJlcGxhY2luZyBhIGNhbGwgdG8gdGNwX3NldF93aW5kb3dfY2xhbXAgd2l0aCBhIGRpcmVjdCBXUklURV9PTkNFIHRvIHRwLVx1MDAzZXdpbmRvd19jbGFtcCBpbiB0Y3BfbWVhc3VyZV9yY3ZfbXNzLiBUaGlzIGF2b2lkcyB0aGUgYWRkaXRpb25hbCBsb2dpYyBpbiB0Y3Bfc2V0X3dpbmRvd19jbGFtcCAoc3VjaCBhcyBhZGp1c3RpbmcgcmN2X3NzdGhyZXNoKSBhbmQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFRDUCBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEyOjQ0LjY3MjQ2MDczWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMTA0ODAxODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBUQ1AgcmVjZWl2ZSBwYXRoIGJ5IHJlcGxhY2luZyBhIGNhbGwgdG8gdGNwX3NldF93aW5kb3dfY2xhbXAgd2l0aCBhIGRpcmVjdCBXUklURV9PTkNFIHRvIHRwLVxcdTAwM2V3aW5kb3dfY2xhbXAgaW4gdGNwX21lYXN1cmVfcmN2X21zcy4gVGhpcyBhdm9pZHMgdGhlIGFkZGl0aW9uYWwgbG9naWMgaW4gdGNwX3NldF93aW5kb3dfY2xhbXAgKHN1Y2ggYXMgYWRqdXN0aW5nIHJjdl9zc3RocmVzaCkgYW5kIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBUQ1AgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEyOjQ0LjY3MjQ2NzlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMzgwNjk3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDI4ZjNjMzhlOTQyMWI4NTEzZWJjN2VhZGVjODQ0OTQxNjZhOGM2YzZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMjYgMTI6MTI6NDIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xcbmluZGV4IGRhZmY5M2Q1MTM0Mjg3Li41YjYzNzhiOTQ3MDFlZiAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuY1xcbisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXFxuQEAgLTI1Miw3ICsyNTIsNyBAQCBzdGF0aWMgdm9pZCB0Y3BfbWVhc3VyZV9yY3ZfbXNzKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0XFx0XFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuIFxcbiBcXHRcXHRcXHRcXHR2YWwgPSB0Y3Bfd2luX2Zyb21fc3BhY2Uoc2ssIHNrLVxcdTAwM2Vza19yY3ZidWYpO1xcbi1cXHRcXHRcXHRcXHR0Y3Bfc2V0X3dpbmRvd19jbGFtcChzaywgdmFsKTtcXG4rXFx0XFx0XFx0XFx0V1JJVEVfT05DRSh0cC1cXHUwMDNld2luZG93X2NsYW1wLCB2YWwpO1xcbiBcXG4gXFx0XFx0XFx0XFx0aWYgKHRwLVxcdTAwM2V3aW5kb3dfY2xhbXAgXFx1MDAzYyB0cC1cXHUwMDNlcmN2cV9zcGFjZS5zcGFjZSlcXG4gXFx0XFx0XFx0XFx0XFx0dHAtXFx1MDAzZXJjdnFfc3BhY2Uuc3BhY2UgPSB0cC1cXHUwMDNld2luZG93X2NsYW1wO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMjoxMjo0NS4yNzY5MDkyNThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MzYwNjAyNDc3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFRDUCByZWNlaXZlIHBhdGggYnkgcmVwbGFjaW5nIGEgY2FsbCB0byB0Y3Bfc2V0X3dpbmRvd19jbGFtcCB3aXRoIGEgZGlyZWN0IFdSSVRFX09OQ0UgdG8gdHAtXFx1MDAzZXdpbmRvd19jbGFtcCBpbiB0Y3BfbWVhc3VyZV9yY3ZfbXNzLiBUaGlzIGF2b2lkcyB0aGUgYWRkaXRpb25hbCBsb2dpYyBpbiB0Y3Bfc2V0X3dpbmRvd19jbGFtcCAoc3VjaCBhcyBhZGp1c3RpbmcgcmN2X3NzdGhyZXNoKSBhbmQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIFRDUCBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjhmM2MzOGU5NDIxYjg1MTNlYmM3ZWFkZWM4NDQ5NDE2NmE4YzZjNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gSnVsIDI2IDEyOjEyOjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuY1xuaW5kZXggZGFmZjkzZDUxMzQyODcuLjViNjM3OGI5NDcwMWVmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmNcbisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jXG5AQCAtMjUyLDcgKzI1Miw3IEBAIHN0YXRpYyB2b2lkIHRjcF9tZWFzdXJlX3Jjdl9tc3Moc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XG4gXG4gXHRcdFx0XHR2YWwgPSB0Y3Bfd2luX2Zyb21fc3BhY2Uoc2ssIHNrLVx1MDAzZXNrX3JjdmJ1Zik7XG4tXHRcdFx0XHR0Y3Bfc2V0X3dpbmRvd19jbGFtcChzaywgdmFsKTtcbitcdFx0XHRcdFdSSVRFX09OQ0UodHAtXHUwMDNld2luZG93X2NsYW1wLCB2YWwpO1xuIFxuIFx0XHRcdFx0aWYgKHRwLVx1MDAzZXdpbmRvd19jbGFtcCBcdTAwM2MgdHAtXHUwMDNlcmN2cV9zcGFjZS5zcGFjZSlcbiBcdFx0XHRcdFx0dHAtXHUwMDNlcmN2cV9zcGFjZS5zcGFjZSA9IHRwLVx1MDAzZXdpbmRvd19jbGFtcDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEyOjQ1LjI3NjkxMDIxOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODQwMTc4MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVENQIElucHV0IE1vZGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBuZXQvaXB2NC90Y3BfaW5wdXQuY2AuIEl0IHNlZW1zIHRoZXkndmUgbWFkZSBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgY2hhbmdlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgdGNwX21lYXN1cmVfcmN2X21zc2AgZnVuY3Rpb24uIFRoZSBvcmlnaW5hbCBsaW5lLCBgdGNwX3NldF93aW5kb3dfY2xhbXAoc2ssIHZhbCk7YCwgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBgV1JJVEVfT05DRSh0cC1cdTAwM2V3aW5kb3dfY2xhbXAsIHZhbCk7YC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBjaGFuZ2Ugd2FzIG1hZGUuIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgaXMgcHJvYmFibHkgYSBmdW5jdGlvbiBjYWxsLCBzbyBJIG5lZWQgdG8gY2hlY2sgaXRzIGltcGxlbWVudGF0aW9uIGFuZCB1bmRlcnN0YW5kIHdoYXQgaXQgYWN0dWFsbHkgKmRvZXMqIGluIHRoZSBjb250ZXh0IG9mIHJlY2VpdmluZyBNU1MgYW5kIHRoZSB3aW5kb3cgY2xhbXAuIEtub3dpbmcgdGhlIHNwZWNpZmljcyB3aWxsIHByb3ZpZGUgdGhlIGNvbnRleHQgZm9yIHdoYXQgdGhpcyByZXdyaXRlIGltcGxpZXMuIElzIHRoaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IEEgY29uY3VycmVuY3kgaXNzdWUgZml4PyBJcyBgV1JJVEVfT05DRWAgbW9yZSBlZmZpY2llbnQsIG9yIHNhZmVyIHNvbWVob3c/XG5cbkknbGwgZGl2ZSBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgbmV4dC4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGBXUklURV9PTkNFYCByZXBsYWNlbWVudCBicmluZ3MgYW55IHBlcmZvcm1hbmNlIGJlbmVmaXRzIG9yIHBvdGVudGlhbCBmb3IgbG9ja2luZyBpc3N1ZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwODIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEyOjQ4LjU2MDkzMDMxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDEzNTM1NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3NldF93aW5kb3dfY2xhbXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2lucHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEyOjQ4LjY1MTA3MjU3NFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTUwMjEwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBUQ1AgV2luZG93IENsYW1wIENoYW5nZSoqXG5cbkhtbSwgKndhaXQgYSBtaW51dGUqLiBEaWQgSSBqdXN0IHJlYWQgdGhhdCBgdGNwX3NldF93aW5kb3dfY2xhbXBgIHdhcyBlaXRoZXIgcmVtb3ZlZCBlbnRpcmVseSwgb3IgaXRzIGJlaGF2aW91ciBzdWJzdGFudGlhbGx5IGFsdGVyZWQ/IFRoYXQncyBhIGNyaXRpY2FsIGZ1bmN0aW9uIGZvciBtYW5hZ2luZyByZWNlaXZlIHdpbmRvdyBzaXppbmcsIGFuZCBhbnkgY2hhbmdlIHRoZXJlIG5lZWRzIGltbWVkaWF0ZSBhdHRlbnRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy5cblxuUmlnaHQsIGxldOKAmXMgZ2V0IGEgaGFuZGxlIG9uIHdoYXQgbWlnaHQgYmUgZ29pbmcgb24sIEkgc2hvdWxkIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgY29yZSBsb2dpYy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY2xhbXBpbmcgYmVoYXZpb3IgaGFzIGp1c3QgYmVlbiBtb3ZlZCBlbHNld2hlcmUgaW4gdGhlIGNvZGUuIEknbGwgbmVlZCB0byBsb29rIGF0IHdoYXQncyBkaXJlY3RseSBjb25uZWN0ZWQgdG8gdGhlIHJlY2VpdmUgd2luZG93IHNpemluZy4gQWgsIHllcywgYHRjcF9tZWFzdXJlX3Jjdl9tc3NgLiBJZiB0aGUgY2xhbXAgaXMgZ29uZSwgbWF5YmUgdGhlIHJlY2VpdmUgTVNTIGxvZ2ljIGlzIGRpcmVjdGx5IHJlc3BvbnNpYmxlIGZvciBpbmZsdWVuY2luZyB0aGUgd2luZG93IHNpemUuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhvc2UgdHdvIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdC4gVGhpcyBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGNoYW5nZSBhZmZlY3RpbmcgcGVyZm9ybWFuY2UgYW5kIGZsb3cgY29udHJvbCwgYW5kIEkgbmVlZCB0byBhc3Nlc3MgdGhlIG1vZGlmaWNhdGlvbnMgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQzOCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEyOjUxLjkwNjA5NTMxNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTQ5MjM3NjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX21lYXN1cmVfcmN2X21zc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuYy01MS0gKlxcdFxcdFxcdFxcdFxcdGEgZmF0YWwgZXJyb3IgaWYgaXQgbWlnaHQgc3RpbGwgaGFwcGVuLlxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjUyOiAqXFx0XFx0QW5kaSBLbGVlbjpcXHRcXHRBZGQgdGNwX21lYXN1cmVfcmN2X21zcyB0byBtYWtlXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTMtICpcXHRcXHRcXHRcXHRcXHRjb25uZWN0aW9ucyB3aXRoIE1TU1xcdTAwM2NtaW4oTVRVLGFubi4gTVNTKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9MjExPXN0YXRpYyBfX2NvbGQgdm9pZCB0Y3BfZ3JvX2Rldl93YXJuKGNvbnN0IHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTIyNi0gKi9cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzoyMjc6c3RhdGljIHZvaWQgdGNwX21lYXN1cmVfcmN2X21zcyhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtMjI4LXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTc3OD1zdGF0aWMgdm9pZCB0Y3BfY2xhbXBfd2luZG93KHN0cnVjdCBzb2NrICpzaylcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTgwMy0gKiBPdmVyZXN0aW1hdGlvbnMgbWFrZSB1cyBBQ0tpbmcgbGVzcyBmcmVxdWVudGx5IHRoYW4gbmVlZGVkLlxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjgwNDogKiBVbmRlcmVzdGltYXRpb25zIGFyZSBtb3JlIGVhc3kgdG8gZGV0ZWN0IGFuZCBmaXggYnkgdGNwX21lYXN1cmVfcmN2X21zcygpLlxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTgwNS0gKi9cXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTEwMTU9c3RhdGljIHZvaWQgdGNwX2V2ZW50X2RhdGFfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMDIyLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jOjEwMjM6XFx0dGNwX21lYXN1cmVfcmN2X21zcyhzaywgc2tiKTtcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMDI0LVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmM9NTM4MT1zdGF0aWMgdm9pZCB0Y3BfZGF0YV9xdWV1ZV9vZm8oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTM5OC1cXG5uZXQvaXB2NC90Y3BfaW5wdXQuYzo1Mzk5OlxcdHRjcF9tZWFzdXJlX3Jjdl9tc3Moc2ssIHNrYik7XFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTQwMC1cXHQvKiBEaXNhYmxlIGhlYWRlciBwcmVkaWN0aW9uLiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMjoxMjo1Mi4zMDEwMjMzNjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjgwODgxMjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQW5hbHl6aW5nIHRoZSBXaW5kb3cgQ2xhbXAgTW9kaWZpY2F0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGNvbW1pdCdzIHJlcGxhY2VkIGEgY2FsbCB0byBgdGNwX3NldF93aW5kb3dfY2xhbXAoc2ssIHZhbClgIHdpdGggYSBgV1JJVEVfT05DRSh0cC1cdTAwM2V3aW5kb3dfY2xhbXAsIHZhbClgLiBIbW0sIHRoaXMgaXMgaW50ZXJlc3RpbmcuIEltbWVkaWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIHJlYXNvbmluZy4gTXkgZmlyc3QgdGhvdWdodCBpczogd2FzIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgcmVhbGx5IGEgZnVsbC1ibG93biBmdW5jdGlvbiwgb3Igd2FzIGl0IGEgc3RhdGljIGlubGluZSBmdW5jdGlvbiBvciBldmVuIGp1c3QgYSBtYWNybz8gU29tZXRpbWVzIHRoZXNlIGNoYW5nZXMgYXJlIGFib3V0IHBlcmZvcm1hbmNlLCBwb3RlbnRpYWxseSByZW1vdmluZyBhIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQuIE90aGVyIHRpbWVzLCBpdCdzIGFib3V0IG1lbW9yeSBvcmRlcmluZyBhbmQgc3luY2hyb25pemF0aW9uLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGUgbmF0dXJlIG9mIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgdG8gdW5kZXJzdGFuZCB0aGUgdHJ1ZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UsIHNvIEknbGwgY2hlY2sgaXRzIGRlZmluaXRpb24uIFRoaXMgd2lsbCByZXZlYWwgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uLCBhbmQgZnJvbSB0aGVyZSBJIGNhbiBiZXR0ZXIgcmVhc29uIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgbW92aW5nIHRvIGBXUklURV9PTkNFYC4gV2FzIHRoZXJlIHNvbWUgaW1wbGljaXQgbG9ja2luZyBvciBtZW1vcnkgYmFycmllciBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbmFsIGZ1bmN0aW9uPyBIYXMgdGhpcyBub3cgYmVlbiBtYWRlIGV4cGxpY2l0PyBJIHNob3VsZCBsb29rIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBJcyB0aGlzIHBvdGVudGlhbGx5IGEgY3JpdGljYWwgY2hhbmdlIHRvIHRoZSBtZW1vcnkgbW9kZWw/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMDEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMjoxMjo1Ni41ODE5MDYzNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODAxMDY0MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9zZXRfd2luZG93X2NsYW1wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC90Y3AuaD01MTY9dm9pZCB0Y3Bfc2V0X3JjdmJ1ZihzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpO1xcbmluY2x1ZGUvbmV0L3RjcC5oOjUxNzppbnQgdGNwX3NldF93aW5kb3dfY2xhbXAoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKTtcXG5pbmNsdWRlL25ldC90Y3AuaC01MTgtXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0xODU3PXZvaWQgdGNwX3NldF9yY3ZidWYoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxcbm5ldC9pcHY0L3RjcC5jLTE4NTgte1xcbm5ldC9pcHY0L3RjcC5jOjE4NTk6XFx0dGNwX3NldF93aW5kb3dfY2xhbXAoc2ssIHRjcF93aW5fZnJvbV9zcGFjZShzaywgdmFsKSk7XFxubmV0L2lwdjQvdGNwLmMtMTg2MC19XFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0zNzg3PUVYUE9SVF9TWU1CT0wodGNwX3NvY2tfc2V0X2tlZXBjbnQpO1xcbm5ldC9pcHY0L3RjcC5jLTM3ODgtXFxubmV0L2lwdjQvdGNwLmM6Mzc4OTppbnQgdGNwX3NldF93aW5kb3dfY2xhbXAoc3RydWN0IHNvY2sgKnNrLCBpbnQgdmFsKVxcbm5ldC9pcHY0L3RjcC5jLTM3OTAte1xcbi0tXFxubmV0L2lwdjQvdGNwLmM9MzgzNz1pbnQgZG9fdGNwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDA1NS1cXHRjYXNlIFRDUF9XSU5ET1dfQ0xBTVA6XFxubmV0L2lwdjQvdGNwLmM6NDA1NjpcXHRcXHRlcnIgPSB0Y3Bfc2V0X3dpbmRvd19jbGFtcChzaywgdmFsKTtcXG5uZXQvaXB2NC90Y3AuYy00MDU3LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMjoxMjo1OC4zODI5NzQ4NjRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTk1NDk0NTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRpdmluZyBpbnRvIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAqKlxuXG5IbW0sIHNvIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAuLi4gcmlnaHQsIEkgc2VlIGl0J3MgYW4gKmV4cG9ydGVkKiBmdW5jdGlvbiwgb3IgYXQgbGVhc3QgYSBmdW5jdGlvbiBkZWZpbmVkIHdpdGhpbiBgbmV0L2lwdjQvdGNwLmNgLiBPa2F5LCB0aGF0J3MgdGhlIGZpcnN0IGNsdWUuIEJ1dCB3YWl0LCB0aGlzIGlzbid0ICpqdXN0KiBzZXR0aW5nIGB0cC1cdTAwM2V3aW5kb3dfY2xhbXBgLCBpcyBpdD8gVGhlcmUncyBnb3QgdG8gYmUgbW9yZSB0byBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJ3MgZnVsbCBwdXJwb3NlLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgd2hhdCBgdGNwX3NldF93aW5kb3dfY2xhbXBgIGlzIGRvaW5nLiBJIG5lZWQgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGltcGFjdCBhbmQgdXNhZ2Ugb2YgdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA0NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEzOjAxLjU3ODQ3MTVaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM3ODksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM3ODk6XFx0aW50IHRjcF9zZXRfd2luZG93X2NsYW1wKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbClcXG4zNzkwOlxcdHtcXG4zNzkxOlxcdFxcdHUzMiBvbGRfd2luZG93X2NsYW1wLCBuZXdfd2luZG93X2NsYW1wLCBuZXdfcmN2X3NzdGhyZXNoO1xcbjM3OTI6XFx0XFx0c3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7XFxuMzc5MzpcXHRcXG4zNzk0OlxcdFxcdGlmICghdmFsKSB7XFxuMzc5NTpcXHRcXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9DTE9TRSlcXG4zNzk2OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjM3OTc6XFx0XFx0XFx0V1JJVEVfT05DRSh0cC1cXHUwMDNld2luZG93X2NsYW1wLCAwKTtcXG4zNzk4OlxcdFxcdFxcdHJldHVybiAwO1xcbjM3OTk6XFx0XFx0fVxcbjM4MDA6XFx0XFxuMzgwMTpcXHRcXHRvbGRfd2luZG93X2NsYW1wID0gdHAtXFx1MDAzZXdpbmRvd19jbGFtcDtcXG4zODAyOlxcdFxcdG5ld193aW5kb3dfY2xhbXAgPSBtYXhfdChpbnQsIFNPQ0tfTUlOX1JDVkJVRiAvIDIsIHZhbCk7XFxuMzgwMzpcXHRcXG4zODA0OlxcdFxcdGlmIChuZXdfd2luZG93X2NsYW1wID09IG9sZF93aW5kb3dfY2xhbXApXFxuMzgwNTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4zODA2OlxcdFxcbjM4MDc6XFx0XFx0V1JJVEVfT05DRSh0cC1cXHUwMDNld2luZG93X2NsYW1wLCBuZXdfd2luZG93X2NsYW1wKTtcXG4zODA4OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMjoxMzowMS41Nzg2ODAzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5NzQ2MDI3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdGNwX3NldF93aW5kb3dfY2xhbXBgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdGNwX3NldF93aW5kb3dfY2xhbXBgIGZ1bmN0aW9uIGFuZCwgd2FpdCBhIG1pbnV0ZSwgaXQgZG9lcyBtb3JlIHRoYW4gSSBpbml0aWFsbHkgdGhvdWdodC4gSXQncyBub3QganVzdCBhIHN0cmFpZ2h0Zm9yd2FyZCB3aW5kb3cgY2xhbXAgc2V0dGVyLiBJdCBzZWVtcyB0byBoYXZlIHNvbWUgZXh0cmEgbG9naWMgZW1iZWRkZWQgd2l0aGluIGl0LiBJIHNlZSB0aGF0IGl0IGNoZWNrcyBmb3IgYSB6ZXJvIHZhbHVlLCBhbmQgaWYgaXQgcmVjZWl2ZXMgb25lICphbmQqIHRoZSBzb2NrZXQgc3RhdGUgaXNuJ3QgYFRDUF9DTE9TRWAsIGl0IHJldHVybnMgYW4gZXJyb3IuIE90aGVyd2lzZSwgaXQgdXBkYXRlcyBgdHAtXHUwMDNld2luZG93X2NsYW1wYCB3aXRoIGVpdGhlciB0aGUgbWluaW11bSBidWZmZXIgc2l6ZSBkaXZpZGVkIGJ5IHR3byBvciB0aGUgcHJvdmlkZWQgdmFsdWUsIHdoaWNoZXZlciBpcyBsYXJnZXIsIGFmdGVyIGFsc28gd3JpdGluZyB0aGUgdmFsdWUgd2l0aCBgV1JJVEVfT05DRWAuXG5cbk5vdywgdGhlIHBhdGNoIGlzIHJlcGxhY2luZyB0aGlzIGVudGlyZSBmdW5jdGlvbiBjYWxsIHdpdGggYSBkaXJlY3QgYFdSSVRFX09OQ0VgIHdyaXRlIHRvIGB0cC1cdTAwM2V3aW5kb3dfY2xhbXBgIGluIGB0Y3BfbWVhc3VyZV9yY3ZfbXNzYC4gVGhhdCdzIGEgbGl0dGxlIGNvbmNlcm5pbmcuLi4gSSB3b25kZXIgd2h5LiBCeSBkb2luZyB0aGF0LCB0aGUgcGF0Y2ggaXMgYnlwYXNzaW5nIGFsbCB0aGUgYWRkaXRpb25hbCBjaGVja3MgYW5kIHBvdGVudGlhbGx5IHRoZSBgcmN2X3NzdGhyZXNoYCBhbmQgYHNrX3N0YXRlYCB1cGRhdGUuXG5cbkkgbmVlZCB0byBzZWUgdGhlIHJlbWFpbmluZyBwYXJ0cyBvZiB0aGlzIGZ1bmN0aW9uIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXMgdGhpcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgb3IgaXMgaXQgZ29pbmcgdG8gY2F1c2Ugc29tZSB1bmV4cGVjdGVkIGJlaGF2aW9yPyBJIG5lZWQgdG8gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaWYgYnlwYXNzaW5nIHRob3NlIGV4dHJhIGNoZWNrcyBpcyBhY3R1YWxseSBzYWZlIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2MzAsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMjoxMzowNi41NTMyODU2MTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA0MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4MDksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjM4MDk6XFx0XFx0LyogTmVlZCB0byBhcHBseSB0aGUgcmVzZXJ2ZWQgbWVtIHByb3Zpc2lvbmluZyBvbmx5XFxuMzgxMDpcXHRcXHQgKiB3aGVuIHNocmlua2luZyB0aGUgd2luZG93IGNsYW1wLlxcbjM4MTE6XFx0XFx0ICovXFxuMzgxMjpcXHRcXHRpZiAobmV3X3dpbmRvd19jbGFtcCBcXHUwMDNjIG9sZF93aW5kb3dfY2xhbXApIHtcXG4zODEzOlxcdFxcdFxcdF9fdGNwX2FkanVzdF9yY3Zfc3N0aHJlc2goc2ssIG5ld193aW5kb3dfY2xhbXApO1xcbjM4MTQ6XFx0XFx0fSBlbHNlIHtcXG4zODE1OlxcdFxcdFxcdG5ld19yY3Zfc3N0aHJlc2ggPSBtaW4odHAtXFx1MDAzZXJjdl93bmQsIG5ld193aW5kb3dfY2xhbXApO1xcbjM4MTY6XFx0XFx0XFx0dHAtXFx1MDAzZXJjdl9zc3RocmVzaCA9IG1heChuZXdfcmN2X3NzdGhyZXNoLCB0cC1cXHUwMDNlcmN2X3NzdGhyZXNoKTtcXG4zODE3OlxcdFxcdH1cXG4zODE4OlxcdFxcdHJldHVybiAwO1xcbjM4MTk6XFx0fVxcbjM4MjA6XFx0XFxuMzgyMTpcXHRpbnQgdGNwX3NvY2tfc2V0X21heHNlZyhzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpXFxuMzgyMjpcXHR7XFxuMzgyMzpcXHRcXHQvKiBWYWx1ZXMgZ3JlYXRlciB0aGFuIGludGVyZmFjZSBNVFUgd29uJ3QgdGFrZSBlZmZlY3QuIEhvd2V2ZXJcXG4zODI0OlxcdFxcdCAqIGF0IHRoZSBwb2ludCB3aGVuIHRoaXMgY2FsbCBpcyBkb25lIHdlIHR5cGljYWxseSBkb24ndCB5ZXRcXG4zODI1OlxcdFxcdCAqIGtub3cgd2hpY2ggaW50ZXJmYWNlIGlzIGdvaW5nIHRvIGJlIHVzZWRcXG4zODI2OlxcdFxcdCAqL1xcbjM4Mjc6XFx0XFx0aWYgKHZhbCBcXHUwMDI2XFx1MDAyNiAodmFsIFxcdTAwM2MgVENQX01JTl9NU1MgfHwgdmFsIFxcdTAwM2UgTUFYX1RDUF9XSU5ET1cpKVxcbjM4Mjg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEzOjA2LjU1MzQ5MTYyNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjQ3MjA1NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFRDUCBSZWNlaXZlIFBhdGggUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlIHdhcyB1c2luZyBgdGNwX3NldF93aW5kb3dfY2xhbXBgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBfX3RjcF9hZGp1c3RfcmN2X3NzdGhyZXNoYCBhbmQgdXBkYXRlcyBgcmN2X3NzdGhyZXNoYC4gQnV0LCBieSBzd2FwcGluZyB0aGF0IG91dCB3aXRoIGBXUklURV9PTkNFKHRwLVx1MDAzZXdpbmRvd19jbGFtcCwgdmFsKWAsIHRoZSBwYXRjaCBpcyBieXBhc3NpbmcgdGhlIGByY3Zfc3N0aHJlc2hgIHVwZGF0ZSBhbmQgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgaXQncyBhbHRlcmluZyBob3cgdGhlIFRDUCByZWNlaXZlIHBhdGggYmVoYXZlcy5cblxuVGhlIGtleSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIHdhcnJhbnQgZnV6emluZz8gQWJzb2x1dGVseSwgaXQgZG9lcy4gQW55IGNoYW5nZSB0byB0aGUgVENQIHJlY2VpdmUgd2luZG93IGxvZ2ljIGlzIGEgcG90ZW50aWFsIGF0dGFjayB2ZWN0b3IsIG9yIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhIHNvdXJjZSBvZiBzdWJ0bGUgcGVyZm9ybWFuY2UgZGlmZmVyZW5jZXMuIFRoaXMgaXMgY3JpdGljYWwuXG5cbk5vdywgYSByZWxhdGVkIHRob3VnaHQgcG9wcGVkIHVwLiBJIG5lZWQgdG8gYmUgc3VyZS4gSSdtIHJlY2FsbGluZyB0aGF0IGB0Y3BfbWVhc3VyZV9yY3ZfbXNzYCBpcyBpbnZvbHZlZCB3aGVuIGRhdGEgaXMgcmVjZWl2ZWQuIEkgc2hvdWxkIGNoZWNrIGhvdyB0aGF0IGZpdHMgaW50byB0aGlzIHBpY3R1cmUuIFRpbWUgdG8gZGlnIGludG8gdGhlIGB0Y3BfbWVhc3VyZV9yY3ZfbXNzYCBmdW5jdGlvbi4gTGV0IG1lIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjE4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTI6MTM6MTAuODAwNzAwMzEzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMjE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC90Y3BfaW5wdXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjcsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjc6XFx0c3RhdGljIHZvaWQgdGNwX21lYXN1cmVfcmN2X21zcyhzdHJ1Y3Qgc29jayAqc2ssIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIDIyODpcXHR7XFxuIDIyOTpcXHRcXHRzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7XFxuIDIzMDpcXHRcXHRjb25zdCB1bnNpZ25lZCBpbnQgbHNzID0gaWNzay1cXHUwMDNlaWNza19hY2subGFzdF9zZWdfc2l6ZTtcXG4gMjMxOlxcdFxcdHVuc2lnbmVkIGludCBsZW47XFxuIDIzMjpcXHRcXG4gMjMzOlxcdFxcdGljc2stXFx1MDAzZWljc2tfYWNrLmxhc3Rfc2VnX3NpemUgPSAwO1xcbiAyMzQ6XFx0XFxuIDIzNTpcXHRcXHQvKiBza2ItXFx1MDAzZWxlbiBtYXkgaml0dGVyIGJlY2F1c2Ugb2YgU0FDS3MsIGV2ZW4gaWYgcGVlclxcbiAyMzY6XFx0XFx0ICogc2VuZHMgZ29vZCBmdWxsLXNpemVkIGZyYW1lcy5cXG4gMjM3OlxcdFxcdCAqL1xcbiAyMzg6XFx0XFx0bGVuID0gc2tiX3NoaW5mbyhza2IpLVxcdTAwM2Vnc29fc2l6ZSA/IDogc2tiLVxcdTAwM2VsZW47XFxuIDIzOTpcXHRcXHRpZiAobGVuIFxcdTAwM2U9IGljc2stXFx1MDAzZWljc2tfYWNrLnJjdl9tc3MpIHtcXG4gMjQwOlxcdFxcdFxcdC8qIE5vdGU6IGRpdmlkZXMgYXJlIHN0aWxsIGEgYml0IGV4cGVuc2l2ZS5cXG4gMjQxOlxcdFxcdFxcdCAqIEZvciB0aGUgbW9tZW50LCBvbmx5IGFkanVzdCBzY2FsaW5nX3JhdGlvXFxuIDI0MjpcXHRcXHRcXHQgKiB3aGVuIHdlIHVwZGF0ZSBpY3NrX2Fjay5yY3ZfbXNzLlxcbiAyNDM6XFx0XFx0XFx0ICovXFxuIDI0NDpcXHRcXHRcXHRpZiAodW5saWtlbHkobGVuICE9IGljc2stXFx1MDAzZWljc2tfYWNrLnJjdl9tc3MpKSB7XFxuIDI0NTpcXHRcXHRcXHRcXHR1NjQgdmFsID0gKHU2NClza2ItXFx1MDAzZWxlbiBcXHUwMDNjXFx1MDAzYyBUQ1BfUk1FTV9UT19XSU5fU0NBTEU7XFxuIDI0NjpcXHRcXHRcXHRcXHR1OCBvbGRfcmF0aW8gPSB0Y3Bfc2soc2spLVxcdTAwM2VzY2FsaW5nX3JhdGlvO1xcbiAyNDc6XFx0XFxuIDI0ODpcXHRcXHRcXHRcXHRkb19kaXYodmFsLCBza2ItXFx1MDAzZXRydWVzaXplKTtcXG4gMjQ5OlxcdFxcdFxcdFxcdHRjcF9zayhzayktXFx1MDAzZXNjYWxpbmdfcmF0aW8gPSB2YWwgPyB2YWwgOiAxO1xcbiAyNTA6XFx0XFxuIDI1MTpcXHRcXHRcXHRcXHRpZiAob2xkX3JhdGlvICE9IHRjcF9zayhzayktXFx1MDAzZXNjYWxpbmdfcmF0aW8pIHtcXG4gMjUyOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spO1xcbiAyNTM6XFx0XFxuIDI1NDpcXHRcXHRcXHRcXHRcXHR2YWwgPSB0Y3Bfd2luX2Zyb21fc3BhY2Uoc2ssIHNrLVxcdTAwM2Vza19yY3ZidWYpO1xcbiAyNTU6XFx0XFx0XFx0XFx0XFx0V1JJVEVfT05DRSh0cC1cXHUwMDNld2luZG93X2NsYW1wLCB2YWwpO1xcbiAyNTY6XFx0XFxuIDI1NzpcXHRcXHRcXHRcXHRcXHRpZiAodHAtXFx1MDAzZXdpbmRvd19jbGFtcCBcXHUwMDNjIHRwLVxcdTAwM2VyY3ZxX3NwYWNlLnNwYWNlKVxcbiAyNTg6XFx0XFx0XFx0XFx0XFx0XFx0dHAtXFx1MDAzZXJjdnFfc3BhY2Uuc3BhY2UgPSB0cC1cXHUwMDNld2luZG93X2NsYW1wO1xcbiAyNTk6XFx0XFx0XFx0XFx0fVxcbiAyNjA6XFx0XFx0XFx0fVxcbiAyNjE6XFx0XFx0XFx0aWNzay1cXHUwMDNlaWNza19hY2sucmN2X21zcyA9IG1pbl90KHVuc2lnbmVkIGludCwgbGVuLFxcbiAyNjI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHRjcF9zayhzayktXFx1MDAzZWFkdm1zcyk7XFxuIDI2MzpcXHRcXHRcXHQvKiBBY2NvdW50IGZvciBwb3NzaWJseS1yZW1vdmVkIG9wdGlvbnMgKi9cXG4gMjY0OlxcdFxcdFxcdERPX09OQ0VfTElURV9JRihsZW4gXFx1MDAzZSBpY3NrLVxcdTAwM2VpY3NrX2Fjay5yY3ZfbXNzICsgTUFYX1RDUF9PUFRJT05fU1BBQ0UsXFxuIDI2NTpcXHRcXHRcXHRcXHRcXHR0Y3BfZ3JvX2Rldl93YXJuLCBzaywgc2tiLCBsZW4pO1xcbiAyNjY6XFx0XFx0XFx0LyogSWYgdGhlIHNrYiBoYXMgYSBsZW4gb2YgZXhhY3RseSAxKk1TUyBhbmQgaGFzIHRoZSBQU0ggYml0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEzOjEwLjgwMTAxNDE5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjEyMDYyMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFRDUCBTdGFjayBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgYHRjcF9zZXRfd2luZG93X2NsYW1wKHNrLCB2YWwpYCB0byBgV1JJVEVfT05DRSh0cC1cdTAwM2V3aW5kb3dfY2xhbXAsIHZhbClgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2FzIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgaW50cm9kdWNlZCByZWNlbnRseSwgb3Igd2FzIGl0IG1vZGlmaWVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gaGFkIGEgZmxhdyDigJMgcGVyaGFwcyBhIGxvY2tkZXAgd2FybmluZywgYSBjcmFzaCwgb3IganVzdCBhIGxvZ2ljIGVycm9yIGluIGl0cyB1c2UuXG5cbkRpZ2dpbmcgZGVlcGVyLCBJIHNlZSB0aGF0IGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgY2FsbHMgYF9fdGNwX2FkanVzdF9yY3Zfc3N0aHJlc2hgLCBhbmQgdGhhdCBmdW5jdGlvbiAqY291bGQqIGJlIGRvaW5nIHNvbWV0aGluZyBxdWl0ZSBpbnZvbHZlZC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgVENQIHN0YWNrOyB3ZSdyZSBub3QganVzdCB0YWxraW5nIGFib3V0IGNvc21ldGljIGNvZGUuIEFuZCwgY3JpdGljYWxseSwgdGhpcyBpcyByZWFjaGFibGUgdGhyb3VnaCBub3JtYWwgVENQIGRhdGEgcmVjZXB0aW9uLiBUaGF0IG1ha2VzIHRoaXMgV29ydGhGdXp6aW5nPXRydWUgaW4gbXkgYm9vay5cblxuTm93LCBhcyBJJ20gdGhpbmtpbmcgYWJvdXQgZnV6emluZywgdGhlIGBGb2N1c1N5bWJvbHNgIHNlY3Rpb24gaGlnaGxpZ2h0cyB0aGF0IGB0Y3BfbWVhc3VyZV9yY3ZfbXNzYCBpcyBzdGF0aWMuIEhtbSwgbGV0IG1lIGNoZWNrIHRoZSBjYWxsIHNpdGVzIGZvciBpdC4gQWgsIGB0Y3BfbWVhc3VyZV9yY3ZfbXNzYCBpcyBjYWxsZWQgZnJvbSBgdGNwX2V2ZW50X2RhdGFfcmVjdmAgYW5kIGB0Y3BfZGF0YV9xdWV1ZV9vZm9gLiBPa2F5LCBhbmQgYHRjcF9ldmVudF9kYXRhX3JlY3ZgIGlzIGNhbGxlZCBmcm9tIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCwgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AsIGFuZCBsaWtlbHkgb3RoZXIgcGxhY2VzLiBHaXZlbiBpdHMgcm9sZSBhcyBhIGtleSBmdW5jdGlvbiBpbiBUQ1AgZGF0YSByZWNlcHRpb24gYW5kIHRoZSBjb3JlIG5hdHVyZSBvZiB0aGlzIGNoYW5nZSwgSSB3aWxsIGRlZmluaXRlbHkgd2FudCB0byBpbnZlc3RpZ2F0ZSBgdGNwX2V2ZW50X2RhdGFfcmVjdmAgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgxNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEzOjE2LjQxMzA3ODg0M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwNTAxNTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjcF9ldmVudF9kYXRhX3JlY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvdGNwX2lucHV0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvdGNwX2lucHV0LmM9OTk1PXN0YXRpYyB2b2lkIHRjcF9zYXZlX2xyY3ZfZmxvd2xhYmVsKHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTEwMTQtICovXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6MTAxNTpzdGF0aWMgdm9pZCB0Y3BfZXZlbnRfZGF0YV9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQvaXB2NC90Y3BfaW5wdXQuYy0xMDE2LXtcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTU2MDc9c3RhdGljIHZvaWQgdGNwX2RhdGFfcXVldWUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvdGNwX2lucHV0LmMtNTY3MS1cXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4pXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NTY3MjpcXHRcXHRcXHR0Y3BfZXZlbnRfZGF0YV9yZWN2KHNrLCBza2IpO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTU2NzMtXFx0XFx0aWYgKFRDUF9TS0JfQ0Ioc2tiKS1cXHUwMDNldGNwX2ZsYWdzIFxcdTAwMjYgVENQSERSX0ZJTilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jPTY1MDA9dm9pZCB0Y3BfcmN2X2VzdGFibGlzaGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY2MzctXFxubmV0L2lwdjQvdGNwX2lucHV0LmM6NjYzODpcXHRcXHRcXHR0Y3BfZXZlbnRfZGF0YV9yZWN2KHNrLCBza2IpO1xcbm5ldC9pcHY0L3RjcF9pbnB1dC5jLTY2MzktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDEyOjEzOjE2Ljg1MzU4NTMwMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjAyOTMxNjcwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRDUCBSZWNlaXZlIFBhdGggZm9yIEZ1enppbmcgRm9jdXMqKlxuXG5Pa2F5LCBoZXJlJ3Mgd2hhdCBJJ20gdGhpbmtpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSByaWdodCBlbnRyeSBwb2ludHMgb3IgZnVuY3Rpb25zIHRvIGhpZ2hsaWdodCBmb3IgZnV6emluZywgZ2l2ZW4gdGhpcyBwYXRjaCdzIGNoYW5nZXMuIFRoZSBwcmltYXJ5IGdvYWwgaXMgdG8gYXZvaWQgbGlzdGluZyBmdW5jdGlvbnMgdGhhdCBhcmUgb3Zlcmx5IGdlbmVyaWMgb3IgaG90LXBhdGgsIGJlY2F1c2UgdGhhdCdsbCBza2V3IHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG5cbkknbSBzdGFydGluZyB3aXRoIHRoZSBlbnRyeSBwb2ludHM6IGB0Y3BfZGF0YV9xdWV1ZWAgYW5kIGB0Y3BfcmN2X2VzdGFibGlzaGVkYC4gYHRjcF9kYXRhX3F1ZXVlYCBpcyBjYWxsZWQgYnkgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AsIGFuZCBgdGNwX3Jjdl9lc3RhYmxpc2hlZGAgaXMgdGhlIGZhc3QgcGF0aC4gVGhlIHByb21wdCBzdGVlcnMgbWUgYXdheSBmcm9tIGhvdC1wYXRocywgYW5kIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCBkZWZpbml0ZWx5IGZpdHMgdGhhdCBkZXNjcmlwdGlvbi4gYHRjcF9kYXRhX3F1ZXVlYCwgdGhvdWdoLCBpcyBzdGF0aWMuIEhtbS4uLlxuXG5UaGUgcGF0Y2ggaXMgdG91Y2hpbmcgYHRjcF9tZWFzdXJlX3Jjdl9tc3NgLCB3aGljaCBjYWxscyBgdGNwX3NldF93aW5kb3dfY2xhbXBgLiAgYHRjcF9tZWFzdXJlX3Jjdl9tc3NgIGlzIHN0YXRpYy4gU28sIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZXJlIGFyZSByZWxldmFudCBub24tc3RhdGljIGZ1bmN0aW9ucyBpbnZvbHZlZC5cblxuYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AgYW5kIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgYXJlIGJvdGggbm9uLXN0YXRpYy4gVGhlIHBhdGNoIHRvdWNoZXMgdGhlICpjYWxsKiB0byBgdGNwX3NldF93aW5kb3dfY2xhbXBgLCBidXQgaXNuJ3QgbW9kaWZ5aW5nIHRoYXQgZnVuY3Rpb24gZGlyZWN0bHkuIEkndmUgcmUtZXhhbWluZWQgdGhlIGNvZGUuIFRoZSBwYXRjaCByZW1vdmVzIHRoZSBjYWxsIHRvIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgd2l0aGluIGB0Y3BfbWVhc3VyZV9yY3ZfbXNzYC5cblxuTGV0J3MgbG9vayBhdCB0aGUgY2FsbGVycyBvZiBgdGNwX21lYXN1cmVfcmN2X21zc2AuIFdlIGhhdmUgYHRjcF9ldmVudF9kYXRhX3JlY3ZgIGFuZCBgdGNwX2RhdGFfcXVldWVfb2ZvYCwgYm90aCBzdGF0aWMuICBTaW5jZSB0aGUgcHJpbWFyeSBmdW5jdGlvbiB1bmRlciBzY3J1dGlueSAoYHRjcF9tZWFzdXJlX3Jjdl9tc3NgKSBhbmQgaXRzIGltbWVkaWF0ZSBjYWxsZXJzIGFyZSBzdGF0aWMsIG15IGluc3RpbmN0IGlzIHRvIGxvb2sgZWxzZXdoZXJlLiBCdXQgdGhlIG5vbi1zdGF0aWMgY2FsbGVycyBpbmNsdWRlIGB0Y3BfcmN2X2VzdGFibGlzaGVkYCAoaG90LXBhdGgpIGFuZCBgdGNwX3Jjdl9zdGF0ZV9wcm9jZXNzYCAoYWxzbyBob3QtcGF0aCksIGFuZCwgSSdtIHRyeWluZyB0byBhdm9pZCBsaXN0aW5nIGhvdCBwYXRocy5cblxuQ291bGQgSSBqdXN0IGxpc3QgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2Agc2luY2UgdGhlIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBUQ1AgcmVjZWl2ZSBwYXRoPyBCdXQgdGhlIHByb21wdCBhZHZpc2VzIGFnYWluc3QgdGhpcy4gTWF5YmUgbGVhdmUgYEZvY3VzU3ltYm9sc2AgZW1wdHkuIFRoZSBwYXRjaCBkaXJlY3RseSB0b3VjaGVzIGEgc3RhdGljIGZ1bmN0aW9uLCBhbmQgaWYgSSBkb24ndCBsaXN0IGFueXRoaW5nLCB0aGUgZnV6emVyIG1pZ2h0IHRlc3QgYHRjcF9yY3Zfc3RhdGVfcHJvY2Vzc2AgYXMgd2VsbC5cblxuVGhlIHBhdGNoIGNoYW5nZXMgdGhlIGNhbGwgdG8gYHRjcF9zZXRfd2luZG93X2NsYW1wYCBhbmQgaXQgc2VlbXMgdGhlIGNoYW5nZSBpcyBpbXBvcnRhbnQsIGluIHdoaWNoIGB0Y3Bfc2V0X3dpbmRvd19jbGFtcGAgaXMgdW5uZWNlc3NhcnkuXG5cbkxldCdzIGRvIG9uZSBsYXN0IGNoZWNrIGZvciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGUuIEFnYWluLCBgdGNwX2RhdGFfcXVldWVgLCBgdGNwX2RhdGFfcXVldWVfb2ZvYCwgYW5kIGB0Y3BfZXZlbnRfZGF0YV9yZWN2YCBhcmUgc3RhdGljLiAgVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIGlzIHN0YXRpYyAoYHRjcF9tZWFzdXJlX3Jjdl9tc3NgKS5cblxuU28sIEknbSBsZWFuaW5nIHRvd2FyZCBsZWF2aW5nIGBGb2N1c1N5bWJvbHNgIGVtcHR5LiBUaGlzIHNob3VsZCBkaXJlY3QgdGhlIGZ1enplciB0b3dhcmQgdGhlIG1vc3QgcmVsZXZhbnQgY29kZSBhbmQgYXZvaWQgc2tld2luZyBpdCB0b3dhcmRzIGhvdC1wYXRoIGZ1bmN0aW9ucy4gQ29yZSBUQ1AgaXMgYWx3YXlzIGVuYWJsZWQsIHNvIG5vIHNwZWNpZmljIENPTkZJRyBvcHRpb25zIGFyZSBuZWVkZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBUQ1AncyBjb3JlIHJlY2VpdmUgbG9naWMsIHdvcnRoIHRlc3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4MzAsIk91dHB1dFRva2VucyI6MTA3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMjoxMzoyOC44ODI5MDQ2OTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIHJlY2VpdmUgcGF0aCBieSByZXBsYWNpbmcgYSBjYWxsIHRvIHRjcF9zZXRfd2luZG93X2NsYW1wIHdpdGggYSBkaXJlY3QgV1JJVEVfT05DRSB0byB0cC1cXHUwMDNld2luZG93X2NsYW1wIGluIHRjcF9tZWFzdXJlX3Jjdl9tc3MuIFRoaXMgYXZvaWRzIHRoZSBhZGRpdGlvbmFsIGxvZ2ljIGluIHRjcF9zZXRfd2luZG93X2NsYW1wIChzdWNoIGFzIGFkanVzdGluZyByY3Zfc3N0aHJlc2gpIGFuZCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVENQIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgVENQIHJlY2VpdmUgcGF0aCBieSByZXBsYWNpbmcgYSBjYWxsIHRvIHRjcF9zZXRfd2luZG93X2NsYW1wIHdpdGggYSBkaXJlY3QgV1JJVEVfT05DRSB0byB0cC1cXHUwMDNld2luZG93X2NsYW1wIGluIHRjcF9tZWFzdXJlX3Jjdl9tc3MuIFRoaXMgYXZvaWRzIHRoZSBhZGRpdGlvbmFsIGxvZ2ljIGluIHRjcF9zZXRfd2luZG93X2NsYW1wIChzdWNoIGFzIGFkanVzdGluZyByY3Zfc3N0aHJlc2gpIGFuZCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgVENQIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflow2jb6f[1] Phase: Succeeded StartedAt: 2026-07-26 12:13:35 +0000 UTC FinishedAt: 2026-07-26 12:13:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-26 12:13:35 +0000 UTC FinishedAt: 2026-07-26 12:13:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[2] Phase: Succeeded StartedAt: 2026-07-26 12:13:35 +0000 UTC FinishedAt: 2026-07-26 16:37:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-26 12:13:35 +0000 UTC FinishedAt: 2026-07-26 16:37:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-26 12:13:35 +0000 UTC FinishedAt: 2026-07-26 12:14:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-26 12:13:35 +0000 UTC FinishedAt: 2026-07-26 12:13:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2jb6f/series-workflow2jb6f-convert-artifact-1644701216/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-26 12:14:02 +0000 UTC FinishedAt: 2026-07-26 12:43:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-26 12:14:02 +0000 UTC FinishedAt: 2026-07-26 12:43:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3137787e-330d-42ae-86bf-b0ba2e705fd6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2jb6f/series-workflow2jb6f-convert-artifact-1644701216/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "4a63603f-244a-4554-bb1c-d248452e6e0b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2jb6f/series-workflow2jb6f-build-action-2037974246/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-26 12:14:02 +0000 UTC FinishedAt: 2026-07-26 12:43:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3137787e-330d-42ae-86bf-b0ba2e705fd6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2jb6f/series-workflow2jb6f-convert-artifact-1644701216/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "4a63603f-244a-4554-bb1c-d248452e6e0b", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2jb6f/series-workflow2jb6f-build-action-2037974246/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-26 12:43:47 +0000 UTC FinishedAt: 2026-07-26 12:43:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-26 12:43:47 +0000 UTC FinishedAt: 2026-07-26 12:43:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-26 12:43:47 +0000 UTC FinishedAt: 2026-07-26 12:43:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-26 12:43:47 +0000 UTC FinishedAt: 2026-07-26 12:43:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2jb6f/series-workflow2jb6f-convert-artifact-949207623/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-26 12:43:57 +0000 UTC FinishedAt: 2026-07-26 12:45:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-26 12:43:57 +0000 UTC FinishedAt: 2026-07-26 12:45:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4a63603f-244a-4554-bb1c-d248452e6e0b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2jb6f/series-workflow2jb6f-build-action-2037974246/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-26 12:45:47 +0000 UTC FinishedAt: 2026-07-26 12:45:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-26 12:45:47 +0000 UTC FinishedAt: 2026-07-26 12:45:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-26 12:45:47 +0000 UTC FinishedAt: 2026-07-26 13:26:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-26 12:45:47 +0000 UTC FinishedAt: 2026-07-26 13:26:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3137787e-330d-42ae-86bf-b0ba2e705fd6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2jb6f/series-workflow2jb6f-convert-artifact-949207623/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "699913bf-bda6-45c7-b56f-a6ced9d538ab", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2jb6f/series-workflow2jb6f-build-action-426770891/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-26 12:45:47 +0000 UTC FinishedAt: 2026-07-26 13:26:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*3137787e-330d-42ae-86bf-b0ba2e705fd6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2jb6f/series-workflow2jb6f-convert-artifact-949207623/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "699913bf-bda6-45c7-b56f-a6ced9d538ab", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2jb6f/series-workflow2jb6f-build-action-426770891/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-26 13:26:31 +0000 UTC FinishedAt: 2026-07-26 13:26:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-26 13:26:31 +0000 UTC FinishedAt: 2026-07-26 13:26:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-26 13:26:31 +0000 UTC FinishedAt: 2026-07-26 13:28:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-26 13:26:31 +0000 UTC FinishedAt: 2026-07-26 13:28:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*699913bf-bda6-45c7-b56f-a6ced9d538ab,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2jb6f/series-workflow2jb6f-build-action-426770891/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-26 13:28:31 +0000 UTC FinishedAt: 2026-07-26 16:37:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-26 13:28:31 +0000 UTC FinishedAt: 2026-07-26 16:37:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*4a63603f-244a-4554-bb1c-d248452e6e0b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*699913bf-bda6-45c7-b56f-a6ced9d538ab,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2jb6f/series-workflow2jb6f-build-action-2037974246/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2jb6f/series-workflow2jb6f-build-action-426770891/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-26 13:28:31 +0000 UTC FinishedAt: 2026-07-26 13:28:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-26 13:28:31 +0000 UTC FinishedAt: 2026-07-26 13:28:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2jb6f/series-workflow2jb6f-convert-artifact-4063669536/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-26 13:28:31 +0000 UTC FinishedAt: 2026-07-26 13:28:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-26 13:28:31 +0000 UTC FinishedAt: 2026-07-26 13:28:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-26 13:28:31 +0000 UTC FinishedAt: 2026-07-26 13:28:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-26 13:28:52 +0000 UTC FinishedAt: 2026-07-26 16:37:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2jb6f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78f75d632f74b8de0f081a128588f7c37d0d1164","config_name":"upstream-apparmor-kasan.config","series_id":"85d514a6-17cd-4852-8a31-c09831e218c7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-26 13:28:52 +0000 UTC FinishedAt: 2026-07-26 16:37:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4a63603f-244a-4554-bb1c-d248452e6e0b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*699913bf-bda6-45c7-b56f-a6ced9d538ab,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2jb6f/series-workflow2jb6f-build-action-2037974246/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2jb6f/series-workflow2jb6f-build-action-426770891/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow2jb6f/series-workflow2jb6f-convert-artifact-4063669536/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}