Name: series-workflowpbmd4 Phase: Succeeded StartedAt: 2026-09-04 09:46:58 +0000 UTC FinishedAt: 2026-09-04 10:53:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[0] Phase: Succeeded StartedAt: 2026-09-04 09:46:58 +0000 UTC FinishedAt: 2026-09-04 10:02:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[0].run-triage Phase: Succeeded StartedAt: 2026-09-04 09:46:58 +0000 UTC FinishedAt: 2026-09-04 10:02:34 +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": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET" ], "series_id": "472df404-c500-4c6f-8cb4-8e0c4c9225af" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "remove_nh_grp_entry", "remove_nexthop_from_groups", "rtm_del_nexthop", "rtm_new_nexthop" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZW1vdmVfbmhfZ3JwX2VudHJ5JiMzNDssCiAgICAmIzM0O3JlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzJiMzNDssCiAgICAmIzM0O3J0bV9kZWxfbmV4dGhvcCYjMzQ7LAogICAgJiMzNDtydG1fbmV3X25leHRob3AmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2tgIHdhcyBkZWNsYXJlZCBvbiB0aGUgc3RhY2sgd2l0aG91dCBpbml0aWFsaXphdGlvbiBpbiBgcmVtb3ZlX25oX2dycF9lbnRyeSgpYC4gQnkgaW5pdGlhbGl6aW5nIGl0IHdpdGggYD0ge31gLCBhbGwgZmllbGRzIG9mIGBleHRhY2tgIGFyZSBleHBsaWNpdGx5IHplcm9lZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBsZWFrIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW5pdGlhbGl6ZXMgdGhlIG5ldGxpbmtfZXh0X2FjayBzdHJ1Y3R1cmUgaW4gcmVtb3ZlX25oX2dycF9lbnRyeSgpIHRvIHByZXZlbnQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBpZiBub3RpZmllcnMgcmV0dXJuIGFuIGVycm9yLiBUaGUgY29kZSByZXNpZGVzIGluIHRoZSBjb3JlIElQdjQgbmV4dGhvcCBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgbmV4dGhvcCBjb21tYW5kcyAoUlRNX0RFTE5FWFRIT1AsIFJUTV9ORVdORVhUSE9QKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVmODZkMTMwMDM4MjNjN2FjNDYwODI5MzUzZGQ3ZTZjZDQyZmRjYjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDEwOjAxOjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25leHRob3AuYyBiL25ldC9pcHY0L25leHRob3AuY1xuaW5kZXggYTdjMmI4ZGNlZDRlNy4uNDJlNTViNWE3NTVlZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25leHRob3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV4dGhvcC5jXG5AQCAtMjAzNiw3ICYjNDM7MjAzNiw3IEBAIHJlbW92ZV9uaF9ncnBfZW50cnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmhfZ3JwX2VudHJ5ICpuaGdlLFxuIHtcbiBcdHN0cnVjdCBuaF9ncnBfZW50cnkgKm5oZ2VzLCAqbmV3X25oZ2VzO1xuIFx0c3RydWN0IG5leHRob3AgKm5ocCA9IG5oZ2UtXHUwMDNlbmhfcGFyZW50O1xuLVx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2s7XG4mIzQzO1x0c3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtcbiBcdHN0cnVjdCBuZXh0aG9wICpuaCA9IG5oZ2UtXHUwMDNlbmg7XG4gXHRzdHJ1Y3QgbmhfZ3JvdXAgKm5oZywgKm5ld2c7XG4gXHRpbnQgaSwgaiwgZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZW1vdmVfbmhfZ3JwX2VudHJ5JiMzNDssCiAgICAmIzM0O3JlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzJiMzNDssCiAgICAmIzM0O3J0bV9kZWxfbmV4dGhvcCYjMzQ7LAogICAgJiMzNDtydG1fbmV3X25leHRob3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW5pdGlhbGl6ZXMgdGhlIG5ldGxpbmtfZXh0X2FjayBzdHJ1Y3R1cmUgaW4gcmVtb3ZlX25oX2dycF9lbnRyeSgpIHRvIHByZXZlbnQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBpZiBub3RpZmllcnMgcmV0dXJuIGFuIGVycm9yLiBUaGUgY29kZSByZXNpZGVzIGluIHRoZSBjb3JlIElQdjQgbmV4dGhvcCBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgbmV4dGhvcCBjb21tYW5kcyAoUlRNX0RFTE5FWFRIT1AsIFJUTV9ORVdORVhUSE9QKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVmODZkMTMwMDM4MjNjN2FjNDYwODI5MzUzZGQ3ZTZjZDQyZmRjYjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDEwOjAxOjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV4dGhvcC5jIGIvbmV0L2lwdjQvbmV4dGhvcC5jCmluZGV4IGE3YzJiOGRjZWQ0ZTcuLjQyZTU1YjVhNzU1ZWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25leHRob3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXh0aG9wLmMKQEAgLTIwMzYsNyAmIzQzOzIwMzYsNyBAQCByZW1vdmVfbmhfZ3JwX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZSwKIHsKIAlzdHJ1Y3QgbmhfZ3JwX2VudHJ5ICpuaGdlcywgKm5ld19uaGdlczsKIAlzdHJ1Y3QgbmV4dGhvcCAqbmhwID0gbmhnZS0mZ3Q7bmhfcGFyZW50OwotCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrOwomIzQzOwlzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9OwogCXN0cnVjdCBuZXh0aG9wICpuaCA9IG5oZ2UtJmd0O25oOwogCXN0cnVjdCBuaF9ncm91cCAqbmhnLCAqbmV3ZzsKIAlpbnQgaSwgaiwgZXJyOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODk1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSwgc28gSSYjMzk7bGwgc3RhcnQgYnkgZm9jdXNpbmcgb24gdGhlIHNwZWNpZmljcy4KCioqUGF0Y2ggSW5zcGVjdGlvbjogSW5pdGlhbGl6aW5nIGBleHRhY2tgIGluIGByZW1vdmVfbmhfZ3JwX2VudHJ5YCoqCgpSaWdodCwgc28gdGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgbmV0L2lwdjQvbmV4dGhvcC5jYC4gU3BlY2lmaWNhbGx5LCB3aXRoaW4gdGhlIGByZW1vdmVfbmhfZ3JwX2VudHJ5YCBmdW5jdGlvbiwgdGhlcmUmIzM5O3MgYSBjaGFuZ2UgcmVsYXRlZCB0byB0aGUgYHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrO2AgZGVjbGFyYXRpb24uIEl0JiMzOTtzIGJlZW4gYWx0ZXJlZCB0byBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtgLiBUaGF0JiMzOTtzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBjaGFuZ2UgLSBpbml0aWFsaXppbmcgdGhlIGBleHRhY2tgIHN0cnVjdHVyZS4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gcHJldmVudGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBwb3RlbnRpYWxseSBjbGVhcmluZyBmbGFncyBvbiB0aGUgZXh0ZW5kZWQgYWNrbm93bGVkZ2VtZW50LiBJIGtub3cgSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGVzZSB0aGluZ3MsIHNvIGxldCYjMzk7cyB6b29tIGluIG9uIHRoYXQgY29kZSBhcmVhLgoKSSBzaG91bGQgcHJvYmFibHkgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvaXB2NC9uZXh0aG9wLmNgIHRvIHNlZSBob3cgYGV4dGFja2AgaXMgYWN0dWFsbHkgdXNlZC4gSXQmIzM5O2xsIGJlIGFyb3VuZCBsaW5lIDIwMzYsIEkgdGhpbmsuIEkmIzM5O2xsIG5lZWQgdG8gcmVhZCB0aGUgdXNhZ2UgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXh0aG9wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMjA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5oZy1cdTAwM2VudW1fbmg7ICYjNDM7JiM0MztpKVxuMjAyMTpcdFx0XHR0b3RhbCAmIzQzOz0gbmhnLVx1MDAzZW5oX2VudHJpZXNbaV0ud2VpZ2h0O1xuMjAyMjpcdFxuMjAyMzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmhnLVx1MDAzZW51bV9uaDsgJiM0MzsmIzQzO2kpIHtcbjIwMjQ6XHRcdFx0c3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZSA9IFx1MDAyNm5oZy1cdTAwM2VuaF9lbnRyaWVzW2ldO1xuMjAyNTpcdFx0XHR1MzIgdXBwZXJfYm91bmQ7XG4yMDI2Olx0XG4yMDI3Olx0XHRcdHcgJiM0Mzs9IG5oZ2UtXHUwMDNld2VpZ2h0O1xuMjAyODpcdFx0XHR1cHBlcl9ib3VuZCA9IERJVl9ST1VORF9DTE9TRVNUX1VMTCgodTY0KXcgXHUwMDNjXHUwMDNjIDMxLCB0b3RhbCkgLSAxO1xuMjAyOTpcdFx0XHRhdG9taWNfc2V0KFx1MDAyNm5oZ2UtXHUwMDNlaHRoci51cHBlcl9ib3VuZCwgdXBwZXJfYm91bmQpO1xuMjAzMDpcdFx0fVxuMjAzMTpcdH1cbjIwMzI6XHRcbjIwMzM6XHRzdGF0aWMgYm9vbCBfX211c3RfY2hlY2tcbjIwMzQ6XHRyZW1vdmVfbmhfZ3JwX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZSxcbjIwMzU6XHRcdFx0ICAgIHN0cnVjdCBubF9pbmZvICpubGluZm8sIHN0cnVjdCBsaXN0X2hlYWQgKmRlZmVycmVkX2ZyZWUpXG4yMDM2Olx0e1xuMjAzNzpcdFx0c3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZXMsICpuZXdfbmhnZXM7XG4yMDM4Olx0XHRzdHJ1Y3QgbmV4dGhvcCAqbmhwID0gbmhnZS1cdTAwM2VuaF9wYXJlbnQ7XG4yMDM5Olx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9O1xuMjA0MDpcdFx0c3RydWN0IG5leHRob3AgKm5oID0gbmhnZS1cdTAwM2VuaDtcbjIwNDE6XHRcdHN0cnVjdCBuaF9ncm91cCAqbmhnLCAqbmV3ZztcbjIwNDI6XHRcdGludCBpLCBqLCBlcnI7XG4yMDQzOlx0XG4yMDQ0Olx0XHRXQVJOX09OKCFuaCk7XG4yMDQ1Olx0XG4yMDQ2Olx0XHRuaGcgPSBydG5sX2RlcmVmZXJlbmNlKG5ocC1cdTAwM2VuaF9ncnApO1xuMjA0NzpcdFx0bmV3ZyA9IG5oZy1cdTAwM2VzcGFyZTtcbjIwNDg6XHRcbjIwNDk6XHRcdC8qIGxhc3QgZW50cnksIGtlZXAgaXQgdmlzaWJsZSBhbmQgcmVtb3ZlIHRoZSBwYXJlbnQgKi9cbjIwNTA6XHRcdGlmIChuaGctXHUwMDNlbnVtX25oID09IDEpXG4yMDUxOlx0XHRcdHJldHVybiByZW1vdmVfbmV4dGhvcChuZXQsIG5ocCwgbmxpbmZvKTtcbjIwNTI6XHRcbjIwNTM6XHRcdG5ld2ctXHUwMDNlaGFzX3Y0ID0gZmFsc2U7XG4yMDU0Olx0XHRuZXdnLVx1MDAzZWlzX211bHRpcGF0aCA9IG5oZy1cdTAwM2Vpc19tdWx0aXBhdGg7XG4yMDU1Olx0XHRuZXdnLVx1MDAzZWhhc2hfdGhyZXNob2xkID0gbmhnLVx1MDAzZWhhc2hfdGhyZXNob2xkO1xuMjA1NjpcdFx0bmV3Zy1cdTAwM2VyZXNpbGllbnQgPSBuaGctXHUwMDNlcmVzaWxpZW50O1xuMjA1NzpcdFx0bmV3Zy1cdTAwM2VmZGJfbmggPSBuaGctXHUwMDNlZmRiX25oO1xuMjA1ODpcdFx0bmV3Zy1cdTAwM2VudW1fbmggPSBuaGctXHUwMDNlbnVtX25oO1xuMjA1OTpcdFxuMjA2MDpcdFx0LyogY29weSBvbGQgZW50cmllcyB0byBuZXcgZXhjZXB0IHRoZSBvbmUgZ2V0dGluZyByZW1vdmVkICovXG4yMDYxOlx0XHRuaGdlcyA9IG5oZy1cdTAwM2VuaF9lbnRyaWVzO1xuMjA2MjpcdFx0bmV3X25oZ2VzID0gbmV3Zy1cdTAwM2VuaF9lbnRyaWVzO1xuMjA2MzpcdFx0Zm9yIChpID0gMCwgaiA9IDA7IGkgXHUwMDNjIG5oZy1cdTAwM2VudW1fbmg7ICYjNDM7JiM0MztpKSB7XG4yMDY0Olx0XHRcdHN0cnVjdCBuaF9pbmZvICpuaGk7XG4yMDY1Olx0XG4yMDY2Olx0XHRcdC8qIGN1cnJlbnQgbmV4dGhvcCBnZXR0aW5nIHJlbW92ZWQgKi9cbjIwNjc6XHRcdFx0aWYgKG5oZy1cdTAwM2VuaF9lbnRyaWVzW2ldLm5oID09IG5oKSB7XG4yMDY4Olx0XHRcdFx0bmV3Zy1cdTAwM2VudW1fbmgtLTtcbjIwNjk6XHRcdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTUwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGByZW1vdmVfbmhfZ3JwX2VudHJ5YCBhbmQgaXRzIGBleHRhY2tgIFVzYWdlKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgcmVtb3ZlX25oX2dycF9lbnRyeWAgZnVuY3Rpb24gYWdhaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBgZXh0YWNrYCBpcyBiZWluZyBlbXBsb3llZCBoZXJlLiBJdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBqdXN0IGZyb20gbG9va2luZyBhdCB0aGlzIHNuaXBwZXQgaG93IHRoZSBzdGFjayBpcyBiZWluZyBtYW5hZ2VkLCBzbyBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHdpdGhpbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29udGV4dCBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIG9wZXJhdGlvbiBpcyBleGVjdXRlZCBhbmQgd2hhdCBpdCBpbXBsaWVzIGZvciB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBmb3Igd2hlcmUgYW5kIGhvdyB0aGUgc3RhY2sgaXMgYmVpbmcgbW9kaWZpZWQgYXJvdW5kIHRoZSB1c2Ugb2YgdGhpcyBmdW5jdGlvbiwgYXMgd2VsbCBhcyB0aGUgZWZmZWN0cyB0aGUgc3RhY2sgbWFuaXB1bGF0aW9uIGhhcyBvbiB0aGUgZGF0YSBpbnRlZ3JpdHkgYW5kIHByb2dyYW0gY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV4dGhvcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDcwOlx0XHRcdH1cbjIwNzE6XHRcbjIwNzI6XHRcdFx0bmhpID0gcnRubF9kZXJlZmVyZW5jZShuaGdlc1tpXS5uaC1cdTAwM2VuaF9pbmZvKTtcbjIwNzM6XHRcdFx0aWYgKG5oaS1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVClcbjIwNzQ6XHRcdFx0XHRuZXdnLVx1MDAzZWhhc192NCA9IHRydWU7XG4yMDc1Olx0XG4yMDc2Olx0XHRcdGxpc3RfZGVsKFx1MDAyNm5oZ2VzW2ldLm5oX2xpc3QpO1xuMjA3NzpcdFx0XHRuZXdfbmhnZXNbal0uc3RhdHMgPSBuaGdlc1tpXS5zdGF0cztcbjIwNzg6XHRcdFx0bmV3X25oZ2VzW2pdLm5oX3BhcmVudCA9IG5oZ2VzW2ldLm5oX3BhcmVudDtcbjIwNzk6XHRcdFx0bmV3X25oZ2VzW2pdLm5oID0gbmhnZXNbaV0ubmg7XG4yMDgwOlx0XHRcdG5ld19uaGdlc1tqXS53ZWlnaHQgPSBuaGdlc1tpXS53ZWlnaHQ7XG4yMDgxOlx0XHRcdGxpc3RfYWRkKFx1MDAyNm5ld19uaGdlc1tqXS5uaF9saXN0LCBcdTAwMjZuZXdfbmhnZXNbal0ubmgtXHUwMDNlZ3JwX2xpc3QpO1xuMjA4MjpcdFx0XHRqJiM0MzsmIzQzOztcbjIwODM6XHRcdH1cbjIwODQ6XHRcbjIwODU6XHRcdGlmIChuZXdnLVx1MDAzZWhhc2hfdGhyZXNob2xkKVxuMjA4NjpcdFx0XHRuaF9odGhyX2dyb3VwX3JlYmFsYW5jZShuZXdnKTtcbjIwODc6XHRcdGVsc2UgaWYgKG5ld2ctXHUwMDNlcmVzaWxpZW50KVxuMjA4ODpcdFx0XHRyZXBsYWNlX25leHRob3BfZ3JwX3JlcyhuaGcsIG5ld2cpO1xuMjA4OTpcdFxuMjA5MDpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKG5ocC1cdTAwM2VuaF9ncnAsIG5ld2cpO1xuMjA5MTpcdFxuMjA5MjpcdFx0bGlzdF9kZWwoXHUwMDI2bmhnZS1cdTAwM2VuaF9saXN0KTtcbjIwOTM6XHRcdG5leHRob3BfcHV0KG5oZ2UtXHUwMDNlbmgpO1xuMjA5NDpcdFx0bGlzdF9hZGQoXHUwMDI2bmhnZS1cdTAwM2VuaF9saXN0LCBkZWZlcnJlZF9mcmVlKTtcbjIwOTU6XHRcbjIwOTY6XHRcdC8qIFJlbW92YWwgb2YgYSBOSCBmcm9tIGEgcmVzaWxpZW50IGdyb3VwIGlzIG5vdGlmaWVkIHRocm91Z2hcbjIwOTc6XHRcdCAqIGJ1Y2tldCBub3RpZmljYXRpb25zLlxuMjA5ODpcdFx0ICovXG4yMDk5Olx0XHRpZiAobmV3Zy1cdTAwM2VoYXNoX3RocmVzaG9sZCkge1xuMjEwMDpcdFx0XHRlcnIgPSBjYWxsX25leHRob3Bfbm90aWZpZXJzKG5ldCwgTkVYVEhPUF9FVkVOVF9SRVBMQUNFLCBuaHAsXG4yMTAxOlx0XHRcdFx0XHRcdCAgICAgXHUwMDI2ZXh0YWNrKTtcbjIxMDI6XHRcdFx0aWYgKGVycilcbjIxMDM6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7JXNcXG5cJiMzNDssIGV4dGFjay5fbXNnKTtcbjIxMDQ6XHRcdH1cbjIxMDU6XHRcbjIxMDY6XHRcdGlmIChubGluZm8pXG4yMTA3Olx0XHRcdG5leHRob3Bfbm90aWZ5KFJUTV9ORVdORVhUSE9QLCBuaHAsIG5saW5mbyk7XG4yMTA4Olx0XG4yMTA5Olx0XHRyZXR1cm4gZmFsc2U7XG4yMTEwOlx0fVxuMjExMTpcdFxuMjExMjpcdHN0YXRpYyBib29sIF9fbXVzdF9jaGVja1xuMjExMzpcdHJlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxuMjExNDpcdFx0XHRcdCAgIHN0cnVjdCBubF9pbmZvICpubGluZm8pXG4yMTE1Olx0e1xuMjExNjpcdFx0c3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZSwgKnRtcDtcbjIxMTc6XHRcdExJU1RfSEVBRChkZWZlcnJlZF9mcmVlKTtcbjIxMTg6XHRcdGJvb2wgbmVlZF9mbHVzaCA9IGZhbHNlO1xuMjExOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGggRnV6emluZyBUaGlzIENvcmUgTmV0d29ya2luZyBGaXg/KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCBzZWVtcyBsaWtlIHRoZSBpc3N1ZSBpcyB3aXRoIGBleHRhY2tgLCBzcGVjaWZpY2FsbHkgaG93IGl0IG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQgaWYgYGNhbGxfbmV4dGhvcF9ub3RpZmllcnNgIGZhaWxzLiBUaGlzIGNvdWxkIGxlYWQgdG8gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgcG90ZW50aWFsbHkgdHJpZ2dlcmluZyBhIEtNU0FOIHdhcm5pbmcgb3IgYSBidWcuIFRoZSBmaXggaXMgc3RyYWlnaHRmb3J3YXJkOiBpbml0aWFsaXplIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9O2AuIFRoYXQmIzM5O3MgZ29vZDsgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXJlIGFsd2F5cyBuYXN0eS4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgY29kZSwgYW5kIGlzIGl0IHdvcnRoIGZ1enppbmc/IExldCYjMzk7cyBzZWUuLi4gaXQgZGVhbHMgd2l0aCBjb3JlIG5ldHdvcmtpbmcsIHNwZWNpZmljYWxseSBJUHY0LCBuZXh0aG9wcywgYW5kIG5ldGxpbmsuIFRoZSBwYXRoIHRvIHRoaXMgY29kZSBpcyB0aHJvdWdoIG5ldGxpbmsgbWVzc2FnZXMgbGlrZSBgUlRNX0RFTE5FWFRIT1BgIG9yIGBSVE1fTkVXTkVYVEhPUGAuIEZ1enppbmcgY291bGQgZXhlcmNpc2UgbmV4dGhvcCBncm91cCBkZWxldGlvbiwgbm90aWZpY2F0aW9uIGVycm9ycywgYW5kIHJlc2lsaWVudCBncm91cHMg4oCTIHRoYXQmIzM5O3MgYSBwcmV0dHkgaW50ZXJlc3Rpbmcgc3VyZmFjZSEKCkxldCBtZSBnbyB0aHJvdWdoIHRoZSBjcml0ZXJpYSBmb3IgJiMzNDtXb3J0aEZ1enppbmcmIzM0Oy4gSXQmIzM5O3MgYWxsIGFib3V0IGZpbmRpbmcgY3Jhc2hlcywgcmVncmVzc2lvbnMsIG9yIGxhdGVudCBidWdzIGludHJvZHVjZWQgYnkgYSBwYXRjaC4gSXQgc2F5cyAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsgaWYgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4gQW5kIGl0IGV4cGxpY2l0bHkgbWVudGlvbnMgY29yZSBzdWJzeXN0ZW1zLCBwYXJ0aWN1bGFybHkgY29yZSBuZXR3b3JraW5nLiBJdCBhbHNvIGxvb2tzIGxpa2UgYSByZWZhY3RvcmluZy4KCldhaXQsIGl0ICppcyogcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGluIGBuZXQvaXB2NC9uZXh0aG9wLmNgLCBzbyBpdCYjMzk7cyBkZWZpbml0ZWx5IGluIGEgY29yZSBzdWJzeXN0ZW0uIEJpbmdvISBTbywgKip5ZXMqKiwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIFdvcnRoRnV6emluZyA9IFRydWUuIEp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBhbmQgTWFrZWZpbGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlncyBuZWVkZWQgZm9yIGBuZXQvaXB2NC9uZXh0aG9wLmNgIHRvIGVuc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBpcyBjb21waWxlZCBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXh0aG9wLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxuLS1cbm5ldC9pcHY0L01ha2VmaWxlLTE2LVx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTc6XHQgICAgIG1ldHJpY3MubyBuZXRsaW5rLm8gbmV4dGhvcC5vIHVkcF90dW5uZWxfc3R1Yi5vXG5uZXQvaXB2NC9NYWtlZmlsZS0xOC1cbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtNTItXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6NTM6LyogZm9yX25leHRob3BzIGFuZCBjaGFuZ2VfbmV4dGhvcHMgb25seSB1c2VkIHdoZW4gbmV4dGhvcCBvYmplY3Rcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy01NC0gKiBpcyBub3Qgc2V0IGluIGEgZmliX2luZm8uIFRoZSBsb2dpYyB3aXRoaW4gY2FuIHJlZmVyZW5jZSBmaWJfbmguXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jPTE1NDk9c3RhdGljIGludCBjaGVja19zcmNfYWRkcihjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLFxuLS1cbm5ldC9pcHY0L25leHRob3AuYy0xNTUyLVx0aWYgKCFpcHY2X2FkZHJfYW55KHNhZGRyKSkge1xubmV0L2lwdjQvbmV4dGhvcC5jOjE1NTM6XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SVB2NiByb3V0ZXMgdXNpbmcgc291cmNlIGFkZHJlc3MgY2FuIG5vdCB1c2UgbmV4dGhvcCBvYmplY3RzXCYjMzQ7KTtcbm5ldC9pcHY0L25leHRob3AuYy0xNTU0LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmM9MTU1OT1pbnQgZmliNl9jaGVja19uZXh0aG9wKHN0cnVjdCBuZXh0aG9wICpuaCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jLTE1NjctXHQgKiBhY3Jvc3MgbXVsdGlwbGUgZmliIGVudHJpZXMuIElmIHRoZSBjb25maWcgd2FudHMgdG8gdXNlIHNvdXJjZVxubmV0L2lwdjQvbmV4dGhvcC5jOjE1Njg6XHQgKiByb3V0aW5nIGl0IGNhbiBub3QgdXNlIG5leHRob3Agb2JqZWN0cy4gbWx4c3cgYWxzbyBkb2VzIG5vdCBhbGxvd1xubmV0L2lwdjQvbmV4dGhvcC5jLTE1NjktXHQgKiBmaWI2X3NyYyBvbiByb3V0ZXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQyNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgSVB2NCBOZXR3b3JraW5nIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgbmV4dGhvcC5vYCBnZXRzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCB3aXRoIHRoZSBgb2JqLXlgIGRpcmVjdGl2ZSwgYnV0IG9ubHkgd2hlbiBlaXRoZXIgYENPTkZJR19JTkVUYCBvciBgQ09ORklHX05FVGAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZSwgc3RhbmRhcmQgSVB2NCBuZXR3b3JraW5nIGNvbXBvbmVudHMgbmVlZCB0byBiZSBpbmNsdWRlZC4gTm93LCBJIHdhbnQgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYG5leHRob3Aub2AgaXMgaW50ZWdyYXRlZCBhbmQgd2hhdCBvdGhlciBtb2R1bGVzIGl0IHJlbGllcyBvbiB3aXRoaW4gdGhlIElQdjQgc3RhY2suIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgbWFrZWZpbGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IFRDUC9JUCAoSU5FVCkgbGF5ZXIuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxuICAgNzpcdFx0ICAgICBpcF9pbnB1dC5vIGlwX2ZyYWdtZW50Lm8gaXBfZm9yd2FyZC5vIGlwX29wdGlvbnMubyBcXFxuICAgODpcdFx0ICAgICBpcF9vdXRwdXQubyBpcF9zb2NrZ2x1ZS5vIGluZXRfaGFzaHRhYmxlcy5vIFxcXG4gICA5Olx0XHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcbiAgMTA6XHRcdCAgICAgdGNwLm8gdGNwX2lucHV0Lm8gdGNwX291dHB1dC5vIHRjcF90aW1lci5vIHRjcF9pcHY0Lm8gXFxcbiAgMTE6XHRcdCAgICAgdGNwX21pbmlzb2Nrcy5vIHRjcF9jb25nLm8gdGNwX21ldHJpY3MubyB0Y3BfZmFzdG9wZW4ubyBcXFxuICAxMjpcdFx0ICAgICB0Y3BfcmVjb3ZlcnkubyB0Y3BfdWxwLm8gXFxcbiAgMTM6XHRcdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxuICAxNDpcdFx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxuICAxNTpcdFx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxuICAxNjpcdFx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxuICAxNzpcdFx0ICAgICBtZXRyaWNzLm8gbmV0bGluay5vIG5leHRob3AubyB1ZHBfdHVubmVsX3N0dWIub1xuICAxODpcdFxuICAxOTpcdG9iai0kKENPTkZJR19ORVRfSVBfVFVOTkVMKSAmIzQzOz0gaXBfdHVubmVsLm9cbiAgMjA6XHRvYmotJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsX25ldF9pcHY0Lm9cbiAgMjE6XHRvYmotJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHByb2Mub1xuICAyMjpcdG9iai0kKENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMpICYjNDM7PSBmaWJfcnVsZXMub1xuICAyMzpcdG9iai0kKENPTkZJR19JUF9NUk9VVEUpICYjNDM7PSBpcG1yLm9cbiAgMjQ6XHRvYmotJChDT05GSUdfSVBfTVJPVVRFX0NPTU1PTikgJiM0Mzs9IGlwbXJfYmFzZS5vXG4gIDI1Olx0b2JqLSQoQ09ORklHX05FVF9JUElQKSAmIzQzOz0gaXBpcC5vXG4gIDI2Olx0Z3JlLXkgOj0gZ3JlX2RlbXV4Lm9cbiAgMjc6XHRmb3UteSA6PSBmb3VfY29yZS5vIGZvdV9ubC5vIGZvdV9icGYub1xuICAyODpcdG9iai0kKENPTkZJR19ORVRfRk9VKSAmIzQzOz0gZm91Lm9cbiAgMjk6XHRvYmotJChDT05GSUdfTkVUX0lQR1JFX0RFTVVYKSAmIzQzOz0gZ3JlLm9cbiAgMzA6XHRvYmotJChDT05GSUdfTkVUX0lQR1JFKSAmIzQzOz0gaXBfZ3JlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI5OQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIEluZXQgU3VwcG9ydCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYENPTkZJR19JTkVUYCBpcyBiZWluZyBoYW5kbGVkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gZmlsZXMsIHNwZWNpZmljYWxseSBgbmV0L01ha2VmaWxlYCBhbmQgYEtjb25maWdgLiBUaGVzZSBhcmUgdHlwaWNhbGx5IHRoZSBnby10byBsb2NhdGlvbnMgZm9yIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbS4gYE1ha2VmaWxlYCB3aWxsIHNob3cgbWUgaG93IGBDT05GSUdfSU5FVGAgYWZmZWN0cyB0aGUgY29tcGlsYXRpb24gb2YgdmFyaW91cyBuZXR3b3JraW5nIGNvbXBvbmVudHMsIHdoaWxlIGBLY29uZmlnYCBzaG91bGQgcmV2ZWFsIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgdGhlIGxvZ2ljIGJlaGluZCBob3cgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhvc2UgYW5kIHNlZSB3aGVyZSB0aGV5IGxlYWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSB0byBob3cgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqLS4qaXB2NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX05FVEZJTFRFUilcdFx0JiM0Mzs9IG5ldGZpbHRlci9cbm5ldC9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfSU5FVClcdFx0JiM0Mzs9IGlwdjQvXG5uZXQvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1RMUylcdFx0JiM0Mzs9IHRscy9cbi0tXG5uZXQvaXB2NC9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfTkVUX0lQX1RVTk5FTCkgJiM0Mzs9IGlwX3R1bm5lbC5vXG5uZXQvaXB2NC9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsX25ldF9pcHY0Lm9cbm5ldC9pcHY0L01ha2VmaWxlLTIxLW9iai0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gcHJvYy5vXG4tLVxubmV0L2lwdjQvTWFrZWZpbGU9NjQ9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdWRwX2JwZi5vXG5uZXQvaXB2NC9NYWtlZmlsZTo2NTpvYmotJChDT05GSUdfTkVUTEFCRUwpICYjNDM7PSBjaXBzb19pcHY0Lm9cbm5ldC9pcHY0L01ha2VmaWxlLTY2LVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS02LSMgZGVmcmFnXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfTkZfREVGUkFHX0lQVjQpICYjNDM7PSBuZl9kZWZyYWdfaXB2NC5vXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtOC1cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19ORl9TT0NLRVRfSVBWNCkgJiM0Mzs9IG5mX3NvY2tldF9pcHY0Lm9cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfTkZfVFBST1hZX0lQVjQpICYjNDM7PSBuZl90cHJveHlfaXB2NC5vXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTEtXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTItIyByZWplY3Rcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfTkZfUkVKRUNUX0lQVjQpICYjNDM7PSBuZl9yZWplY3RfaXB2NC5vXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQtXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlPTIxPW9iai0kKENPTkZJR19ORl9OQVRfU05NUF9CQVNJQykgJiM0Mzs9IG5mX25hdF9zbm1wX2Jhc2ljLm9cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS0yMi1cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZToyMzpvYmotJChDT05GSUdfTkZUX1JFSkVDVF9JUFY0KSAmIzQzOz0gbmZ0X3JlamVjdF9pcHY0Lm9cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfTkZUX0ZJQl9JUFY0KSAmIzQzOz0gbmZ0X2ZpYl9pcHY0Lm9cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfTkZUX0RVUF9JUFY0KSAmIzQzOz0gbmZ0X2R1cF9pcHY0Lm9cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS0yNi1cbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU9NTE9b2JqLSQoQ09ORklHX0lQX05GX0FSUEZJTFRFUikgJiM0Mzs9IGFycHRhYmxlX2ZpbHRlci5vXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTItXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTM6b2JqLSQoQ09ORklHX05GX0RVUF9JUFY0KSAmIzQzOz0gbmZfZHVwX2lwdjQub1xubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTU0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjEzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgRm9yd2FyZGluZyBDb2RlIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyB0aGUgYENPTkZJR19JTkVUYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3Mgc2V0LiBOb3csIG15IGZvY3VzIGlzIG9uIHRoZSBgbmV0L2lwdjQvbmV4dGhvcC5jYCBmaWxlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYHJlbW92ZV9uaF9ncnBfZW50cnlgLiBBcmUgdGhlcmUgYW55IG90aGVyIHJlbGV2YW50IHN5bWJvbHMgb3IgZnVuY3Rpb25zIGluIHRoYXQgZmlsZSB0aGF0IGludGVyYWN0IHdpdGggaXQsIGVpdGhlciBieSBjYWxsaW5nIGl0IG9yIGJlaW5nIGVudHJ5IHBvaW50cyB0byByZWxhdGVkIGZ1bmN0aW9uYWxpdHk/IEkgc2hvdWxkIHJldmlldyB0aGlzIGZpbGUgY2xvc2VseS4gTmV4dCwgSeKAmWxsIG5lZWQgdG8gdGhvcm91Z2hseSByZXZpZXcgdGhlIGNhbGwgc2l0ZXMgb2YgYHJlbW92ZV9uaF9ncnBfZW50cnlgIGl0c2VsZiB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBpbXBhY3QuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgdXNlZCBhbmQgZm9yIHdoYXQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlbW92ZV9uaF9ncnBfZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXh0aG9wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV4dGhvcC5jPTIwMzM9c3RhdGljIGJvb2wgX19tdXN0X2NoZWNrXG5uZXQvaXB2NC9uZXh0aG9wLmM6MjAzNDpyZW1vdmVfbmhfZ3JwX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZSxcbm5ldC9pcHY0L25leHRob3AuYy0yMDM1LVx0XHQgICAgc3RydWN0IG5sX2luZm8gKm5saW5mbywgc3RydWN0IGxpc3RfaGVhZCAqZGVmZXJyZWRfZnJlZSlcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmM9MjExMz1yZW1vdmVfbmV4dGhvcF9mcm9tX2dyb3VwcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXh0aG9wICpuaCxcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjEyNi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuaGdlLCB0bXAsIFx1MDAyNm5oLVx1MDAzZWdycF9saXN0LCBuaF9saXN0KVxubmV0L2lwdjQvbmV4dGhvcC5jOjIxMjc6XHRcdG5lZWRfZmx1c2ggfD0gcmVtb3ZlX25oX2dycF9lbnRyeShuZXQsIG5oZ2UsIG5saW5mbyxcbm5ldC9pcHY0L25leHRob3AuYy0yMTI4LVx0XHRcdFx0XHRcdCAgXHUwMDI2ZGVmZXJyZWRfZnJlZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MjcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgcmVtb3ZlX25leHRob3BfZnJvbV9ncm91cHNgIENhbGxlcnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY2FsbCBncmFwaCBmb3IgYHJlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzYC4gTXkgaW5pdGlhbCBhcHByb2FjaCB3b3VsZCBiZSB0byB0cmFjZSB0aGUgZnVuY3Rpb24mIzM5O3MgdXNhZ2UsIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIGRhdGEgaW50ZWdyaXR5IGFuZCBuZXR3b3JrIGJlaGF2aW9yLiBJJiMzOTttIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIGhvdyB0aGlzIHJlbW92YWwgaW1wYWN0cyB0aGUgcm91dGluZyB0YWJsZXMgYW5kLCBjcml0aWNhbGx5LCBhbnkgZGVwZW5kZW5jaWVzIG9uIHRob3NlIGdyb3Vwcy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgY2xlYW51cCwgb3IgaXMgdGhpcyBhIGNyaXRpY2FsIHBhdGggb3BlcmF0aW9uIHdpdGggcG90ZW50aWFsIGNhc2NhZGluZyBlZmZlY3RzIG9uIHRyYWZmaWMgZm9yd2FyZGluZz8KCkkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBtb2R1bGVzIGFuZCBzY2VuYXJpb3MgY2FsbGluZyB0aGlzLiBBcmUgd2UgZGVhbGluZyB3aXRoIGR5bmFtaWMgcm91dGluZyBwcm90b2NvbCBpbnRlcmFjdGlvbnMgKEJHUCwgT1NQRiwgZXRjLiksIG9yIGlzIHRoaXMgdHJpZ2dlcmVkIGJ5IHNvbWUgc29ydCBvZiBtYW5hZ2VtZW50IGludGVyZmFjZSBvciBjb25maWd1cmF0aW9uIGNoYW5nZT8gSXMgaXQgYSBzdGFuZGFsb25lIGZ1bmN0aW9uIGluIGEgY2VudHJhbCBkYXRhIHBsYW5lLCBvciBpcyBpdCBpbnZva2VkIGJ5IG11bHRpcGxlLCBwb3RlbnRpYWxseSBkaXN0cmlidXRlZCwgY29udHJvbCBwbGFuZSBlbGVtZW50cz8gS25vd2luZyB0aGUgY29udGV4dCB3aWxsIHBvaW50IHRvd2FyZHMgY29tbW9uIGlzc3Vlcy4KClNwZWNpZmljYWxseSwgSSB3YW50IHRvIGxvb2sgZm9yOgoKKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBoYXBwZW5zIGlmIHRoZSBgcmVtb3ZlX25leHRob3BfZnJvbV9ncm91cHNgIGZ1bmN0aW9uIGZhaWxzPyBBcmUgZmFpbHVyZXMgZ3JhY2VmdWxseSBoYW5kbGVkLCBvciBhcmUgd2Ugcmlza2luZyBuZXR3b3JrIGJsYWNraG9sZXM/CiogICAqKkNvbmN1cnJlbmN5OioqIEFyZSB0aGVyZSBhbnkgY29uY3VycmVuY3kgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBjYWxsPyBTcGVjaWZpY2FsbHksIGNhbiBtdWx0aXBsZSBwcm9jZXNzZXMgYmUgcmVtb3ZpbmcgdGhlIHNhbWUgbmV4dCBob3Agc2ltdWx0YW5lb3VzbHksIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gcmFjZSBjb25kaXRpb25zPyBBcmUgdGhlcmUgbG9ja3Mgb3Igc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgaW4gcGxhY2U/CiogICAqKlRyYW5zYWN0aW9uczoqKiBJcyB0aGUgbmV4dCBob3AgcmVtb3ZhbCBwYXJ0IG9mIGEgbGFyZ2VyIGF0b21pYyB0cmFuc2FjdGlvbj8gSWYgc28sIHdoYXQgaXMgdGhlIHNjb3BlIG9mIHRoYXQgdHJhbnNhY3Rpb24sIGFuZCBob3cgZG9lcyBpdCBlbnN1cmUgZGF0YSBjb25zaXN0ZW5jeSBhY3Jvc3MgdGhlIG5ldHdvcms/CiogICAqKkF1ZGl0aW5nOioqIElzIHRoZXJlIGFueSBsb2dnaW5nIGFyb3VuZCB0aGUgY2FsbCwgdG8gdW5kZXJzdGFuZCBfd2hlbl8gYW5kIF93aHlfIGEgbmV4dCBob3AgaXMgYmVpbmcgcmVtb3ZlZD8gSXMgdGhlcmUgZW5vdWdoIGNvbnRleHQgcmVjb3JkZWQgdG8gZGVidWcgaXNzdWVzIGluIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudD8KKiAgICoqUGVyZm9ybWFuY2U6KiogSSYjMzk7bSBhbHNvIHRoaW5raW5nIGFib3V0IHRoZSBzY2FsZSBvZiB0aGUgb3BlcmF0aW9uLiBEb2VzIHRoaXMgZnVuY3Rpb24gaGF2ZSB0aGUgcG90ZW50aWFsIHRvIGJlIGEgYm90dGxlbmVjaz8gSWYgc28sIHdoYXQgYXJlIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHJlbW92YWwgaXRzZWxmIChlLmcuLCBoYXNoIGxvb2t1cHMsIGxpc3QgbWFuaXB1bGF0aW9ucyk/CgpVbHRpbWF0ZWx5LCBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoYXQgdGhpcyBpcyBhIGZhaXJseSBsb3ctbGV2ZWwgZnVuY3Rpb24gYW5kIHRyYWNpbmcgdGhvc2UgY2FsbGVycyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIG5ldHdvcmsmIzM5O3MgZGF0YSBwbGFuZSBzdGF0ZSBpcyBtYWludGFpbmVkLCBhcyB3ZWxsIGFzIGdpdmluZyBtZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiBwb3NzaWJsZSBmYWlsdXJlIG1vZGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZW1vdmVfbmV4dGhvcF9mcm9tX2dyb3VwcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L25leHRob3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXh0aG9wLmM9MjExMj1zdGF0aWMgYm9vbCBfX211c3RfY2hlY2tcbm5ldC9pcHY0L25leHRob3AuYzoyMTEzOnJlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxubmV0L2lwdjQvbmV4dGhvcC5jLTIxMTQtXHRcdFx0ICAgc3RydWN0IG5sX2luZm8gKm5saW5mbylcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmM9MjE5Nj1zdGF0aWMgYm9vbCBfX211c3RfY2hlY2sgX19yZW1vdmVfbmV4dGhvcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXh0aG9wICpuaCxcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjIwOS1cbm5ldC9pcHY0L25leHRob3AuYzoyMjEwOlx0XHRuZWVkX2ZsdXNoIHw9IHJlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzKG5ldCwgbmgsIG5saW5mbyk7XG5uZXQvaXB2NC9uZXh0aG9wLmMtMjIxMS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ5NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBgX19yZW1vdmVfbmV4dGhvcGAgQ2FsbGVyIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgYXNraW5nIG1lIHRvIGxvb2sgYXQgYWxsIHRoZSBwbGFjZXMgd2l0aGluIHRoaXMgY29kZSB0aGF0IGNhbGwgdGhlIGBfX3JlbW92ZV9uZXh0aG9wYCBmdW5jdGlvbi4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgb3IgcmVmYWN0b3JpbmcgdGFzay4gTXkgaW5pdGlhbCBhcHByb2FjaCB3b3VsZCBiZSB0byBsZXZlcmFnZSBteSBrbm93bGVkZ2Ugb2YgdGhlIGNvZGViYXNlIGFuZCBhbnkgdG9vbHMgYXZhaWxhYmxlLiBJJiMzOTtkIHN0YXJ0IHdpdGggYSBzaW1wbGUgZ3JlcCBvciBgZmluZGAgY29tbWFuZCBpZiBJJiMzOTttIHdvcmtpbmcgaW4gYSBjb21tYW5kLWxpbmUgZW52aXJvbm1lbnQsIG9yIHVzZSB0aGUgJiMzNDtmaW5kIGFsbCByZWZlcmVuY2VzJiMzNDsgZmVhdHVyZSBpbiBteSBJREUgaWYgSSYjMzk7bSBpbiBvbmUuIEkmIzM5O2QgYmUgbG9va2luZyBmb3IgYWxsIG9jY3VycmVuY2VzIG9mIHRoYXQgZnVuY3Rpb24gbmFtZSwgaW5jbHVkaW5nIGFueSBwb3RlbnRpYWwgdmFyaWF0aW9ucyB0aGF0IG1pZ2h0IGluZGljYXRlIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIOKAkyBtYXliZSBhIG5hbWVzcGFjZSBwcmVmaXggb3IgYSBtZXRob2QgY2FsbCBvbiBhbiBvYmplY3QuCgpPbmNlIEkgaGF2ZSBhIGxpc3Qgb2YgY2FsbGVycywgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGVhY2ggY2FsbC4gSeKAmWQgd2FudCB0byBxdWlja2x5IHNjYW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIHB1cnBvc2Ugb2YgdGhlIGNhbGw6IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZD8gV2hhdCYjMzk7cyB0aGUgb3ZlcmFsbCBsb2dpYyBmbG93PyBXaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBzdGF0ZSBvZiB0aGUgc3lzdGVtIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGBfX3JlbW92ZV9uZXh0aG9wYCBmdW5jdGlvbiBleGVjdXRlcz8gSeKAmWQgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uZGl0aW9uYWwgc3RhdGVtZW50cyBvciBsb29wcyB0aGF0IG1pZ2h0IGltcGFjdCBob3cgb2Z0ZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIHRoZSBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIGl0IGdldHMgaW52b2tlZC4KCklmIEkmIzM5O20gd29ya2luZyBvbiBhIHByb2plY3Qgd2l0aCBnb29kIGRvY3VtZW50YXRpb24gb3IgY29tbWVudHMsIHRoYXQgd2lsbCBiZSBhbiBpbnZhbHVhYmxlIHJlc291cmNlLiBJZiBub3QsIEnigJlsbCBoYXZlIHRvIHJlbHkgb24gbXkgYWJpbGl0eSB0byBxdWlja2x5IGdyb2sgdGhlIGNvZGUuIEZvciBlYWNoIGNhbGxlciwgSSB3b3VsZCBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mICpub3QqIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gSXMgaXQgY3JpdGljYWwgdG8gZGF0YSBpbnRlZ3JpdHk/IElzIGl0IGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBEb2VzIGl0IGhhdmUgYW55IGltcGxpY2F0aW9ucyBmb3Igb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbT8gSW4gdGhlIGVuZCwgdGhlIGFpbSBpcyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2Ygd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IG5leHQgc3RlcHMgd2lsbCBsaWtlbHkgYmUgZGV0ZXJtaW5lZCBieSB3aGF0IEkgZmluZCBpbiB0aGVzZSBpbml0aWFsIGludmVzdGlnYXRpb25zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3JlbW92ZV9uZXh0aG9wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV4dGhvcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L25leHRob3AuYz0yMTQyPXN0YXRpYyB2b2lkIHJlbW92ZV9uZXh0aG9wX2dyb3VwKHN0cnVjdCBuZXh0aG9wICpuaCwgc3RydWN0IG5sX2luZm8gKm5saW5mbylcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjE2My0vKiBub3QgY2FsbGVkIGZvciBuZXh0aG9wIHJlcGxhY2UgKi9cbm5ldC9pcHY0L25leHRob3AuYzoyMTY0OnN0YXRpYyBib29sIF9fbXVzdF9jaGVjayBfX3JlbW92ZV9uZXh0aG9wX2ZpYihzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjE2NS1cdFx0XHRcdFx0ICAgICAgc3RydWN0IG5leHRob3AgKm5oKVxuLS1cbm5ldC9pcHY0L25leHRob3AuYy0yMTk1LVxubmV0L2lwdjQvbmV4dGhvcC5jOjIxOTY6c3RhdGljIGJvb2wgX19tdXN0X2NoZWNrIF9fcmVtb3ZlX25leHRob3Aoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqbmgsXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjE5Ny1cdFx0XHRcdFx0ICBzdHJ1Y3QgbmxfaW5mbyAqbmxpbmZvKVxubmV0L2lwdjQvbmV4dGhvcC5jLTIxOTgte1xubmV0L2lwdjQvbmV4dGhvcC5jOjIxOTk6XHRib29sIG5lZWRfZmx1c2ggPSBfX3JlbW92ZV9uZXh0aG9wX2ZpYihuZXQsIG5oKTtcbm5ldC9pcHY0L25leHRob3AuYy0yMjAwLVxuLS1cbm5ldC9pcHY0L25leHRob3AuYz0yMjE2PXN0YXRpYyBib29sIF9fbXVzdF9jaGVjayByZW1vdmVfbmV4dGhvcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXh0aG9wICpuaCxcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjIyOC1cbm5ldC9pcHY0L25leHRob3AuYzoyMjI5Olx0bmVlZF9mbHVzaCA9IF9fcmVtb3ZlX25leHRob3AobmV0LCBuaCwgbmxpbmZvKTtcbm5ldC9pcHY0L25leHRob3AuYy0yMjMwLVx0bmhfYmFzZV9zZXFfaW5jKG5ldCk7XG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jPTI1NzY9c3RhdGljIGludCByZXBsYWNlX25leHRob3Aoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqb2xkLFxuLS1cbm5ldC9pcHY0L25leHRob3AuYy0yNjI3LVxubmV0L2lwdjQvbmV4dGhvcC5jOjI2Mjg6XHRcdFdBUk5fT05fT05DRShfX3JlbW92ZV9uZXh0aG9wKG5ldCwgbmV3LCBOVUxMKSk7XG5uZXQvaXB2NC9uZXh0aG9wLmMtMjYyOS1cdFx0bmV4dGhvcF9wdXQobmV3KTtcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmM9MzAxMD1zdGF0aWMgc3RydWN0IG5leHRob3AgKm5leHRob3BfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5oX2NvbmZpZyAqY2ZnLFxuLS1cbm5ldC9pcHY0L25leHRob3AuYy0zMDM4LVx0aWYgKGVycikge1xubmV0L2lwdjQvbmV4dGhvcC5jOjMwMzk6XHRcdFdBUk5fT05fT05DRShfX3JlbW92ZV9uZXh0aG9wKG5ldCwgbmgsIE5VTEwpKTtcbm5ldC9pcHY0L25leHRob3AuYy0zMDQwLVx0XHRuZXh0aG9wX3B1dChuaCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjQzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBvcGVyYXRpb25zIGFuZCB3aGVyZSBJJiMzOTtkIHN0YXJ0IGxvb2tpbmc6CgoqKkFuYWx5emluZyBOZXh0aG9wIFJlbW92YWwgUm91dGluZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBhbGwgY2xlYXJseSByZWxhdGVkIHRvIHJlbW92aW5nIG5leHRob3BzIHdpdGhpbiB0aGUgSVB2NCByb3V0aW5nIGNvbnRleHQuIFRoZSBuYW1lcyB0ZWxsIHRoZSBzdG9yeTogYHJlbW92ZV9uaF9ncnBfZW50cnlgIHN1Z2dlc3RzIHJlbW92aW5nIGFuIGVudHJ5IGZyb20gYSBuZXh0aG9wIGdyb3VwLCBgcmVtb3ZlX25leHRob3BfZnJvbV9ncm91cHNgIHNvdW5kcyBsaWtlIGl0IGhhbmRsZXMgcmVtb3ZpbmcgYSBuZXh0aG9wIGZyb20gKm11bHRpcGxlKiBncm91cHMsIGByZW1vdmVfbmV4dGhvcGAgaXMgcHJvYmFibHkgdGhlIGNvcmUgbmV4dGhvcCByZW1vdmFsIHJvdXRpbmUgaXRzZWxmLCBhbmQgdGhlbiB3ZSBoYXZlIHRoZSByb3V0aW5nIHRhYmxlIG1hbmFnZW1lbnQgKFJUTSkgZnVuY3Rpb25zOiBgcnRtX2RlbF9uZXh0aG9wYCBmb3IgZGVsZXRpbmcgYSBuZXh0aG9wIGFuZCBgcnRtX25ld19uZXh0aG9wYCBmb3IgaXRzIGNyZWF0aW9uLgoKR2l2ZW4gdGhlIHRhc2sgYXQgaGFuZCwgSSYjMzk7ZCBpbW1lZGlhdGVseSBqdW1wIHRvIGV4YW1pbmluZyBgcnRtX2RlbF9uZXh0aG9wYC4gSXQmIzM5O3MgdGhlIFJUTSBmdW5jdGlvbiBmb3IgKmRlbGV0aW9uKiwgd2hpY2ggbWFrZXMgaXQgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGEgbmV4dGhvcCBpcyBjb21wbGV0ZWx5IHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCByZXNvdXJjZXMgYXJlIGZyZWVkLCBob3cgdGhlIHJlZmVyZW5jZSBjb3VudHMgYXJlIG1hbmFnZWQsIGFuZCBob3cgdGhlIHJlbW92YWwgY2FzY2FkZXMgdGhyb3VnaCBhbnkgYXNzb2NpYXRlZCBncm91cHMgb3IgdGFibGVzLiBBbmQgdGhhdCBtZWFucyBhIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgbmV0L2lwdjQvbmV4dGhvcC5jYCB0byBzZWUgaG93IGl0IHdvcmtzIGluIHRoZSBJUHY0IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bV8uKm5leHRob3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXh0aG9wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV4dGhvcC5jPTMyODc9c3RhdGljIGludCBydG1fdG9fbmhfY29uZmlnX3J0bmwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jLTMzMTgtLyogcnRubCAqL1xubmV0L2lwdjQvbmV4dGhvcC5jOjMzMTk6c3RhdGljIGludCBydG1fbmV3X25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzMyMC1cdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jPTMzNjA9c3RhdGljIGludCBuaF92YWxpZF9nZXRfZGVsX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzM4OC0vKiBydG5sICovXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzM4OTpzdGF0aWMgaW50IHJ0bV9kZWxfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC9pcHY0L25leHRob3AuYy0zMzkwLVx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzQyNi0vKiBydG5sICovXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzQyNzpzdGF0aWMgaW50IHJ0bV9nZXRfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC9pcHY0L25leHRob3AuYy0zNDI4LVx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmM9MzU3OD1ydG1fZHVtcF9uaF9jdHgoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9pcHY0L25leHRob3AuYy0zNTg1LVxubmV0L2lwdjQvbmV4dGhvcC5jOjM1ODY6c3RhdGljIGludCBydG1fZHVtcF93YWxrX25leHRob3BzKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzU4Ny1cdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuLS1cbm5ldC9pcHY0L25leHRob3AuYy0zNjQ1LVxubmV0L2lwdjQvbmV4dGhvcC5jOjM2NDY6c3RhdGljIGludCBydG1fZHVtcF9uZXh0aG9wX2NiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbm5ldC9pcHY0L25leHRob3AuYy0zNjQ3LVx0XHRcdCAgICAgICBzdHJ1Y3QgbmV4dGhvcCAqbmgsIHZvaWQgKmRhdGEpXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jLTM2NjAtLyogcnRubCAqL1xubmV0L2lwdjQvbmV4dGhvcC5jOjM2NjE6c3RhdGljIGludCBydG1fZHVtcF9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbm5ldC9pcHY0L25leHRob3AuYy0zNjYyLXtcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzY3Mi1cbm5ldC9pcHY0L25leHRob3AuYzozNjczOlx0ZXJyID0gcnRtX2R1bXBfd2Fsa19uZXh0aG9wcyhza2IsIGNiLCByb290LCBjdHgsXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzY3NDpcdFx0XHRcdCAgICAgXHUwMDI2cnRtX2R1bXBfbmV4dGhvcF9jYiwgXHUwMDI2ZmlsdGVyKTtcbm5ldC9pcHY0L25leHRob3AuYy0zNjc1LVxuLS1cbm5ldC9pcHY0L25leHRob3AuYz0zNzY5PXJ0bV9kdW1wX3Jlc19idWNrZXRfY3R4KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzc3Ni1cbm5ldC9pcHY0L25leHRob3AuYzozNzc3OnN0cnVjdCBydG1fZHVtcF9uZXh0aG9wX2J1Y2tldF9kYXRhIHtcbm5ldC9pcHY0L25leHRob3AuYy0zNzc4LVx0c3RydWN0IHJ0bV9kdW1wX3Jlc19idWNrZXRfY3R4ICpjdHg7XG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jLTM3ODEtXG5uZXQvaXB2NC9uZXh0aG9wLmM6Mzc4MjpzdGF0aWMgaW50IHJ0bV9kdW1wX25leHRob3BfYnVja2V0X25oKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzc4My1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbm5ldC9pcHY0L25leHRob3AuYy0zNzg0LVx0XHRcdFx0ICAgICAgc3RydWN0IG5leHRob3AgKm5oLFxubmV0L2lwdjQvbmV4dGhvcC5jOjM3ODU6XHRcdFx0XHQgICAgICBzdHJ1Y3QgcnRtX2R1bXBfbmV4dGhvcF9idWNrZXRfZGF0YSAqZGQpXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzc4Ni17XG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jLTM4MjQtXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzgyNTpzdGF0aWMgaW50IHJ0bV9kdW1wX25leHRob3BfYnVja2V0X2NiKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzgyNi1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzgyOC17XG5uZXQvaXB2NC9uZXh0aG9wLmM6MzgyOTpcdHN0cnVjdCBydG1fZHVtcF9uZXh0aG9wX2J1Y2tldF9kYXRhICpkZCA9IGRhdGE7XG5uZXQvaXB2NC9uZXh0aG9wLmMtMzgzMC1cdHN0cnVjdCBuaF9ncm91cCAqbmhnO1xuLS1cbm5ldC9pcHY0L25leHRob3AuYy0zODM4LVxubmV0L2lwdjQvbmV4dGhvcC5jOjM4Mzk6XHRyZXR1cm4gcnRtX2R1bXBfbmV4dGhvcF9idWNrZXRfbmgoc2tiLCBjYiwgbmgsIGRkKTtcbm5ldC9pcHY0L25leHRob3AuYy0zODQwLX1cbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzg0Mi0vKiBydG5sICovXG5uZXQvaXB2NC9uZXh0aG9wLmM6Mzg0MzpzdGF0aWMgaW50IHJ0bV9kdW1wX25leHRob3BfYnVja2V0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzg0NC1cdFx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzg0Ni1cdHN0cnVjdCBydG1fZHVtcF9yZXNfYnVja2V0X2N0eCAqY3R4ID0gcnRtX2R1bXBfcmVzX2J1Y2tldF9jdHgoY2IpO1xubmV0L2lwdjQvbmV4dGhvcC5jOjM4NDc6XHRzdHJ1Y3QgcnRtX2R1bXBfbmV4dGhvcF9idWNrZXRfZGF0YSBkZCA9IHsgLmN0eCA9IGN0eCB9O1xubmV0L2lwdjQvbmV4dGhvcC5jLTM4NDgtXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuLS1cbm5ldC9pcHY0L25leHRob3AuYy0zODYwLVx0XHRcdHJldHVybiBQVFJfRVJSKG5oKTtcbm5ldC9pcHY0L25leHRob3AuYzozODYxOlx0XHRlcnIgPSBydG1fZHVtcF9uZXh0aG9wX2J1Y2tldF9uaChza2IsIGNiLCBuaCwgXHUwMDI2ZGQpO1xubmV0L2lwdjQvbmV4dGhvcC5jLTM4NjItXHR9IGVsc2Uge1xuLS1cbm5ldC9pcHY0L25leHRob3AuYy0zODY0LVxubmV0L2lwdjQvbmV4dGhvcC5jOjM4NjU6XHRcdGVyciA9IHJ0bV9kdW1wX3dhbGtfbmV4dGhvcHMoc2tiLCBjYiwgcm9vdCwgXHUwMDI2Y3R4LVx1MDAzZW5oLFxubmV0L2lwdjQvbmV4dGhvcC5jOjM4NjY6XHRcdFx0XHRcdCAgICAgXHUwMDI2cnRtX2R1bXBfbmV4dGhvcF9idWNrZXRfY2IsIFx1MDAyNmRkKTtcbm5ldC9pcHY0L25leHRob3AuYy0zODY3LVx0fVxuLS1cbm5ldC9pcHY0L25leHRob3AuYz0zODk1PXN0YXRpYyBpbnQgbmhfdmFsaWRfZ2V0X2J1Y2tldF9yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jLTM5MjUtLyogcnRubCAqL1xubmV0L2lwdjQvbmV4dGhvcC5jOjM5MjY6c3RhdGljIGludCBydG1fZ2V0X25leHRob3BfYnVja2V0KHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L2lwdjQvbmV4dGhvcC5jLTM5MjctXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmM9NDIwMT1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgbmV4dGhvcF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xubmV0L2lwdjQvbmV4dGhvcC5jOjQyMDI6XHR7Lm1zZ3R5cGUgPSBSVE1fTkVXTkVYVEhPUCwgLmRvaXQgPSBydG1fbmV3X25leHRob3AsXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDIwMy1cdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9QRVJORVR9LFxubmV0L2lwdjQvbmV4dGhvcC5jOjQyMDQ6XHR7Lm1zZ3R5cGUgPSBSVE1fREVMTkVYVEhPUCwgLmRvaXQgPSBydG1fZGVsX25leHRob3AsXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDIwNS1cdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9QRVJORVR9LFxubmV0L2lwdjQvbmV4dGhvcC5jOjQyMDY6XHR7Lm1zZ3R5cGUgPSBSVE1fR0VUTkVYVEhPUCwgLmRvaXQgPSBydG1fZ2V0X25leHRob3AsXG5uZXQvaXB2NC9uZXh0aG9wLmM6NDIwNzpcdCAuZHVtcGl0ID0gcnRtX2R1bXBfbmV4dGhvcH0sXG5uZXQvaXB2NC9uZXh0aG9wLmM6NDIwODpcdHsubXNndHlwZSA9IFJUTV9HRVRORVhUSE9QQlVDS0VULCAuZG9pdCA9IHJ0bV9nZXRfbmV4dGhvcF9idWNrZXQsXG5uZXQvaXB2NC9uZXh0aG9wLmM6NDIwOTpcdCAuZHVtcGl0ID0gcnRtX2R1bXBfbmV4dGhvcF9idWNrZXR9LFxubmV0L2lwdjQvbmV4dGhvcC5jLTQyMTAtXHR7LnByb3RvY29sID0gUEZfSU5FVCwgLm1zZ3R5cGUgPSBSVE1fTkVXTkVYVEhPUCxcbm5ldC9pcHY0L25leHRob3AuYzo0MjExOlx0IC5kb2l0ID0gcnRtX25ld19uZXh0aG9wLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9QRVJORVR9LFxubmV0L2lwdjQvbmV4dGhvcC5jLTQyMTItXHR7LnByb3RvY29sID0gUEZfSU5FVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTkVYVEhPUCxcbm5ldC9pcHY0L25leHRob3AuYzo0MjEzOlx0IC5kdW1waXQgPSBydG1fZHVtcF9uZXh0aG9wfSxcbm5ldC9pcHY0L25leHRob3AuYy00MjE0LVx0ey5wcm90b2NvbCA9IFBGX0lORVQ2LCAubXNndHlwZSA9IFJUTV9ORVdORVhUSE9QLFxubmV0L2lwdjQvbmV4dGhvcC5jOjQyMTU6XHQgLmRvaXQgPSBydG1fbmV3X25leHRob3AsIC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1BFUk5FVH0sXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDIxNi1cdHsucHJvdG9jb2wgPSBQRl9JTkVUNiwgLm1zZ3R5cGUgPSBSVE1fR0VUTkVYVEhPUCxcbm5ldC9pcHY0L25leHRob3AuYzo0MjE3Olx0IC5kdW1waXQgPSBydG1fZHVtcF9uZXh0aG9wfSxcbm5ldC9pcHY0L25leHRob3AuYy00MjE4LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjA2CgkJCQkJCQlvdXRwdXQ6IDE1MgoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBQYXRjaCBWZXJpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZm9jdXMgc3ltYm9scyBmb3IgdGVzdGluZyBhcmUgYHJlbW92ZV9uaF9ncnBfZW50cnlgLCBgcmVtb3ZlX25leHRob3BfZnJvbV9ncm91cHNgLCBgcnRtX2RlbF9uZXh0aG9wYCwgYW5kIGBydG1fbmV3X25leHRob3BgLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBuZWVkZWQgaXMgYElORVRgLgoKQWxyaWdodCwgSSBuZWVkIHRvIGNvbmZpcm0gZXZlcnl0aGluZyBpcyBhcyBpdCBzaG91bGQgYmUuIFRoZSBwYXRjaCBoYXMgYFdvcnRoRnV6emluZ2Agc2V0IHRvIGB0cnVlYCwgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdC4gTXkgdGFyZ2V0IGNvbmZpZ3VyYXRpb25zIGFyZSBsaXN0ZWQgYXMgYFsmIzM0O0lORVQmIzM0O11gLCBhbmQgbXkgc3ltYm9scyBhcmUgY29ycmVjdC4gVGhlIHJlYXNvbmluZyBzZWVtcyBjb25jaXNlIGFuZCByZWxldmFudC4gVGhpcyBwYXRjaCBpbml0aWFsaXplcyB0aGUgYGV4dGFja2Agc3RydWN0dXJlIGluIGByZW1vdmVfbmhfZ3JwX2VudHJ5YCB0byBwcmV2ZW50IHVuaW5pdGlhbGl6ZWQgcmVhZHMgd2hlbiBub3RpZmllciBlcnJvcnMgaGFwcGVuIGR1cmluZyBuZXh0aG9wIGdyb3VwIGVudHJ5IHJlbW92YWwuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBpdCYjMzk7cyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgYWNjZXNzaWJsZSB2aWEgbmV0bGluaywgd2hpY2ggaXMgZXhhY3RseSB0aGUga2luZCBvZiB2dWxuZXJhYmlsaXR5IEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gU2VlbXMgdG8gYmUgYSBzb2xpZCBmaXguCgpBbHJpZ2h0LCBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlbW92ZV9uaF9ncnBfZW50cnkmIzM0OywKICAgICYjMzQ7cmVtb3ZlX25leHRob3BfZnJvbV9ncm91cHMmIzM0OywKICAgICYjMzQ7cnRtX2RlbF9uZXh0aG9wJiMzNDssCiAgICAmIzM0O3J0bV9uZXdfbmV4dGhvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbml0aWFsaXplcyB0aGUgbmV0bGlua19leHRfYWNrIHN0cnVjdHVyZSBpbiByZW1vdmVfbmhfZ3JwX2VudHJ5KCkgdG8gcHJldmVudCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGlmIG5vdGlmaWVycyByZXR1cm4gYW4gZXJyb3IuIFRoZSBjb2RlIHJlc2lkZXMgaW4gdGhlIGNvcmUgSVB2NCBuZXh0aG9wIG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBuZXh0aG9wIGNvbW1hbmRzIChSVE1fREVMTkVYVEhPUCwgUlRNX05FV05FWFRIT1ApLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVtb3ZlX25oX2dycF9lbnRyeSYjMzQ7LAogICAgJiMzNDtyZW1vdmVfbmV4dGhvcF9mcm9tX2dyb3VwcyYjMzQ7LAogICAgJiMzNDtydG1fZGVsX25leHRob3AmIzM0OywKICAgICYjMzQ7cnRtX25ld19uZXh0aG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGluaXRpYWxpemVzIHRoZSBuZXRsaW5rX2V4dF9hY2sgc3RydWN0dXJlIGluIHJlbW92ZV9uaF9ncnBfZW50cnkoKSB0byBwcmV2ZW50IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgaWYgbm90aWZpZXJzIHJldHVybiBhbiBlcnJvci4gVGhlIGNvZGUgcmVzaWRlcyBpbiB0aGUgY29yZSBJUHY0IG5leHRob3AgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSB2aWEgcnRuZXRsaW5rIG5leHRob3AgY29tbWFuZHMgKFJUTV9ERUxORVhUSE9QLCBSVE1fTkVXTkVYVEhPUCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2tgIHdhcyBkZWNsYXJlZCBvbiB0aGUgc3RhY2sgd2l0aG91dCBpbml0aWFsaXphdGlvbiBpbiBgcmVtb3ZlX25oX2dycF9lbnRyeSgpYC4gQnkgaW5pdGlhbGl6aW5nIGl0IHdpdGggYD0ge31gLCBhbGwgZmllbGRzIG9mIGBleHRhY2tgIGFyZSBleHBsaWNpdGx5IHplcm9lZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBsZWFrIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVmODZkMTMwMDM4MjNjN2FjNDYwODI5MzUzZGQ3ZTZjZDQyZmRjYjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDEwOjAxOjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV4dGhvcC5jIGIvbmV0L2lwdjQvbmV4dGhvcC5jCmluZGV4IGE3YzJiOGRjZWQ0ZTcuLjQyZTU1YjVhNzU1ZWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25leHRob3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXh0aG9wLmMKQEAgLTIwMzYsNyAmIzQzOzIwMzYsNyBAQCByZW1vdmVfbmhfZ3JwX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZSwKIHsKIAlzdHJ1Y3QgbmhfZ3JwX2VudHJ5ICpuaGdlcywgKm5ld19uaGdlczsKIAlzdHJ1Y3QgbmV4dGhvcCAqbmhwID0gbmhnZS0mZ3Q7bmhfcGFyZW50OwotCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrOwomIzQzOwlzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9OwogCXN0cnVjdCBuZXh0aG9wICpuaCA9IG5oZ2UtJmd0O25oOwogCXN0cnVjdCBuaF9ncm91cCAqbmhnLCAqbmV3ZzsKIAlpbnQgaSwgaiwgZXJyOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5leHRob3AgQ29kZSBNb2RpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWluZyBjaGFuZ2VkIGFuZCB3aHksIHNvIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIGZpbGUgYW5kIGxpbmUgbnVtYmVyLiBJdCBzZWVtcyB0aGlzIG1vZGlmaWNhdGlvbiB0YXJnZXRzIGBuZXQvaXB2NC9uZXh0aG9wLmNgIGFyb3VuZCBsaW5lIDIwMzYsIGFjY29yZGluZyB0byB0aGUgYGRpZmZgLiBSaWdodCwgbGV0JiMzOTtzIHNlZSwgaXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGlzIHRvIGluaXRpYWxpemUgdGhlIGBleHRhY2tgIHZhcmlhYmxlIHVzaW5nIGJyYWNlIGluaXRpYWxpemF0aW9uIGB7fWAuIFRoaXMgaXMgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBjaGFuZ2UuIFByZXZpb3VzbHkgaXQgd2FzIHVuaW5pdGlhbGl6ZWQsIHdoaWNoIGNhbiBsZWFkIHRvIHVuZGVmaW5lZCBiZWhhdmlvciwgYW5kIHBvdGVudGlhbCBzZWN1cml0eSBpc3N1ZXMsIGRlcGVuZGluZyBvbiB0aGUgY29tcGlsZXIgYW5kIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4gSW5pdGlhbGl6aW5nIGl0IGV4cGxpY2l0bHkgZW5zdXJlcyB0aGF0IHRoZSBgZXh0YWNrYCBzdHJ1Y3QgaGFzIGRlZmluZWQgdmFsdWVzLCB3aGljaCBJIHVuZGVyc3RhbmQgaXMgY3J1Y2lhbCBmb3IgYG5ldGxpbmtfZXh0X2Fja2AgZXJyb3IgcmVwb3J0aW5nLgoKSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L2lwdjQvbmV4dGhvcC5jYCBhcm91bmQgdGhhdCBsaW5lLCBjb25maXJtaW5nIHRoZSBjb250ZXh0IHdpdGhpbiB0aGUgYHJlbW92ZV9uaF9ncnBfZW50cnlgIGZ1bmN0aW9uLiBJdCBpbnZvbHZlcyBtYW5hZ2luZyBuZXh0aG9wIGdyb3VwIGVudHJpZXMsIHNvIGFueSBlcnJvcnMgY291bGQgcG90ZW50aWFsbHkgaW1wYWN0IHJvdXRpbmcgb3IgZm9yd2FyZGluZyBkZWNpc2lvbnMuIFRoZSBpbml0aWFsaXphdGlvbiBvZiBgZXh0YWNrYCBoZXJlIGlzIGxpa2VseSByZWxhdGVkIHRvIGhhbmRsaW5nIGVycm9yIGNvbmRpdGlvbnMsIGVuc3VyaW5nIHRoYXQgaWYgYW4gZXJyb3Igb2NjdXJzLCBpdCYjMzk7cyBjb21tdW5pY2F0ZWQgY29ycmVjdGx5IHZpYSBOZXRsaW5rLiBDb25zaWRlcmluZyB0aGUgY3JpdGljYWxpdHkgb2YgdGhlc2UgZnVuY3Rpb25zIGluIHRoZSBmb3J3YXJkaW5nIHBhdGgsIHByZXZlbnRpbmcgdW5leHBlY3RlZCBiZWhhdmlvciBmcm9tIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGlzIGEgc2Vuc2libGUgcHJlY2F1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXh0aG9wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMzA6XHRcdH1cbjIwMzE6XHR9XG4yMDMyOlx0XG4yMDMzOlx0c3RhdGljIGJvb2wgX19tdXN0X2NoZWNrXG4yMDM0Olx0cmVtb3ZlX25oX2dycF9lbnRyeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuaF9ncnBfZW50cnkgKm5oZ2UsXG4yMDM1Olx0XHRcdCAgICBzdHJ1Y3QgbmxfaW5mbyAqbmxpbmZvLCBzdHJ1Y3QgbGlzdF9oZWFkICpkZWZlcnJlZF9mcmVlKVxuMjAzNjpcdHtcbjIwMzc6XHRcdHN0cnVjdCBuaF9ncnBfZW50cnkgKm5oZ2VzLCAqbmV3X25oZ2VzO1xuMjAzODpcdFx0c3RydWN0IG5leHRob3AgKm5ocCA9IG5oZ2UtXHUwMDNlbmhfcGFyZW50O1xuMjAzOTpcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtcbjIwNDA6XHRcdHN0cnVjdCBuZXh0aG9wICpuaCA9IG5oZ2UtXHUwMDNlbmg7XG4yMDQxOlx0XHRzdHJ1Y3QgbmhfZ3JvdXAgKm5oZywgKm5ld2c7XG4yMDQyOlx0XHRpbnQgaSwgaiwgZXJyO1xuMjA0MzpcdFxuMjA0NDpcdFx0V0FSTl9PTighbmgpO1xuMjA0NTpcdFxuMjA0NjpcdFx0bmhnID0gcnRubF9kZXJlZmVyZW5jZShuaHAtXHUwMDNlbmhfZ3JwKTtcbjIwNDc6XHRcdG5ld2cgPSBuaGctXHUwMDNlc3BhcmU7XG4yMDQ4Olx0XG4yMDQ5Olx0XHQvKiBsYXN0IGVudHJ5LCBrZWVwIGl0IHZpc2libGUgYW5kIHJlbW92ZSB0aGUgcGFyZW50ICovXG4yMDUwOlx0XHRpZiAobmhnLVx1MDAzZW51bV9uaCA9PSAxKVxuMjA1MTpcdFx0XHRyZXR1cm4gcmVtb3ZlX25leHRob3AobmV0LCBuaHAsIG5saW5mbyk7XG4yMDUyOlx0XG4yMDUzOlx0XHRuZXdnLVx1MDAzZWhhc192NCA9IGZhbHNlO1xuMjA1NDpcdFx0bmV3Zy1cdTAwM2Vpc19tdWx0aXBhdGggPSBuaGctXHUwMDNlaXNfbXVsdGlwYXRoO1xuMjA1NTpcdFx0bmV3Zy1cdTAwM2VoYXNoX3RocmVzaG9sZCA9IG5oZy1cdTAwM2VoYXNoX3RocmVzaG9sZDtcbjIwNTY6XHRcdG5ld2ctXHUwMDNlcmVzaWxpZW50ID0gbmhnLVx1MDAzZXJlc2lsaWVudDtcbjIwNTc6XHRcdG5ld2ctXHUwMDNlZmRiX25oID0gbmhnLVx1MDAzZWZkYl9uaDtcbjIwNTg6XHRcdG5ld2ctXHUwMDNlbnVtX25oID0gbmhnLVx1MDAzZW51bV9uaDtcbjIwNTk6XHRcbjIwNjA6XHRcdC8qIGNvcHkgb2xkIGVudHJpZXMgdG8gbmV3IGV4Y2VwdCB0aGUgb25lIGdldHRpbmcgcmVtb3ZlZCAqL1xuMjA2MTpcdFx0bmhnZXMgPSBuaGctXHUwMDNlbmhfZW50cmllcztcbjIwNjI6XHRcdG5ld19uaGdlcyA9IG5ld2ctXHUwMDNlbmhfZW50cmllcztcbjIwNjM6XHRcdGZvciAoaSA9IDAsIGogPSAwOyBpIFx1MDAzYyBuaGctXHUwMDNlbnVtX25oOyAmIzQzOyYjNDM7aSkge1xuMjA2NDpcdFx0XHRzdHJ1Y3QgbmhfaW5mbyAqbmhpO1xuMjA2NTpcdFxuMjA2NjpcdFx0XHQvKiBjdXJyZW50IG5leHRob3AgZ2V0dGluZyByZW1vdmVkICovXG4yMDY3Olx0XHRcdGlmIChuaGctXHUwMDNlbmhfZW50cmllc1tpXS5uaCA9PSBuaCkge1xuMjA2ODpcdFx0XHRcdG5ld2ctXHUwMDNlbnVtX25oLS07XG4yMDY5Olx0XHRcdFx0Y29udGludWU7XG4yMDcwOlx0XHRcdH1cbjIwNzE6XHRcbjIwNzI6XHRcdFx0bmhpID0gcnRubF9kZXJlZmVyZW5jZShuaGdlc1tpXS5uaC1cdTAwM2VuaF9pbmZvKTtcbjIwNzM6XHRcdFx0aWYgKG5oaS1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVClcbjIwNzQ6XHRcdFx0XHRuZXdnLVx1MDAzZWhhc192NCA9IHRydWU7XG4yMDc1Olx0XG4yMDc2Olx0XHRcdGxpc3RfZGVsKFx1MDAyNm5oZ2VzW2ldLm5oX2xpc3QpO1xuMjA3NzpcdFx0XHRuZXdfbmhnZXNbal0uc3RhdHMgPSBuaGdlc1tpXS5zdGF0cztcbjIwNzg6XHRcdFx0bmV3X25oZ2VzW2pdLm5oX3BhcmVudCA9IG5oZ2VzW2ldLm5oX3BhcmVudDtcbjIwNzk6XHRcdFx0bmV3X25oZ2VzW2pdLm5oID0gbmhnZXNbaV0ubmg7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1ODQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipUcmFjaW5nIHRoZSBgZXh0YWNrYCBpbiBgcmVtb3ZlX25oX2dycF9lbnRyeWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgYGV4dGFja2Agd2l0aGluIHRoZSBgcmVtb3ZlX25oX2dycF9lbnRyeWAgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCB3aGVyZSB0aGlzIHZhcmlhYmxlIGlzIGJlaW5nIHBhc3NlZCwgd2hpY2ggd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0JiMzOTtzIHVzZWQgYW5kIGl0cyBzaWduaWZpY2FuY2UgaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgbmV0d29yayBoYW5kbGluZyBncm91cCBlbnRyeSByZW1vdmFsLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaW5mb3JtYXRpb24gSSBjYW4gZ2xlYW4ganVzdCBmcm9tIGl0cyBsb2NhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIFdoZXJlIGRvZXMgdGhlIHZhbHVlIG9mIGBleHRhY2tgIGNvbWUgZnJvbSBpbml0aWFsbHk/IFdoYXQgb3RoZXIgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBpbnRlcmFjdCB3aXRoIGl0IGJlZm9yZSBpdCByZWFjaGVzIGByZW1vdmVfbmhfZ3JwX2VudHJ5YD8gS25vd2luZyB0aGUgY2FsbGluZyBoaWVyYXJjaHkgd2lsbCBiZSBjcml0aWNhbCBoZXJlLCBzbyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgc3RhdGljIGFuYWx5c2lzIHRvIGdldCBhIGJpcmQmIzM5O3MtZXllIHZpZXcsIHRoZW4gZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byBmb2xsb3cgdGhlIHNwZWNpZmljIHBhc3NlcyBvZiBgZXh0YWNrYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgYmFja2dyb3VuZCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIGltcGxpY2F0aW9ucyBvZiBob3cgYGV4dGFja2AgaXMgYmVpbmcgbWFuYWdlZC4gSXQgd2lsbCBhbHNvIGV4cG9zZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBpdCBtaWdodCBoYXZlIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgd2l0aGluIHRoZSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXh0aG9wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwODA6XHRcdFx0bmV3X25oZ2VzW2pdLndlaWdodCA9IG5oZ2VzW2ldLndlaWdodDtcbjIwODE6XHRcdFx0bGlzdF9hZGQoXHUwMDI2bmV3X25oZ2VzW2pdLm5oX2xpc3QsIFx1MDAyNm5ld19uaGdlc1tqXS5uaC1cdTAwM2VncnBfbGlzdCk7XG4yMDgyOlx0XHRcdGomIzQzOyYjNDM7O1xuMjA4MzpcdFx0fVxuMjA4NDpcdFxuMjA4NTpcdFx0aWYgKG5ld2ctXHUwMDNlaGFzaF90aHJlc2hvbGQpXG4yMDg2Olx0XHRcdG5oX2h0aHJfZ3JvdXBfcmViYWxhbmNlKG5ld2cpO1xuMjA4NzpcdFx0ZWxzZSBpZiAobmV3Zy1cdTAwM2VyZXNpbGllbnQpXG4yMDg4Olx0XHRcdHJlcGxhY2VfbmV4dGhvcF9ncnBfcmVzKG5oZywgbmV3Zyk7XG4yMDg5Olx0XG4yMDkwOlx0XHRyY3VfYXNzaWduX3BvaW50ZXIobmhwLVx1MDAzZW5oX2dycCwgbmV3Zyk7XG4yMDkxOlx0XG4yMDkyOlx0XHRsaXN0X2RlbChcdTAwMjZuaGdlLVx1MDAzZW5oX2xpc3QpO1xuMjA5MzpcdFx0bmV4dGhvcF9wdXQobmhnZS1cdTAwM2VuaCk7XG4yMDk0Olx0XHRsaXN0X2FkZChcdTAwMjZuaGdlLVx1MDAzZW5oX2xpc3QsIGRlZmVycmVkX2ZyZWUpO1xuMjA5NTpcdFxuMjA5NjpcdFx0LyogUmVtb3ZhbCBvZiBhIE5IIGZyb20gYSByZXNpbGllbnQgZ3JvdXAgaXMgbm90aWZpZWQgdGhyb3VnaFxuMjA5NzpcdFx0ICogYnVja2V0IG5vdGlmaWNhdGlvbnMuXG4yMDk4Olx0XHQgKi9cbjIwOTk6XHRcdGlmIChuZXdnLVx1MDAzZWhhc2hfdGhyZXNob2xkKSB7XG4yMTAwOlx0XHRcdGVyciA9IGNhbGxfbmV4dGhvcF9ub3RpZmllcnMobmV0LCBORVhUSE9QX0VWRU5UX1JFUExBQ0UsIG5ocCxcbjIxMDE6XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZleHRhY2spO1xuMjEwMjpcdFx0XHRpZiAoZXJyKVxuMjEwMzpcdFx0XHRcdHByX2VycihcJiMzNDslc1xcblwmIzM0OywgZXh0YWNrLl9tc2cpO1xuMjEwNDpcdFx0fVxuMjEwNTpcdFxuMjEwNjpcdFx0aWYgKG5saW5mbylcbjIxMDc6XHRcdFx0bmV4dGhvcF9ub3RpZnkoUlRNX05FV05FWFRIT1AsIG5ocCwgbmxpbmZvKTtcbjIxMDg6XHRcbjIxMDk6XHRcdHJldHVybiBmYWxzZTtcbjIxMTA6XHR9XG4yMTExOlx0XG4yMTEyOlx0c3RhdGljIGJvb2wgX19tdXN0X2NoZWNrXG4yMTEzOlx0cmVtb3ZlX25leHRob3BfZnJvbV9ncm91cHMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqbmgsXG4yMTE0Olx0XHRcdFx0ICAgc3RydWN0IG5sX2luZm8gKm5saW5mbylcbjIxMTU6XHR7XG4yMTE2Olx0XHRzdHJ1Y3QgbmhfZ3JwX2VudHJ5ICpuaGdlLCAqdG1wO1xuMjExNzpcdFx0TElTVF9IRUFEKGRlZmVycmVkX2ZyZWUpO1xuMjExODpcdFx0Ym9vbCBuZWVkX2ZsdXNoID0gZmFsc2U7XG4yMTE5Olx0XG4yMTIwOlx0XHQvKiBJZiB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLCBsZXQmIzM5O3MgYXZvaWQgdGhlIGNvc3RseSBjYWxsIHRvXG4yMTIxOlx0XHQgKiBzeW5jaHJvbml6ZV9uZXQoKVxuMjEyMjpcdFx0ICovXG4yMTIzOlx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZuaC1cdTAwM2VncnBfbGlzdCkpXG4yMTI0Olx0XHRcdHJldHVybiBmYWxzZTtcbjIxMjU6XHRcbjIxMjY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuaGdlLCB0bXAsIFx1MDAyNm5oLVx1MDAzZWdycF9saXN0LCBuaF9saXN0KVxuMjEyNzpcdFx0XHRuZWVkX2ZsdXNoIHw9IHJlbW92ZV9uaF9ncnBfZW50cnkobmV0LCBuaGdlLCBubGluZm8sXG4yMTI4Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZkZWZlcnJlZF9mcmVlKTtcbjIxMjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY2MQoJCQkJCQkJb3V0cHV0OiAxMjgKCQkJCQkJCXRob3VnaHRzOiA5MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEJ1ZyBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTGluZSAyMDM5IHNob3dzIGEgY2hhbmdlIGZyb20gYSBkZWNsYXJhdGlvbiBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2s7YCB0byBhbiBpbml0aWFsaXphdGlvbiBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtgLiAgVGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgcGF0Y2guIFRoZSBjb2RlIGF0IGxpbmVzIDIxMDAtMjEwMyBtYWtlcyB1c2Ugb2YgdGhpcyBzdHJ1Y3R1cmUuICBQcmV2aW91c2x5LCBgZXh0YWNrYCB3YXMgYSBsb2NhbCBzdGFjayB2YXJpYWJsZSwgKnBvdGVudGlhbGx5KiB1bmluaXRpYWxpemVkLiBUaGlzIGNvdWxkIGhhdmUgbGVkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdGFjayBkYXRhLCBwYXJ0aWN1bGFybHkgaWYgYGNhbGxfbmV4dGhvcF9ub3RpZmllcnNgIHJldHVybmVkIGFuIGVycm9yIHdpdGhvdXQgc2V0dGluZyBgZXh0YWNrLl9tc2dgLCBvciBpZiB0aGUgbm90aWZpZXJzIHRoZW1zZWx2ZXMgcGVla2VkIGF0IHRoZSBjb250ZW50cyBvZiBgZXh0YWNrYCAod2hpY2ggaXMgYmFkIGZvcm0sIGJ1dCBjZXJ0YWlubHkgcG9zc2libGUpLCBvciBpZiB0aGUgYHByX2VycmAgY2FsbCBhdCB0aGUgZW5kIHdhcyBleGVjdXRlZCB3aXRoIGFuIHVuaW5pdGlhbGl6ZWQgYF9tc2dgIGZpZWxkLiAgVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgZW5zdXJpbmcgdGhlIHZhcmlhYmxlIGlzIHplcm8taW5pdGlhbGl6ZWQuCgpOb3csIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgbmVlZHMgS01TQU4uIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZS4gV2hhdCBkb2VzIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHdhbnQ/IEFoLCBoZXJlIGFyZSB0aGUgcnVsZXMhICYjMzQ7VEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4mIzM0OyBLTVNBTiBpcyBleHBlbnNpdmUsIHNvIEkgc2hvdWxkIG9ubHkgdXNlIGl0IHdoZW4gKnVuaW5pdGlhbGl6ZWQgbWVtb3J5KiByaXNrcyBhcmUgcHJlc2VudCwgYW5kIHRob3NlIHJpc2tzIGFyZSAqb25seSogZGV0ZWN0YWJsZSBieSBLTVNBTi4KClRoZSBwcm9tcHQgbGlzdHMgZm91ciBzcGVjaWZpYyBzY2VuYXJpb3MgdGhhdCB3YXJyYW50IEtNU0FOLCBvciBub3Q6CjEuICBTdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZy4gSXMgdGhpcyB0aGUgY2FzZT8gTm8uCjIuICBDb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuICBJcyB0aGlzIHRoZSBjYXNlPyBOby4KMy4gIEFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuIElzIHRoaXMgdGhlIGNhc2U/IE5vLgo0LiAgQnlwYXNzaW5nIG9yIG1hbmlwdWxhdGluZyBsZW5ndGggb3IgYm91bmRzIGNoZWNrcywgcG90ZW50aWFsbHkgYWxsb3dpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4gSXMgdGhpcyB0aGUgY2FzZT8gTm8uCgpUaGUgcHJvbXB0IHZlcnkgZXhwbGljaXRseSBzYXlzOiAmIzM0O1NldCBOZWVkc0tNU0FOPWZhbHNlIElGOiAuLi4gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLiAgLi4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4mIzM0OwoKVGhpcyBwYXRjaCAqZXhwbGljaXRseSogaW5pdGlhbGl6ZXMgdGhlIHZhcmlhYmxlIHdpdGggYHt9YC4gIEl0IGRvZXMgKm5vdCogaW50cm9kdWNlIG5ldyByaXNrcy4gSXQgKnByZXZlbnRzKiBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLiBJdCBkb2VzbiYjMzk7dCBsZWFrIGluZm8uICBJJiMzOTt2ZSBjaGVja2VkIGV2ZXJ5dGhpbmcuIFRoZSBvcmlnaW5hbCBzdGF0ZSB3YXMgcG90ZW50aWFsbHkgdW5zYWZlICh1bmluaXRpYWxpemVkIHN0YWNrKS4gVGhlIG5ldyBzdGF0ZSBpcyBzYWZlLgoKSSYjMzk7bSBjb21wbGV0ZWx5IGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IG5ldywgb3IgZXZlbiBtYWludGFpbiBleGlzdGluZywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCBvbmx5IGJlIGNhdWdodCBieSBLTVNBTi4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgbXVzdCBiZSBgZmFsc2VgLgoKT2theSwgSSYjMzk7bSByZWFkeSB0byBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrYCB3YXMgZGVjbGFyZWQgb24gdGhlIHN0YWNrIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24gaW4gYHJlbW92ZV9uaF9ncnBfZW50cnkoKWAuIEJ5IGluaXRpYWxpemluZyBpdCB3aXRoIGA9IHt9YCwgYWxsIGZpZWxkcyBvZiBgZXh0YWNrYCBhcmUgZXhwbGljaXRseSB6ZXJvZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgbGVhayB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLCBvciBhbHRlciBjb250cm9sIGZsb3cgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2tgIHdhcyBkZWNsYXJlZCBvbiB0aGUgc3RhY2sgd2l0aG91dCBpbml0aWFsaXphdGlvbiBpbiBgcmVtb3ZlX25oX2dycF9lbnRyeSgpYC4gQnkgaW5pdGlhbGl6aW5nIGl0IHdpdGggYD0ge31gLCBhbGwgZmllbGRzIG9mIGBleHRhY2tgIGFyZSBleHBsaWNpdGx5IHplcm9lZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBsZWFrIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDE6MzYuMDY3NDg1NTM2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczODkzNjg5NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlbW92ZV9uaF9ncnBfZW50cnlcIixcbiAgICBcInJlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzXCIsXG4gICAgXCJydG1fZGVsX25leHRob3BcIixcbiAgICBcInJ0bV9uZXdfbmV4dGhvcFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrYCB3YXMgZGVjbGFyZWQgb24gdGhlIHN0YWNrIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24gaW4gYHJlbW92ZV9uaF9ncnBfZW50cnkoKWAuIEJ5IGluaXRpYWxpemluZyBpdCB3aXRoIGA9IHt9YCwgYWxsIGZpZWxkcyBvZiBgZXh0YWNrYCBhcmUgZXhwbGljaXRseSB6ZXJvZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgbGVhayB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLCBvciBhbHRlciBjb250cm9sIGZsb3cgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW5pdGlhbGl6ZXMgdGhlIG5ldGxpbmtfZXh0X2FjayBzdHJ1Y3R1cmUgaW4gcmVtb3ZlX25oX2dycF9lbnRyeSgpIHRvIHByZXZlbnQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBpZiBub3RpZmllcnMgcmV0dXJuIGFuIGVycm9yLiBUaGUgY29kZSByZXNpZGVzIGluIHRoZSBjb3JlIElQdjQgbmV4dGhvcCBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgbmV4dGhvcCBjb21tYW5kcyAoUlRNX0RFTE5FWFRIT1AsIFJUTV9ORVdORVhUSE9QKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDE6MzYuMDY3NDkwMzY2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjkyNjM2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlZjg2ZDEzMDAzODIzYzdhYzQ2MDgyOTM1M2RkN2U2Y2Q0MmZkY2IyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMTA6MDE6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV4dGhvcC5jIGIvbmV0L2lwdjQvbmV4dGhvcC5jXFxuaW5kZXggYTdjMmI4ZGNlZDRlNy4uNDJlNTViNWE3NTVlZSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9uZXh0aG9wLmNcXG4rKysgYi9uZXQvaXB2NC9uZXh0aG9wLmNcXG5AQCAtMjAzNiw3ICsyMDM2LDcgQEAgcmVtb3ZlX25oX2dycF9lbnRyeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuaF9ncnBfZW50cnkgKm5oZ2UsXFxuIHtcXG4gXFx0c3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZXMsICpuZXdfbmhnZXM7XFxuIFxcdHN0cnVjdCBuZXh0aG9wICpuaHAgPSBuaGdlLVxcdTAwM2VuaF9wYXJlbnQ7XFxuLVxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrO1xcbitcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9O1xcbiBcXHRzdHJ1Y3QgbmV4dGhvcCAqbmggPSBuaGdlLVxcdTAwM2VuaDtcXG4gXFx0c3RydWN0IG5oX2dyb3VwICpuaGcsICpuZXdnO1xcbiBcXHRpbnQgaSwgaiwgZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowMTozNi40OTc2ODA2MDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMyNzQ5MDE4NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZW1vdmVfbmhfZ3JwX2VudHJ5XCIsXG4gICAgXCJyZW1vdmVfbmV4dGhvcF9mcm9tX2dyb3Vwc1wiLFxuICAgIFwicnRtX2RlbF9uZXh0aG9wXCIsXG4gICAgXCJydG1fbmV3X25leHRob3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbml0aWFsaXplcyB0aGUgbmV0bGlua19leHRfYWNrIHN0cnVjdHVyZSBpbiByZW1vdmVfbmhfZ3JwX2VudHJ5KCkgdG8gcHJldmVudCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGlmIG5vdGlmaWVycyByZXR1cm4gYW4gZXJyb3IuIFRoZSBjb2RlIHJlc2lkZXMgaW4gdGhlIGNvcmUgSVB2NCBuZXh0aG9wIG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBuZXh0aG9wIGNvbW1hbmRzIChSVE1fREVMTkVYVEhPUCwgUlRNX05FV05FWFRIT1ApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVmODZkMTMwMDM4MjNjN2FjNDYwODI5MzUzZGQ3ZTZjZDQyZmRjYjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDEwOjAxOjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV4dGhvcC5jIGIvbmV0L2lwdjQvbmV4dGhvcC5jXG5pbmRleCBhN2MyYjhkY2VkNGU3Li40MmU1NWI1YTc1NWVlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV4dGhvcC5jXG4rKysgYi9uZXQvaXB2NC9uZXh0aG9wLmNcbkBAIC0yMDM2LDcgKzIwMzYsNyBAQCByZW1vdmVfbmhfZ3JwX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZSxcbiB7XG4gXHRzdHJ1Y3QgbmhfZ3JwX2VudHJ5ICpuaGdlcywgKm5ld19uaGdlcztcbiBcdHN0cnVjdCBuZXh0aG9wICpuaHAgPSBuaGdlLVx1MDAzZW5oX3BhcmVudDtcbi1cdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrO1xuK1x0c3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtcbiBcdHN0cnVjdCBuZXh0aG9wICpuaCA9IG5oZ2UtXHUwMDNlbmg7XG4gXHRzdHJ1Y3QgbmhfZ3JvdXAgKm5oZywgKm5ld2c7XG4gXHRpbnQgaSwgaiwgZXJyO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDE6MzYuNDk3Njg0MTQ5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTYwNTk3MTI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UsIHNvIEknbGwgc3RhcnQgYnkgZm9jdXNpbmcgb24gdGhlIHNwZWNpZmljcy5cblxuKipQYXRjaCBJbnNwZWN0aW9uOiBJbml0aWFsaXppbmcgYGV4dGFja2AgaW4gYHJlbW92ZV9uaF9ncnBfZW50cnlgKipcblxuUmlnaHQsIHNvIHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYG5ldC9pcHY0L25leHRob3AuY2AuIFNwZWNpZmljYWxseSwgd2l0aGluIHRoZSBgcmVtb3ZlX25oX2dycF9lbnRyeWAgZnVuY3Rpb24sIHRoZXJlJ3MgYSBjaGFuZ2UgcmVsYXRlZCB0byB0aGUgYHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrO2AgZGVjbGFyYXRpb24uIEl0J3MgYmVlbiBhbHRlcmVkIHRvIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9O2AuIFRoYXQncyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlIC0gaW5pdGlhbGl6aW5nIHRoZSBgZXh0YWNrYCBzdHJ1Y3R1cmUuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gcHJldmVudGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBwb3RlbnRpYWxseSBjbGVhcmluZyBmbGFncyBvbiB0aGUgZXh0ZW5kZWQgYWNrbm93bGVkZ2VtZW50LiBJIGtub3cgSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGVzZSB0aGluZ3MsIHNvIGxldCdzIHpvb20gaW4gb24gdGhhdCBjb2RlIGFyZWEuXG5cbkkgc2hvdWxkIHByb2JhYmx5IHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L2lwdjQvbmV4dGhvcC5jYCB0byBzZWUgaG93IGBleHRhY2tgIGlzIGFjdHVhbGx5IHVzZWQuIEl0J2xsIGJlIGFyb3VuZCBsaW5lIDIwMzYsIEkgdGhpbmsuIEknbGwgbmVlZCB0byByZWFkIHRoZSB1c2FnZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDE6NDIuMTAzNjg0NDUzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg1MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L25leHRob3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDIwOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuaGctXFx1MDAzZW51bV9uaDsgKytpKVxcbjIwMjE6XFx0XFx0XFx0dG90YWwgKz0gbmhnLVxcdTAwM2VuaF9lbnRyaWVzW2ldLndlaWdodDtcXG4yMDIyOlxcdFxcbjIwMjM6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5oZy1cXHUwMDNlbnVtX25oOyArK2kpIHtcXG4yMDI0OlxcdFxcdFxcdHN0cnVjdCBuaF9ncnBfZW50cnkgKm5oZ2UgPSBcXHUwMDI2bmhnLVxcdTAwM2VuaF9lbnRyaWVzW2ldO1xcbjIwMjU6XFx0XFx0XFx0dTMyIHVwcGVyX2JvdW5kO1xcbjIwMjY6XFx0XFxuMjAyNzpcXHRcXHRcXHR3ICs9IG5oZ2UtXFx1MDAzZXdlaWdodDtcXG4yMDI4OlxcdFxcdFxcdHVwcGVyX2JvdW5kID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKCh1NjQpdyBcXHUwMDNjXFx1MDAzYyAzMSwgdG90YWwpIC0gMTtcXG4yMDI5OlxcdFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNm5oZ2UtXFx1MDAzZWh0aHIudXBwZXJfYm91bmQsIHVwcGVyX2JvdW5kKTtcXG4yMDMwOlxcdFxcdH1cXG4yMDMxOlxcdH1cXG4yMDMyOlxcdFxcbjIwMzM6XFx0c3RhdGljIGJvb2wgX19tdXN0X2NoZWNrXFxuMjAzNDpcXHRyZW1vdmVfbmhfZ3JwX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZSxcXG4yMDM1OlxcdFxcdFxcdCAgICBzdHJ1Y3QgbmxfaW5mbyAqbmxpbmZvLCBzdHJ1Y3QgbGlzdF9oZWFkICpkZWZlcnJlZF9mcmVlKVxcbjIwMzY6XFx0e1xcbjIwMzc6XFx0XFx0c3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZXMsICpuZXdfbmhnZXM7XFxuMjAzODpcXHRcXHRzdHJ1Y3QgbmV4dGhvcCAqbmhwID0gbmhnZS1cXHUwMDNlbmhfcGFyZW50O1xcbjIwMzk6XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtcXG4yMDQwOlxcdFxcdHN0cnVjdCBuZXh0aG9wICpuaCA9IG5oZ2UtXFx1MDAzZW5oO1xcbjIwNDE6XFx0XFx0c3RydWN0IG5oX2dyb3VwICpuaGcsICpuZXdnO1xcbjIwNDI6XFx0XFx0aW50IGksIGosIGVycjtcXG4yMDQzOlxcdFxcbjIwNDQ6XFx0XFx0V0FSTl9PTighbmgpO1xcbjIwNDU6XFx0XFxuMjA0NjpcXHRcXHRuaGcgPSBydG5sX2RlcmVmZXJlbmNlKG5ocC1cXHUwMDNlbmhfZ3JwKTtcXG4yMDQ3OlxcdFxcdG5ld2cgPSBuaGctXFx1MDAzZXNwYXJlO1xcbjIwNDg6XFx0XFxuMjA0OTpcXHRcXHQvKiBsYXN0IGVudHJ5LCBrZWVwIGl0IHZpc2libGUgYW5kIHJlbW92ZSB0aGUgcGFyZW50ICovXFxuMjA1MDpcXHRcXHRpZiAobmhnLVxcdTAwM2VudW1fbmggPT0gMSlcXG4yMDUxOlxcdFxcdFxcdHJldHVybiByZW1vdmVfbmV4dGhvcChuZXQsIG5ocCwgbmxpbmZvKTtcXG4yMDUyOlxcdFxcbjIwNTM6XFx0XFx0bmV3Zy1cXHUwMDNlaGFzX3Y0ID0gZmFsc2U7XFxuMjA1NDpcXHRcXHRuZXdnLVxcdTAwM2Vpc19tdWx0aXBhdGggPSBuaGctXFx1MDAzZWlzX211bHRpcGF0aDtcXG4yMDU1OlxcdFxcdG5ld2ctXFx1MDAzZWhhc2hfdGhyZXNob2xkID0gbmhnLVxcdTAwM2VoYXNoX3RocmVzaG9sZDtcXG4yMDU2OlxcdFxcdG5ld2ctXFx1MDAzZXJlc2lsaWVudCA9IG5oZy1cXHUwMDNlcmVzaWxpZW50O1xcbjIwNTc6XFx0XFx0bmV3Zy1cXHUwMDNlZmRiX25oID0gbmhnLVxcdTAwM2VmZGJfbmg7XFxuMjA1ODpcXHRcXHRuZXdnLVxcdTAwM2VudW1fbmggPSBuaGctXFx1MDAzZW51bV9uaDtcXG4yMDU5OlxcdFxcbjIwNjA6XFx0XFx0LyogY29weSBvbGQgZW50cmllcyB0byBuZXcgZXhjZXB0IHRoZSBvbmUgZ2V0dGluZyByZW1vdmVkICovXFxuMjA2MTpcXHRcXHRuaGdlcyA9IG5oZy1cXHUwMDNlbmhfZW50cmllcztcXG4yMDYyOlxcdFxcdG5ld19uaGdlcyA9IG5ld2ctXFx1MDAzZW5oX2VudHJpZXM7XFxuMjA2MzpcXHRcXHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcXHUwMDNjIG5oZy1cXHUwMDNlbnVtX25oOyArK2kpIHtcXG4yMDY0OlxcdFxcdFxcdHN0cnVjdCBuaF9pbmZvICpuaGk7XFxuMjA2NTpcXHRcXG4yMDY2OlxcdFxcdFxcdC8qIGN1cnJlbnQgbmV4dGhvcCBnZXR0aW5nIHJlbW92ZWQgKi9cXG4yMDY3OlxcdFxcdFxcdGlmIChuaGctXFx1MDAzZW5oX2VudHJpZXNbaV0ubmggPT0gbmgpIHtcXG4yMDY4OlxcdFxcdFxcdFxcdG5ld2ctXFx1MDAzZW51bV9uaC0tO1xcbjIwNjk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAxOjQyLjEwMzk3MjgzM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3NzkxOTg3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgcmVtb3ZlX25oX2dycF9lbnRyeWAgYW5kIGl0cyBgZXh0YWNrYCBVc2FnZSoqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW50byB0aGlzIGByZW1vdmVfbmhfZ3JwX2VudHJ5YCBmdW5jdGlvbiBhZ2Fpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IGBleHRhY2tgIGlzIGJlaW5nIGVtcGxveWVkIGhlcmUuIEl0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMganVzdCBmcm9tIGxvb2tpbmcgYXQgdGhpcyBzbmlwcGV0IGhvdyB0aGUgc3RhY2sgaXMgYmVpbmcgbWFuYWdlZCwgc28gSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB3aXRoaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEknbSBsb29raW5nIGZvciB0aGUgY29udGV4dCBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIG9wZXJhdGlvbiBpcyBleGVjdXRlZCBhbmQgd2hhdCBpdCBpbXBsaWVzIGZvciB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGZvciB3aGVyZSBhbmQgaG93IHRoZSBzdGFjayBpcyBiZWluZyBtb2RpZmllZCBhcm91bmQgdGhlIHVzZSBvZiB0aGlzIGZ1bmN0aW9uLCBhcyB3ZWxsIGFzIHRoZSBlZmZlY3RzIHRoZSBzdGFjayBtYW5pcHVsYXRpb24gaGFzIG9uIHRoZSBkYXRhIGludGVncml0eSBhbmQgcHJvZ3JhbSBjb250cm9sIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAxOjQzLjg4MzE3NDEzOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9uZXh0aG9wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjA3MDpcXHRcXHRcXHR9XFxuMjA3MTpcXHRcXG4yMDcyOlxcdFxcdFxcdG5oaSA9IHJ0bmxfZGVyZWZlcmVuY2UobmhnZXNbaV0ubmgtXFx1MDAzZW5oX2luZm8pO1xcbjIwNzM6XFx0XFx0XFx0aWYgKG5oaS1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQpXFxuMjA3NDpcXHRcXHRcXHRcXHRuZXdnLVxcdTAwM2VoYXNfdjQgPSB0cnVlO1xcbjIwNzU6XFx0XFxuMjA3NjpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2bmhnZXNbaV0ubmhfbGlzdCk7XFxuMjA3NzpcXHRcXHRcXHRuZXdfbmhnZXNbal0uc3RhdHMgPSBuaGdlc1tpXS5zdGF0cztcXG4yMDc4OlxcdFxcdFxcdG5ld19uaGdlc1tqXS5uaF9wYXJlbnQgPSBuaGdlc1tpXS5uaF9wYXJlbnQ7XFxuMjA3OTpcXHRcXHRcXHRuZXdfbmhnZXNbal0ubmggPSBuaGdlc1tpXS5uaDtcXG4yMDgwOlxcdFxcdFxcdG5ld19uaGdlc1tqXS53ZWlnaHQgPSBuaGdlc1tpXS53ZWlnaHQ7XFxuMjA4MTpcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2bmV3X25oZ2VzW2pdLm5oX2xpc3QsIFxcdTAwMjZuZXdfbmhnZXNbal0ubmgtXFx1MDAzZWdycF9saXN0KTtcXG4yMDgyOlxcdFxcdFxcdGorKztcXG4yMDgzOlxcdFxcdH1cXG4yMDg0OlxcdFxcbjIwODU6XFx0XFx0aWYgKG5ld2ctXFx1MDAzZWhhc2hfdGhyZXNob2xkKVxcbjIwODY6XFx0XFx0XFx0bmhfaHRocl9ncm91cF9yZWJhbGFuY2UobmV3Zyk7XFxuMjA4NzpcXHRcXHRlbHNlIGlmIChuZXdnLVxcdTAwM2VyZXNpbGllbnQpXFxuMjA4ODpcXHRcXHRcXHRyZXBsYWNlX25leHRob3BfZ3JwX3JlcyhuaGcsIG5ld2cpO1xcbjIwODk6XFx0XFxuMjA5MDpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIobmhwLVxcdTAwM2VuaF9ncnAsIG5ld2cpO1xcbjIwOTE6XFx0XFxuMjA5MjpcXHRcXHRsaXN0X2RlbChcXHUwMDI2bmhnZS1cXHUwMDNlbmhfbGlzdCk7XFxuMjA5MzpcXHRcXHRuZXh0aG9wX3B1dChuaGdlLVxcdTAwM2VuaCk7XFxuMjA5NDpcXHRcXHRsaXN0X2FkZChcXHUwMDI2bmhnZS1cXHUwMDNlbmhfbGlzdCwgZGVmZXJyZWRfZnJlZSk7XFxuMjA5NTpcXHRcXG4yMDk2OlxcdFxcdC8qIFJlbW92YWwgb2YgYSBOSCBmcm9tIGEgcmVzaWxpZW50IGdyb3VwIGlzIG5vdGlmaWVkIHRocm91Z2hcXG4yMDk3OlxcdFxcdCAqIGJ1Y2tldCBub3RpZmljYXRpb25zLlxcbjIwOTg6XFx0XFx0ICovXFxuMjA5OTpcXHRcXHRpZiAobmV3Zy1cXHUwMDNlaGFzaF90aHJlc2hvbGQpIHtcXG4yMTAwOlxcdFxcdFxcdGVyciA9IGNhbGxfbmV4dGhvcF9ub3RpZmllcnMobmV0LCBORVhUSE9QX0VWRU5UX1JFUExBQ0UsIG5ocCxcXG4yMTAxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmV4dGFjayk7XFxuMjEwMjpcXHRcXHRcXHRpZiAoZXJyKVxcbjIxMDM6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCIlc1xcXFxuXFxcIiwgZXh0YWNrLl9tc2cpO1xcbjIxMDQ6XFx0XFx0fVxcbjIxMDU6XFx0XFxuMjEwNjpcXHRcXHRpZiAobmxpbmZvKVxcbjIxMDc6XFx0XFx0XFx0bmV4dGhvcF9ub3RpZnkoUlRNX05FV05FWFRIT1AsIG5ocCwgbmxpbmZvKTtcXG4yMTA4OlxcdFxcbjIxMDk6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjIxMTA6XFx0fVxcbjIxMTE6XFx0XFxuMjExMjpcXHRzdGF0aWMgYm9vbCBfX211c3RfY2hlY2tcXG4yMTEzOlxcdHJlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxcbjIxMTQ6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5sX2luZm8gKm5saW5mbylcXG4yMTE1OlxcdHtcXG4yMTE2OlxcdFxcdHN0cnVjdCBuaF9ncnBfZW50cnkgKm5oZ2UsICp0bXA7XFxuMjExNzpcXHRcXHRMSVNUX0hFQUQoZGVmZXJyZWRfZnJlZSk7XFxuMjExODpcXHRcXHRib29sIG5lZWRfZmx1c2ggPSBmYWxzZTtcXG4yMTE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowMTo0My44ODMzODUyNDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTk2OTk2NDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoIEZ1enppbmcgVGhpcyBDb3JlIE5ldHdvcmtpbmcgRml4PyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgdGhlIGlzc3VlIGlzIHdpdGggYGV4dGFja2AsIHNwZWNpZmljYWxseSBob3cgaXQgbWlnaHQgYmUgdW5pbml0aWFsaXplZCBpZiBgY2FsbF9uZXh0aG9wX25vdGlmaWVyc2AgZmFpbHMuIFRoaXMgY291bGQgbGVhZCB0byBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBwb3RlbnRpYWxseSB0cmlnZ2VyaW5nIGEgS01TQU4gd2FybmluZyBvciBhIGJ1Zy4gVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IGluaXRpYWxpemUgYHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrID0ge307YC4gVGhhdCdzIGdvb2Q7IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBhbHdheXMgbmFzdHkuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgY29kZSwgYW5kIGlzIGl0IHdvcnRoIGZ1enppbmc/IExldCdzIHNlZS4uLiBpdCBkZWFscyB3aXRoIGNvcmUgbmV0d29ya2luZywgc3BlY2lmaWNhbGx5IElQdjQsIG5leHRob3BzLCBhbmQgbmV0bGluay4gVGhlIHBhdGggdG8gdGhpcyBjb2RlIGlzIHRocm91Z2ggbmV0bGluayBtZXNzYWdlcyBsaWtlIGBSVE1fREVMTkVYVEhPUGAgb3IgYFJUTV9ORVdORVhUSE9QYC4gRnV6emluZyBjb3VsZCBleGVyY2lzZSBuZXh0aG9wIGdyb3VwIGRlbGV0aW9uLCBub3RpZmljYXRpb24gZXJyb3JzLCBhbmQgcmVzaWxpZW50IGdyb3VwcyDigJMgdGhhdCdzIGEgcHJldHR5IGludGVyZXN0aW5nIHN1cmZhY2UhXG5cbkxldCBtZSBnbyB0aHJvdWdoIHRoZSBjcml0ZXJpYSBmb3IgXCJXb3J0aEZ1enppbmdcIi4gSXQncyBhbGwgYWJvdXQgZmluZGluZyBjcmFzaGVzLCByZWdyZXNzaW9ucywgb3IgbGF0ZW50IGJ1Z3MgaW50cm9kdWNlZCBieSBhIHBhdGNoLiBJdCBzYXlzIFwiV29ydGhGdXp6aW5nPXRydWVcIiBpZiB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBBbmQgaXQgZXhwbGljaXRseSBtZW50aW9ucyBjb3JlIHN1YnN5c3RlbXMsIHBhcnRpY3VsYXJseSBjb3JlIG5ldHdvcmtpbmcuIEl0IGFsc28gbG9va3MgbGlrZSBhIHJlZmFjdG9yaW5nLlxuXG5XYWl0LCBpdCAqaXMqIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpbiBgbmV0L2lwdjQvbmV4dGhvcC5jYCwgc28gaXQncyBkZWZpbml0ZWx5IGluIGEgY29yZSBzdWJzeXN0ZW0uIEJpbmdvISBTbywgKip5ZXMqKiwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIFdvcnRoRnV6emluZyA9IFRydWUuIEp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBhbmQgTWFrZWZpbGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlncyBuZWVkZWQgZm9yIGBuZXQvaXB2NC9uZXh0aG9wLmNgIHRvIGVuc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBpcyBjb21waWxlZCBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE3OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAxOjQ3Ljg4MDM4NDM5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDU0MTc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXh0aG9wLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTYtXFx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTc6XFx0ICAgICBtZXRyaWNzLm8gbmV0bGluay5vIG5leHRob3AubyB1ZHBfdHVubmVsX3N0dWIub1xcbm5ldC9pcHY0L01ha2VmaWxlLTE4LVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTUyLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzo1MzovKiBmb3JfbmV4dGhvcHMgYW5kIGNoYW5nZV9uZXh0aG9wcyBvbmx5IHVzZWQgd2hlbiBuZXh0aG9wIG9iamVjdFxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy01NC0gKiBpcyBub3Qgc2V0IGluIGEgZmliX2luZm8uIFRoZSBsb2dpYyB3aXRoaW4gY2FuIHJlZmVyZW5jZSBmaWJfbmguXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmM9MTU0OT1zdGF0aWMgaW50IGNoZWNrX3NyY19hZGRyKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMTU1Mi1cXHRpZiAoIWlwdjZfYWRkcl9hbnkoc2FkZHIpKSB7XFxubmV0L2lwdjQvbmV4dGhvcC5jOjE1NTM6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSVB2NiByb3V0ZXMgdXNpbmcgc291cmNlIGFkZHJlc3MgY2FuIG5vdCB1c2UgbmV4dGhvcCBvYmplY3RzXFxcIik7XFxubmV0L2lwdjQvbmV4dGhvcC5jLTE1NTQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmM9MTU1OT1pbnQgZmliNl9jaGVja19uZXh0aG9wKHN0cnVjdCBuZXh0aG9wICpuaCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMTU2Ny1cXHQgKiBhY3Jvc3MgbXVsdGlwbGUgZmliIGVudHJpZXMuIElmIHRoZSBjb25maWcgd2FudHMgdG8gdXNlIHNvdXJjZVxcbm5ldC9pcHY0L25leHRob3AuYzoxNTY4OlxcdCAqIHJvdXRpbmcgaXQgY2FuIG5vdCB1c2UgbmV4dGhvcCBvYmplY3RzLiBtbHhzdyBhbHNvIGRvZXMgbm90IGFsbG93XFxubmV0L2lwdjQvbmV4dGhvcC5jLTE1NjktXFx0ICogZmliNl9zcmMgb24gcm91dGVzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowMTo0Ny45NDQ5MzA5NTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjUxMTU0ODg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgSVB2NCBOZXR3b3JraW5nIEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBuZXh0aG9wLm9gIGdldHMgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHdpdGggdGhlIGBvYmoteWAgZGlyZWN0aXZlLCBidXQgb25seSB3aGVuIGVpdGhlciBgQ09ORklHX0lORVRgIG9yIGBDT05GSUdfTkVUYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlLCBzdGFuZGFyZCBJUHY0IG5ldHdvcmtpbmcgY29tcG9uZW50cyBuZWVkIHRvIGJlIGluY2x1ZGVkLiBOb3csIEkgd2FudCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbnRleHQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYG5ldC9pcHY0L01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBuZXh0aG9wLm9gIGlzIGludGVncmF0ZWQgYW5kIHdoYXQgb3RoZXIgbW9kdWxlcyBpdCByZWxpZXMgb24gd2l0aGluIHRoZSBJUHY0IHN0YWNrLiBMZXQncyBzZWUgd2hhdCB0aGUgbWFrZWZpbGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQyNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAxOjUwLjE5NjA4ODg2MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eCBUQ1AvSVAgKElORVQpIGxheWVyLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbiAgIDc6XFx0XFx0ICAgICBpcF9pbnB1dC5vIGlwX2ZyYWdtZW50Lm8gaXBfZm9yd2FyZC5vIGlwX29wdGlvbnMubyBcXFxcXFxuICAgODpcXHRcXHQgICAgIGlwX291dHB1dC5vIGlwX3NvY2tnbHVlLm8gaW5ldF9oYXNodGFibGVzLm8gXFxcXFxcbiAgIDk6XFx0XFx0ICAgICBpbmV0X3RpbWV3YWl0X3NvY2subyBpbmV0X2Nvbm5lY3Rpb25fc29jay5vIFxcXFxcXG4gIDEwOlxcdFxcdCAgICAgdGNwLm8gdGNwX2lucHV0Lm8gdGNwX291dHB1dC5vIHRjcF90aW1lci5vIHRjcF9pcHY0Lm8gXFxcXFxcbiAgMTE6XFx0XFx0ICAgICB0Y3BfbWluaXNvY2tzLm8gdGNwX2NvbmcubyB0Y3BfbWV0cmljcy5vIHRjcF9mYXN0b3Blbi5vIFxcXFxcXG4gIDEyOlxcdFxcdCAgICAgdGNwX3JlY292ZXJ5Lm8gdGNwX3VscC5vIFxcXFxcXG4gIDEzOlxcdFxcdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxcXFxuICAxNDpcXHRcXHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXFxcXG4gIDE1OlxcdFxcdCAgICAgZmliX2Zyb250ZW5kLm8gZmliX3NlbWFudGljcy5vIGZpYl90cmllLm8gZmliX25vdGlmaWVyLm8gXFxcXFxcbiAgMTY6XFx0XFx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxcXFxuICAxNzpcXHRcXHQgICAgIG1ldHJpY3MubyBuZXRsaW5rLm8gbmV4dGhvcC5vIHVkcF90dW5uZWxfc3R1Yi5vXFxuICAxODpcXHRcXG4gIDE5OlxcdG9iai0kKENPTkZJR19ORVRfSVBfVFVOTkVMKSArPSBpcF90dW5uZWwub1xcbiAgMjA6XFx0b2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX25ldF9pcHY0Lm9cXG4gIDIxOlxcdG9iai0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG4gIDIyOlxcdG9iai0kKENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMpICs9IGZpYl9ydWxlcy5vXFxuICAyMzpcXHRvYmotJChDT05GSUdfSVBfTVJPVVRFKSArPSBpcG1yLm9cXG4gIDI0OlxcdG9iai0kKENPTkZJR19JUF9NUk9VVEVfQ09NTU9OKSArPSBpcG1yX2Jhc2Uub1xcbiAgMjU6XFx0b2JqLSQoQ09ORklHX05FVF9JUElQKSArPSBpcGlwLm9cXG4gIDI2OlxcdGdyZS15IDo9IGdyZV9kZW11eC5vXFxuICAyNzpcXHRmb3UteSA6PSBmb3VfY29yZS5vIGZvdV9ubC5vIGZvdV9icGYub1xcbiAgMjg6XFx0b2JqLSQoQ09ORklHX05FVF9GT1UpICs9IGZvdS5vXFxuICAyOTpcXHRvYmotJChDT05GSUdfTkVUX0lQR1JFX0RFTVVYKSArPSBncmUub1xcbiAgMzA6XFx0b2JqLSQoQ09ORklHX05FVF9JUEdSRSkgKz0gaXBfZ3JlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDE6NTAuMTk2MTg4NzMyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NTY4MTkyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBmb3IgSW5ldCBTdXBwb3J0KipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBDT05GSUdfSU5FVGAgaXMgYmVpbmcgaGFuZGxlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgYnVpbGQgc3lzdGVtIGZpbGVzLCBzcGVjaWZpY2FsbHkgYG5ldC9NYWtlZmlsZWAgYW5kIGBLY29uZmlnYC4gVGhlc2UgYXJlIHR5cGljYWxseSB0aGUgZ28tdG8gbG9jYXRpb25zIGZvciBidWlsZCBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIGBNYWtlZmlsZWAgd2lsbCBzaG93IG1lIGhvdyBgQ09ORklHX0lORVRgIGFmZmVjdHMgdGhlIGNvbXBpbGF0aW9uIG9mIHZhcmlvdXMgbmV0d29ya2luZyBjb21wb25lbnRzLCB3aGlsZSBgS2NvbmZpZ2Agc2hvdWxkIHJldmVhbCB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIHRoZSBsb2dpYyBiZWhpbmQgaG93IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgcHJlc2VudGVkIHRvIHRoZSB1c2VyLiBJJ2xsIHN0YXJ0IHdpdGggdGhvc2UgYW5kIHNlZSB3aGVyZSB0aGV5IGxlYWQuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IHRvIGhvdyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgY29udHJvbGxlZCB3aXRoaW4gdGhlIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjk5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowMTo1Mi4wNTMwMTAxNTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODQ0ODU2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotLippcHY0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX05FVEZJTFRFUilcXHRcXHQrPSBuZXRmaWx0ZXIvXFxubmV0L01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19JTkVUKVxcdFxcdCs9IGlwdjQvXFxubmV0L01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19UTFMpXFx0XFx0Kz0gdGxzL1xcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX05FVF9JUF9UVU5ORUwpICs9IGlwX3R1bm5lbC5vXFxubmV0L2lwdjQvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX25ldF9pcHY0Lm9cXG5uZXQvaXB2NC9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZT02ND1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHVkcF9icGYub1xcbm5ldC9pcHY0L01ha2VmaWxlOjY1Om9iai0kKENPTkZJR19ORVRMQUJFTCkgKz0gY2lwc29faXB2NC5vXFxubmV0L2lwdjQvTWFrZWZpbGUtNjYtXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNi0jIGRlZnJhZ1xcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19ORl9ERUZSQUdfSVBWNCkgKz0gbmZfZGVmcmFnX2lwdjQub1xcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS04LVxcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19ORl9TT0NLRVRfSVBWNCkgKz0gbmZfc29ja2V0X2lwdjQub1xcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfTkZfVFBST1hZX0lQVjQpICs9IG5mX3Rwcm94eV9pcHY0Lm9cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTEtXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTEyLSMgcmVqZWN0XFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19ORl9SRUpFQ1RfSVBWNCkgKz0gbmZfcmVqZWN0X2lwdjQub1xcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS0xNC1cXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZT0yMT1vYmotJChDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUMpICs9IG5mX25hdF9zbm1wX2Jhc2ljLm9cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjItXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19ORlRfUkVKRUNUX0lQVjQpICs9IG5mdF9yZWplY3RfaXB2NC5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19ORlRfRklCX0lQVjQpICs9IG5mdF9maWJfaXB2NC5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19ORlRfRFVQX0lQVjQpICs9IG5mdF9kdXBfaXB2NC5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTI2LVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlPTUxPW9iai0kKENPTkZJR19JUF9ORl9BUlBGSUxURVIpICs9IGFycHRhYmxlX2ZpbHRlci5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTUyLVxcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfTkZfRFVQX0lQVjQpICs9IG5mX2R1cF9pcHY0Lm9cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAxOjUyLjE5MTQ5MDk0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTA0MDkzMjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXR3b3JrIEZvcndhcmRpbmcgQ29kZSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgYENPTkZJR19JTkVUYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBzZXQuIE5vdywgbXkgZm9jdXMgaXMgb24gdGhlIGBuZXQvaXB2NC9uZXh0aG9wLmNgIGZpbGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgcmVtb3ZlX25oX2dycF9lbnRyeWAuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgc3ltYm9scyBvciBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlIHRoYXQgaW50ZXJhY3Qgd2l0aCBpdCwgZWl0aGVyIGJ5IGNhbGxpbmcgaXQgb3IgYmVpbmcgZW50cnkgcG9pbnRzIHRvIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eT8gSSBzaG91bGQgcmV2aWV3IHRoaXMgZmlsZSBjbG9zZWx5LiBOZXh0LCBJ4oCZbGwgbmVlZCB0byB0aG9yb3VnaGx5IHJldmlldyB0aGUgY2FsbCBzaXRlcyBvZiBgcmVtb3ZlX25oX2dycF9lbnRyeWAgaXRzZWxmIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGltcGFjdC4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyB1c2VkIGFuZCBmb3Igd2hhdD9cblxuXG4iLCJJbnB1dFRva2VucyI6ODIxMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAxOjU0LjI5NTU4ODQ4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjAwNDc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZW1vdmVfbmhfZ3JwX2VudHJ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L25leHRob3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9uZXh0aG9wLmM9MjAzMz1zdGF0aWMgYm9vbCBfX211c3RfY2hlY2tcXG5uZXQvaXB2NC9uZXh0aG9wLmM6MjAzNDpyZW1vdmVfbmhfZ3JwX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZSxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjAzNS1cXHRcXHQgICAgc3RydWN0IG5sX2luZm8gKm5saW5mbywgc3RydWN0IGxpc3RfaGVhZCAqZGVmZXJyZWRfZnJlZSlcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYz0yMTEzPXJlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTIxMjYtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5oZ2UsIHRtcCwgXFx1MDAyNm5oLVxcdTAwM2VncnBfbGlzdCwgbmhfbGlzdClcXG5uZXQvaXB2NC9uZXh0aG9wLmM6MjEyNzpcXHRcXHRuZWVkX2ZsdXNoIHw9IHJlbW92ZV9uaF9ncnBfZW50cnkobmV0LCBuaGdlLCBubGluZm8sXFxubmV0L2lwdjQvbmV4dGhvcC5jLTIxMjgtXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2ZGVmZXJyZWRfZnJlZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAxOjU0LjM1MTU5Nzg1N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzQzMzAwMjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgcmVtb3ZlX25leHRob3BfZnJvbV9ncm91cHNgIENhbGxlcnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGNhbGwgZ3JhcGggZm9yIGByZW1vdmVfbmV4dGhvcF9mcm9tX2dyb3Vwc2AuIE15IGluaXRpYWwgYXBwcm9hY2ggd291bGQgYmUgdG8gdHJhY2UgdGhlIGZ1bmN0aW9uJ3MgdXNhZ2UsIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIGRhdGEgaW50ZWdyaXR5IGFuZCBuZXR3b3JrIGJlaGF2aW9yLiBJJ20gaW1tZWRpYXRlbHkgY29uc2lkZXJpbmcgaG93IHRoaXMgcmVtb3ZhbCBpbXBhY3RzIHRoZSByb3V0aW5nIHRhYmxlcyBhbmQsIGNyaXRpY2FsbHksIGFueSBkZXBlbmRlbmNpZXMgb24gdGhvc2UgZ3JvdXBzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBjbGVhbnVwLCBvciBpcyB0aGlzIGEgY3JpdGljYWwgcGF0aCBvcGVyYXRpb24gd2l0aCBwb3RlbnRpYWwgY2FzY2FkaW5nIGVmZmVjdHMgb24gdHJhZmZpYyBmb3J3YXJkaW5nP1xuXG5JIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgbW9kdWxlcyBhbmQgc2NlbmFyaW9zIGNhbGxpbmcgdGhpcy4gQXJlIHdlIGRlYWxpbmcgd2l0aCBkeW5hbWljIHJvdXRpbmcgcHJvdG9jb2wgaW50ZXJhY3Rpb25zIChCR1AsIE9TUEYsIGV0Yy4pLCBvciBpcyB0aGlzIHRyaWdnZXJlZCBieSBzb21lIHNvcnQgb2YgbWFuYWdlbWVudCBpbnRlcmZhY2Ugb3IgY29uZmlndXJhdGlvbiBjaGFuZ2U/IElzIGl0IGEgc3RhbmRhbG9uZSBmdW5jdGlvbiBpbiBhIGNlbnRyYWwgZGF0YSBwbGFuZSwgb3IgaXMgaXQgaW52b2tlZCBieSBtdWx0aXBsZSwgcG90ZW50aWFsbHkgZGlzdHJpYnV0ZWQsIGNvbnRyb2wgcGxhbmUgZWxlbWVudHM/IEtub3dpbmcgdGhlIGNvbnRleHQgd2lsbCBwb2ludCB0b3dhcmRzIGNvbW1vbiBpc3N1ZXMuXG5cblNwZWNpZmljYWxseSwgSSB3YW50IHRvIGxvb2sgZm9yOlxuXG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGhhcHBlbnMgaWYgdGhlIGByZW1vdmVfbmV4dGhvcF9mcm9tX2dyb3Vwc2AgZnVuY3Rpb24gZmFpbHM/IEFyZSBmYWlsdXJlcyBncmFjZWZ1bGx5IGhhbmRsZWQsIG9yIGFyZSB3ZSByaXNraW5nIG5ldHdvcmsgYmxhY2tob2xlcz9cbiogICAqKkNvbmN1cnJlbmN5OioqIEFyZSB0aGVyZSBhbnkgY29uY3VycmVuY3kgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBjYWxsPyBTcGVjaWZpY2FsbHksIGNhbiBtdWx0aXBsZSBwcm9jZXNzZXMgYmUgcmVtb3ZpbmcgdGhlIHNhbWUgbmV4dCBob3Agc2ltdWx0YW5lb3VzbHksIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gcmFjZSBjb25kaXRpb25zPyBBcmUgdGhlcmUgbG9ja3Mgb3Igc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgaW4gcGxhY2U/XG4qICAgKipUcmFuc2FjdGlvbnM6KiogSXMgdGhlIG5leHQgaG9wIHJlbW92YWwgcGFydCBvZiBhIGxhcmdlciBhdG9taWMgdHJhbnNhY3Rpb24/IElmIHNvLCB3aGF0IGlzIHRoZSBzY29wZSBvZiB0aGF0IHRyYW5zYWN0aW9uLCBhbmQgaG93IGRvZXMgaXQgZW5zdXJlIGRhdGEgY29uc2lzdGVuY3kgYWNyb3NzIHRoZSBuZXR3b3JrP1xuKiAgICoqQXVkaXRpbmc6KiogSXMgdGhlcmUgYW55IGxvZ2dpbmcgYXJvdW5kIHRoZSBjYWxsLCB0byB1bmRlcnN0YW5kIF93aGVuXyBhbmQgX3doeV8gYSBuZXh0IGhvcCBpcyBiZWluZyByZW1vdmVkPyBJcyB0aGVyZSBlbm91Z2ggY29udGV4dCByZWNvcmRlZCB0byBkZWJ1ZyBpc3N1ZXMgaW4gYSBwcm9kdWN0aW9uIGVudmlyb25tZW50P1xuKiAgICoqUGVyZm9ybWFuY2U6KiogSSdtIGFsc28gdGhpbmtpbmcgYWJvdXQgdGhlIHNjYWxlIG9mIHRoZSBvcGVyYXRpb24uIERvZXMgdGhpcyBmdW5jdGlvbiBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gYmUgYSBib3R0bGVuZWNrPyBJZiBzbywgd2hhdCBhcmUgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgcmVtb3ZhbCBpdHNlbGYgKGUuZy4sIGhhc2ggbG9va3VwcywgbGlzdCBtYW5pcHVsYXRpb25zKT9cblxuVWx0aW1hdGVseSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoYXQgdGhpcyBpcyBhIGZhaXJseSBsb3ctbGV2ZWwgZnVuY3Rpb24gYW5kIHRyYWNpbmcgdGhvc2UgY2FsbGVycyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIG5ldHdvcmsncyBkYXRhIHBsYW5lIHN0YXRlIGlzIG1haW50YWluZWQsIGFzIHdlbGwgYXMgZ2l2aW5nIG1lIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHBvc3NpYmxlIGZhaWx1cmUgbW9kZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MjcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowMTo1OC4wOTQ5MDE2OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA1ODc2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVtb3ZlX25leHRob3BfZnJvbV9ncm91cHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvbmV4dGhvcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L25leHRob3AuYz0yMTEyPXN0YXRpYyBib29sIF9fbXVzdF9jaGVja1xcbm5ldC9pcHY0L25leHRob3AuYzoyMTEzOnJlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxcbm5ldC9pcHY0L25leHRob3AuYy0yMTE0LVxcdFxcdFxcdCAgIHN0cnVjdCBubF9pbmZvICpubGluZm8pXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmM9MjE5Nj1zdGF0aWMgYm9vbCBfX211c3RfY2hlY2sgX19yZW1vdmVfbmV4dGhvcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXh0aG9wICpuaCxcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0yMjA5LVxcbm5ldC9pcHY0L25leHRob3AuYzoyMjEwOlxcdFxcdG5lZWRfZmx1c2ggfD0gcmVtb3ZlX25leHRob3BfZnJvbV9ncm91cHMobmV0LCBuaCwgbmxpbmZvKTtcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjIxMS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAxOjU4LjE1NTQ5Njg5N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDA4MzU4Njk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYF9fcmVtb3ZlX25leHRob3BgIENhbGxlciBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgYXNraW5nIG1lIHRvIGxvb2sgYXQgYWxsIHRoZSBwbGFjZXMgd2l0aGluIHRoaXMgY29kZSB0aGF0IGNhbGwgdGhlIGBfX3JlbW92ZV9uZXh0aG9wYCBmdW5jdGlvbi4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgb3IgcmVmYWN0b3JpbmcgdGFzay4gTXkgaW5pdGlhbCBhcHByb2FjaCB3b3VsZCBiZSB0byBsZXZlcmFnZSBteSBrbm93bGVkZ2Ugb2YgdGhlIGNvZGViYXNlIGFuZCBhbnkgdG9vbHMgYXZhaWxhYmxlLiBJJ2Qgc3RhcnQgd2l0aCBhIHNpbXBsZSBncmVwIG9yIGBmaW5kYCBjb21tYW5kIGlmIEknbSB3b3JraW5nIGluIGEgY29tbWFuZC1saW5lIGVudmlyb25tZW50LCBvciB1c2UgdGhlIFwiZmluZCBhbGwgcmVmZXJlbmNlc1wiIGZlYXR1cmUgaW4gbXkgSURFIGlmIEknbSBpbiBvbmUuIEknZCBiZSBsb29raW5nIGZvciBhbGwgb2NjdXJyZW5jZXMgb2YgdGhhdCBmdW5jdGlvbiBuYW1lLCBpbmNsdWRpbmcgYW55IHBvdGVudGlhbCB2YXJpYXRpb25zIHRoYXQgbWlnaHQgaW5kaWNhdGUgaG93IGl0J3MgYmVpbmcgdXNlZCDigJMgbWF5YmUgYSBuYW1lc3BhY2UgcHJlZml4IG9yIGEgbWV0aG9kIGNhbGwgb24gYW4gb2JqZWN0LlxuXG5PbmNlIEkgaGF2ZSBhIGxpc3Qgb2YgY2FsbGVycywgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgZWFjaCBjYWxsLiBJ4oCZZCB3YW50IHRvIHF1aWNrbHkgc2NhbiB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgcHVycG9zZSBvZiB0aGUgY2FsbDogV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkPyBXaGF0J3MgdGhlIG92ZXJhbGwgbG9naWMgZmxvdz8gV2hhdCdzIHRoZSBleHBlY3RlZCBzdGF0ZSBvZiB0aGUgc3lzdGVtIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGBfX3JlbW92ZV9uZXh0aG9wYCBmdW5jdGlvbiBleGVjdXRlcz8gSeKAmWQgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uZGl0aW9uYWwgc3RhdGVtZW50cyBvciBsb29wcyB0aGF0IG1pZ2h0IGltcGFjdCBob3cgb2Z0ZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIHRoZSBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIGl0IGdldHMgaW52b2tlZC5cblxuSWYgSSdtIHdvcmtpbmcgb24gYSBwcm9qZWN0IHdpdGggZ29vZCBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzLCB0aGF0IHdpbGwgYmUgYW4gaW52YWx1YWJsZSByZXNvdXJjZS4gSWYgbm90LCBJ4oCZbGwgaGF2ZSB0byByZWx5IG9uIG15IGFiaWxpdHkgdG8gcXVpY2tseSBncm9rIHRoZSBjb2RlLiBGb3IgZWFjaCBjYWxsZXIsIEkgd291bGQgY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiAqbm90KiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIElzIGl0IGNyaXRpY2FsIHRvIGRhdGEgaW50ZWdyaXR5PyBJcyBpdCBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbj8gRG9lcyBpdCBoYXZlIGFueSBpbXBsaWNhdGlvbnMgZm9yIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0/IEluIHRoZSBlbmQsIHRoZSBhaW0gaXMgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBuZXh0IHN0ZXBzIHdpbGwgbGlrZWx5IGJlIGRldGVybWluZWQgYnkgd2hhdCBJIGZpbmQgaW4gdGhlc2UgaW5pdGlhbCBpbnZlc3RpZ2F0aW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6OTQ5NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAyOjAxLjU2Mzg1ODMyNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA5NTcwOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19yZW1vdmVfbmV4dGhvcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9uZXh0aG9wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV4dGhvcC5jPTIxNDI9c3RhdGljIHZvaWQgcmVtb3ZlX25leHRob3BfZ3JvdXAoc3RydWN0IG5leHRob3AgKm5oLCBzdHJ1Y3QgbmxfaW5mbyAqbmxpbmZvKVxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTIxNjMtLyogbm90IGNhbGxlZCBmb3IgbmV4dGhvcCByZXBsYWNlICovXFxubmV0L2lwdjQvbmV4dGhvcC5jOjIxNjQ6c3RhdGljIGJvb2wgX19tdXN0X2NoZWNrIF9fcmVtb3ZlX25leHRob3BfZmliKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjE2NS1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV4dGhvcCAqbmgpXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjE5NS1cXG5uZXQvaXB2NC9uZXh0aG9wLmM6MjE5NjpzdGF0aWMgYm9vbCBfX211c3RfY2hlY2sgX19yZW1vdmVfbmV4dGhvcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXh0aG9wICpuaCxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjE5Ny1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBubF9pbmZvICpubGluZm8pXFxubmV0L2lwdjQvbmV4dGhvcC5jLTIxOTgte1xcbm5ldC9pcHY0L25leHRob3AuYzoyMTk5OlxcdGJvb2wgbmVlZF9mbHVzaCA9IF9fcmVtb3ZlX25leHRob3BfZmliKG5ldCwgbmgpO1xcbm5ldC9pcHY0L25leHRob3AuYy0yMjAwLVxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jPTIyMTY9c3RhdGljIGJvb2wgX19tdXN0X2NoZWNrIHJlbW92ZV9uZXh0aG9wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTIyMjgtXFxubmV0L2lwdjQvbmV4dGhvcC5jOjIyMjk6XFx0bmVlZF9mbHVzaCA9IF9fcmVtb3ZlX25leHRob3AobmV0LCBuaCwgbmxpbmZvKTtcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjIzMC1cXHRuaF9iYXNlX3NlcV9pbmMobmV0KTtcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYz0yNTc2PXN0YXRpYyBpbnQgcmVwbGFjZV9uZXh0aG9wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm9sZCxcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0yNjI3LVxcbm5ldC9pcHY0L25leHRob3AuYzoyNjI4OlxcdFxcdFdBUk5fT05fT05DRShfX3JlbW92ZV9uZXh0aG9wKG5ldCwgbmV3LCBOVUxMKSk7XFxubmV0L2lwdjQvbmV4dGhvcC5jLTI2MjktXFx0XFx0bmV4dGhvcF9wdXQobmV3KTtcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYz0zMDEwPXN0YXRpYyBzdHJ1Y3QgbmV4dGhvcCAqbmV4dGhvcF9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmhfY29uZmlnICpjZmcsXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzAzOC1cXHRpZiAoZXJyKSB7XFxubmV0L2lwdjQvbmV4dGhvcC5jOjMwMzk6XFx0XFx0V0FSTl9PTl9PTkNFKF9fcmVtb3ZlX25leHRob3AobmV0LCBuaCwgTlVMTCkpO1xcbm5ldC9pcHY0L25leHRob3AuYy0zMDQwLVxcdFxcdG5leHRob3BfcHV0KG5oKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDI6MDEuNjM0ODIwOTAxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1MzgxODY5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIG9wZXJhdGlvbnMgYW5kIHdoZXJlIEknZCBzdGFydCBsb29raW5nOlxuXG4qKkFuYWx5emluZyBOZXh0aG9wIFJlbW92YWwgUm91dGluZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBhcmUgYWxsIGNsZWFybHkgcmVsYXRlZCB0byByZW1vdmluZyBuZXh0aG9wcyB3aXRoaW4gdGhlIElQdjQgcm91dGluZyBjb250ZXh0LiBUaGUgbmFtZXMgdGVsbCB0aGUgc3Rvcnk6IGByZW1vdmVfbmhfZ3JwX2VudHJ5YCBzdWdnZXN0cyByZW1vdmluZyBhbiBlbnRyeSBmcm9tIGEgbmV4dGhvcCBncm91cCwgYHJlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzYCBzb3VuZHMgbGlrZSBpdCBoYW5kbGVzIHJlbW92aW5nIGEgbmV4dGhvcCBmcm9tICptdWx0aXBsZSogZ3JvdXBzLCBgcmVtb3ZlX25leHRob3BgIGlzIHByb2JhYmx5IHRoZSBjb3JlIG5leHRob3AgcmVtb3ZhbCByb3V0aW5lIGl0c2VsZiwgYW5kIHRoZW4gd2UgaGF2ZSB0aGUgcm91dGluZyB0YWJsZSBtYW5hZ2VtZW50IChSVE0pIGZ1bmN0aW9uczogYHJ0bV9kZWxfbmV4dGhvcGAgZm9yIGRlbGV0aW5nIGEgbmV4dGhvcCBhbmQgYHJ0bV9uZXdfbmV4dGhvcGAgZm9yIGl0cyBjcmVhdGlvbi5cblxuR2l2ZW4gdGhlIHRhc2sgYXQgaGFuZCwgSSdkIGltbWVkaWF0ZWx5IGp1bXAgdG8gZXhhbWluaW5nIGBydG1fZGVsX25leHRob3BgLiBJdCdzIHRoZSBSVE0gZnVuY3Rpb24gZm9yICpkZWxldGlvbiosIHdoaWNoIG1ha2VzIGl0IHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBhIG5leHRob3AgaXMgY29tcGxldGVseSByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCByZXNvdXJjZXMgYXJlIGZyZWVkLCBob3cgdGhlIHJlZmVyZW5jZSBjb3VudHMgYXJlIG1hbmFnZWQsIGFuZCBob3cgdGhlIHJlbW92YWwgY2FzY2FkZXMgdGhyb3VnaCBhbnkgYXNzb2NpYXRlZCBncm91cHMgb3IgdGFibGVzLiBBbmQgdGhhdCBtZWFucyBhIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgbmV0L2lwdjQvbmV4dGhvcC5jYCB0byBzZWUgaG93IGl0IHdvcmtzIGluIHRoZSBJUHY0IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjQzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDI6MDYuMTczMDEwOTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDk1NzYyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydG1fLipuZXh0aG9wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L25leHRob3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9uZXh0aG9wLmM9MzI4Nz1zdGF0aWMgaW50IHJ0bV90b19uaF9jb25maWdfcnRubChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKip0YixcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0zMzE4LS8qIHJ0bmwgKi9cXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzMxOTpzdGF0aWMgaW50IHJ0bV9uZXdfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzMyMC1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmM9MzM2MD1zdGF0aWMgaW50IG5oX3ZhbGlkX2dldF9kZWxfcmVxKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTMzODgtLyogcnRubCAqL1xcbm5ldC9pcHY0L25leHRob3AuYzozMzg5OnN0YXRpYyBpbnQgcnRtX2RlbF9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC9pcHY0L25leHRob3AuYy0zMzkwLVxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0zNDI2LS8qIHJ0bmwgKi9cXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzQyNzpzdGF0aWMgaW50IHJ0bV9nZXRfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzQyOC1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmM9MzU3OD1ydG1fZHVtcF9uaF9jdHgoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTM1ODUtXFxubmV0L2lwdjQvbmV4dGhvcC5jOjM1ODY6c3RhdGljIGludCBydG1fZHVtcF93YWxrX25leHRob3BzKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvbmV4dGhvcC5jLTM1ODctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzY0NS1cXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzY0NjpzdGF0aWMgaW50IHJ0bV9kdW1wX25leHRob3BfY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbm5ldC9pcHY0L25leHRob3AuYy0zNjQ3LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV4dGhvcCAqbmgsIHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzY2MC0vKiBydG5sICovXFxubmV0L2lwdjQvbmV4dGhvcC5jOjM2NjE6c3RhdGljIGludCBydG1fZHVtcF9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzY2Mi17XFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzY3Mi1cXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzY3MzpcXHRlcnIgPSBydG1fZHVtcF93YWxrX25leHRob3BzKHNrYiwgY2IsIHJvb3QsIGN0eCxcXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzY3NDpcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZydG1fZHVtcF9uZXh0aG9wX2NiLCBcXHUwMDI2ZmlsdGVyKTtcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzY3NS1cXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYz0zNzY5PXJ0bV9kdW1wX3Jlc19idWNrZXRfY3R4KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0zNzc2LVxcbm5ldC9pcHY0L25leHRob3AuYzozNzc3OnN0cnVjdCBydG1fZHVtcF9uZXh0aG9wX2J1Y2tldF9kYXRhIHtcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzc3OC1cXHRzdHJ1Y3QgcnRtX2R1bXBfcmVzX2J1Y2tldF9jdHggKmN0eDtcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0zNzgxLVxcbm5ldC9pcHY0L25leHRob3AuYzozNzgyOnN0YXRpYyBpbnQgcnRtX2R1bXBfbmV4dGhvcF9idWNrZXRfbmgoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzc4My1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxubmV0L2lwdjQvbmV4dGhvcC5jLTM3ODQtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5leHRob3AgKm5oLFxcbm5ldC9pcHY0L25leHRob3AuYzozNzg1OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBydG1fZHVtcF9uZXh0aG9wX2J1Y2tldF9kYXRhICpkZClcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzc4Ni17XFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzgyNC1cXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzgyNTpzdGF0aWMgaW50IHJ0bV9kdW1wX25leHRob3BfYnVja2V0X2NiKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvbmV4dGhvcC5jLTM4MjYtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTM4Mjgte1xcbm5ldC9pcHY0L25leHRob3AuYzozODI5OlxcdHN0cnVjdCBydG1fZHVtcF9uZXh0aG9wX2J1Y2tldF9kYXRhICpkZCA9IGRhdGE7XFxubmV0L2lwdjQvbmV4dGhvcC5jLTM4MzAtXFx0c3RydWN0IG5oX2dyb3VwICpuaGc7XFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzgzOC1cXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzgzOTpcXHRyZXR1cm4gcnRtX2R1bXBfbmV4dGhvcF9idWNrZXRfbmgoc2tiLCBjYiwgbmgsIGRkKTtcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzg0MC19XFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzg0Mi0vKiBydG5sICovXFxubmV0L2lwdjQvbmV4dGhvcC5jOjM4NDM6c3RhdGljIGludCBydG1fZHVtcF9uZXh0aG9wX2J1Y2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L25leHRob3AuYy0zODQ0LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0zODQ2LVxcdHN0cnVjdCBydG1fZHVtcF9yZXNfYnVja2V0X2N0eCAqY3R4ID0gcnRtX2R1bXBfcmVzX2J1Y2tldF9jdHgoY2IpO1xcbm5ldC9pcHY0L25leHRob3AuYzozODQ3OlxcdHN0cnVjdCBydG1fZHVtcF9uZXh0aG9wX2J1Y2tldF9kYXRhIGRkID0geyAuY3R4ID0gY3R4IH07XFxubmV0L2lwdjQvbmV4dGhvcC5jLTM4NDgtXFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzg2MC1cXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihuaCk7XFxubmV0L2lwdjQvbmV4dGhvcC5jOjM4NjE6XFx0XFx0ZXJyID0gcnRtX2R1bXBfbmV4dGhvcF9idWNrZXRfbmgoc2tiLCBjYiwgbmgsIFxcdTAwMjZkZCk7XFxubmV0L2lwdjQvbmV4dGhvcC5jLTM4NjItXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0zODY0LVxcbm5ldC9pcHY0L25leHRob3AuYzozODY1OlxcdFxcdGVyciA9IHJ0bV9kdW1wX3dhbGtfbmV4dGhvcHMoc2tiLCBjYiwgcm9vdCwgXFx1MDAyNmN0eC1cXHUwMDNlbmgsXFxubmV0L2lwdjQvbmV4dGhvcC5jOjM4NjY6XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cnRtX2R1bXBfbmV4dGhvcF9idWNrZXRfY2IsIFxcdTAwMjZkZCk7XFxubmV0L2lwdjQvbmV4dGhvcC5jLTM4NjctXFx0fVxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jPTM4OTU9c3RhdGljIGludCBuaF92YWxpZF9nZXRfYnVja2V0X3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0zOTI1LS8qIHJ0bmwgKi9cXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzkyNjpzdGF0aWMgaW50IHJ0bV9nZXRfbmV4dGhvcF9idWNrZXQoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L2lwdjQvbmV4dGhvcC5jLTM5MjctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmM9NDIwMT1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgbmV4dGhvcF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbm5ldC9pcHY0L25leHRob3AuYzo0MjAyOlxcdHsubXNndHlwZSA9IFJUTV9ORVdORVhUSE9QLCAuZG9pdCA9IHJ0bV9uZXdfbmV4dGhvcCxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDIwMy1cXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfUEVSTkVUfSxcXG5uZXQvaXB2NC9uZXh0aG9wLmM6NDIwNDpcXHR7Lm1zZ3R5cGUgPSBSVE1fREVMTkVYVEhPUCwgLmRvaXQgPSBydG1fZGVsX25leHRob3AsXFxubmV0L2lwdjQvbmV4dGhvcC5jLTQyMDUtXFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1BFUk5FVH0sXFxubmV0L2lwdjQvbmV4dGhvcC5jOjQyMDY6XFx0ey5tc2d0eXBlID0gUlRNX0dFVE5FWFRIT1AsIC5kb2l0ID0gcnRtX2dldF9uZXh0aG9wLFxcbm5ldC9pcHY0L25leHRob3AuYzo0MjA3OlxcdCAuZHVtcGl0ID0gcnRtX2R1bXBfbmV4dGhvcH0sXFxubmV0L2lwdjQvbmV4dGhvcC5jOjQyMDg6XFx0ey5tc2d0eXBlID0gUlRNX0dFVE5FWFRIT1BCVUNLRVQsIC5kb2l0ID0gcnRtX2dldF9uZXh0aG9wX2J1Y2tldCxcXG5uZXQvaXB2NC9uZXh0aG9wLmM6NDIwOTpcXHQgLmR1bXBpdCA9IHJ0bV9kdW1wX25leHRob3BfYnVja2V0fSxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDIxMC1cXHR7LnByb3RvY29sID0gUEZfSU5FVCwgLm1zZ3R5cGUgPSBSVE1fTkVXTkVYVEhPUCxcXG5uZXQvaXB2NC9uZXh0aG9wLmM6NDIxMTpcXHQgLmRvaXQgPSBydG1fbmV3X25leHRob3AsIC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1BFUk5FVH0sXFxubmV0L2lwdjQvbmV4dGhvcC5jLTQyMTItXFx0ey5wcm90b2NvbCA9IFBGX0lORVQsIC5tc2d0eXBlID0gUlRNX0dFVE5FWFRIT1AsXFxubmV0L2lwdjQvbmV4dGhvcC5jOjQyMTM6XFx0IC5kdW1waXQgPSBydG1fZHVtcF9uZXh0aG9wfSxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDIxNC1cXHR7LnByb3RvY29sID0gUEZfSU5FVDYsIC5tc2d0eXBlID0gUlRNX05FV05FWFRIT1AsXFxubmV0L2lwdjQvbmV4dGhvcC5jOjQyMTU6XFx0IC5kb2l0ID0gcnRtX25ld19uZXh0aG9wLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9QRVJORVR9LFxcbm5ldC9pcHY0L25leHRob3AuYy00MjE2LVxcdHsucHJvdG9jb2wgPSBQRl9JTkVUNiwgLm1zZ3R5cGUgPSBSVE1fR0VUTkVYVEhPUCxcXG5uZXQvaXB2NC9uZXh0aG9wLmM6NDIxNzpcXHQgLmR1bXBpdCA9IHJ0bV9kdW1wX25leHRob3B9LFxcbm5ldC9pcHY0L25leHRob3AuYy00MjE4LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAyOjA2LjMxNzk3NTA4NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODAwNzkwODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IFBhdGNoIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIHNlZS4gTXkgZm9jdXMgc3ltYm9scyBmb3IgdGVzdGluZyBhcmUgYHJlbW92ZV9uaF9ncnBfZW50cnlgLCBgcmVtb3ZlX25leHRob3BfZnJvbV9ncm91cHNgLCBgcnRtX2RlbF9uZXh0aG9wYCwgYW5kIGBydG1fbmV3X25leHRob3BgLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBuZWVkZWQgaXMgYElORVRgLlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gY29uZmlybSBldmVyeXRoaW5nIGlzIGFzIGl0IHNob3VsZCBiZS4gVGhlIHBhdGNoIGhhcyBgV29ydGhGdXp6aW5nYCBzZXQgdG8gYHRydWVgLCB3aGljaCBpcyB3aGF0IEkgZXhwZWN0LiBNeSB0YXJnZXQgY29uZmlndXJhdGlvbnMgYXJlIGxpc3RlZCBhcyBgW1wiSU5FVFwiXWAsIGFuZCBteSBzeW1ib2xzIGFyZSBjb3JyZWN0LiBUaGUgcmVhc29uaW5nIHNlZW1zIGNvbmNpc2UgYW5kIHJlbGV2YW50LiBUaGlzIHBhdGNoIGluaXRpYWxpemVzIHRoZSBgZXh0YWNrYCBzdHJ1Y3R1cmUgaW4gYHJlbW92ZV9uaF9ncnBfZW50cnlgIHRvIHByZXZlbnQgdW5pbml0aWFsaXplZCByZWFkcyB3aGVuIG5vdGlmaWVyIGVycm9ycyBoYXBwZW4gZHVyaW5nIG5leHRob3AgZ3JvdXAgZW50cnkgcmVtb3ZhbC4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGl0J3MgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGFjY2Vzc2libGUgdmlhIG5ldGxpbmssIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdnVsbmVyYWJpbGl0eSBJJ20gaW50ZXJlc3RlZCBpbi4gU2VlbXMgdG8gYmUgYSBzb2xpZCBmaXguXG5cbkFscmlnaHQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjA2LCJPdXRwdXRUb2tlbnMiOjE1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowMjowOS4xMTg3NzA0MzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc5MjQ1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZW1vdmVfbmhfZ3JwX2VudHJ5XCIsXG4gICAgXCJyZW1vdmVfbmV4dGhvcF9mcm9tX2dyb3Vwc1wiLFxuICAgIFwicnRtX2RlbF9uZXh0aG9wXCIsXG4gICAgXCJydG1fbmV3X25leHRob3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbml0aWFsaXplcyB0aGUgbmV0bGlua19leHRfYWNrIHN0cnVjdHVyZSBpbiByZW1vdmVfbmhfZ3JwX2VudHJ5KCkgdG8gcHJldmVudCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGlmIG5vdGlmaWVycyByZXR1cm4gYW4gZXJyb3IuIFRoZSBjb2RlIHJlc2lkZXMgaW4gdGhlIGNvcmUgSVB2NCBuZXh0aG9wIG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBuZXh0aG9wIGNvbW1hbmRzIChSVE1fREVMTkVYVEhPUCwgUlRNX05FV05FWFRIT1ApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZW1vdmVfbmhfZ3JwX2VudHJ5XCIsXG4gICAgXCJyZW1vdmVfbmV4dGhvcF9mcm9tX2dyb3Vwc1wiLFxuICAgIFwicnRtX2RlbF9uZXh0aG9wXCIsXG4gICAgXCJydG1fbmV3X25leHRob3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbml0aWFsaXplcyB0aGUgbmV0bGlua19leHRfYWNrIHN0cnVjdHVyZSBpbiByZW1vdmVfbmhfZ3JwX2VudHJ5KCkgdG8gcHJldmVudCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGlmIG5vdGlmaWVycyByZXR1cm4gYW4gZXJyb3IuIFRoZSBjb2RlIHJlc2lkZXMgaW4gdGhlIGNvcmUgSVB2NCBuZXh0aG9wIG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBuZXh0aG9wIGNvbW1hbmRzIChSVE1fREVMTkVYVEhPUCwgUlRNX05FV05FWFRIT1ApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowMjowOS4yNDY3MDM1MzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjEwMTM4NDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDI6MDkuMjQ3MTg0OTUxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQyMDk2NTMwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFja2Agd2FzIGRlY2xhcmVkIG9uIHRoZSBzdGFjayB3aXRob3V0IGluaXRpYWxpemF0aW9uIGluIGByZW1vdmVfbmhfZ3JwX2VudHJ5KClgLiBCeSBpbml0aWFsaXppbmcgaXQgd2l0aCBgPSB7fWAsIGFsbCBmaWVsZHMgb2YgYGV4dGFja2AgYXJlIGV4cGxpY2l0bHkgemVyb2VkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGxlYWsgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZSwgb3IgYWx0ZXIgY29udHJvbCBmbG93IGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVmODZkMTMwMDM4MjNjN2FjNDYwODI5MzUzZGQ3ZTZjZDQyZmRjYjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDEwOjAxOjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV4dGhvcC5jIGIvbmV0L2lwdjQvbmV4dGhvcC5jXG5pbmRleCBhN2MyYjhkY2VkNGU3Li40MmU1NWI1YTc1NWVlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV4dGhvcC5jXG4rKysgYi9uZXQvaXB2NC9uZXh0aG9wLmNcbkBAIC0yMDM2LDcgKzIwMzYsNyBAQCByZW1vdmVfbmhfZ3JwX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZSxcbiB7XG4gXHRzdHJ1Y3QgbmhfZ3JwX2VudHJ5ICpuaGdlcywgKm5ld19uaGdlcztcbiBcdHN0cnVjdCBuZXh0aG9wICpuaHAgPSBuaGdlLVx1MDAzZW5oX3BhcmVudDtcbi1cdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrO1xuK1x0c3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtcbiBcdHN0cnVjdCBuZXh0aG9wICpuaCA9IG5oZ2UtXHUwMDNlbmg7XG4gXHRzdHJ1Y3QgbmhfZ3JvdXAgKm5oZywgKm5ld2c7XG4gXHRpbnQgaSwgaiwgZXJyO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDI6MDkuMjQ3MTg1ODkxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NDU2OTAzNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXh0aG9wIENvZGUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVpbmcgY2hhbmdlZCBhbmQgd2h5LCBzbyBJJ2xsIHN0YXJ0IHdpdGggdGhlIGZpbGUgYW5kIGxpbmUgbnVtYmVyLiBJdCBzZWVtcyB0aGlzIG1vZGlmaWNhdGlvbiB0YXJnZXRzIGBuZXQvaXB2NC9uZXh0aG9wLmNgIGFyb3VuZCBsaW5lIDIwMzYsIGFjY29yZGluZyB0byB0aGUgYGRpZmZgLiBSaWdodCwgbGV0J3Mgc2VlLCBpdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgdG8gaW5pdGlhbGl6ZSB0aGUgYGV4dGFja2AgdmFyaWFibGUgdXNpbmcgYnJhY2UgaW5pdGlhbGl6YXRpb24gYHt9YC4gVGhpcyBpcyBhIHN1YnRsZSBidXQgaW1wb3J0YW50IGNoYW5nZS4gUHJldmlvdXNseSBpdCB3YXMgdW5pbml0aWFsaXplZCwgd2hpY2ggY2FuIGxlYWQgdG8gdW5kZWZpbmVkIGJlaGF2aW9yLCBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IGlzc3VlcywgZGVwZW5kaW5nIG9uIHRoZSBjb21waWxlciBhbmQgZXhlY3V0aW9uIGVudmlyb25tZW50LiBJbml0aWFsaXppbmcgaXQgZXhwbGljaXRseSBlbnN1cmVzIHRoYXQgdGhlIGBleHRhY2tgIHN0cnVjdCBoYXMgZGVmaW5lZCB2YWx1ZXMsIHdoaWNoIEkgdW5kZXJzdGFuZCBpcyBjcnVjaWFsIGZvciBgbmV0bGlua19leHRfYWNrYCBlcnJvciByZXBvcnRpbmcuXG5cbkknbGwgcXVpY2tseSBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L2lwdjQvbmV4dGhvcC5jYCBhcm91bmQgdGhhdCBsaW5lLCBjb25maXJtaW5nIHRoZSBjb250ZXh0IHdpdGhpbiB0aGUgYHJlbW92ZV9uaF9ncnBfZW50cnlgIGZ1bmN0aW9uLiBJdCBpbnZvbHZlcyBtYW5hZ2luZyBuZXh0aG9wIGdyb3VwIGVudHJpZXMsIHNvIGFueSBlcnJvcnMgY291bGQgcG90ZW50aWFsbHkgaW1wYWN0IHJvdXRpbmcgb3IgZm9yd2FyZGluZyBkZWNpc2lvbnMuIFRoZSBpbml0aWFsaXphdGlvbiBvZiBgZXh0YWNrYCBoZXJlIGlzIGxpa2VseSByZWxhdGVkIHRvIGhhbmRsaW5nIGVycm9yIGNvbmRpdGlvbnMsIGVuc3VyaW5nIHRoYXQgaWYgYW4gZXJyb3Igb2NjdXJzLCBpdCdzIGNvbW11bmljYXRlZCBjb3JyZWN0bHkgdmlhIE5ldGxpbmsuIENvbnNpZGVyaW5nIHRoZSBjcml0aWNhbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIGZvcndhcmRpbmcgcGF0aCwgcHJldmVudGluZyB1bmV4cGVjdGVkIGJlaGF2aW9yIGZyb20gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaXMgYSBzZW5zaWJsZSBwcmVjYXV0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTA3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDI6MTQuMDkyODc5NDI3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxODY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9uZXh0aG9wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAzMDpcXHRcXHR9XFxuMjAzMTpcXHR9XFxuMjAzMjpcXHRcXG4yMDMzOlxcdHN0YXRpYyBib29sIF9fbXVzdF9jaGVja1xcbjIwMzQ6XFx0cmVtb3ZlX25oX2dycF9lbnRyeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuaF9ncnBfZW50cnkgKm5oZ2UsXFxuMjAzNTpcXHRcXHRcXHQgICAgc3RydWN0IG5sX2luZm8gKm5saW5mbywgc3RydWN0IGxpc3RfaGVhZCAqZGVmZXJyZWRfZnJlZSlcXG4yMDM2OlxcdHtcXG4yMDM3OlxcdFxcdHN0cnVjdCBuaF9ncnBfZW50cnkgKm5oZ2VzLCAqbmV3X25oZ2VzO1xcbjIwMzg6XFx0XFx0c3RydWN0IG5leHRob3AgKm5ocCA9IG5oZ2UtXFx1MDAzZW5oX3BhcmVudDtcXG4yMDM5OlxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrID0ge307XFxuMjA0MDpcXHRcXHRzdHJ1Y3QgbmV4dGhvcCAqbmggPSBuaGdlLVxcdTAwM2VuaDtcXG4yMDQxOlxcdFxcdHN0cnVjdCBuaF9ncm91cCAqbmhnLCAqbmV3ZztcXG4yMDQyOlxcdFxcdGludCBpLCBqLCBlcnI7XFxuMjA0MzpcXHRcXG4yMDQ0OlxcdFxcdFdBUk5fT04oIW5oKTtcXG4yMDQ1OlxcdFxcbjIwNDY6XFx0XFx0bmhnID0gcnRubF9kZXJlZmVyZW5jZShuaHAtXFx1MDAzZW5oX2dycCk7XFxuMjA0NzpcXHRcXHRuZXdnID0gbmhnLVxcdTAwM2VzcGFyZTtcXG4yMDQ4OlxcdFxcbjIwNDk6XFx0XFx0LyogbGFzdCBlbnRyeSwga2VlcCBpdCB2aXNpYmxlIGFuZCByZW1vdmUgdGhlIHBhcmVudCAqL1xcbjIwNTA6XFx0XFx0aWYgKG5oZy1cXHUwMDNlbnVtX25oID09IDEpXFxuMjA1MTpcXHRcXHRcXHRyZXR1cm4gcmVtb3ZlX25leHRob3AobmV0LCBuaHAsIG5saW5mbyk7XFxuMjA1MjpcXHRcXG4yMDUzOlxcdFxcdG5ld2ctXFx1MDAzZWhhc192NCA9IGZhbHNlO1xcbjIwNTQ6XFx0XFx0bmV3Zy1cXHUwMDNlaXNfbXVsdGlwYXRoID0gbmhnLVxcdTAwM2Vpc19tdWx0aXBhdGg7XFxuMjA1NTpcXHRcXHRuZXdnLVxcdTAwM2VoYXNoX3RocmVzaG9sZCA9IG5oZy1cXHUwMDNlaGFzaF90aHJlc2hvbGQ7XFxuMjA1NjpcXHRcXHRuZXdnLVxcdTAwM2VyZXNpbGllbnQgPSBuaGctXFx1MDAzZXJlc2lsaWVudDtcXG4yMDU3OlxcdFxcdG5ld2ctXFx1MDAzZWZkYl9uaCA9IG5oZy1cXHUwMDNlZmRiX25oO1xcbjIwNTg6XFx0XFx0bmV3Zy1cXHUwMDNlbnVtX25oID0gbmhnLVxcdTAwM2VudW1fbmg7XFxuMjA1OTpcXHRcXG4yMDYwOlxcdFxcdC8qIGNvcHkgb2xkIGVudHJpZXMgdG8gbmV3IGV4Y2VwdCB0aGUgb25lIGdldHRpbmcgcmVtb3ZlZCAqL1xcbjIwNjE6XFx0XFx0bmhnZXMgPSBuaGctXFx1MDAzZW5oX2VudHJpZXM7XFxuMjA2MjpcXHRcXHRuZXdfbmhnZXMgPSBuZXdnLVxcdTAwM2VuaF9lbnRyaWVzO1xcbjIwNjM6XFx0XFx0Zm9yIChpID0gMCwgaiA9IDA7IGkgXFx1MDAzYyBuaGctXFx1MDAzZW51bV9uaDsgKytpKSB7XFxuMjA2NDpcXHRcXHRcXHRzdHJ1Y3QgbmhfaW5mbyAqbmhpO1xcbjIwNjU6XFx0XFxuMjA2NjpcXHRcXHRcXHQvKiBjdXJyZW50IG5leHRob3AgZ2V0dGluZyByZW1vdmVkICovXFxuMjA2NzpcXHRcXHRcXHRpZiAobmhnLVxcdTAwM2VuaF9lbnRyaWVzW2ldLm5oID09IG5oKSB7XFxuMjA2ODpcXHRcXHRcXHRcXHRuZXdnLVxcdTAwM2VudW1fbmgtLTtcXG4yMDY5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIwNzA6XFx0XFx0XFx0fVxcbjIwNzE6XFx0XFxuMjA3MjpcXHRcXHRcXHRuaGkgPSBydG5sX2RlcmVmZXJlbmNlKG5oZ2VzW2ldLm5oLVxcdTAwM2VuaF9pbmZvKTtcXG4yMDczOlxcdFxcdFxcdGlmIChuaGktXFx1MDAzZWZhbWlseSA9PSBBRl9JTkVUKVxcbjIwNzQ6XFx0XFx0XFx0XFx0bmV3Zy1cXHUwMDNlaGFzX3Y0ID0gdHJ1ZTtcXG4yMDc1OlxcdFxcbjIwNzY6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNm5oZ2VzW2ldLm5oX2xpc3QpO1xcbjIwNzc6XFx0XFx0XFx0bmV3X25oZ2VzW2pdLnN0YXRzID0gbmhnZXNbaV0uc3RhdHM7XFxuMjA3ODpcXHRcXHRcXHRuZXdfbmhnZXNbal0ubmhfcGFyZW50ID0gbmhnZXNbaV0ubmhfcGFyZW50O1xcbjIwNzk6XFx0XFx0XFx0bmV3X25oZ2VzW2pdLm5oID0gbmhnZXNbaV0ubmg7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAyOjE0LjA5MzIwMTkyN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDI0MzAzNzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipUcmFjaW5nIHRoZSBgZXh0YWNrYCBpbiBgcmVtb3ZlX25oX2dycF9lbnRyeWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBvZiBgZXh0YWNrYCB3aXRoaW4gdGhlIGByZW1vdmVfbmhfZ3JwX2VudHJ5YCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gbWFwIHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgYmVpbmcgcGFzc2VkLCB3aGljaCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQncyB1c2VkIGFuZCBpdHMgc2lnbmlmaWNhbmNlIGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIG5ldHdvcmsgaGFuZGxpbmcgZ3JvdXAgZW50cnkgcmVtb3ZhbC4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGluZm9ybWF0aW9uIEkgY2FuIGdsZWFuIGp1c3QgZnJvbSBpdHMgbG9jYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBXaGVyZSBkb2VzIHRoZSB2YWx1ZSBvZiBgZXh0YWNrYCBjb21lIGZyb20gaW5pdGlhbGx5PyBXaGF0IG90aGVyIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgaW50ZXJhY3Qgd2l0aCBpdCBiZWZvcmUgaXQgcmVhY2hlcyBgcmVtb3ZlX25oX2dycF9lbnRyeWA/IEtub3dpbmcgdGhlIGNhbGxpbmcgaGllcmFyY2h5IHdpbGwgYmUgY3JpdGljYWwgaGVyZSwgc28gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgc3RhdGljIGFuYWx5c2lzIHRvIGdldCBhIGJpcmQncy1leWUgdmlldywgdGhlbiBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGZvbGxvdyB0aGUgc3BlY2lmaWMgcGFzc2VzIG9mIGBleHRhY2tgLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBiYWNrZ3JvdW5kIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgaW1wbGljYXRpb25zIG9mIGhvdyBgZXh0YWNrYCBpcyBiZWluZyBtYW5hZ2VkLiBJdCB3aWxsIGFsc28gZXhwb3NlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIGl0IG1pZ2h0IGhhdmUgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB3aXRoaW4gdGhlIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTg0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowMjoxNi41MTc1MDk3MDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcyNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L25leHRob3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDgwOlxcdFxcdFxcdG5ld19uaGdlc1tqXS53ZWlnaHQgPSBuaGdlc1tpXS53ZWlnaHQ7XFxuMjA4MTpcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2bmV3X25oZ2VzW2pdLm5oX2xpc3QsIFxcdTAwMjZuZXdfbmhnZXNbal0ubmgtXFx1MDAzZWdycF9saXN0KTtcXG4yMDgyOlxcdFxcdFxcdGorKztcXG4yMDgzOlxcdFxcdH1cXG4yMDg0OlxcdFxcbjIwODU6XFx0XFx0aWYgKG5ld2ctXFx1MDAzZWhhc2hfdGhyZXNob2xkKVxcbjIwODY6XFx0XFx0XFx0bmhfaHRocl9ncm91cF9yZWJhbGFuY2UobmV3Zyk7XFxuMjA4NzpcXHRcXHRlbHNlIGlmIChuZXdnLVxcdTAwM2VyZXNpbGllbnQpXFxuMjA4ODpcXHRcXHRcXHRyZXBsYWNlX25leHRob3BfZ3JwX3JlcyhuaGcsIG5ld2cpO1xcbjIwODk6XFx0XFxuMjA5MDpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIobmhwLVxcdTAwM2VuaF9ncnAsIG5ld2cpO1xcbjIwOTE6XFx0XFxuMjA5MjpcXHRcXHRsaXN0X2RlbChcXHUwMDI2bmhnZS1cXHUwMDNlbmhfbGlzdCk7XFxuMjA5MzpcXHRcXHRuZXh0aG9wX3B1dChuaGdlLVxcdTAwM2VuaCk7XFxuMjA5NDpcXHRcXHRsaXN0X2FkZChcXHUwMDI2bmhnZS1cXHUwMDNlbmhfbGlzdCwgZGVmZXJyZWRfZnJlZSk7XFxuMjA5NTpcXHRcXG4yMDk2OlxcdFxcdC8qIFJlbW92YWwgb2YgYSBOSCBmcm9tIGEgcmVzaWxpZW50IGdyb3VwIGlzIG5vdGlmaWVkIHRocm91Z2hcXG4yMDk3OlxcdFxcdCAqIGJ1Y2tldCBub3RpZmljYXRpb25zLlxcbjIwOTg6XFx0XFx0ICovXFxuMjA5OTpcXHRcXHRpZiAobmV3Zy1cXHUwMDNlaGFzaF90aHJlc2hvbGQpIHtcXG4yMTAwOlxcdFxcdFxcdGVyciA9IGNhbGxfbmV4dGhvcF9ub3RpZmllcnMobmV0LCBORVhUSE9QX0VWRU5UX1JFUExBQ0UsIG5ocCxcXG4yMTAxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmV4dGFjayk7XFxuMjEwMjpcXHRcXHRcXHRpZiAoZXJyKVxcbjIxMDM6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCIlc1xcXFxuXFxcIiwgZXh0YWNrLl9tc2cpO1xcbjIxMDQ6XFx0XFx0fVxcbjIxMDU6XFx0XFxuMjEwNjpcXHRcXHRpZiAobmxpbmZvKVxcbjIxMDc6XFx0XFx0XFx0bmV4dGhvcF9ub3RpZnkoUlRNX05FV05FWFRIT1AsIG5ocCwgbmxpbmZvKTtcXG4yMTA4OlxcdFxcbjIxMDk6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjIxMTA6XFx0fVxcbjIxMTE6XFx0XFxuMjExMjpcXHRzdGF0aWMgYm9vbCBfX211c3RfY2hlY2tcXG4yMTEzOlxcdHJlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxcbjIxMTQ6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5sX2luZm8gKm5saW5mbylcXG4yMTE1OlxcdHtcXG4yMTE2OlxcdFxcdHN0cnVjdCBuaF9ncnBfZW50cnkgKm5oZ2UsICp0bXA7XFxuMjExNzpcXHRcXHRMSVNUX0hFQUQoZGVmZXJyZWRfZnJlZSk7XFxuMjExODpcXHRcXHRib29sIG5lZWRfZmx1c2ggPSBmYWxzZTtcXG4yMTE5OlxcdFxcbjIxMjA6XFx0XFx0LyogSWYgdGhlcmUgaXMgbm90aGluZyB0byBkbywgbGV0J3MgYXZvaWQgdGhlIGNvc3RseSBjYWxsIHRvXFxuMjEyMTpcXHRcXHQgKiBzeW5jaHJvbml6ZV9uZXQoKVxcbjIxMjI6XFx0XFx0ICovXFxuMjEyMzpcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2bmgtXFx1MDAzZWdycF9saXN0KSlcXG4yMTI0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yMTI1OlxcdFxcbjIxMjY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5oZ2UsIHRtcCwgXFx1MDAyNm5oLVxcdTAwM2VncnBfbGlzdCwgbmhfbGlzdClcXG4yMTI3OlxcdFxcdFxcdG5lZWRfZmx1c2ggfD0gcmVtb3ZlX25oX2dycF9lbnRyeShuZXQsIG5oZ2UsIG5saW5mbyxcXG4yMTI4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmRlZmVycmVkX2ZyZWUpO1xcbjIxMjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAyOjE2LjUxNzg4NTkyNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTM4OTM0NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBCdWcgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBMaW5lIDIwMzkgc2hvd3MgYSBjaGFuZ2UgZnJvbSBhIGRlY2xhcmF0aW9uIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjaztgIHRvIGFuIGluaXRpYWxpemF0aW9uIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9O2AuICBUaGF0J3MgdGhlIGNvcmUgb2YgdGhlIHBhdGNoLiBUaGUgY29kZSBhdCBsaW5lcyAyMTAwLTIxMDMgbWFrZXMgdXNlIG9mIHRoaXMgc3RydWN0dXJlLiAgUHJldmlvdXNseSwgYGV4dGFja2Agd2FzIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUsICpwb3RlbnRpYWxseSogdW5pbml0aWFsaXplZC4gVGhpcyBjb3VsZCBoYXZlIGxlZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2sgZGF0YSwgcGFydGljdWxhcmx5IGlmIGBjYWxsX25leHRob3Bfbm90aWZpZXJzYCByZXR1cm5lZCBhbiBlcnJvciB3aXRob3V0IHNldHRpbmcgYGV4dGFjay5fbXNnYCwgb3IgaWYgdGhlIG5vdGlmaWVycyB0aGVtc2VsdmVzIHBlZWtlZCBhdCB0aGUgY29udGVudHMgb2YgYGV4dGFja2AgKHdoaWNoIGlzIGJhZCBmb3JtLCBidXQgY2VydGFpbmx5IHBvc3NpYmxlKSwgb3IgaWYgdGhlIGBwcl9lcnJgIGNhbGwgYXQgdGhlIGVuZCB3YXMgZXhlY3V0ZWQgd2l0aCBhbiB1bmluaXRpYWxpemVkIGBfbXNnYCBmaWVsZC4gIFRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGVuc3VyaW5nIHRoZSB2YXJpYWJsZSBpcyB6ZXJvLWluaXRpYWxpemVkLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgbmVlZHMgS01TQU4uIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZS4gV2hhdCBkb2VzIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHdhbnQ/IEFoLCBoZXJlIGFyZSB0aGUgcnVsZXMhIFwiVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cIiBLTVNBTiBpcyBleHBlbnNpdmUsIHNvIEkgc2hvdWxkIG9ubHkgdXNlIGl0IHdoZW4gKnVuaW5pdGlhbGl6ZWQgbWVtb3J5KiByaXNrcyBhcmUgcHJlc2VudCwgYW5kIHRob3NlIHJpc2tzIGFyZSAqb25seSogZGV0ZWN0YWJsZSBieSBLTVNBTi5cblxuVGhlIHByb21wdCBsaXN0cyBmb3VyIHNwZWNpZmljIHNjZW5hcmlvcyB0aGF0IHdhcnJhbnQgS01TQU4sIG9yIG5vdDpcbjEuICBTdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZy4gSXMgdGhpcyB0aGUgY2FzZT8gTm8uXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiAgSXMgdGhpcyB0aGUgY2FzZT8gTm8uXG4zLiAgQWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gSXMgdGhpcyB0aGUgY2FzZT8gTm8uXG40LiAgQnlwYXNzaW5nIG9yIG1hbmlwdWxhdGluZyBsZW5ndGggb3IgYm91bmRzIGNoZWNrcywgcG90ZW50aWFsbHkgYWxsb3dpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4gSXMgdGhpcyB0aGUgY2FzZT8gTm8uXG5cblRoZSBwcm9tcHQgdmVyeSBleHBsaWNpdGx5IHNheXM6IFwiU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6IC4uLiBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuICAuLi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlwiXG5cblRoaXMgcGF0Y2ggKmV4cGxpY2l0bHkqIGluaXRpYWxpemVzIHRoZSB2YXJpYWJsZSB3aXRoIGB7fWAuICBJdCBkb2VzICpub3QqIGludHJvZHVjZSBuZXcgcmlza3MuIEl0ICpwcmV2ZW50cyogYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4gSXQgZG9lc24ndCBsZWFrIGluZm8uICBJJ3ZlIGNoZWNrZWQgZXZlcnl0aGluZy4gVGhlIG9yaWdpbmFsIHN0YXRlIHdhcyBwb3RlbnRpYWxseSB1bnNhZmUgKHVuaW5pdGlhbGl6ZWQgc3RhY2spLiBUaGUgbmV3IHN0YXRlIGlzIHNhZmUuXG5cbkknbSBjb21wbGV0ZWx5IGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IG5ldywgb3IgZXZlbiBtYWludGFpbiBleGlzdGluZywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCBvbmx5IGJlIGNhdWdodCBieSBLTVNBTi4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgbXVzdCBiZSBgZmFsc2VgLlxuXG5Pa2F5LCBJJ20gcmVhZHkgdG8gc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NjEsIk91dHB1dFRva2VucyI6MTI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDI6MjMuNDU2ODIyMzQzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2tgIHdhcyBkZWNsYXJlZCBvbiB0aGUgc3RhY2sgd2l0aG91dCBpbml0aWFsaXphdGlvbiBpbiBgcmVtb3ZlX25oX2dycF9lbnRyeSgpYC4gQnkgaW5pdGlhbGl6aW5nIGl0IHdpdGggYD0ge31gLCBhbGwgZmllbGRzIG9mIGBleHRhY2tgIGFyZSBleHBsaWNpdGx5IHplcm9lZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBsZWFrIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2tgIHdhcyBkZWNsYXJlZCBvbiB0aGUgc3RhY2sgd2l0aG91dCBpbml0aWFsaXphdGlvbiBpbiBgcmVtb3ZlX25oX2dycF9lbnRyeSgpYC4gQnkgaW5pdGlhbGl6aW5nIGl0IHdpdGggYD0ge31gLCBhbGwgZmllbGRzIG9mIGBleHRhY2tgIGFyZSBleHBsaWNpdGx5IHplcm9lZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBsZWFrIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowpbmd4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-04 09:46:58 +0000 UTC FinishedAt: 2026-09-04 10:02:24 +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": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET" ], "series_id": "472df404-c500-4c6f-8cb4-8e0c4c9225af" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "remove_nh_grp_entry", "remove_nexthop_from_groups", "rtm_del_nexthop", "rtm_new_nexthop" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZW1vdmVfbmhfZ3JwX2VudHJ5JiMzNDssCiAgICAmIzM0O3JlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzJiMzNDssCiAgICAmIzM0O3J0bV9kZWxfbmV4dGhvcCYjMzQ7LAogICAgJiMzNDtydG1fbmV3X25leHRob3AmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2tgIHdhcyBkZWNsYXJlZCBvbiB0aGUgc3RhY2sgd2l0aG91dCBpbml0aWFsaXphdGlvbiBpbiBgcmVtb3ZlX25oX2dycF9lbnRyeSgpYC4gQnkgaW5pdGlhbGl6aW5nIGl0IHdpdGggYD0ge31gLCBhbGwgZmllbGRzIG9mIGBleHRhY2tgIGFyZSBleHBsaWNpdGx5IHplcm9lZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBsZWFrIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW5pdGlhbGl6ZXMgdGhlIG5ldGxpbmtfZXh0X2FjayBzdHJ1Y3R1cmUgaW4gcmVtb3ZlX25oX2dycF9lbnRyeSgpIHRvIHByZXZlbnQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBpZiBub3RpZmllcnMgcmV0dXJuIGFuIGVycm9yLiBUaGUgY29kZSByZXNpZGVzIGluIHRoZSBjb3JlIElQdjQgbmV4dGhvcCBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgbmV4dGhvcCBjb21tYW5kcyAoUlRNX0RFTE5FWFRIT1AsIFJUTV9ORVdORVhUSE9QKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVmODZkMTMwMDM4MjNjN2FjNDYwODI5MzUzZGQ3ZTZjZDQyZmRjYjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDEwOjAxOjM1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L25leHRob3AuYyBiL25ldC9pcHY0L25leHRob3AuY1xuaW5kZXggYTdjMmI4ZGNlZDRlNy4uNDJlNTViNWE3NTVlZSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L25leHRob3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvbmV4dGhvcC5jXG5AQCAtMjAzNiw3ICYjNDM7MjAzNiw3IEBAIHJlbW92ZV9uaF9ncnBfZW50cnkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmhfZ3JwX2VudHJ5ICpuaGdlLFxuIHtcbiBcdHN0cnVjdCBuaF9ncnBfZW50cnkgKm5oZ2VzLCAqbmV3X25oZ2VzO1xuIFx0c3RydWN0IG5leHRob3AgKm5ocCA9IG5oZ2UtXHUwMDNlbmhfcGFyZW50O1xuLVx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2s7XG4mIzQzO1x0c3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtcbiBcdHN0cnVjdCBuZXh0aG9wICpuaCA9IG5oZ2UtXHUwMDNlbmg7XG4gXHRzdHJ1Y3QgbmhfZ3JvdXAgKm5oZywgKm5ld2c7XG4gXHRpbnQgaSwgaiwgZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZW1vdmVfbmhfZ3JwX2VudHJ5JiMzNDssCiAgICAmIzM0O3JlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzJiMzNDssCiAgICAmIzM0O3J0bV9kZWxfbmV4dGhvcCYjMzQ7LAogICAgJiMzNDtydG1fbmV3X25leHRob3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW5pdGlhbGl6ZXMgdGhlIG5ldGxpbmtfZXh0X2FjayBzdHJ1Y3R1cmUgaW4gcmVtb3ZlX25oX2dycF9lbnRyeSgpIHRvIHByZXZlbnQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBpZiBub3RpZmllcnMgcmV0dXJuIGFuIGVycm9yLiBUaGUgY29kZSByZXNpZGVzIGluIHRoZSBjb3JlIElQdjQgbmV4dGhvcCBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgbmV4dGhvcCBjb21tYW5kcyAoUlRNX0RFTE5FWFRIT1AsIFJUTV9ORVdORVhUSE9QKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVmODZkMTMwMDM4MjNjN2FjNDYwODI5MzUzZGQ3ZTZjZDQyZmRjYjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDEwOjAxOjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV4dGhvcC5jIGIvbmV0L2lwdjQvbmV4dGhvcC5jCmluZGV4IGE3YzJiOGRjZWQ0ZTcuLjQyZTU1YjVhNzU1ZWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25leHRob3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXh0aG9wLmMKQEAgLTIwMzYsNyAmIzQzOzIwMzYsNyBAQCByZW1vdmVfbmhfZ3JwX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZSwKIHsKIAlzdHJ1Y3QgbmhfZ3JwX2VudHJ5ICpuaGdlcywgKm5ld19uaGdlczsKIAlzdHJ1Y3QgbmV4dGhvcCAqbmhwID0gbmhnZS0mZ3Q7bmhfcGFyZW50OwotCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrOwomIzQzOwlzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9OwogCXN0cnVjdCBuZXh0aG9wICpuaCA9IG5oZ2UtJmd0O25oOwogCXN0cnVjdCBuaF9ncm91cCAqbmhnLCAqbmV3ZzsKIAlpbnQgaSwgaiwgZXJyOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODk1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSwgc28gSSYjMzk7bGwgc3RhcnQgYnkgZm9jdXNpbmcgb24gdGhlIHNwZWNpZmljcy4KCioqUGF0Y2ggSW5zcGVjdGlvbjogSW5pdGlhbGl6aW5nIGBleHRhY2tgIGluIGByZW1vdmVfbmhfZ3JwX2VudHJ5YCoqCgpSaWdodCwgc28gdGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgbmV0L2lwdjQvbmV4dGhvcC5jYC4gU3BlY2lmaWNhbGx5LCB3aXRoaW4gdGhlIGByZW1vdmVfbmhfZ3JwX2VudHJ5YCBmdW5jdGlvbiwgdGhlcmUmIzM5O3MgYSBjaGFuZ2UgcmVsYXRlZCB0byB0aGUgYHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrO2AgZGVjbGFyYXRpb24uIEl0JiMzOTtzIGJlZW4gYWx0ZXJlZCB0byBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtgLiBUaGF0JiMzOTtzIGEgc3VidGxlIGJ1dCBwb3RlbnRpYWxseSBzaWduaWZpY2FudCBjaGFuZ2UgLSBpbml0aWFsaXppbmcgdGhlIGBleHRhY2tgIHN0cnVjdHVyZS4gSXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gcHJldmVudGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBwb3RlbnRpYWxseSBjbGVhcmluZyBmbGFncyBvbiB0aGUgZXh0ZW5kZWQgYWNrbm93bGVkZ2VtZW50LiBJIGtub3cgSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGVzZSB0aGluZ3MsIHNvIGxldCYjMzk7cyB6b29tIGluIG9uIHRoYXQgY29kZSBhcmVhLgoKSSBzaG91bGQgcHJvYmFibHkgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBuZXQvaXB2NC9uZXh0aG9wLmNgIHRvIHNlZSBob3cgYGV4dGFja2AgaXMgYWN0dWFsbHkgdXNlZC4gSXQmIzM5O2xsIGJlIGFyb3VuZCBsaW5lIDIwMzYsIEkgdGhpbmsuIEkmIzM5O2xsIG5lZWQgdG8gcmVhZCB0aGUgdXNhZ2UgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXh0aG9wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMjA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5oZy1cdTAwM2VudW1fbmg7ICYjNDM7JiM0MztpKVxuMjAyMTpcdFx0XHR0b3RhbCAmIzQzOz0gbmhnLVx1MDAzZW5oX2VudHJpZXNbaV0ud2VpZ2h0O1xuMjAyMjpcdFxuMjAyMzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmhnLVx1MDAzZW51bV9uaDsgJiM0MzsmIzQzO2kpIHtcbjIwMjQ6XHRcdFx0c3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZSA9IFx1MDAyNm5oZy1cdTAwM2VuaF9lbnRyaWVzW2ldO1xuMjAyNTpcdFx0XHR1MzIgdXBwZXJfYm91bmQ7XG4yMDI2Olx0XG4yMDI3Olx0XHRcdHcgJiM0Mzs9IG5oZ2UtXHUwMDNld2VpZ2h0O1xuMjAyODpcdFx0XHR1cHBlcl9ib3VuZCA9IERJVl9ST1VORF9DTE9TRVNUX1VMTCgodTY0KXcgXHUwMDNjXHUwMDNjIDMxLCB0b3RhbCkgLSAxO1xuMjAyOTpcdFx0XHRhdG9taWNfc2V0KFx1MDAyNm5oZ2UtXHUwMDNlaHRoci51cHBlcl9ib3VuZCwgdXBwZXJfYm91bmQpO1xuMjAzMDpcdFx0fVxuMjAzMTpcdH1cbjIwMzI6XHRcbjIwMzM6XHRzdGF0aWMgYm9vbCBfX211c3RfY2hlY2tcbjIwMzQ6XHRyZW1vdmVfbmhfZ3JwX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZSxcbjIwMzU6XHRcdFx0ICAgIHN0cnVjdCBubF9pbmZvICpubGluZm8sIHN0cnVjdCBsaXN0X2hlYWQgKmRlZmVycmVkX2ZyZWUpXG4yMDM2Olx0e1xuMjAzNzpcdFx0c3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZXMsICpuZXdfbmhnZXM7XG4yMDM4Olx0XHRzdHJ1Y3QgbmV4dGhvcCAqbmhwID0gbmhnZS1cdTAwM2VuaF9wYXJlbnQ7XG4yMDM5Olx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9O1xuMjA0MDpcdFx0c3RydWN0IG5leHRob3AgKm5oID0gbmhnZS1cdTAwM2VuaDtcbjIwNDE6XHRcdHN0cnVjdCBuaF9ncm91cCAqbmhnLCAqbmV3ZztcbjIwNDI6XHRcdGludCBpLCBqLCBlcnI7XG4yMDQzOlx0XG4yMDQ0Olx0XHRXQVJOX09OKCFuaCk7XG4yMDQ1Olx0XG4yMDQ2Olx0XHRuaGcgPSBydG5sX2RlcmVmZXJlbmNlKG5ocC1cdTAwM2VuaF9ncnApO1xuMjA0NzpcdFx0bmV3ZyA9IG5oZy1cdTAwM2VzcGFyZTtcbjIwNDg6XHRcbjIwNDk6XHRcdC8qIGxhc3QgZW50cnksIGtlZXAgaXQgdmlzaWJsZSBhbmQgcmVtb3ZlIHRoZSBwYXJlbnQgKi9cbjIwNTA6XHRcdGlmIChuaGctXHUwMDNlbnVtX25oID09IDEpXG4yMDUxOlx0XHRcdHJldHVybiByZW1vdmVfbmV4dGhvcChuZXQsIG5ocCwgbmxpbmZvKTtcbjIwNTI6XHRcbjIwNTM6XHRcdG5ld2ctXHUwMDNlaGFzX3Y0ID0gZmFsc2U7XG4yMDU0Olx0XHRuZXdnLVx1MDAzZWlzX211bHRpcGF0aCA9IG5oZy1cdTAwM2Vpc19tdWx0aXBhdGg7XG4yMDU1Olx0XHRuZXdnLVx1MDAzZWhhc2hfdGhyZXNob2xkID0gbmhnLVx1MDAzZWhhc2hfdGhyZXNob2xkO1xuMjA1NjpcdFx0bmV3Zy1cdTAwM2VyZXNpbGllbnQgPSBuaGctXHUwMDNlcmVzaWxpZW50O1xuMjA1NzpcdFx0bmV3Zy1cdTAwM2VmZGJfbmggPSBuaGctXHUwMDNlZmRiX25oO1xuMjA1ODpcdFx0bmV3Zy1cdTAwM2VudW1fbmggPSBuaGctXHUwMDNlbnVtX25oO1xuMjA1OTpcdFxuMjA2MDpcdFx0LyogY29weSBvbGQgZW50cmllcyB0byBuZXcgZXhjZXB0IHRoZSBvbmUgZ2V0dGluZyByZW1vdmVkICovXG4yMDYxOlx0XHRuaGdlcyA9IG5oZy1cdTAwM2VuaF9lbnRyaWVzO1xuMjA2MjpcdFx0bmV3X25oZ2VzID0gbmV3Zy1cdTAwM2VuaF9lbnRyaWVzO1xuMjA2MzpcdFx0Zm9yIChpID0gMCwgaiA9IDA7IGkgXHUwMDNjIG5oZy1cdTAwM2VudW1fbmg7ICYjNDM7JiM0MztpKSB7XG4yMDY0Olx0XHRcdHN0cnVjdCBuaF9pbmZvICpuaGk7XG4yMDY1Olx0XG4yMDY2Olx0XHRcdC8qIGN1cnJlbnQgbmV4dGhvcCBnZXR0aW5nIHJlbW92ZWQgKi9cbjIwNjc6XHRcdFx0aWYgKG5oZy1cdTAwM2VuaF9lbnRyaWVzW2ldLm5oID09IG5oKSB7XG4yMDY4Olx0XHRcdFx0bmV3Zy1cdTAwM2VudW1fbmgtLTtcbjIwNjk6XHRcdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTUwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGByZW1vdmVfbmhfZ3JwX2VudHJ5YCBhbmQgaXRzIGBleHRhY2tgIFVzYWdlKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgcmVtb3ZlX25oX2dycF9lbnRyeWAgZnVuY3Rpb24gYWdhaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyBgZXh0YWNrYCBpcyBiZWluZyBlbXBsb3llZCBoZXJlLiBJdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBqdXN0IGZyb20gbG9va2luZyBhdCB0aGlzIHNuaXBwZXQgaG93IHRoZSBzdGFjayBpcyBiZWluZyBtYW5hZ2VkLCBzbyBJIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHdpdGhpbiB0aGUgc3Vycm91bmRpbmcgY29kZS4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29udGV4dCBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIG9wZXJhdGlvbiBpcyBleGVjdXRlZCBhbmQgd2hhdCBpdCBpbXBsaWVzIGZvciB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gbG9va2luZyBmb3Igd2hlcmUgYW5kIGhvdyB0aGUgc3RhY2sgaXMgYmVpbmcgbW9kaWZpZWQgYXJvdW5kIHRoZSB1c2Ugb2YgdGhpcyBmdW5jdGlvbiwgYXMgd2VsbCBhcyB0aGUgZWZmZWN0cyB0aGUgc3RhY2sgbWFuaXB1bGF0aW9uIGhhcyBvbiB0aGUgZGF0YSBpbnRlZ3JpdHkgYW5kIHByb2dyYW0gY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV4dGhvcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDcwOlx0XHRcdH1cbjIwNzE6XHRcbjIwNzI6XHRcdFx0bmhpID0gcnRubF9kZXJlZmVyZW5jZShuaGdlc1tpXS5uaC1cdTAwM2VuaF9pbmZvKTtcbjIwNzM6XHRcdFx0aWYgKG5oaS1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVClcbjIwNzQ6XHRcdFx0XHRuZXdnLVx1MDAzZWhhc192NCA9IHRydWU7XG4yMDc1Olx0XG4yMDc2Olx0XHRcdGxpc3RfZGVsKFx1MDAyNm5oZ2VzW2ldLm5oX2xpc3QpO1xuMjA3NzpcdFx0XHRuZXdfbmhnZXNbal0uc3RhdHMgPSBuaGdlc1tpXS5zdGF0cztcbjIwNzg6XHRcdFx0bmV3X25oZ2VzW2pdLm5oX3BhcmVudCA9IG5oZ2VzW2ldLm5oX3BhcmVudDtcbjIwNzk6XHRcdFx0bmV3X25oZ2VzW2pdLm5oID0gbmhnZXNbaV0ubmg7XG4yMDgwOlx0XHRcdG5ld19uaGdlc1tqXS53ZWlnaHQgPSBuaGdlc1tpXS53ZWlnaHQ7XG4yMDgxOlx0XHRcdGxpc3RfYWRkKFx1MDAyNm5ld19uaGdlc1tqXS5uaF9saXN0LCBcdTAwMjZuZXdfbmhnZXNbal0ubmgtXHUwMDNlZ3JwX2xpc3QpO1xuMjA4MjpcdFx0XHRqJiM0MzsmIzQzOztcbjIwODM6XHRcdH1cbjIwODQ6XHRcbjIwODU6XHRcdGlmIChuZXdnLVx1MDAzZWhhc2hfdGhyZXNob2xkKVxuMjA4NjpcdFx0XHRuaF9odGhyX2dyb3VwX3JlYmFsYW5jZShuZXdnKTtcbjIwODc6XHRcdGVsc2UgaWYgKG5ld2ctXHUwMDNlcmVzaWxpZW50KVxuMjA4ODpcdFx0XHRyZXBsYWNlX25leHRob3BfZ3JwX3JlcyhuaGcsIG5ld2cpO1xuMjA4OTpcdFxuMjA5MDpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKG5ocC1cdTAwM2VuaF9ncnAsIG5ld2cpO1xuMjA5MTpcdFxuMjA5MjpcdFx0bGlzdF9kZWwoXHUwMDI2bmhnZS1cdTAwM2VuaF9saXN0KTtcbjIwOTM6XHRcdG5leHRob3BfcHV0KG5oZ2UtXHUwMDNlbmgpO1xuMjA5NDpcdFx0bGlzdF9hZGQoXHUwMDI2bmhnZS1cdTAwM2VuaF9saXN0LCBkZWZlcnJlZF9mcmVlKTtcbjIwOTU6XHRcbjIwOTY6XHRcdC8qIFJlbW92YWwgb2YgYSBOSCBmcm9tIGEgcmVzaWxpZW50IGdyb3VwIGlzIG5vdGlmaWVkIHRocm91Z2hcbjIwOTc6XHRcdCAqIGJ1Y2tldCBub3RpZmljYXRpb25zLlxuMjA5ODpcdFx0ICovXG4yMDk5Olx0XHRpZiAobmV3Zy1cdTAwM2VoYXNoX3RocmVzaG9sZCkge1xuMjEwMDpcdFx0XHRlcnIgPSBjYWxsX25leHRob3Bfbm90aWZpZXJzKG5ldCwgTkVYVEhPUF9FVkVOVF9SRVBMQUNFLCBuaHAsXG4yMTAxOlx0XHRcdFx0XHRcdCAgICAgXHUwMDI2ZXh0YWNrKTtcbjIxMDI6XHRcdFx0aWYgKGVycilcbjIxMDM6XHRcdFx0XHRwcl9lcnIoXCYjMzQ7JXNcXG5cJiMzNDssIGV4dGFjay5fbXNnKTtcbjIxMDQ6XHRcdH1cbjIxMDU6XHRcbjIxMDY6XHRcdGlmIChubGluZm8pXG4yMTA3Olx0XHRcdG5leHRob3Bfbm90aWZ5KFJUTV9ORVdORVhUSE9QLCBuaHAsIG5saW5mbyk7XG4yMTA4Olx0XG4yMTA5Olx0XHRyZXR1cm4gZmFsc2U7XG4yMTEwOlx0fVxuMjExMTpcdFxuMjExMjpcdHN0YXRpYyBib29sIF9fbXVzdF9jaGVja1xuMjExMzpcdHJlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxuMjExNDpcdFx0XHRcdCAgIHN0cnVjdCBubF9pbmZvICpubGluZm8pXG4yMTE1Olx0e1xuMjExNjpcdFx0c3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZSwgKnRtcDtcbjIxMTc6XHRcdExJU1RfSEVBRChkZWZlcnJlZF9mcmVlKTtcbjIxMTg6XHRcdGJvb2wgbmVlZF9mbHVzaCA9IGZhbHNlO1xuMjExOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGggRnV6emluZyBUaGlzIENvcmUgTmV0d29ya2luZyBGaXg/KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBJdCBzZWVtcyBsaWtlIHRoZSBpc3N1ZSBpcyB3aXRoIGBleHRhY2tgLCBzcGVjaWZpY2FsbHkgaG93IGl0IG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQgaWYgYGNhbGxfbmV4dGhvcF9ub3RpZmllcnNgIGZhaWxzLiBUaGlzIGNvdWxkIGxlYWQgdG8gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCwgcG90ZW50aWFsbHkgdHJpZ2dlcmluZyBhIEtNU0FOIHdhcm5pbmcgb3IgYSBidWcuIFRoZSBmaXggaXMgc3RyYWlnaHRmb3J3YXJkOiBpbml0aWFsaXplIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9O2AuIFRoYXQmIzM5O3MgZ29vZDsgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXJlIGFsd2F5cyBuYXN0eS4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgY29kZSwgYW5kIGlzIGl0IHdvcnRoIGZ1enppbmc/IExldCYjMzk7cyBzZWUuLi4gaXQgZGVhbHMgd2l0aCBjb3JlIG5ldHdvcmtpbmcsIHNwZWNpZmljYWxseSBJUHY0LCBuZXh0aG9wcywgYW5kIG5ldGxpbmsuIFRoZSBwYXRoIHRvIHRoaXMgY29kZSBpcyB0aHJvdWdoIG5ldGxpbmsgbWVzc2FnZXMgbGlrZSBgUlRNX0RFTE5FWFRIT1BgIG9yIGBSVE1fTkVXTkVYVEhPUGAuIEZ1enppbmcgY291bGQgZXhlcmNpc2UgbmV4dGhvcCBncm91cCBkZWxldGlvbiwgbm90aWZpY2F0aW9uIGVycm9ycywgYW5kIHJlc2lsaWVudCBncm91cHMg4oCTIHRoYXQmIzM5O3MgYSBwcmV0dHkgaW50ZXJlc3Rpbmcgc3VyZmFjZSEKCkxldCBtZSBnbyB0aHJvdWdoIHRoZSBjcml0ZXJpYSBmb3IgJiMzNDtXb3J0aEZ1enppbmcmIzM0Oy4gSXQmIzM5O3MgYWxsIGFib3V0IGZpbmRpbmcgY3Jhc2hlcywgcmVncmVzc2lvbnMsIG9yIGxhdGVudCBidWdzIGludHJvZHVjZWQgYnkgYSBwYXRjaC4gSXQgc2F5cyAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsgaWYgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZS4gQW5kIGl0IGV4cGxpY2l0bHkgbWVudGlvbnMgY29yZSBzdWJzeXN0ZW1zLCBwYXJ0aWN1bGFybHkgY29yZSBuZXR3b3JraW5nLiBJdCBhbHNvIGxvb2tzIGxpa2UgYSByZWZhY3RvcmluZy4KCldhaXQsIGl0ICppcyogcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGluIGBuZXQvaXB2NC9uZXh0aG9wLmNgLCBzbyBpdCYjMzk7cyBkZWZpbml0ZWx5IGluIGEgY29yZSBzdWJzeXN0ZW0uIEJpbmdvISBTbywgKip5ZXMqKiwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIFdvcnRoRnV6emluZyA9IFRydWUuIEp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBhbmQgTWFrZWZpbGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlncyBuZWVkZWQgZm9yIGBuZXQvaXB2NC9uZXh0aG9wLmNgIHRvIGVuc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBpcyBjb21waWxlZCBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXh0aG9wLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxuLS1cbm5ldC9pcHY0L01ha2VmaWxlLTE2LVx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTc6XHQgICAgIG1ldHJpY3MubyBuZXRsaW5rLm8gbmV4dGhvcC5vIHVkcF90dW5uZWxfc3R1Yi5vXG5uZXQvaXB2NC9NYWtlZmlsZS0xOC1cbi0tXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMtNTItXG5uZXQvaXB2NC9maWJfc2VtYW50aWNzLmM6NTM6LyogZm9yX25leHRob3BzIGFuZCBjaGFuZ2VfbmV4dGhvcHMgb25seSB1c2VkIHdoZW4gbmV4dGhvcCBvYmplY3Rcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy01NC0gKiBpcyBub3Qgc2V0IGluIGEgZmliX2luZm8uIFRoZSBsb2dpYyB3aXRoaW4gY2FuIHJlZmVyZW5jZSBmaWJfbmguXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jPTE1NDk9c3RhdGljIGludCBjaGVja19zcmNfYWRkcihjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNhZGRyLFxuLS1cbm5ldC9pcHY0L25leHRob3AuYy0xNTUyLVx0aWYgKCFpcHY2X2FkZHJfYW55KHNhZGRyKSkge1xubmV0L2lwdjQvbmV4dGhvcC5jOjE1NTM6XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SVB2NiByb3V0ZXMgdXNpbmcgc291cmNlIGFkZHJlc3MgY2FuIG5vdCB1c2UgbmV4dGhvcCBvYmplY3RzXCYjMzQ7KTtcbm5ldC9pcHY0L25leHRob3AuYy0xNTU0LVx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmM9MTU1OT1pbnQgZmliNl9jaGVja19uZXh0aG9wKHN0cnVjdCBuZXh0aG9wICpuaCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jLTE1NjctXHQgKiBhY3Jvc3MgbXVsdGlwbGUgZmliIGVudHJpZXMuIElmIHRoZSBjb25maWcgd2FudHMgdG8gdXNlIHNvdXJjZVxubmV0L2lwdjQvbmV4dGhvcC5jOjE1Njg6XHQgKiByb3V0aW5nIGl0IGNhbiBub3QgdXNlIG5leHRob3Agb2JqZWN0cy4gbWx4c3cgYWxzbyBkb2VzIG5vdCBhbGxvd1xubmV0L2lwdjQvbmV4dGhvcC5jLTE1NjktXHQgKiBmaWI2X3NyYyBvbiByb3V0ZXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQyNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgSVB2NCBOZXR3b3JraW5nIEJ1aWxkIFByb2Nlc3MqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgbmV4dGhvcC5vYCBnZXRzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCB3aXRoIHRoZSBgb2JqLXlgIGRpcmVjdGl2ZSwgYnV0IG9ubHkgd2hlbiBlaXRoZXIgYENPTkZJR19JTkVUYCBvciBgQ09ORklHX05FVGAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZSwgc3RhbmRhcmQgSVB2NCBuZXR3b3JraW5nIGNvbXBvbmVudHMgbmVlZCB0byBiZSBpbmNsdWRlZC4gTm93LCBJIHdhbnQgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgYG5leHRob3Aub2AgaXMgaW50ZWdyYXRlZCBhbmQgd2hhdCBvdGhlciBtb2R1bGVzIGl0IHJlbGllcyBvbiB3aXRoaW4gdGhlIElQdjQgc3RhY2suIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgbWFrZWZpbGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IFRDUC9JUCAoSU5FVCkgbGF5ZXIuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxuICAgNzpcdFx0ICAgICBpcF9pbnB1dC5vIGlwX2ZyYWdtZW50Lm8gaXBfZm9yd2FyZC5vIGlwX29wdGlvbnMubyBcXFxuICAgODpcdFx0ICAgICBpcF9vdXRwdXQubyBpcF9zb2NrZ2x1ZS5vIGluZXRfaGFzaHRhYmxlcy5vIFxcXG4gICA5Olx0XHQgICAgIGluZXRfdGltZXdhaXRfc29jay5vIGluZXRfY29ubmVjdGlvbl9zb2NrLm8gXFxcbiAgMTA6XHRcdCAgICAgdGNwLm8gdGNwX2lucHV0Lm8gdGNwX291dHB1dC5vIHRjcF90aW1lci5vIHRjcF9pcHY0Lm8gXFxcbiAgMTE6XHRcdCAgICAgdGNwX21pbmlzb2Nrcy5vIHRjcF9jb25nLm8gdGNwX21ldHJpY3MubyB0Y3BfZmFzdG9wZW4ubyBcXFxuICAxMjpcdFx0ICAgICB0Y3BfcmVjb3ZlcnkubyB0Y3BfdWxwLm8gXFxcbiAgMTM6XHRcdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxuICAxNDpcdFx0ICAgICB1ZHBfb2ZmbG9hZC5vIGFycC5vIGljbXAubyBkZXZpbmV0Lm8gYWZfaW5ldC5vIGlnbXAubyBcXFxuICAxNTpcdFx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxuICAxNjpcdFx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxuICAxNzpcdFx0ICAgICBtZXRyaWNzLm8gbmV0bGluay5vIG5leHRob3AubyB1ZHBfdHVubmVsX3N0dWIub1xuICAxODpcdFxuICAxOTpcdG9iai0kKENPTkZJR19ORVRfSVBfVFVOTkVMKSAmIzQzOz0gaXBfdHVubmVsLm9cbiAgMjA6XHRvYmotJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsX25ldF9pcHY0Lm9cbiAgMjE6XHRvYmotJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IHByb2Mub1xuICAyMjpcdG9iai0kKENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMpICYjNDM7PSBmaWJfcnVsZXMub1xuICAyMzpcdG9iai0kKENPTkZJR19JUF9NUk9VVEUpICYjNDM7PSBpcG1yLm9cbiAgMjQ6XHRvYmotJChDT05GSUdfSVBfTVJPVVRFX0NPTU1PTikgJiM0Mzs9IGlwbXJfYmFzZS5vXG4gIDI1Olx0b2JqLSQoQ09ORklHX05FVF9JUElQKSAmIzQzOz0gaXBpcC5vXG4gIDI2Olx0Z3JlLXkgOj0gZ3JlX2RlbXV4Lm9cbiAgMjc6XHRmb3UteSA6PSBmb3VfY29yZS5vIGZvdV9ubC5vIGZvdV9icGYub1xuICAyODpcdG9iai0kKENPTkZJR19ORVRfRk9VKSAmIzQzOz0gZm91Lm9cbiAgMjk6XHRvYmotJChDT05GSUdfTkVUX0lQR1JFX0RFTVVYKSAmIzQzOz0gZ3JlLm9cbiAgMzA6XHRvYmotJChDT05GSUdfTkVUX0lQR1JFKSAmIzQzOz0gaXBfZ3JlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI5OQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIEluZXQgU3VwcG9ydCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYENPTkZJR19JTkVUYCBpcyBiZWluZyBoYW5kbGVkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBzeXN0ZW0gZmlsZXMsIHNwZWNpZmljYWxseSBgbmV0L01ha2VmaWxlYCBhbmQgYEtjb25maWdgLiBUaGVzZSBhcmUgdHlwaWNhbGx5IHRoZSBnby10byBsb2NhdGlvbnMgZm9yIGJ1aWxkIGNvbmZpZ3VyYXRpb25zIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbS4gYE1ha2VmaWxlYCB3aWxsIHNob3cgbWUgaG93IGBDT05GSUdfSU5FVGAgYWZmZWN0cyB0aGUgY29tcGlsYXRpb24gb2YgdmFyaW91cyBuZXR3b3JraW5nIGNvbXBvbmVudHMsIHdoaWxlIGBLY29uZmlnYCBzaG91bGQgcmV2ZWFsIHRoZSBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgdGhlIGxvZ2ljIGJlaGluZCBob3cgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhvc2UgYW5kIHNlZSB3aGVyZSB0aGV5IGxlYWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSB0byBob3cgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIGNvbnRyb2xsZWQgd2l0aGluIHRoZSBjb2RlYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqLS4qaXB2NCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX05FVEZJTFRFUilcdFx0JiM0Mzs9IG5ldGZpbHRlci9cbm5ldC9NYWtlZmlsZToxNzpvYmotJChDT05GSUdfSU5FVClcdFx0JiM0Mzs9IGlwdjQvXG5uZXQvTWFrZWZpbGUtMTgtb2JqLSQoQ09ORklHX1RMUylcdFx0JiM0Mzs9IHRscy9cbi0tXG5uZXQvaXB2NC9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfTkVUX0lQX1RVTk5FTCkgJiM0Mzs9IGlwX3R1bm5lbC5vXG5uZXQvaXB2NC9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfU1lTQ1RMKSAmIzQzOz0gc3lzY3RsX25ldF9pcHY0Lm9cbm5ldC9pcHY0L01ha2VmaWxlLTIxLW9iai0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gcHJvYy5vXG4tLVxubmV0L2lwdjQvTWFrZWZpbGU9NjQ9b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gdWRwX2JwZi5vXG5uZXQvaXB2NC9NYWtlZmlsZTo2NTpvYmotJChDT05GSUdfTkVUTEFCRUwpICYjNDM7PSBjaXBzb19pcHY0Lm9cbm5ldC9pcHY0L01ha2VmaWxlLTY2LVxuLS1cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS02LSMgZGVmcmFnXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6NzpvYmotJChDT05GSUdfTkZfREVGUkFHX0lQVjQpICYjNDM7PSBuZl9kZWZyYWdfaXB2NC5vXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtOC1cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19ORl9TT0NLRVRfSVBWNCkgJiM0Mzs9IG5mX3NvY2tldF9pcHY0Lm9cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfTkZfVFBST1hZX0lQVjQpICYjNDM7PSBuZl90cHJveHlfaXB2NC5vXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTEtXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTItIyByZWplY3Rcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZToxMzpvYmotJChDT05GSUdfTkZfUkVKRUNUX0lQVjQpICYjNDM7PSBuZl9yZWplY3RfaXB2NC5vXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQtXG4tLVxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlPTIxPW9iai0kKENPTkZJR19ORl9OQVRfU05NUF9CQVNJQykgJiM0Mzs9IG5mX25hdF9zbm1wX2Jhc2ljLm9cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS0yMi1cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZToyMzpvYmotJChDT05GSUdfTkZUX1JFSkVDVF9JUFY0KSAmIzQzOz0gbmZ0X3JlamVjdF9pcHY0Lm9cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfTkZUX0ZJQl9JUFY0KSAmIzQzOz0gbmZ0X2ZpYl9pcHY0Lm9cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfTkZUX0RVUF9JUFY0KSAmIzQzOz0gbmZ0X2R1cF9pcHY0Lm9cbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS0yNi1cbi0tXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU9NTE9b2JqLSQoQ09ORklHX0lQX05GX0FSUEZJTFRFUikgJiM0Mzs9IGFycHRhYmxlX2ZpbHRlci5vXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTItXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGU6NTM6b2JqLSQoQ09ORklHX05GX0RVUF9JUFY0KSAmIzQzOz0gbmZfZHVwX2lwdjQub1xubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTU0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjEzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgRm9yd2FyZGluZyBDb2RlIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyB0aGUgYENPTkZJR19JTkVUYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQmIzM5O3Mgc2V0LiBOb3csIG15IGZvY3VzIGlzIG9uIHRoZSBgbmV0L2lwdjQvbmV4dGhvcC5jYCBmaWxlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gYHJlbW92ZV9uaF9ncnBfZW50cnlgLiBBcmUgdGhlcmUgYW55IG90aGVyIHJlbGV2YW50IHN5bWJvbHMgb3IgZnVuY3Rpb25zIGluIHRoYXQgZmlsZSB0aGF0IGludGVyYWN0IHdpdGggaXQsIGVpdGhlciBieSBjYWxsaW5nIGl0IG9yIGJlaW5nIGVudHJ5IHBvaW50cyB0byByZWxhdGVkIGZ1bmN0aW9uYWxpdHk/IEkgc2hvdWxkIHJldmlldyB0aGlzIGZpbGUgY2xvc2VseS4gTmV4dCwgSeKAmWxsIG5lZWQgdG8gdGhvcm91Z2hseSByZXZpZXcgdGhlIGNhbGwgc2l0ZXMgb2YgYHJlbW92ZV9uaF9ncnBfZW50cnlgIGl0c2VsZiB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBpbXBhY3QuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYmVpbmcgdXNlZCBhbmQgZm9yIHdoYXQ/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlbW92ZV9uaF9ncnBfZW50cnkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXh0aG9wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV4dGhvcC5jPTIwMzM9c3RhdGljIGJvb2wgX19tdXN0X2NoZWNrXG5uZXQvaXB2NC9uZXh0aG9wLmM6MjAzNDpyZW1vdmVfbmhfZ3JwX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZSxcbm5ldC9pcHY0L25leHRob3AuYy0yMDM1LVx0XHQgICAgc3RydWN0IG5sX2luZm8gKm5saW5mbywgc3RydWN0IGxpc3RfaGVhZCAqZGVmZXJyZWRfZnJlZSlcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmM9MjExMz1yZW1vdmVfbmV4dGhvcF9mcm9tX2dyb3VwcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXh0aG9wICpuaCxcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjEyNi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuaGdlLCB0bXAsIFx1MDAyNm5oLVx1MDAzZWdycF9saXN0LCBuaF9saXN0KVxubmV0L2lwdjQvbmV4dGhvcC5jOjIxMjc6XHRcdG5lZWRfZmx1c2ggfD0gcmVtb3ZlX25oX2dycF9lbnRyeShuZXQsIG5oZ2UsIG5saW5mbyxcbm5ldC9pcHY0L25leHRob3AuYy0yMTI4LVx0XHRcdFx0XHRcdCAgXHUwMDI2ZGVmZXJyZWRfZnJlZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MjcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgcmVtb3ZlX25leHRob3BfZnJvbV9ncm91cHNgIENhbGxlcnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY2FsbCBncmFwaCBmb3IgYHJlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzYC4gTXkgaW5pdGlhbCBhcHByb2FjaCB3b3VsZCBiZSB0byB0cmFjZSB0aGUgZnVuY3Rpb24mIzM5O3MgdXNhZ2UsIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIGRhdGEgaW50ZWdyaXR5IGFuZCBuZXR3b3JrIGJlaGF2aW9yLiBJJiMzOTttIGltbWVkaWF0ZWx5IGNvbnNpZGVyaW5nIGhvdyB0aGlzIHJlbW92YWwgaW1wYWN0cyB0aGUgcm91dGluZyB0YWJsZXMgYW5kLCBjcml0aWNhbGx5LCBhbnkgZGVwZW5kZW5jaWVzIG9uIHRob3NlIGdyb3Vwcy4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgY2xlYW51cCwgb3IgaXMgdGhpcyBhIGNyaXRpY2FsIHBhdGggb3BlcmF0aW9uIHdpdGggcG90ZW50aWFsIGNhc2NhZGluZyBlZmZlY3RzIG9uIHRyYWZmaWMgZm9yd2FyZGluZz8KCkkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBtb2R1bGVzIGFuZCBzY2VuYXJpb3MgY2FsbGluZyB0aGlzLiBBcmUgd2UgZGVhbGluZyB3aXRoIGR5bmFtaWMgcm91dGluZyBwcm90b2NvbCBpbnRlcmFjdGlvbnMgKEJHUCwgT1NQRiwgZXRjLiksIG9yIGlzIHRoaXMgdHJpZ2dlcmVkIGJ5IHNvbWUgc29ydCBvZiBtYW5hZ2VtZW50IGludGVyZmFjZSBvciBjb25maWd1cmF0aW9uIGNoYW5nZT8gSXMgaXQgYSBzdGFuZGFsb25lIGZ1bmN0aW9uIGluIGEgY2VudHJhbCBkYXRhIHBsYW5lLCBvciBpcyBpdCBpbnZva2VkIGJ5IG11bHRpcGxlLCBwb3RlbnRpYWxseSBkaXN0cmlidXRlZCwgY29udHJvbCBwbGFuZSBlbGVtZW50cz8gS25vd2luZyB0aGUgY29udGV4dCB3aWxsIHBvaW50IHRvd2FyZHMgY29tbW9uIGlzc3Vlcy4KClNwZWNpZmljYWxseSwgSSB3YW50IHRvIGxvb2sgZm9yOgoKKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBoYXBwZW5zIGlmIHRoZSBgcmVtb3ZlX25leHRob3BfZnJvbV9ncm91cHNgIGZ1bmN0aW9uIGZhaWxzPyBBcmUgZmFpbHVyZXMgZ3JhY2VmdWxseSBoYW5kbGVkLCBvciBhcmUgd2Ugcmlza2luZyBuZXR3b3JrIGJsYWNraG9sZXM/CiogICAqKkNvbmN1cnJlbmN5OioqIEFyZSB0aGVyZSBhbnkgY29uY3VycmVuY3kgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBjYWxsPyBTcGVjaWZpY2FsbHksIGNhbiBtdWx0aXBsZSBwcm9jZXNzZXMgYmUgcmVtb3ZpbmcgdGhlIHNhbWUgbmV4dCBob3Agc2ltdWx0YW5lb3VzbHksIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gcmFjZSBjb25kaXRpb25zPyBBcmUgdGhlcmUgbG9ja3Mgb3Igc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgaW4gcGxhY2U/CiogICAqKlRyYW5zYWN0aW9uczoqKiBJcyB0aGUgbmV4dCBob3AgcmVtb3ZhbCBwYXJ0IG9mIGEgbGFyZ2VyIGF0b21pYyB0cmFuc2FjdGlvbj8gSWYgc28sIHdoYXQgaXMgdGhlIHNjb3BlIG9mIHRoYXQgdHJhbnNhY3Rpb24sIGFuZCBob3cgZG9lcyBpdCBlbnN1cmUgZGF0YSBjb25zaXN0ZW5jeSBhY3Jvc3MgdGhlIG5ldHdvcms/CiogICAqKkF1ZGl0aW5nOioqIElzIHRoZXJlIGFueSBsb2dnaW5nIGFyb3VuZCB0aGUgY2FsbCwgdG8gdW5kZXJzdGFuZCBfd2hlbl8gYW5kIF93aHlfIGEgbmV4dCBob3AgaXMgYmVpbmcgcmVtb3ZlZD8gSXMgdGhlcmUgZW5vdWdoIGNvbnRleHQgcmVjb3JkZWQgdG8gZGVidWcgaXNzdWVzIGluIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudD8KKiAgICoqUGVyZm9ybWFuY2U6KiogSSYjMzk7bSBhbHNvIHRoaW5raW5nIGFib3V0IHRoZSBzY2FsZSBvZiB0aGUgb3BlcmF0aW9uLiBEb2VzIHRoaXMgZnVuY3Rpb24gaGF2ZSB0aGUgcG90ZW50aWFsIHRvIGJlIGEgYm90dGxlbmVjaz8gSWYgc28sIHdoYXQgYXJlIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHJlbW92YWwgaXRzZWxmIChlLmcuLCBoYXNoIGxvb2t1cHMsIGxpc3QgbWFuaXB1bGF0aW9ucyk/CgpVbHRpbWF0ZWx5LCBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoYXQgdGhpcyBpcyBhIGZhaXJseSBsb3ctbGV2ZWwgZnVuY3Rpb24gYW5kIHRyYWNpbmcgdGhvc2UgY2FsbGVycyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIG5ldHdvcmsmIzM5O3MgZGF0YSBwbGFuZSBzdGF0ZSBpcyBtYWludGFpbmVkLCBhcyB3ZWxsIGFzIGdpdmluZyBtZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiBwb3NzaWJsZSBmYWlsdXJlIG1vZGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZW1vdmVfbmV4dGhvcF9mcm9tX2dyb3VwcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L25leHRob3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXh0aG9wLmM9MjExMj1zdGF0aWMgYm9vbCBfX211c3RfY2hlY2tcbm5ldC9pcHY0L25leHRob3AuYzoyMTEzOnJlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxubmV0L2lwdjQvbmV4dGhvcC5jLTIxMTQtXHRcdFx0ICAgc3RydWN0IG5sX2luZm8gKm5saW5mbylcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmM9MjE5Nj1zdGF0aWMgYm9vbCBfX211c3RfY2hlY2sgX19yZW1vdmVfbmV4dGhvcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXh0aG9wICpuaCxcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjIwOS1cbm5ldC9pcHY0L25leHRob3AuYzoyMjEwOlx0XHRuZWVkX2ZsdXNoIHw9IHJlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzKG5ldCwgbmgsIG5saW5mbyk7XG5uZXQvaXB2NC9uZXh0aG9wLmMtMjIxMS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ5NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGlnZ2luZyBpbnRvIHRoZSBgX19yZW1vdmVfbmV4dGhvcGAgQ2FsbGVyIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgYXNraW5nIG1lIHRvIGxvb2sgYXQgYWxsIHRoZSBwbGFjZXMgd2l0aGluIHRoaXMgY29kZSB0aGF0IGNhbGwgdGhlIGBfX3JlbW92ZV9uZXh0aG9wYCBmdW5jdGlvbi4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgb3IgcmVmYWN0b3JpbmcgdGFzay4gTXkgaW5pdGlhbCBhcHByb2FjaCB3b3VsZCBiZSB0byBsZXZlcmFnZSBteSBrbm93bGVkZ2Ugb2YgdGhlIGNvZGViYXNlIGFuZCBhbnkgdG9vbHMgYXZhaWxhYmxlLiBJJiMzOTtkIHN0YXJ0IHdpdGggYSBzaW1wbGUgZ3JlcCBvciBgZmluZGAgY29tbWFuZCBpZiBJJiMzOTttIHdvcmtpbmcgaW4gYSBjb21tYW5kLWxpbmUgZW52aXJvbm1lbnQsIG9yIHVzZSB0aGUgJiMzNDtmaW5kIGFsbCByZWZlcmVuY2VzJiMzNDsgZmVhdHVyZSBpbiBteSBJREUgaWYgSSYjMzk7bSBpbiBvbmUuIEkmIzM5O2QgYmUgbG9va2luZyBmb3IgYWxsIG9jY3VycmVuY2VzIG9mIHRoYXQgZnVuY3Rpb24gbmFtZSwgaW5jbHVkaW5nIGFueSBwb3RlbnRpYWwgdmFyaWF0aW9ucyB0aGF0IG1pZ2h0IGluZGljYXRlIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIOKAkyBtYXliZSBhIG5hbWVzcGFjZSBwcmVmaXggb3IgYSBtZXRob2QgY2FsbCBvbiBhbiBvYmplY3QuCgpPbmNlIEkgaGF2ZSBhIGxpc3Qgb2YgY2FsbGVycywgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGVhY2ggY2FsbC4gSeKAmWQgd2FudCB0byBxdWlja2x5IHNjYW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZ3Jhc3AgdGhlIHB1cnBvc2Ugb2YgdGhlIGNhbGw6IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbnZvbHZlZD8gV2hhdCYjMzk7cyB0aGUgb3ZlcmFsbCBsb2dpYyBmbG93PyBXaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBzdGF0ZSBvZiB0aGUgc3lzdGVtIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGBfX3JlbW92ZV9uZXh0aG9wYCBmdW5jdGlvbiBleGVjdXRlcz8gSeKAmWQgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uZGl0aW9uYWwgc3RhdGVtZW50cyBvciBsb29wcyB0aGF0IG1pZ2h0IGltcGFjdCBob3cgb2Z0ZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIHRoZSBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIGl0IGdldHMgaW52b2tlZC4KCklmIEkmIzM5O20gd29ya2luZyBvbiBhIHByb2plY3Qgd2l0aCBnb29kIGRvY3VtZW50YXRpb24gb3IgY29tbWVudHMsIHRoYXQgd2lsbCBiZSBhbiBpbnZhbHVhYmxlIHJlc291cmNlLiBJZiBub3QsIEnigJlsbCBoYXZlIHRvIHJlbHkgb24gbXkgYWJpbGl0eSB0byBxdWlja2x5IGdyb2sgdGhlIGNvZGUuIEZvciBlYWNoIGNhbGxlciwgSSB3b3VsZCBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mICpub3QqIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gSXMgaXQgY3JpdGljYWwgdG8gZGF0YSBpbnRlZ3JpdHk/IElzIGl0IGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBEb2VzIGl0IGhhdmUgYW55IGltcGxpY2F0aW9ucyBmb3Igb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbT8gSW4gdGhlIGVuZCwgdGhlIGFpbSBpcyB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2Ygd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMsIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IG5leHQgc3RlcHMgd2lsbCBsaWtlbHkgYmUgZGV0ZXJtaW5lZCBieSB3aGF0IEkgZmluZCBpbiB0aGVzZSBpbml0aWFsIGludmVzdGlnYXRpb25zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3JlbW92ZV9uZXh0aG9wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV4dGhvcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L25leHRob3AuYz0yMTQyPXN0YXRpYyB2b2lkIHJlbW92ZV9uZXh0aG9wX2dyb3VwKHN0cnVjdCBuZXh0aG9wICpuaCwgc3RydWN0IG5sX2luZm8gKm5saW5mbylcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjE2My0vKiBub3QgY2FsbGVkIGZvciBuZXh0aG9wIHJlcGxhY2UgKi9cbm5ldC9pcHY0L25leHRob3AuYzoyMTY0OnN0YXRpYyBib29sIF9fbXVzdF9jaGVjayBfX3JlbW92ZV9uZXh0aG9wX2ZpYihzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjE2NS1cdFx0XHRcdFx0ICAgICAgc3RydWN0IG5leHRob3AgKm5oKVxuLS1cbm5ldC9pcHY0L25leHRob3AuYy0yMTk1LVxubmV0L2lwdjQvbmV4dGhvcC5jOjIxOTY6c3RhdGljIGJvb2wgX19tdXN0X2NoZWNrIF9fcmVtb3ZlX25leHRob3Aoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqbmgsXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjE5Ny1cdFx0XHRcdFx0ICBzdHJ1Y3QgbmxfaW5mbyAqbmxpbmZvKVxubmV0L2lwdjQvbmV4dGhvcC5jLTIxOTgte1xubmV0L2lwdjQvbmV4dGhvcC5jOjIxOTk6XHRib29sIG5lZWRfZmx1c2ggPSBfX3JlbW92ZV9uZXh0aG9wX2ZpYihuZXQsIG5oKTtcbm5ldC9pcHY0L25leHRob3AuYy0yMjAwLVxuLS1cbm5ldC9pcHY0L25leHRob3AuYz0yMjE2PXN0YXRpYyBib29sIF9fbXVzdF9jaGVjayByZW1vdmVfbmV4dGhvcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXh0aG9wICpuaCxcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjIyOC1cbm5ldC9pcHY0L25leHRob3AuYzoyMjI5Olx0bmVlZF9mbHVzaCA9IF9fcmVtb3ZlX25leHRob3AobmV0LCBuaCwgbmxpbmZvKTtcbm5ldC9pcHY0L25leHRob3AuYy0yMjMwLVx0bmhfYmFzZV9zZXFfaW5jKG5ldCk7XG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jPTI1NzY9c3RhdGljIGludCByZXBsYWNlX25leHRob3Aoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqb2xkLFxuLS1cbm5ldC9pcHY0L25leHRob3AuYy0yNjI3LVxubmV0L2lwdjQvbmV4dGhvcC5jOjI2Mjg6XHRcdFdBUk5fT05fT05DRShfX3JlbW92ZV9uZXh0aG9wKG5ldCwgbmV3LCBOVUxMKSk7XG5uZXQvaXB2NC9uZXh0aG9wLmMtMjYyOS1cdFx0bmV4dGhvcF9wdXQobmV3KTtcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmM9MzAxMD1zdGF0aWMgc3RydWN0IG5leHRob3AgKm5leHRob3BfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5oX2NvbmZpZyAqY2ZnLFxuLS1cbm5ldC9pcHY0L25leHRob3AuYy0zMDM4LVx0aWYgKGVycikge1xubmV0L2lwdjQvbmV4dGhvcC5jOjMwMzk6XHRcdFdBUk5fT05fT05DRShfX3JlbW92ZV9uZXh0aG9wKG5ldCwgbmgsIE5VTEwpKTtcbm5ldC9pcHY0L25leHRob3AuYy0zMDQwLVx0XHRuZXh0aG9wX3B1dChuaCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjQzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBvcGVyYXRpb25zIGFuZCB3aGVyZSBJJiMzOTtkIHN0YXJ0IGxvb2tpbmc6CgoqKkFuYWx5emluZyBOZXh0aG9wIFJlbW92YWwgUm91dGluZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBhbGwgY2xlYXJseSByZWxhdGVkIHRvIHJlbW92aW5nIG5leHRob3BzIHdpdGhpbiB0aGUgSVB2NCByb3V0aW5nIGNvbnRleHQuIFRoZSBuYW1lcyB0ZWxsIHRoZSBzdG9yeTogYHJlbW92ZV9uaF9ncnBfZW50cnlgIHN1Z2dlc3RzIHJlbW92aW5nIGFuIGVudHJ5IGZyb20gYSBuZXh0aG9wIGdyb3VwLCBgcmVtb3ZlX25leHRob3BfZnJvbV9ncm91cHNgIHNvdW5kcyBsaWtlIGl0IGhhbmRsZXMgcmVtb3ZpbmcgYSBuZXh0aG9wIGZyb20gKm11bHRpcGxlKiBncm91cHMsIGByZW1vdmVfbmV4dGhvcGAgaXMgcHJvYmFibHkgdGhlIGNvcmUgbmV4dGhvcCByZW1vdmFsIHJvdXRpbmUgaXRzZWxmLCBhbmQgdGhlbiB3ZSBoYXZlIHRoZSByb3V0aW5nIHRhYmxlIG1hbmFnZW1lbnQgKFJUTSkgZnVuY3Rpb25zOiBgcnRtX2RlbF9uZXh0aG9wYCBmb3IgZGVsZXRpbmcgYSBuZXh0aG9wIGFuZCBgcnRtX25ld19uZXh0aG9wYCBmb3IgaXRzIGNyZWF0aW9uLgoKR2l2ZW4gdGhlIHRhc2sgYXQgaGFuZCwgSSYjMzk7ZCBpbW1lZGlhdGVseSBqdW1wIHRvIGV4YW1pbmluZyBgcnRtX2RlbF9uZXh0aG9wYC4gSXQmIzM5O3MgdGhlIFJUTSBmdW5jdGlvbiBmb3IgKmRlbGV0aW9uKiwgd2hpY2ggbWFrZXMgaXQgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGEgbmV4dGhvcCBpcyBjb21wbGV0ZWx5IHJlbW92ZWQgZnJvbSB0aGUgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCByZXNvdXJjZXMgYXJlIGZyZWVkLCBob3cgdGhlIHJlZmVyZW5jZSBjb3VudHMgYXJlIG1hbmFnZWQsIGFuZCBob3cgdGhlIHJlbW92YWwgY2FzY2FkZXMgdGhyb3VnaCBhbnkgYXNzb2NpYXRlZCBncm91cHMgb3IgdGFibGVzLiBBbmQgdGhhdCBtZWFucyBhIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgbmV0L2lwdjQvbmV4dGhvcC5jYCB0byBzZWUgaG93IGl0IHdvcmtzIGluIHRoZSBJUHY0IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0bV8uKm5leHRob3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXh0aG9wLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvbmV4dGhvcC5jPTMyODc9c3RhdGljIGludCBydG1fdG9fbmhfY29uZmlnX3J0bmwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICoqdGIsXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jLTMzMTgtLyogcnRubCAqL1xubmV0L2lwdjQvbmV4dGhvcC5jOjMzMTk6c3RhdGljIGludCBydG1fbmV3X25leHRob3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzMyMC1cdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jPTMzNjA9c3RhdGljIGludCBuaF92YWxpZF9nZXRfZGVsX3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzM4OC0vKiBydG5sICovXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzM4OTpzdGF0aWMgaW50IHJ0bV9kZWxfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC9pcHY0L25leHRob3AuYy0zMzkwLVx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzQyNi0vKiBydG5sICovXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzQyNzpzdGF0aWMgaW50IHJ0bV9nZXRfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcbm5ldC9pcHY0L25leHRob3AuYy0zNDI4LVx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmM9MzU3OD1ydG1fZHVtcF9uaF9jdHgoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9pcHY0L25leHRob3AuYy0zNTg1LVxubmV0L2lwdjQvbmV4dGhvcC5jOjM1ODY6c3RhdGljIGludCBydG1fZHVtcF93YWxrX25leHRob3BzKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzU4Ny1cdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuLS1cbm5ldC9pcHY0L25leHRob3AuYy0zNjQ1LVxubmV0L2lwdjQvbmV4dGhvcC5jOjM2NDY6c3RhdGljIGludCBydG1fZHVtcF9uZXh0aG9wX2NiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbm5ldC9pcHY0L25leHRob3AuYy0zNjQ3LVx0XHRcdCAgICAgICBzdHJ1Y3QgbmV4dGhvcCAqbmgsIHZvaWQgKmRhdGEpXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jLTM2NjAtLyogcnRubCAqL1xubmV0L2lwdjQvbmV4dGhvcC5jOjM2NjE6c3RhdGljIGludCBydG1fZHVtcF9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbm5ldC9pcHY0L25leHRob3AuYy0zNjYyLXtcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzY3Mi1cbm5ldC9pcHY0L25leHRob3AuYzozNjczOlx0ZXJyID0gcnRtX2R1bXBfd2Fsa19uZXh0aG9wcyhza2IsIGNiLCByb290LCBjdHgsXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzY3NDpcdFx0XHRcdCAgICAgXHUwMDI2cnRtX2R1bXBfbmV4dGhvcF9jYiwgXHUwMDI2ZmlsdGVyKTtcbm5ldC9pcHY0L25leHRob3AuYy0zNjc1LVxuLS1cbm5ldC9pcHY0L25leHRob3AuYz0zNzY5PXJ0bV9kdW1wX3Jlc19idWNrZXRfY3R4KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzc3Ni1cbm5ldC9pcHY0L25leHRob3AuYzozNzc3OnN0cnVjdCBydG1fZHVtcF9uZXh0aG9wX2J1Y2tldF9kYXRhIHtcbm5ldC9pcHY0L25leHRob3AuYy0zNzc4LVx0c3RydWN0IHJ0bV9kdW1wX3Jlc19idWNrZXRfY3R4ICpjdHg7XG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jLTM3ODEtXG5uZXQvaXB2NC9uZXh0aG9wLmM6Mzc4MjpzdGF0aWMgaW50IHJ0bV9kdW1wX25leHRob3BfYnVja2V0X25oKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzc4My1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbm5ldC9pcHY0L25leHRob3AuYy0zNzg0LVx0XHRcdFx0ICAgICAgc3RydWN0IG5leHRob3AgKm5oLFxubmV0L2lwdjQvbmV4dGhvcC5jOjM3ODU6XHRcdFx0XHQgICAgICBzdHJ1Y3QgcnRtX2R1bXBfbmV4dGhvcF9idWNrZXRfZGF0YSAqZGQpXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzc4Ni17XG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jLTM4MjQtXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzgyNTpzdGF0aWMgaW50IHJ0bV9kdW1wX25leHRob3BfYnVja2V0X2NiKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzgyNi1cdFx0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzgyOC17XG5uZXQvaXB2NC9uZXh0aG9wLmM6MzgyOTpcdHN0cnVjdCBydG1fZHVtcF9uZXh0aG9wX2J1Y2tldF9kYXRhICpkZCA9IGRhdGE7XG5uZXQvaXB2NC9uZXh0aG9wLmMtMzgzMC1cdHN0cnVjdCBuaF9ncm91cCAqbmhnO1xuLS1cbm5ldC9pcHY0L25leHRob3AuYy0zODM4LVxubmV0L2lwdjQvbmV4dGhvcC5jOjM4Mzk6XHRyZXR1cm4gcnRtX2R1bXBfbmV4dGhvcF9idWNrZXRfbmgoc2tiLCBjYiwgbmgsIGRkKTtcbm5ldC9pcHY0L25leHRob3AuYy0zODQwLX1cbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzg0Mi0vKiBydG5sICovXG5uZXQvaXB2NC9uZXh0aG9wLmM6Mzg0MzpzdGF0aWMgaW50IHJ0bV9kdW1wX25leHRob3BfYnVja2V0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzg0NC1cdFx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzg0Ni1cdHN0cnVjdCBydG1fZHVtcF9yZXNfYnVja2V0X2N0eCAqY3R4ID0gcnRtX2R1bXBfcmVzX2J1Y2tldF9jdHgoY2IpO1xubmV0L2lwdjQvbmV4dGhvcC5jOjM4NDc6XHRzdHJ1Y3QgcnRtX2R1bXBfbmV4dGhvcF9idWNrZXRfZGF0YSBkZCA9IHsgLmN0eCA9IGN0eCB9O1xubmV0L2lwdjQvbmV4dGhvcC5jLTM4NDgtXHRzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItXHUwMDNlc2spO1xuLS1cbm5ldC9pcHY0L25leHRob3AuYy0zODYwLVx0XHRcdHJldHVybiBQVFJfRVJSKG5oKTtcbm5ldC9pcHY0L25leHRob3AuYzozODYxOlx0XHRlcnIgPSBydG1fZHVtcF9uZXh0aG9wX2J1Y2tldF9uaChza2IsIGNiLCBuaCwgXHUwMDI2ZGQpO1xubmV0L2lwdjQvbmV4dGhvcC5jLTM4NjItXHR9IGVsc2Uge1xuLS1cbm5ldC9pcHY0L25leHRob3AuYy0zODY0LVxubmV0L2lwdjQvbmV4dGhvcC5jOjM4NjU6XHRcdGVyciA9IHJ0bV9kdW1wX3dhbGtfbmV4dGhvcHMoc2tiLCBjYiwgcm9vdCwgXHUwMDI2Y3R4LVx1MDAzZW5oLFxubmV0L2lwdjQvbmV4dGhvcC5jOjM4NjY6XHRcdFx0XHRcdCAgICAgXHUwMDI2cnRtX2R1bXBfbmV4dGhvcF9idWNrZXRfY2IsIFx1MDAyNmRkKTtcbm5ldC9pcHY0L25leHRob3AuYy0zODY3LVx0fVxuLS1cbm5ldC9pcHY0L25leHRob3AuYz0zODk1PXN0YXRpYyBpbnQgbmhfdmFsaWRfZ2V0X2J1Y2tldF9yZXEoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2lwdjQvbmV4dGhvcC5jLTM5MjUtLyogcnRubCAqL1xubmV0L2lwdjQvbmV4dGhvcC5jOjM5MjY6c3RhdGljIGludCBydG1fZ2V0X25leHRob3BfYnVja2V0KHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxubmV0L2lwdjQvbmV4dGhvcC5jLTM5MjctXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2NC9uZXh0aG9wLmM9NDIwMT1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgbmV4dGhvcF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xubmV0L2lwdjQvbmV4dGhvcC5jOjQyMDI6XHR7Lm1zZ3R5cGUgPSBSVE1fTkVXTkVYVEhPUCwgLmRvaXQgPSBydG1fbmV3X25leHRob3AsXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDIwMy1cdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9QRVJORVR9LFxubmV0L2lwdjQvbmV4dGhvcC5jOjQyMDQ6XHR7Lm1zZ3R5cGUgPSBSVE1fREVMTkVYVEhPUCwgLmRvaXQgPSBydG1fZGVsX25leHRob3AsXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDIwNS1cdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9QRVJORVR9LFxubmV0L2lwdjQvbmV4dGhvcC5jOjQyMDY6XHR7Lm1zZ3R5cGUgPSBSVE1fR0VUTkVYVEhPUCwgLmRvaXQgPSBydG1fZ2V0X25leHRob3AsXG5uZXQvaXB2NC9uZXh0aG9wLmM6NDIwNzpcdCAuZHVtcGl0ID0gcnRtX2R1bXBfbmV4dGhvcH0sXG5uZXQvaXB2NC9uZXh0aG9wLmM6NDIwODpcdHsubXNndHlwZSA9IFJUTV9HRVRORVhUSE9QQlVDS0VULCAuZG9pdCA9IHJ0bV9nZXRfbmV4dGhvcF9idWNrZXQsXG5uZXQvaXB2NC9uZXh0aG9wLmM6NDIwOTpcdCAuZHVtcGl0ID0gcnRtX2R1bXBfbmV4dGhvcF9idWNrZXR9LFxubmV0L2lwdjQvbmV4dGhvcC5jLTQyMTAtXHR7LnByb3RvY29sID0gUEZfSU5FVCwgLm1zZ3R5cGUgPSBSVE1fTkVXTkVYVEhPUCxcbm5ldC9pcHY0L25leHRob3AuYzo0MjExOlx0IC5kb2l0ID0gcnRtX25ld19uZXh0aG9wLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9QRVJORVR9LFxubmV0L2lwdjQvbmV4dGhvcC5jLTQyMTItXHR7LnByb3RvY29sID0gUEZfSU5FVCwgLm1zZ3R5cGUgPSBSVE1fR0VUTkVYVEhPUCxcbm5ldC9pcHY0L25leHRob3AuYzo0MjEzOlx0IC5kdW1waXQgPSBydG1fZHVtcF9uZXh0aG9wfSxcbm5ldC9pcHY0L25leHRob3AuYy00MjE0LVx0ey5wcm90b2NvbCA9IFBGX0lORVQ2LCAubXNndHlwZSA9IFJUTV9ORVdORVhUSE9QLFxubmV0L2lwdjQvbmV4dGhvcC5jOjQyMTU6XHQgLmRvaXQgPSBydG1fbmV3X25leHRob3AsIC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1BFUk5FVH0sXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDIxNi1cdHsucHJvdG9jb2wgPSBQRl9JTkVUNiwgLm1zZ3R5cGUgPSBSVE1fR0VUTkVYVEhPUCxcbm5ldC9pcHY0L25leHRob3AuYzo0MjE3Olx0IC5kdW1waXQgPSBydG1fZHVtcF9uZXh0aG9wfSxcbm5ldC9pcHY0L25leHRob3AuYy00MjE4LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjA2CgkJCQkJCQlvdXRwdXQ6IDE1MgoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50OiBQYXRjaCBWZXJpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZm9jdXMgc3ltYm9scyBmb3IgdGVzdGluZyBhcmUgYHJlbW92ZV9uaF9ncnBfZW50cnlgLCBgcmVtb3ZlX25leHRob3BfZnJvbV9ncm91cHNgLCBgcnRtX2RlbF9uZXh0aG9wYCwgYW5kIGBydG1fbmV3X25leHRob3BgLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBuZWVkZWQgaXMgYElORVRgLgoKQWxyaWdodCwgSSBuZWVkIHRvIGNvbmZpcm0gZXZlcnl0aGluZyBpcyBhcyBpdCBzaG91bGQgYmUuIFRoZSBwYXRjaCBoYXMgYFdvcnRoRnV6emluZ2Agc2V0IHRvIGB0cnVlYCwgd2hpY2ggaXMgd2hhdCBJIGV4cGVjdC4gTXkgdGFyZ2V0IGNvbmZpZ3VyYXRpb25zIGFyZSBsaXN0ZWQgYXMgYFsmIzM0O0lORVQmIzM0O11gLCBhbmQgbXkgc3ltYm9scyBhcmUgY29ycmVjdC4gVGhlIHJlYXNvbmluZyBzZWVtcyBjb25jaXNlIGFuZCByZWxldmFudC4gVGhpcyBwYXRjaCBpbml0aWFsaXplcyB0aGUgYGV4dGFja2Agc3RydWN0dXJlIGluIGByZW1vdmVfbmhfZ3JwX2VudHJ5YCB0byBwcmV2ZW50IHVuaW5pdGlhbGl6ZWQgcmVhZHMgd2hlbiBub3RpZmllciBlcnJvcnMgaGFwcGVuIGR1cmluZyBuZXh0aG9wIGdyb3VwIGVudHJ5IHJlbW92YWwuIFRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSBpdCYjMzk7cyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgYWNjZXNzaWJsZSB2aWEgbmV0bGluaywgd2hpY2ggaXMgZXhhY3RseSB0aGUga2luZCBvZiB2dWxuZXJhYmlsaXR5IEkmIzM5O20gaW50ZXJlc3RlZCBpbi4gU2VlbXMgdG8gYmUgYSBzb2xpZCBmaXguCgpBbHJpZ2h0LCBldmVyeXRoaW5nIGNoZWNrcyBvdXQuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNCAxMDowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlbW92ZV9uaF9ncnBfZW50cnkmIzM0OywKICAgICYjMzQ7cmVtb3ZlX25leHRob3BfZnJvbV9ncm91cHMmIzM0OywKICAgICYjMzQ7cnRtX2RlbF9uZXh0aG9wJiMzNDssCiAgICAmIzM0O3J0bV9uZXdfbmV4dGhvcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbml0aWFsaXplcyB0aGUgbmV0bGlua19leHRfYWNrIHN0cnVjdHVyZSBpbiByZW1vdmVfbmhfZ3JwX2VudHJ5KCkgdG8gcHJldmVudCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGlmIG5vdGlmaWVycyByZXR1cm4gYW4gZXJyb3IuIFRoZSBjb2RlIHJlc2lkZXMgaW4gdGhlIGNvcmUgSVB2NCBuZXh0aG9wIG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBuZXh0aG9wIGNvbW1hbmRzIChSVE1fREVMTkVYVEhPUCwgUlRNX05FV05FWFRIT1ApLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVtb3ZlX25oX2dycF9lbnRyeSYjMzQ7LAogICAgJiMzNDtyZW1vdmVfbmV4dGhvcF9mcm9tX2dyb3VwcyYjMzQ7LAogICAgJiMzNDtydG1fZGVsX25leHRob3AmIzM0OywKICAgICYjMzQ7cnRtX25ld19uZXh0aG9wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGluaXRpYWxpemVzIHRoZSBuZXRsaW5rX2V4dF9hY2sgc3RydWN0dXJlIGluIHJlbW92ZV9uaF9ncnBfZW50cnkoKSB0byBwcmV2ZW50IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MgaWYgbm90aWZpZXJzIHJldHVybiBhbiBlcnJvci4gVGhlIGNvZGUgcmVzaWRlcyBpbiB0aGUgY29yZSBJUHY0IG5leHRob3AgbWFuYWdlbWVudCBzdWJzeXN0ZW0gYW5kIGlzIHJlYWNoYWJsZSB2aWEgcnRuZXRsaW5rIG5leHRob3AgY29tbWFuZHMgKFJUTV9ERUxORVhUSE9QLCBSVE1fTkVXTkVYVEhPUCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2tgIHdhcyBkZWNsYXJlZCBvbiB0aGUgc3RhY2sgd2l0aG91dCBpbml0aWFsaXphdGlvbiBpbiBgcmVtb3ZlX25oX2dycF9lbnRyeSgpYC4gQnkgaW5pdGlhbGl6aW5nIGl0IHdpdGggYD0ge31gLCBhbGwgZmllbGRzIG9mIGBleHRhY2tgIGFyZSBleHBsaWNpdGx5IHplcm9lZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBsZWFrIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGVmODZkMTMwMDM4MjNjN2FjNDYwODI5MzUzZGQ3ZTZjZDQyZmRjYjIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCA0IDEwOjAxOjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV4dGhvcC5jIGIvbmV0L2lwdjQvbmV4dGhvcC5jCmluZGV4IGE3YzJiOGRjZWQ0ZTcuLjQyZTU1YjVhNzU1ZWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25leHRob3AuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9uZXh0aG9wLmMKQEAgLTIwMzYsNyAmIzQzOzIwMzYsNyBAQCByZW1vdmVfbmhfZ3JwX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZSwKIHsKIAlzdHJ1Y3QgbmhfZ3JwX2VudHJ5ICpuaGdlcywgKm5ld19uaGdlczsKIAlzdHJ1Y3QgbmV4dGhvcCAqbmhwID0gbmhnZS0mZ3Q7bmhfcGFyZW50OwotCXN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrOwomIzQzOwlzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9OwogCXN0cnVjdCBuZXh0aG9wICpuaCA9IG5oZ2UtJmd0O25oOwogCXN0cnVjdCBuaF9ncm91cCAqbmhnLCAqbmV3ZzsKIAlpbnQgaSwgaiwgZXJyOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEwNwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5leHRob3AgQ29kZSBNb2RpZmljYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWluZyBjaGFuZ2VkIGFuZCB3aHksIHNvIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhlIGZpbGUgYW5kIGxpbmUgbnVtYmVyLiBJdCBzZWVtcyB0aGlzIG1vZGlmaWNhdGlvbiB0YXJnZXRzIGBuZXQvaXB2NC9uZXh0aG9wLmNgIGFyb3VuZCBsaW5lIDIwMzYsIGFjY29yZGluZyB0byB0aGUgYGRpZmZgLiBSaWdodCwgbGV0JiMzOTtzIHNlZSwgaXQgbG9va3MgbGlrZSB0aGUgY2hhbmdlIGlzIHRvIGluaXRpYWxpemUgdGhlIGBleHRhY2tgIHZhcmlhYmxlIHVzaW5nIGJyYWNlIGluaXRpYWxpemF0aW9uIGB7fWAuIFRoaXMgaXMgYSBzdWJ0bGUgYnV0IGltcG9ydGFudCBjaGFuZ2UuIFByZXZpb3VzbHkgaXQgd2FzIHVuaW5pdGlhbGl6ZWQsIHdoaWNoIGNhbiBsZWFkIHRvIHVuZGVmaW5lZCBiZWhhdmlvciwgYW5kIHBvdGVudGlhbCBzZWN1cml0eSBpc3N1ZXMsIGRlcGVuZGluZyBvbiB0aGUgY29tcGlsZXIgYW5kIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4gSW5pdGlhbGl6aW5nIGl0IGV4cGxpY2l0bHkgZW5zdXJlcyB0aGF0IHRoZSBgZXh0YWNrYCBzdHJ1Y3QgaGFzIGRlZmluZWQgdmFsdWVzLCB3aGljaCBJIHVuZGVyc3RhbmQgaXMgY3J1Y2lhbCBmb3IgYG5ldGxpbmtfZXh0X2Fja2AgZXJyb3IgcmVwb3J0aW5nLgoKSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L2lwdjQvbmV4dGhvcC5jYCBhcm91bmQgdGhhdCBsaW5lLCBjb25maXJtaW5nIHRoZSBjb250ZXh0IHdpdGhpbiB0aGUgYHJlbW92ZV9uaF9ncnBfZW50cnlgIGZ1bmN0aW9uLiBJdCBpbnZvbHZlcyBtYW5hZ2luZyBuZXh0aG9wIGdyb3VwIGVudHJpZXMsIHNvIGFueSBlcnJvcnMgY291bGQgcG90ZW50aWFsbHkgaW1wYWN0IHJvdXRpbmcgb3IgZm9yd2FyZGluZyBkZWNpc2lvbnMuIFRoZSBpbml0aWFsaXphdGlvbiBvZiBgZXh0YWNrYCBoZXJlIGlzIGxpa2VseSByZWxhdGVkIHRvIGhhbmRsaW5nIGVycm9yIGNvbmRpdGlvbnMsIGVuc3VyaW5nIHRoYXQgaWYgYW4gZXJyb3Igb2NjdXJzLCBpdCYjMzk7cyBjb21tdW5pY2F0ZWQgY29ycmVjdGx5IHZpYSBOZXRsaW5rLiBDb25zaWRlcmluZyB0aGUgY3JpdGljYWxpdHkgb2YgdGhlc2UgZnVuY3Rpb25zIGluIHRoZSBmb3J3YXJkaW5nIHBhdGgsIHByZXZlbnRpbmcgdW5leHBlY3RlZCBiZWhhdmlvciBmcm9tIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGlzIGEgc2Vuc2libGUgcHJlY2F1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXh0aG9wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwMzA6XHRcdH1cbjIwMzE6XHR9XG4yMDMyOlx0XG4yMDMzOlx0c3RhdGljIGJvb2wgX19tdXN0X2NoZWNrXG4yMDM0Olx0cmVtb3ZlX25oX2dycF9lbnRyeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuaF9ncnBfZW50cnkgKm5oZ2UsXG4yMDM1Olx0XHRcdCAgICBzdHJ1Y3QgbmxfaW5mbyAqbmxpbmZvLCBzdHJ1Y3QgbGlzdF9oZWFkICpkZWZlcnJlZF9mcmVlKVxuMjAzNjpcdHtcbjIwMzc6XHRcdHN0cnVjdCBuaF9ncnBfZW50cnkgKm5oZ2VzLCAqbmV3X25oZ2VzO1xuMjAzODpcdFx0c3RydWN0IG5leHRob3AgKm5ocCA9IG5oZ2UtXHUwMDNlbmhfcGFyZW50O1xuMjAzOTpcdFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtcbjIwNDA6XHRcdHN0cnVjdCBuZXh0aG9wICpuaCA9IG5oZ2UtXHUwMDNlbmg7XG4yMDQxOlx0XHRzdHJ1Y3QgbmhfZ3JvdXAgKm5oZywgKm5ld2c7XG4yMDQyOlx0XHRpbnQgaSwgaiwgZXJyO1xuMjA0MzpcdFxuMjA0NDpcdFx0V0FSTl9PTighbmgpO1xuMjA0NTpcdFxuMjA0NjpcdFx0bmhnID0gcnRubF9kZXJlZmVyZW5jZShuaHAtXHUwMDNlbmhfZ3JwKTtcbjIwNDc6XHRcdG5ld2cgPSBuaGctXHUwMDNlc3BhcmU7XG4yMDQ4Olx0XG4yMDQ5Olx0XHQvKiBsYXN0IGVudHJ5LCBrZWVwIGl0IHZpc2libGUgYW5kIHJlbW92ZSB0aGUgcGFyZW50ICovXG4yMDUwOlx0XHRpZiAobmhnLVx1MDAzZW51bV9uaCA9PSAxKVxuMjA1MTpcdFx0XHRyZXR1cm4gcmVtb3ZlX25leHRob3AobmV0LCBuaHAsIG5saW5mbyk7XG4yMDUyOlx0XG4yMDUzOlx0XHRuZXdnLVx1MDAzZWhhc192NCA9IGZhbHNlO1xuMjA1NDpcdFx0bmV3Zy1cdTAwM2Vpc19tdWx0aXBhdGggPSBuaGctXHUwMDNlaXNfbXVsdGlwYXRoO1xuMjA1NTpcdFx0bmV3Zy1cdTAwM2VoYXNoX3RocmVzaG9sZCA9IG5oZy1cdTAwM2VoYXNoX3RocmVzaG9sZDtcbjIwNTY6XHRcdG5ld2ctXHUwMDNlcmVzaWxpZW50ID0gbmhnLVx1MDAzZXJlc2lsaWVudDtcbjIwNTc6XHRcdG5ld2ctXHUwMDNlZmRiX25oID0gbmhnLVx1MDAzZWZkYl9uaDtcbjIwNTg6XHRcdG5ld2ctXHUwMDNlbnVtX25oID0gbmhnLVx1MDAzZW51bV9uaDtcbjIwNTk6XHRcbjIwNjA6XHRcdC8qIGNvcHkgb2xkIGVudHJpZXMgdG8gbmV3IGV4Y2VwdCB0aGUgb25lIGdldHRpbmcgcmVtb3ZlZCAqL1xuMjA2MTpcdFx0bmhnZXMgPSBuaGctXHUwMDNlbmhfZW50cmllcztcbjIwNjI6XHRcdG5ld19uaGdlcyA9IG5ld2ctXHUwMDNlbmhfZW50cmllcztcbjIwNjM6XHRcdGZvciAoaSA9IDAsIGogPSAwOyBpIFx1MDAzYyBuaGctXHUwMDNlbnVtX25oOyAmIzQzOyYjNDM7aSkge1xuMjA2NDpcdFx0XHRzdHJ1Y3QgbmhfaW5mbyAqbmhpO1xuMjA2NTpcdFxuMjA2NjpcdFx0XHQvKiBjdXJyZW50IG5leHRob3AgZ2V0dGluZyByZW1vdmVkICovXG4yMDY3Olx0XHRcdGlmIChuaGctXHUwMDNlbmhfZW50cmllc1tpXS5uaCA9PSBuaCkge1xuMjA2ODpcdFx0XHRcdG5ld2ctXHUwMDNlbnVtX25oLS07XG4yMDY5Olx0XHRcdFx0Y29udGludWU7XG4yMDcwOlx0XHRcdH1cbjIwNzE6XHRcbjIwNzI6XHRcdFx0bmhpID0gcnRubF9kZXJlZmVyZW5jZShuaGdlc1tpXS5uaC1cdTAwM2VuaF9pbmZvKTtcbjIwNzM6XHRcdFx0aWYgKG5oaS1cdTAwM2VmYW1pbHkgPT0gQUZfSU5FVClcbjIwNzQ6XHRcdFx0XHRuZXdnLVx1MDAzZWhhc192NCA9IHRydWU7XG4yMDc1Olx0XG4yMDc2Olx0XHRcdGxpc3RfZGVsKFx1MDAyNm5oZ2VzW2ldLm5oX2xpc3QpO1xuMjA3NzpcdFx0XHRuZXdfbmhnZXNbal0uc3RhdHMgPSBuaGdlc1tpXS5zdGF0cztcbjIwNzg6XHRcdFx0bmV3X25oZ2VzW2pdLm5oX3BhcmVudCA9IG5oZ2VzW2ldLm5oX3BhcmVudDtcbjIwNzk6XHRcdFx0bmV3X25oZ2VzW2pdLm5oID0gbmhnZXNbaV0ubmg7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA0IDEwOjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1ODQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipUcmFjaW5nIHRoZSBgZXh0YWNrYCBpbiBgcmVtb3ZlX25oX2dycF9lbnRyeWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZsb3cgb2YgYGV4dGFja2Agd2l0aGluIHRoZSBgcmVtb3ZlX25oX2dycF9lbnRyeWAgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIG1hcCB3aGVyZSB0aGlzIHZhcmlhYmxlIGlzIGJlaW5nIHBhc3NlZCwgd2hpY2ggd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0JiMzOTtzIHVzZWQgYW5kIGl0cyBzaWduaWZpY2FuY2UgaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgbmV0d29yayBoYW5kbGluZyBncm91cCBlbnRyeSByZW1vdmFsLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaW5mb3JtYXRpb24gSSBjYW4gZ2xlYW4ganVzdCBmcm9tIGl0cyBsb2NhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIFdoZXJlIGRvZXMgdGhlIHZhbHVlIG9mIGBleHRhY2tgIGNvbWUgZnJvbSBpbml0aWFsbHk/IFdoYXQgb3RoZXIgZnVuY3Rpb25zIG9yIGRhdGEgc3RydWN0dXJlcyBpbnRlcmFjdCB3aXRoIGl0IGJlZm9yZSBpdCByZWFjaGVzIGByZW1vdmVfbmhfZ3JwX2VudHJ5YD8gS25vd2luZyB0aGUgY2FsbGluZyBoaWVyYXJjaHkgd2lsbCBiZSBjcml0aWNhbCBoZXJlLCBzbyBJJiMzOTtsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgc3RhdGljIGFuYWx5c2lzIHRvIGdldCBhIGJpcmQmIzM5O3MtZXllIHZpZXcsIHRoZW4gZGl2ZSBkZWVwZXIgaW50byB0aGUgY29kZSB0byBmb2xsb3cgdGhlIHNwZWNpZmljIHBhc3NlcyBvZiBgZXh0YWNrYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgYmFja2dyb3VuZCBJIG5lZWQgdG8gZXZhbHVhdGUgdGhlIGltcGxpY2F0aW9ucyBvZiBob3cgYGV4dGFja2AgaXMgYmVpbmcgbWFuYWdlZC4gSXQgd2lsbCBhbHNvIGV4cG9zZSBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBpdCBtaWdodCBoYXZlIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgb3Igc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgd2l0aGluIHRoZSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9uZXh0aG9wLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIwODA6XHRcdFx0bmV3X25oZ2VzW2pdLndlaWdodCA9IG5oZ2VzW2ldLndlaWdodDtcbjIwODE6XHRcdFx0bGlzdF9hZGQoXHUwMDI2bmV3X25oZ2VzW2pdLm5oX2xpc3QsIFx1MDAyNm5ld19uaGdlc1tqXS5uaC1cdTAwM2VncnBfbGlzdCk7XG4yMDgyOlx0XHRcdGomIzQzOyYjNDM7O1xuMjA4MzpcdFx0fVxuMjA4NDpcdFxuMjA4NTpcdFx0aWYgKG5ld2ctXHUwMDNlaGFzaF90aHJlc2hvbGQpXG4yMDg2Olx0XHRcdG5oX2h0aHJfZ3JvdXBfcmViYWxhbmNlKG5ld2cpO1xuMjA4NzpcdFx0ZWxzZSBpZiAobmV3Zy1cdTAwM2VyZXNpbGllbnQpXG4yMDg4Olx0XHRcdHJlcGxhY2VfbmV4dGhvcF9ncnBfcmVzKG5oZywgbmV3Zyk7XG4yMDg5Olx0XG4yMDkwOlx0XHRyY3VfYXNzaWduX3BvaW50ZXIobmhwLVx1MDAzZW5oX2dycCwgbmV3Zyk7XG4yMDkxOlx0XG4yMDkyOlx0XHRsaXN0X2RlbChcdTAwMjZuaGdlLVx1MDAzZW5oX2xpc3QpO1xuMjA5MzpcdFx0bmV4dGhvcF9wdXQobmhnZS1cdTAwM2VuaCk7XG4yMDk0Olx0XHRsaXN0X2FkZChcdTAwMjZuaGdlLVx1MDAzZW5oX2xpc3QsIGRlZmVycmVkX2ZyZWUpO1xuMjA5NTpcdFxuMjA5NjpcdFx0LyogUmVtb3ZhbCBvZiBhIE5IIGZyb20gYSByZXNpbGllbnQgZ3JvdXAgaXMgbm90aWZpZWQgdGhyb3VnaFxuMjA5NzpcdFx0ICogYnVja2V0IG5vdGlmaWNhdGlvbnMuXG4yMDk4Olx0XHQgKi9cbjIwOTk6XHRcdGlmIChuZXdnLVx1MDAzZWhhc2hfdGhyZXNob2xkKSB7XG4yMTAwOlx0XHRcdGVyciA9IGNhbGxfbmV4dGhvcF9ub3RpZmllcnMobmV0LCBORVhUSE9QX0VWRU5UX1JFUExBQ0UsIG5ocCxcbjIxMDE6XHRcdFx0XHRcdFx0ICAgICBcdTAwMjZleHRhY2spO1xuMjEwMjpcdFx0XHRpZiAoZXJyKVxuMjEwMzpcdFx0XHRcdHByX2VycihcJiMzNDslc1xcblwmIzM0OywgZXh0YWNrLl9tc2cpO1xuMjEwNDpcdFx0fVxuMjEwNTpcdFxuMjEwNjpcdFx0aWYgKG5saW5mbylcbjIxMDc6XHRcdFx0bmV4dGhvcF9ub3RpZnkoUlRNX05FV05FWFRIT1AsIG5ocCwgbmxpbmZvKTtcbjIxMDg6XHRcbjIxMDk6XHRcdHJldHVybiBmYWxzZTtcbjIxMTA6XHR9XG4yMTExOlx0XG4yMTEyOlx0c3RhdGljIGJvb2wgX19tdXN0X2NoZWNrXG4yMTEzOlx0cmVtb3ZlX25leHRob3BfZnJvbV9ncm91cHMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV4dGhvcCAqbmgsXG4yMTE0Olx0XHRcdFx0ICAgc3RydWN0IG5sX2luZm8gKm5saW5mbylcbjIxMTU6XHR7XG4yMTE2Olx0XHRzdHJ1Y3QgbmhfZ3JwX2VudHJ5ICpuaGdlLCAqdG1wO1xuMjExNzpcdFx0TElTVF9IRUFEKGRlZmVycmVkX2ZyZWUpO1xuMjExODpcdFx0Ym9vbCBuZWVkX2ZsdXNoID0gZmFsc2U7XG4yMTE5Olx0XG4yMTIwOlx0XHQvKiBJZiB0aGVyZSBpcyBub3RoaW5nIHRvIGRvLCBsZXQmIzM5O3MgYXZvaWQgdGhlIGNvc3RseSBjYWxsIHRvXG4yMTIxOlx0XHQgKiBzeW5jaHJvbml6ZV9uZXQoKVxuMjEyMjpcdFx0ICovXG4yMTIzOlx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZuaC1cdTAwM2VncnBfbGlzdCkpXG4yMTI0Olx0XHRcdHJldHVybiBmYWxzZTtcbjIxMjU6XHRcbjIxMjY6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuaGdlLCB0bXAsIFx1MDAyNm5oLVx1MDAzZWdycF9saXN0LCBuaF9saXN0KVxuMjEyNzpcdFx0XHRuZWVkX2ZsdXNoIHw9IHJlbW92ZV9uaF9ncnBfZW50cnkobmV0LCBuaGdlLCBubGluZm8sXG4yMTI4Olx0XHRcdFx0XHRcdFx0ICBcdTAwMjZkZWZlcnJlZF9mcmVlKTtcbjIxMjk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY2MQoJCQkJCQkJb3V0cHV0OiAxMjgKCQkJCQkJCXRob3VnaHRzOiA5MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IEJ1ZyBGaXgqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTGluZSAyMDM5IHNob3dzIGEgY2hhbmdlIGZyb20gYSBkZWNsYXJhdGlvbiBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2s7YCB0byBhbiBpbml0aWFsaXphdGlvbiBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtgLiAgVGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgcGF0Y2guIFRoZSBjb2RlIGF0IGxpbmVzIDIxMDAtMjEwMyBtYWtlcyB1c2Ugb2YgdGhpcyBzdHJ1Y3R1cmUuICBQcmV2aW91c2x5LCBgZXh0YWNrYCB3YXMgYSBsb2NhbCBzdGFjayB2YXJpYWJsZSwgKnBvdGVudGlhbGx5KiB1bmluaXRpYWxpemVkLiBUaGlzIGNvdWxkIGhhdmUgbGVkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBzdGFjayBkYXRhLCBwYXJ0aWN1bGFybHkgaWYgYGNhbGxfbmV4dGhvcF9ub3RpZmllcnNgIHJldHVybmVkIGFuIGVycm9yIHdpdGhvdXQgc2V0dGluZyBgZXh0YWNrLl9tc2dgLCBvciBpZiB0aGUgbm90aWZpZXJzIHRoZW1zZWx2ZXMgcGVla2VkIGF0IHRoZSBjb250ZW50cyBvZiBgZXh0YWNrYCAod2hpY2ggaXMgYmFkIGZvcm0sIGJ1dCBjZXJ0YWlubHkgcG9zc2libGUpLCBvciBpZiB0aGUgYHByX2VycmAgY2FsbCBhdCB0aGUgZW5kIHdhcyBleGVjdXRlZCB3aXRoIGFuIHVuaW5pdGlhbGl6ZWQgYF9tc2dgIGZpZWxkLiAgVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgZW5zdXJpbmcgdGhlIHZhcmlhYmxlIGlzIHplcm8taW5pdGlhbGl6ZWQuCgpOb3csIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgbmVlZHMgS01TQU4uIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZS4gV2hhdCBkb2VzIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHdhbnQ/IEFoLCBoZXJlIGFyZSB0aGUgcnVsZXMhICYjMzQ7VEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4mIzM0OyBLTVNBTiBpcyBleHBlbnNpdmUsIHNvIEkgc2hvdWxkIG9ubHkgdXNlIGl0IHdoZW4gKnVuaW5pdGlhbGl6ZWQgbWVtb3J5KiByaXNrcyBhcmUgcHJlc2VudCwgYW5kIHRob3NlIHJpc2tzIGFyZSAqb25seSogZGV0ZWN0YWJsZSBieSBLTVNBTi4KClRoZSBwcm9tcHQgbGlzdHMgZm91ciBzcGVjaWZpYyBzY2VuYXJpb3MgdGhhdCB3YXJyYW50IEtNU0FOLCBvciBub3Q6CjEuICBTdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZy4gSXMgdGhpcyB0aGUgY2FzZT8gTm8uCjIuICBDb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuICBJcyB0aGlzIHRoZSBjYXNlPyBOby4KMy4gIEFsbG9jYXRpb24gYW5kIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIuIElzIHRoaXMgdGhlIGNhc2U/IE5vLgo0LiAgQnlwYXNzaW5nIG9yIG1hbmlwdWxhdGluZyBsZW5ndGggb3IgYm91bmRzIGNoZWNrcywgcG90ZW50aWFsbHkgYWxsb3dpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4gSXMgdGhpcyB0aGUgY2FzZT8gTm8uCgpUaGUgcHJvbXB0IHZlcnkgZXhwbGljaXRseSBzYXlzOiAmIzM0O1NldCBOZWVkc0tNU0FOPWZhbHNlIElGOiAuLi4gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLiAgLi4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4mIzM0OwoKVGhpcyBwYXRjaCAqZXhwbGljaXRseSogaW5pdGlhbGl6ZXMgdGhlIHZhcmlhYmxlIHdpdGggYHt9YC4gIEl0IGRvZXMgKm5vdCogaW50cm9kdWNlIG5ldyByaXNrcy4gSXQgKnByZXZlbnRzKiBhIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLiBJdCBkb2VzbiYjMzk7dCBsZWFrIGluZm8uICBJJiMzOTt2ZSBjaGVja2VkIGV2ZXJ5dGhpbmcuIFRoZSBvcmlnaW5hbCBzdGF0ZSB3YXMgcG90ZW50aWFsbHkgdW5zYWZlICh1bmluaXRpYWxpemVkIHN0YWNrKS4gVGhlIG5ldyBzdGF0ZSBpcyBzYWZlLgoKSSYjMzk7bSBjb21wbGV0ZWx5IGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IG5ldywgb3IgZXZlbiBtYWludGFpbiBleGlzdGluZywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCBvbmx5IGJlIGNhdWdodCBieSBLTVNBTi4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgbXVzdCBiZSBgZmFsc2VgLgoKT2theSwgSSYjMzk7bSByZWFkeSB0byBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDQgMTA6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrYCB3YXMgZGVjbGFyZWQgb24gdGhlIHN0YWNrIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24gaW4gYHJlbW92ZV9uaF9ncnBfZW50cnkoKWAuIEJ5IGluaXRpYWxpemluZyBpdCB3aXRoIGA9IHt9YCwgYWxsIGZpZWxkcyBvZiBgZXh0YWNrYCBhcmUgZXhwbGljaXRseSB6ZXJvZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgbGVhayB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLCBvciBhbHRlciBjb250cm9sIGZsb3cgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2tgIHdhcyBkZWNsYXJlZCBvbiB0aGUgc3RhY2sgd2l0aG91dCBpbml0aWFsaXphdGlvbiBpbiBgcmVtb3ZlX25oX2dycF9lbnRyeSgpYC4gQnkgaW5pdGlhbGl6aW5nIGl0IHdpdGggYD0ge31gLCBhbGwgZmllbGRzIG9mIGBleHRhY2tgIGFyZSBleHBsaWNpdGx5IHplcm9lZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBsZWFrIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDE6MzYuMDY3NDg1NTM2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczODkzNjg5NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlbW92ZV9uaF9ncnBfZW50cnlcIixcbiAgICBcInJlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzXCIsXG4gICAgXCJydG1fZGVsX25leHRob3BcIixcbiAgICBcInJ0bV9uZXdfbmV4dGhvcFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrYCB3YXMgZGVjbGFyZWQgb24gdGhlIHN0YWNrIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24gaW4gYHJlbW92ZV9uaF9ncnBfZW50cnkoKWAuIEJ5IGluaXRpYWxpemluZyBpdCB3aXRoIGA9IHt9YCwgYWxsIGZpZWxkcyBvZiBgZXh0YWNrYCBhcmUgZXhwbGljaXRseSB6ZXJvZWQuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgbGVhayB1bmluaXRpYWxpemVkIGRhdGEgdG8gdXNlcnNwYWNlLCBvciBhbHRlciBjb250cm9sIGZsb3cgaW4gYSB3YXkgdGhhdCBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZWZvcmUsIHJ1bm5pbmcgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW5pdGlhbGl6ZXMgdGhlIG5ldGxpbmtfZXh0X2FjayBzdHJ1Y3R1cmUgaW4gcmVtb3ZlX25oX2dycF9lbnRyeSgpIHRvIHByZXZlbnQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBpZiBub3RpZmllcnMgcmV0dXJuIGFuIGVycm9yLiBUaGUgY29kZSByZXNpZGVzIGluIHRoZSBjb3JlIElQdjQgbmV4dGhvcCBtYW5hZ2VtZW50IHN1YnN5c3RlbSBhbmQgaXMgcmVhY2hhYmxlIHZpYSBydG5ldGxpbmsgbmV4dGhvcCBjb21tYW5kcyAoUlRNX0RFTE5FWFRIT1AsIFJUTV9ORVdORVhUSE9QKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDE6MzYuMDY3NDkwMzY2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjkyNjM2NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlZjg2ZDEzMDAzODIzYzdhYzQ2MDgyOTM1M2RkN2U2Y2Q0MmZkY2IyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDQgMTA6MDE6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV4dGhvcC5jIGIvbmV0L2lwdjQvbmV4dGhvcC5jXFxuaW5kZXggYTdjMmI4ZGNlZDRlNy4uNDJlNTViNWE3NTVlZSAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9uZXh0aG9wLmNcXG4rKysgYi9uZXQvaXB2NC9uZXh0aG9wLmNcXG5AQCAtMjAzNiw3ICsyMDM2LDcgQEAgcmVtb3ZlX25oX2dycF9lbnRyeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuaF9ncnBfZW50cnkgKm5oZ2UsXFxuIHtcXG4gXFx0c3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZXMsICpuZXdfbmhnZXM7XFxuIFxcdHN0cnVjdCBuZXh0aG9wICpuaHAgPSBuaGdlLVxcdTAwM2VuaF9wYXJlbnQ7XFxuLVxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrO1xcbitcXHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9O1xcbiBcXHRzdHJ1Y3QgbmV4dGhvcCAqbmggPSBuaGdlLVxcdTAwM2VuaDtcXG4gXFx0c3RydWN0IG5oX2dyb3VwICpuaGcsICpuZXdnO1xcbiBcXHRpbnQgaSwgaiwgZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowMTozNi40OTc2ODA2MDlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMyNzQ5MDE4NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZW1vdmVfbmhfZ3JwX2VudHJ5XCIsXG4gICAgXCJyZW1vdmVfbmV4dGhvcF9mcm9tX2dyb3Vwc1wiLFxuICAgIFwicnRtX2RlbF9uZXh0aG9wXCIsXG4gICAgXCJydG1fbmV3X25leHRob3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbml0aWFsaXplcyB0aGUgbmV0bGlua19leHRfYWNrIHN0cnVjdHVyZSBpbiByZW1vdmVfbmhfZ3JwX2VudHJ5KCkgdG8gcHJldmVudCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGlmIG5vdGlmaWVycyByZXR1cm4gYW4gZXJyb3IuIFRoZSBjb2RlIHJlc2lkZXMgaW4gdGhlIGNvcmUgSVB2NCBuZXh0aG9wIG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBuZXh0aG9wIGNvbW1hbmRzIChSVE1fREVMTkVYVEhPUCwgUlRNX05FV05FWFRIT1ApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVmODZkMTMwMDM4MjNjN2FjNDYwODI5MzUzZGQ3ZTZjZDQyZmRjYjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDEwOjAxOjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV4dGhvcC5jIGIvbmV0L2lwdjQvbmV4dGhvcC5jXG5pbmRleCBhN2MyYjhkY2VkNGU3Li40MmU1NWI1YTc1NWVlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV4dGhvcC5jXG4rKysgYi9uZXQvaXB2NC9uZXh0aG9wLmNcbkBAIC0yMDM2LDcgKzIwMzYsNyBAQCByZW1vdmVfbmhfZ3JwX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZSxcbiB7XG4gXHRzdHJ1Y3QgbmhfZ3JwX2VudHJ5ICpuaGdlcywgKm5ld19uaGdlcztcbiBcdHN0cnVjdCBuZXh0aG9wICpuaHAgPSBuaGdlLVx1MDAzZW5oX3BhcmVudDtcbi1cdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrO1xuK1x0c3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtcbiBcdHN0cnVjdCBuZXh0aG9wICpuaCA9IG5oZ2UtXHUwMDNlbmg7XG4gXHRzdHJ1Y3QgbmhfZ3JvdXAgKm5oZywgKm5ld2c7XG4gXHRpbnQgaSwgaiwgZXJyO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDE6MzYuNDk3Njg0MTQ5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTYwNTk3MTI3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UsIHNvIEknbGwgc3RhcnQgYnkgZm9jdXNpbmcgb24gdGhlIHNwZWNpZmljcy5cblxuKipQYXRjaCBJbnNwZWN0aW9uOiBJbml0aWFsaXppbmcgYGV4dGFja2AgaW4gYHJlbW92ZV9uaF9ncnBfZW50cnlgKipcblxuUmlnaHQsIHNvIHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYG5ldC9pcHY0L25leHRob3AuY2AuIFNwZWNpZmljYWxseSwgd2l0aGluIHRoZSBgcmVtb3ZlX25oX2dycF9lbnRyeWAgZnVuY3Rpb24sIHRoZXJlJ3MgYSBjaGFuZ2UgcmVsYXRlZCB0byB0aGUgYHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrO2AgZGVjbGFyYXRpb24uIEl0J3MgYmVlbiBhbHRlcmVkIHRvIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9O2AuIFRoYXQncyBhIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgc2lnbmlmaWNhbnQgY2hhbmdlIC0gaW5pdGlhbGl6aW5nIHRoZSBgZXh0YWNrYCBzdHJ1Y3R1cmUuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gcHJldmVudGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBwb3RlbnRpYWxseSBjbGVhcmluZyBmbGFncyBvbiB0aGUgZXh0ZW5kZWQgYWNrbm93bGVkZ2VtZW50LiBJIGtub3cgSSBuZWVkIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGVzZSB0aGluZ3MsIHNvIGxldCdzIHpvb20gaW4gb24gdGhhdCBjb2RlIGFyZWEuXG5cbkkgc2hvdWxkIHByb2JhYmx5IHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L2lwdjQvbmV4dGhvcC5jYCB0byBzZWUgaG93IGBleHRhY2tgIGlzIGFjdHVhbGx5IHVzZWQuIEl0J2xsIGJlIGFyb3VuZCBsaW5lIDIwMzYsIEkgdGhpbmsuIEknbGwgbmVlZCB0byByZWFkIHRoZSB1c2FnZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg5NSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDE6NDIuMTAzNjg0NDUzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg1MzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L25leHRob3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDIwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDIwOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuaGctXFx1MDAzZW51bV9uaDsgKytpKVxcbjIwMjE6XFx0XFx0XFx0dG90YWwgKz0gbmhnLVxcdTAwM2VuaF9lbnRyaWVzW2ldLndlaWdodDtcXG4yMDIyOlxcdFxcbjIwMjM6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5oZy1cXHUwMDNlbnVtX25oOyArK2kpIHtcXG4yMDI0OlxcdFxcdFxcdHN0cnVjdCBuaF9ncnBfZW50cnkgKm5oZ2UgPSBcXHUwMDI2bmhnLVxcdTAwM2VuaF9lbnRyaWVzW2ldO1xcbjIwMjU6XFx0XFx0XFx0dTMyIHVwcGVyX2JvdW5kO1xcbjIwMjY6XFx0XFxuMjAyNzpcXHRcXHRcXHR3ICs9IG5oZ2UtXFx1MDAzZXdlaWdodDtcXG4yMDI4OlxcdFxcdFxcdHVwcGVyX2JvdW5kID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKCh1NjQpdyBcXHUwMDNjXFx1MDAzYyAzMSwgdG90YWwpIC0gMTtcXG4yMDI5OlxcdFxcdFxcdGF0b21pY19zZXQoXFx1MDAyNm5oZ2UtXFx1MDAzZWh0aHIudXBwZXJfYm91bmQsIHVwcGVyX2JvdW5kKTtcXG4yMDMwOlxcdFxcdH1cXG4yMDMxOlxcdH1cXG4yMDMyOlxcdFxcbjIwMzM6XFx0c3RhdGljIGJvb2wgX19tdXN0X2NoZWNrXFxuMjAzNDpcXHRyZW1vdmVfbmhfZ3JwX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZSxcXG4yMDM1OlxcdFxcdFxcdCAgICBzdHJ1Y3QgbmxfaW5mbyAqbmxpbmZvLCBzdHJ1Y3QgbGlzdF9oZWFkICpkZWZlcnJlZF9mcmVlKVxcbjIwMzY6XFx0e1xcbjIwMzc6XFx0XFx0c3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZXMsICpuZXdfbmhnZXM7XFxuMjAzODpcXHRcXHRzdHJ1Y3QgbmV4dGhvcCAqbmhwID0gbmhnZS1cXHUwMDNlbmhfcGFyZW50O1xcbjIwMzk6XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtcXG4yMDQwOlxcdFxcdHN0cnVjdCBuZXh0aG9wICpuaCA9IG5oZ2UtXFx1MDAzZW5oO1xcbjIwNDE6XFx0XFx0c3RydWN0IG5oX2dyb3VwICpuaGcsICpuZXdnO1xcbjIwNDI6XFx0XFx0aW50IGksIGosIGVycjtcXG4yMDQzOlxcdFxcbjIwNDQ6XFx0XFx0V0FSTl9PTighbmgpO1xcbjIwNDU6XFx0XFxuMjA0NjpcXHRcXHRuaGcgPSBydG5sX2RlcmVmZXJlbmNlKG5ocC1cXHUwMDNlbmhfZ3JwKTtcXG4yMDQ3OlxcdFxcdG5ld2cgPSBuaGctXFx1MDAzZXNwYXJlO1xcbjIwNDg6XFx0XFxuMjA0OTpcXHRcXHQvKiBsYXN0IGVudHJ5LCBrZWVwIGl0IHZpc2libGUgYW5kIHJlbW92ZSB0aGUgcGFyZW50ICovXFxuMjA1MDpcXHRcXHRpZiAobmhnLVxcdTAwM2VudW1fbmggPT0gMSlcXG4yMDUxOlxcdFxcdFxcdHJldHVybiByZW1vdmVfbmV4dGhvcChuZXQsIG5ocCwgbmxpbmZvKTtcXG4yMDUyOlxcdFxcbjIwNTM6XFx0XFx0bmV3Zy1cXHUwMDNlaGFzX3Y0ID0gZmFsc2U7XFxuMjA1NDpcXHRcXHRuZXdnLVxcdTAwM2Vpc19tdWx0aXBhdGggPSBuaGctXFx1MDAzZWlzX211bHRpcGF0aDtcXG4yMDU1OlxcdFxcdG5ld2ctXFx1MDAzZWhhc2hfdGhyZXNob2xkID0gbmhnLVxcdTAwM2VoYXNoX3RocmVzaG9sZDtcXG4yMDU2OlxcdFxcdG5ld2ctXFx1MDAzZXJlc2lsaWVudCA9IG5oZy1cXHUwMDNlcmVzaWxpZW50O1xcbjIwNTc6XFx0XFx0bmV3Zy1cXHUwMDNlZmRiX25oID0gbmhnLVxcdTAwM2VmZGJfbmg7XFxuMjA1ODpcXHRcXHRuZXdnLVxcdTAwM2VudW1fbmggPSBuaGctXFx1MDAzZW51bV9uaDtcXG4yMDU5OlxcdFxcbjIwNjA6XFx0XFx0LyogY29weSBvbGQgZW50cmllcyB0byBuZXcgZXhjZXB0IHRoZSBvbmUgZ2V0dGluZyByZW1vdmVkICovXFxuMjA2MTpcXHRcXHRuaGdlcyA9IG5oZy1cXHUwMDNlbmhfZW50cmllcztcXG4yMDYyOlxcdFxcdG5ld19uaGdlcyA9IG5ld2ctXFx1MDAzZW5oX2VudHJpZXM7XFxuMjA2MzpcXHRcXHRmb3IgKGkgPSAwLCBqID0gMDsgaSBcXHUwMDNjIG5oZy1cXHUwMDNlbnVtX25oOyArK2kpIHtcXG4yMDY0OlxcdFxcdFxcdHN0cnVjdCBuaF9pbmZvICpuaGk7XFxuMjA2NTpcXHRcXG4yMDY2OlxcdFxcdFxcdC8qIGN1cnJlbnQgbmV4dGhvcCBnZXR0aW5nIHJlbW92ZWQgKi9cXG4yMDY3OlxcdFxcdFxcdGlmIChuaGctXFx1MDAzZW5oX2VudHJpZXNbaV0ubmggPT0gbmgpIHtcXG4yMDY4OlxcdFxcdFxcdFxcdG5ld2ctXFx1MDAzZW51bV9uaC0tO1xcbjIwNjk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAxOjQyLjEwMzk3MjgzM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE3NzkxOTg3MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgcmVtb3ZlX25oX2dycF9lbnRyeWAgYW5kIGl0cyBgZXh0YWNrYCBVc2FnZSoqXG5cbkFscmlnaHQsIEknbSBkaXZpbmcgaW50byB0aGlzIGByZW1vdmVfbmhfZ3JwX2VudHJ5YCBmdW5jdGlvbiBhZ2Fpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIHBpY3R1cmUgb2YgaG93IGBleHRhY2tgIGlzIGJlaW5nIGVtcGxveWVkIGhlcmUuIEl0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMganVzdCBmcm9tIGxvb2tpbmcgYXQgdGhpcyBzbmlwcGV0IGhvdyB0aGUgc3RhY2sgaXMgYmVpbmcgbWFuYWdlZCwgc28gSSBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB3aXRoaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUuIEknbSBsb29raW5nIGZvciB0aGUgY29udGV4dCBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIG9wZXJhdGlvbiBpcyBleGVjdXRlZCBhbmQgd2hhdCBpdCBpbXBsaWVzIGZvciB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGZvciB3aGVyZSBhbmQgaG93IHRoZSBzdGFjayBpcyBiZWluZyBtb2RpZmllZCBhcm91bmQgdGhlIHVzZSBvZiB0aGlzIGZ1bmN0aW9uLCBhcyB3ZWxsIGFzIHRoZSBlZmZlY3RzIHRoZSBzdGFjayBtYW5pcHVsYXRpb24gaGFzIG9uIHRoZSBkYXRhIGludGVncml0eSBhbmQgcHJvZ3JhbSBjb250cm9sIGZsb3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAxOjQzLjg4MzE3NDEzOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9uZXh0aG9wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjA3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjA3MDpcXHRcXHRcXHR9XFxuMjA3MTpcXHRcXG4yMDcyOlxcdFxcdFxcdG5oaSA9IHJ0bmxfZGVyZWZlcmVuY2UobmhnZXNbaV0ubmgtXFx1MDAzZW5oX2luZm8pO1xcbjIwNzM6XFx0XFx0XFx0aWYgKG5oaS1cXHUwMDNlZmFtaWx5ID09IEFGX0lORVQpXFxuMjA3NDpcXHRcXHRcXHRcXHRuZXdnLVxcdTAwM2VoYXNfdjQgPSB0cnVlO1xcbjIwNzU6XFx0XFxuMjA3NjpcXHRcXHRcXHRsaXN0X2RlbChcXHUwMDI2bmhnZXNbaV0ubmhfbGlzdCk7XFxuMjA3NzpcXHRcXHRcXHRuZXdfbmhnZXNbal0uc3RhdHMgPSBuaGdlc1tpXS5zdGF0cztcXG4yMDc4OlxcdFxcdFxcdG5ld19uaGdlc1tqXS5uaF9wYXJlbnQgPSBuaGdlc1tpXS5uaF9wYXJlbnQ7XFxuMjA3OTpcXHRcXHRcXHRuZXdfbmhnZXNbal0ubmggPSBuaGdlc1tpXS5uaDtcXG4yMDgwOlxcdFxcdFxcdG5ld19uaGdlc1tqXS53ZWlnaHQgPSBuaGdlc1tpXS53ZWlnaHQ7XFxuMjA4MTpcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2bmV3X25oZ2VzW2pdLm5oX2xpc3QsIFxcdTAwMjZuZXdfbmhnZXNbal0ubmgtXFx1MDAzZWdycF9saXN0KTtcXG4yMDgyOlxcdFxcdFxcdGorKztcXG4yMDgzOlxcdFxcdH1cXG4yMDg0OlxcdFxcbjIwODU6XFx0XFx0aWYgKG5ld2ctXFx1MDAzZWhhc2hfdGhyZXNob2xkKVxcbjIwODY6XFx0XFx0XFx0bmhfaHRocl9ncm91cF9yZWJhbGFuY2UobmV3Zyk7XFxuMjA4NzpcXHRcXHRlbHNlIGlmIChuZXdnLVxcdTAwM2VyZXNpbGllbnQpXFxuMjA4ODpcXHRcXHRcXHRyZXBsYWNlX25leHRob3BfZ3JwX3JlcyhuaGcsIG5ld2cpO1xcbjIwODk6XFx0XFxuMjA5MDpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIobmhwLVxcdTAwM2VuaF9ncnAsIG5ld2cpO1xcbjIwOTE6XFx0XFxuMjA5MjpcXHRcXHRsaXN0X2RlbChcXHUwMDI2bmhnZS1cXHUwMDNlbmhfbGlzdCk7XFxuMjA5MzpcXHRcXHRuZXh0aG9wX3B1dChuaGdlLVxcdTAwM2VuaCk7XFxuMjA5NDpcXHRcXHRsaXN0X2FkZChcXHUwMDI2bmhnZS1cXHUwMDNlbmhfbGlzdCwgZGVmZXJyZWRfZnJlZSk7XFxuMjA5NTpcXHRcXG4yMDk2OlxcdFxcdC8qIFJlbW92YWwgb2YgYSBOSCBmcm9tIGEgcmVzaWxpZW50IGdyb3VwIGlzIG5vdGlmaWVkIHRocm91Z2hcXG4yMDk3OlxcdFxcdCAqIGJ1Y2tldCBub3RpZmljYXRpb25zLlxcbjIwOTg6XFx0XFx0ICovXFxuMjA5OTpcXHRcXHRpZiAobmV3Zy1cXHUwMDNlaGFzaF90aHJlc2hvbGQpIHtcXG4yMTAwOlxcdFxcdFxcdGVyciA9IGNhbGxfbmV4dGhvcF9ub3RpZmllcnMobmV0LCBORVhUSE9QX0VWRU5UX1JFUExBQ0UsIG5ocCxcXG4yMTAxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmV4dGFjayk7XFxuMjEwMjpcXHRcXHRcXHRpZiAoZXJyKVxcbjIxMDM6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCIlc1xcXFxuXFxcIiwgZXh0YWNrLl9tc2cpO1xcbjIxMDQ6XFx0XFx0fVxcbjIxMDU6XFx0XFxuMjEwNjpcXHRcXHRpZiAobmxpbmZvKVxcbjIxMDc6XFx0XFx0XFx0bmV4dGhvcF9ub3RpZnkoUlRNX05FV05FWFRIT1AsIG5ocCwgbmxpbmZvKTtcXG4yMTA4OlxcdFxcbjIxMDk6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjIxMTA6XFx0fVxcbjIxMTE6XFx0XFxuMjExMjpcXHRzdGF0aWMgYm9vbCBfX211c3RfY2hlY2tcXG4yMTEzOlxcdHJlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxcbjIxMTQ6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5sX2luZm8gKm5saW5mbylcXG4yMTE1OlxcdHtcXG4yMTE2OlxcdFxcdHN0cnVjdCBuaF9ncnBfZW50cnkgKm5oZ2UsICp0bXA7XFxuMjExNzpcXHRcXHRMSVNUX0hFQUQoZGVmZXJyZWRfZnJlZSk7XFxuMjExODpcXHRcXHRib29sIG5lZWRfZmx1c2ggPSBmYWxzZTtcXG4yMTE5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowMTo0My44ODMzODUyNDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozOTk2OTk2NDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoIEZ1enppbmcgVGhpcyBDb3JlIE5ldHdvcmtpbmcgRml4PyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIGxpa2UgdGhlIGlzc3VlIGlzIHdpdGggYGV4dGFja2AsIHNwZWNpZmljYWxseSBob3cgaXQgbWlnaHQgYmUgdW5pbml0aWFsaXplZCBpZiBgY2FsbF9uZXh0aG9wX25vdGlmaWVyc2AgZmFpbHMuIFRoaXMgY291bGQgbGVhZCB0byBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkLCBwb3RlbnRpYWxseSB0cmlnZ2VyaW5nIGEgS01TQU4gd2FybmluZyBvciBhIGJ1Zy4gVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQ6IGluaXRpYWxpemUgYHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrID0ge307YC4gVGhhdCdzIGdvb2Q7IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSBhbHdheXMgbmFzdHkuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgY29kZSwgYW5kIGlzIGl0IHdvcnRoIGZ1enppbmc/IExldCdzIHNlZS4uLiBpdCBkZWFscyB3aXRoIGNvcmUgbmV0d29ya2luZywgc3BlY2lmaWNhbGx5IElQdjQsIG5leHRob3BzLCBhbmQgbmV0bGluay4gVGhlIHBhdGggdG8gdGhpcyBjb2RlIGlzIHRocm91Z2ggbmV0bGluayBtZXNzYWdlcyBsaWtlIGBSVE1fREVMTkVYVEhPUGAgb3IgYFJUTV9ORVdORVhUSE9QYC4gRnV6emluZyBjb3VsZCBleGVyY2lzZSBuZXh0aG9wIGdyb3VwIGRlbGV0aW9uLCBub3RpZmljYXRpb24gZXJyb3JzLCBhbmQgcmVzaWxpZW50IGdyb3VwcyDigJMgdGhhdCdzIGEgcHJldHR5IGludGVyZXN0aW5nIHN1cmZhY2UhXG5cbkxldCBtZSBnbyB0aHJvdWdoIHRoZSBjcml0ZXJpYSBmb3IgXCJXb3J0aEZ1enppbmdcIi4gSXQncyBhbGwgYWJvdXQgZmluZGluZyBjcmFzaGVzLCByZWdyZXNzaW9ucywgb3IgbGF0ZW50IGJ1Z3MgaW50cm9kdWNlZCBieSBhIHBhdGNoLiBJdCBzYXlzIFwiV29ydGhGdXp6aW5nPXRydWVcIiBpZiB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLiBBbmQgaXQgZXhwbGljaXRseSBtZW50aW9ucyBjb3JlIHN1YnN5c3RlbXMsIHBhcnRpY3VsYXJseSBjb3JlIG5ldHdvcmtpbmcuIEl0IGFsc28gbG9va3MgbGlrZSBhIHJlZmFjdG9yaW5nLlxuXG5XYWl0LCBpdCAqaXMqIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSBpbiBgbmV0L2lwdjQvbmV4dGhvcC5jYCwgc28gaXQncyBkZWZpbml0ZWx5IGluIGEgY29yZSBzdWJzeXN0ZW0uIEJpbmdvISBTbywgKip5ZXMqKiwgaXQgbG9va3MgbGlrZSB0aGlzIGlzIFdvcnRoRnV6emluZyA9IFRydWUuIEp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBhbmQgTWFrZWZpbGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlncyBuZWVkZWQgZm9yIGBuZXQvaXB2NC9uZXh0aG9wLmNgIHRvIGVuc3VyZSB0aGUgcmVsZXZhbnQgY29kZSBpcyBjb21waWxlZCBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE3OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAxOjQ3Ljg4MDM4NDM5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDU0MTc2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXh0aG9wLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTYtXFx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxcXFxubmV0L2lwdjQvTWFrZWZpbGU6MTc6XFx0ICAgICBtZXRyaWNzLm8gbmV0bGluay5vIG5leHRob3AubyB1ZHBfdHVubmVsX3N0dWIub1xcbm5ldC9pcHY0L01ha2VmaWxlLTE4LVxcbi0tXFxubmV0L2lwdjQvZmliX3NlbWFudGljcy5jLTUyLVxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYzo1MzovKiBmb3JfbmV4dGhvcHMgYW5kIGNoYW5nZV9uZXh0aG9wcyBvbmx5IHVzZWQgd2hlbiBuZXh0aG9wIG9iamVjdFxcbm5ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYy01NC0gKiBpcyBub3Qgc2V0IGluIGEgZmliX2luZm8uIFRoZSBsb2dpYyB3aXRoaW4gY2FuIHJlZmVyZW5jZSBmaWJfbmguXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmM9MTU0OT1zdGF0aWMgaW50IGNoZWNrX3NyY19hZGRyKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMTU1Mi1cXHRpZiAoIWlwdjZfYWRkcl9hbnkoc2FkZHIpKSB7XFxubmV0L2lwdjQvbmV4dGhvcC5jOjE1NTM6XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSVB2NiByb3V0ZXMgdXNpbmcgc291cmNlIGFkZHJlc3MgY2FuIG5vdCB1c2UgbmV4dGhvcCBvYmplY3RzXFxcIik7XFxubmV0L2lwdjQvbmV4dGhvcC5jLTE1NTQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmM9MTU1OT1pbnQgZmliNl9jaGVja19uZXh0aG9wKHN0cnVjdCBuZXh0aG9wICpuaCwgc3RydWN0IGZpYjZfY29uZmlnICpjZmcsXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMTU2Ny1cXHQgKiBhY3Jvc3MgbXVsdGlwbGUgZmliIGVudHJpZXMuIElmIHRoZSBjb25maWcgd2FudHMgdG8gdXNlIHNvdXJjZVxcbm5ldC9pcHY0L25leHRob3AuYzoxNTY4OlxcdCAqIHJvdXRpbmcgaXQgY2FuIG5vdCB1c2UgbmV4dGhvcCBvYmplY3RzLiBtbHhzdyBhbHNvIGRvZXMgbm90IGFsbG93XFxubmV0L2lwdjQvbmV4dGhvcC5jLTE1NjktXFx0ICogZmliNl9zcmMgb24gcm91dGVzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowMTo0Ny45NDQ5MzA5NTdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjUxMTU0ODg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgSVB2NCBOZXR3b3JraW5nIEJ1aWxkIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBuZXh0aG9wLm9gIGdldHMgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHdpdGggdGhlIGBvYmoteWAgZGlyZWN0aXZlLCBidXQgb25seSB3aGVuIGVpdGhlciBgQ09ORklHX0lORVRgIG9yIGBDT05GSUdfTkVUYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlLCBzdGFuZGFyZCBJUHY0IG5ldHdvcmtpbmcgY29tcG9uZW50cyBuZWVkIHRvIGJlIGluY2x1ZGVkLiBOb3csIEkgd2FudCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbnRleHQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYG5ldC9pcHY0L01ha2VmaWxlYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBuZXh0aG9wLm9gIGlzIGludGVncmF0ZWQgYW5kIHdoYXQgb3RoZXIgbW9kdWxlcyBpdCByZWxpZXMgb24gd2l0aGluIHRoZSBJUHY0IHN0YWNrLiBMZXQncyBzZWUgd2hhdCB0aGUgbWFrZWZpbGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQyNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAxOjUwLjE5NjA4ODg2MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eCBUQ1AvSVAgKElORVQpIGxheWVyLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbiAgIDc6XFx0XFx0ICAgICBpcF9pbnB1dC5vIGlwX2ZyYWdtZW50Lm8gaXBfZm9yd2FyZC5vIGlwX29wdGlvbnMubyBcXFxcXFxuICAgODpcXHRcXHQgICAgIGlwX291dHB1dC5vIGlwX3NvY2tnbHVlLm8gaW5ldF9oYXNodGFibGVzLm8gXFxcXFxcbiAgIDk6XFx0XFx0ICAgICBpbmV0X3RpbWV3YWl0X3NvY2subyBpbmV0X2Nvbm5lY3Rpb25fc29jay5vIFxcXFxcXG4gIDEwOlxcdFxcdCAgICAgdGNwLm8gdGNwX2lucHV0Lm8gdGNwX291dHB1dC5vIHRjcF90aW1lci5vIHRjcF9pcHY0Lm8gXFxcXFxcbiAgMTE6XFx0XFx0ICAgICB0Y3BfbWluaXNvY2tzLm8gdGNwX2NvbmcubyB0Y3BfbWV0cmljcy5vIHRjcF9mYXN0b3Blbi5vIFxcXFxcXG4gIDEyOlxcdFxcdCAgICAgdGNwX3JlY292ZXJ5Lm8gdGNwX3VscC5vIFxcXFxcXG4gIDEzOlxcdFxcdCAgICAgdGNwX29mZmxvYWQubyB0Y3BfcGxiLm8gZGF0YWdyYW0ubyByYXcubyB1ZHAubyBcXFxcXFxuICAxNDpcXHRcXHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXFxcXG4gIDE1OlxcdFxcdCAgICAgZmliX2Zyb250ZW5kLm8gZmliX3NlbWFudGljcy5vIGZpYl90cmllLm8gZmliX25vdGlmaWVyLm8gXFxcXFxcbiAgMTY6XFx0XFx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxcXFxuICAxNzpcXHRcXHQgICAgIG1ldHJpY3MubyBuZXRsaW5rLm8gbmV4dGhvcC5vIHVkcF90dW5uZWxfc3R1Yi5vXFxuICAxODpcXHRcXG4gIDE5OlxcdG9iai0kKENPTkZJR19ORVRfSVBfVFVOTkVMKSArPSBpcF90dW5uZWwub1xcbiAgMjA6XFx0b2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX25ldF9pcHY0Lm9cXG4gIDIxOlxcdG9iai0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm9cXG4gIDIyOlxcdG9iai0kKENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMpICs9IGZpYl9ydWxlcy5vXFxuICAyMzpcXHRvYmotJChDT05GSUdfSVBfTVJPVVRFKSArPSBpcG1yLm9cXG4gIDI0OlxcdG9iai0kKENPTkZJR19JUF9NUk9VVEVfQ09NTU9OKSArPSBpcG1yX2Jhc2Uub1xcbiAgMjU6XFx0b2JqLSQoQ09ORklHX05FVF9JUElQKSArPSBpcGlwLm9cXG4gIDI2OlxcdGdyZS15IDo9IGdyZV9kZW11eC5vXFxuICAyNzpcXHRmb3UteSA6PSBmb3VfY29yZS5vIGZvdV9ubC5vIGZvdV9icGYub1xcbiAgMjg6XFx0b2JqLSQoQ09ORklHX05FVF9GT1UpICs9IGZvdS5vXFxuICAyOTpcXHRvYmotJChDT05GSUdfTkVUX0lQR1JFX0RFTVVYKSArPSBncmUub1xcbiAgMzA6XFx0b2JqLSQoQ09ORklHX05FVF9JUEdSRSkgKz0gaXBfZ3JlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDE6NTAuMTk2MTg4NzMyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NTY4MTkyMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgQ29uZmlndXJhdGlvbiBmb3IgSW5ldCBTdXBwb3J0KipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBDT05GSUdfSU5FVGAgaXMgYmVpbmcgaGFuZGxlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgYnVpbGQgc3lzdGVtIGZpbGVzLCBzcGVjaWZpY2FsbHkgYG5ldC9NYWtlZmlsZWAgYW5kIGBLY29uZmlnYC4gVGhlc2UgYXJlIHR5cGljYWxseSB0aGUgZ28tdG8gbG9jYXRpb25zIGZvciBidWlsZCBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0uIGBNYWtlZmlsZWAgd2lsbCBzaG93IG1lIGhvdyBgQ09ORklHX0lORVRgIGFmZmVjdHMgdGhlIGNvbXBpbGF0aW9uIG9mIHZhcmlvdXMgbmV0d29ya2luZyBjb21wb25lbnRzLCB3aGlsZSBgS2NvbmZpZ2Agc2hvdWxkIHJldmVhbCB0aGUgZGVwZW5kZW5jaWVzLCBkZWZhdWx0IHZhbHVlcywgYW5kIHRoZSBsb2dpYyBiZWhpbmQgaG93IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgcHJlc2VudGVkIHRvIHRoZSB1c2VyLiBJJ2xsIHN0YXJ0IHdpdGggdGhvc2UgYW5kIHNlZSB3aGVyZSB0aGV5IGxlYWQuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IHRvIGhvdyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgY29udHJvbGxlZCB3aXRoaW4gdGhlIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Mjk5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowMTo1Mi4wNTMwMTAxNTRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODQ0ODU2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotLippcHY0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvTWFrZWZpbGU9MTY9b2JqLSQoQ09ORklHX05FVEZJTFRFUilcXHRcXHQrPSBuZXRmaWx0ZXIvXFxubmV0L01ha2VmaWxlOjE3Om9iai0kKENPTkZJR19JTkVUKVxcdFxcdCs9IGlwdjQvXFxubmV0L01ha2VmaWxlLTE4LW9iai0kKENPTkZJR19UTFMpXFx0XFx0Kz0gdGxzL1xcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGU9MTk9b2JqLSQoQ09ORklHX05FVF9JUF9UVU5ORUwpICs9IGlwX3R1bm5lbC5vXFxubmV0L2lwdjQvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX25ldF9pcHY0Lm9cXG5uZXQvaXB2NC9NYWtlZmlsZS0yMS1vYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZT02ND1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHVkcF9icGYub1xcbm5ldC9pcHY0L01ha2VmaWxlOjY1Om9iai0kKENPTkZJR19ORVRMQUJFTCkgKz0gY2lwc29faXB2NC5vXFxubmV0L2lwdjQvTWFrZWZpbGUtNjYtXFxuLS1cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNi0jIGRlZnJhZ1xcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19ORl9ERUZSQUdfSVBWNCkgKz0gbmZfZGVmcmFnX2lwdjQub1xcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS04LVxcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19ORl9TT0NLRVRfSVBWNCkgKz0gbmZfc29ja2V0X2lwdjQub1xcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZToxMDpvYmotJChDT05GSUdfTkZfVFBST1hZX0lQVjQpICs9IG5mX3Rwcm94eV9pcHY0Lm9cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTEtXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTEyLSMgcmVqZWN0XFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlOjEzOm9iai0kKENPTkZJR19ORl9SRUpFQ1RfSVBWNCkgKz0gbmZfcmVqZWN0X2lwdjQub1xcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZS0xNC1cXG4tLVxcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZT0yMT1vYmotJChDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUMpICs9IG5mX25hdF9zbm1wX2Jhc2ljLm9cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtMjItXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlOjIzOm9iai0kKENPTkZJR19ORlRfUkVKRUNUX0lQVjQpICs9IG5mdF9yZWplY3RfaXB2NC5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19ORlRfRklCX0lQVjQpICs9IG5mdF9maWJfaXB2NC5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19ORlRfRFVQX0lQVjQpICs9IG5mdF9kdXBfaXB2NC5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTI2LVxcbi0tXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlPTUxPW9iai0kKENPTkZJR19JUF9ORl9BUlBGSUxURVIpICs9IGFycHRhYmxlX2ZpbHRlci5vXFxubmV0L2lwdjQvbmV0ZmlsdGVyL01ha2VmaWxlLTUyLVxcbm5ldC9pcHY0L25ldGZpbHRlci9NYWtlZmlsZTo1MzpvYmotJChDT05GSUdfTkZfRFVQX0lQVjQpICs9IG5mX2R1cF9pcHY0Lm9cXG5uZXQvaXB2NC9uZXRmaWx0ZXIvTWFrZWZpbGUtNTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAxOjUyLjE5MTQ5MDk0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTA0MDkzMjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXR3b3JrIEZvcndhcmRpbmcgQ29kZSBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgYENPTkZJR19JTkVUYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQncyBzZXQuIE5vdywgbXkgZm9jdXMgaXMgb24gdGhlIGBuZXQvaXB2NC9uZXh0aG9wLmNgIGZpbGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byBgcmVtb3ZlX25oX2dycF9lbnRyeWAuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgc3ltYm9scyBvciBmdW5jdGlvbnMgaW4gdGhhdCBmaWxlIHRoYXQgaW50ZXJhY3Qgd2l0aCBpdCwgZWl0aGVyIGJ5IGNhbGxpbmcgaXQgb3IgYmVpbmcgZW50cnkgcG9pbnRzIHRvIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eT8gSSBzaG91bGQgcmV2aWV3IHRoaXMgZmlsZSBjbG9zZWx5LiBOZXh0LCBJ4oCZbGwgbmVlZCB0byB0aG9yb3VnaGx5IHJldmlldyB0aGUgY2FsbCBzaXRlcyBvZiBgcmVtb3ZlX25oX2dycF9lbnRyeWAgaXRzZWxmIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGltcGFjdC4gV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBiZWluZyB1c2VkIGFuZCBmb3Igd2hhdD9cblxuXG4iLCJJbnB1dFRva2VucyI6ODIxMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAxOjU0LjI5NTU4ODQ4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjAwNDc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZW1vdmVfbmhfZ3JwX2VudHJ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L25leHRob3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9uZXh0aG9wLmM9MjAzMz1zdGF0aWMgYm9vbCBfX211c3RfY2hlY2tcXG5uZXQvaXB2NC9uZXh0aG9wLmM6MjAzNDpyZW1vdmVfbmhfZ3JwX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZSxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjAzNS1cXHRcXHQgICAgc3RydWN0IG5sX2luZm8gKm5saW5mbywgc3RydWN0IGxpc3RfaGVhZCAqZGVmZXJyZWRfZnJlZSlcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYz0yMTEzPXJlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTIxMjYtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5oZ2UsIHRtcCwgXFx1MDAyNm5oLVxcdTAwM2VncnBfbGlzdCwgbmhfbGlzdClcXG5uZXQvaXB2NC9uZXh0aG9wLmM6MjEyNzpcXHRcXHRuZWVkX2ZsdXNoIHw9IHJlbW92ZV9uaF9ncnBfZW50cnkobmV0LCBuaGdlLCBubGluZm8sXFxubmV0L2lwdjQvbmV4dGhvcC5jLTIxMjgtXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2ZGVmZXJyZWRfZnJlZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAxOjU0LjM1MTU5Nzg1N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzQzMzAwMjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgcmVtb3ZlX25leHRob3BfZnJvbV9ncm91cHNgIENhbGxlcnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGNhbGwgZ3JhcGggZm9yIGByZW1vdmVfbmV4dGhvcF9mcm9tX2dyb3Vwc2AuIE15IGluaXRpYWwgYXBwcm9hY2ggd291bGQgYmUgdG8gdHJhY2UgdGhlIGZ1bmN0aW9uJ3MgdXNhZ2UsIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIGRhdGEgaW50ZWdyaXR5IGFuZCBuZXR3b3JrIGJlaGF2aW9yLiBJJ20gaW1tZWRpYXRlbHkgY29uc2lkZXJpbmcgaG93IHRoaXMgcmVtb3ZhbCBpbXBhY3RzIHRoZSByb3V0aW5nIHRhYmxlcyBhbmQsIGNyaXRpY2FsbHksIGFueSBkZXBlbmRlbmNpZXMgb24gdGhvc2UgZ3JvdXBzLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBjbGVhbnVwLCBvciBpcyB0aGlzIGEgY3JpdGljYWwgcGF0aCBvcGVyYXRpb24gd2l0aCBwb3RlbnRpYWwgY2FzY2FkaW5nIGVmZmVjdHMgb24gdHJhZmZpYyBmb3J3YXJkaW5nP1xuXG5JIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgbW9kdWxlcyBhbmQgc2NlbmFyaW9zIGNhbGxpbmcgdGhpcy4gQXJlIHdlIGRlYWxpbmcgd2l0aCBkeW5hbWljIHJvdXRpbmcgcHJvdG9jb2wgaW50ZXJhY3Rpb25zIChCR1AsIE9TUEYsIGV0Yy4pLCBvciBpcyB0aGlzIHRyaWdnZXJlZCBieSBzb21lIHNvcnQgb2YgbWFuYWdlbWVudCBpbnRlcmZhY2Ugb3IgY29uZmlndXJhdGlvbiBjaGFuZ2U/IElzIGl0IGEgc3RhbmRhbG9uZSBmdW5jdGlvbiBpbiBhIGNlbnRyYWwgZGF0YSBwbGFuZSwgb3IgaXMgaXQgaW52b2tlZCBieSBtdWx0aXBsZSwgcG90ZW50aWFsbHkgZGlzdHJpYnV0ZWQsIGNvbnRyb2wgcGxhbmUgZWxlbWVudHM/IEtub3dpbmcgdGhlIGNvbnRleHQgd2lsbCBwb2ludCB0b3dhcmRzIGNvbW1vbiBpc3N1ZXMuXG5cblNwZWNpZmljYWxseSwgSSB3YW50IHRvIGxvb2sgZm9yOlxuXG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGhhcHBlbnMgaWYgdGhlIGByZW1vdmVfbmV4dGhvcF9mcm9tX2dyb3Vwc2AgZnVuY3Rpb24gZmFpbHM/IEFyZSBmYWlsdXJlcyBncmFjZWZ1bGx5IGhhbmRsZWQsIG9yIGFyZSB3ZSByaXNraW5nIG5ldHdvcmsgYmxhY2tob2xlcz9cbiogICAqKkNvbmN1cnJlbmN5OioqIEFyZSB0aGVyZSBhbnkgY29uY3VycmVuY3kgaXNzdWVzIHJlbGF0ZWQgdG8gdGhpcyBjYWxsPyBTcGVjaWZpY2FsbHksIGNhbiBtdWx0aXBsZSBwcm9jZXNzZXMgYmUgcmVtb3ZpbmcgdGhlIHNhbWUgbmV4dCBob3Agc2ltdWx0YW5lb3VzbHksIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gcmFjZSBjb25kaXRpb25zPyBBcmUgdGhlcmUgbG9ja3Mgb3Igc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgaW4gcGxhY2U/XG4qICAgKipUcmFuc2FjdGlvbnM6KiogSXMgdGhlIG5leHQgaG9wIHJlbW92YWwgcGFydCBvZiBhIGxhcmdlciBhdG9taWMgdHJhbnNhY3Rpb24/IElmIHNvLCB3aGF0IGlzIHRoZSBzY29wZSBvZiB0aGF0IHRyYW5zYWN0aW9uLCBhbmQgaG93IGRvZXMgaXQgZW5zdXJlIGRhdGEgY29uc2lzdGVuY3kgYWNyb3NzIHRoZSBuZXR3b3JrP1xuKiAgICoqQXVkaXRpbmc6KiogSXMgdGhlcmUgYW55IGxvZ2dpbmcgYXJvdW5kIHRoZSBjYWxsLCB0byB1bmRlcnN0YW5kIF93aGVuXyBhbmQgX3doeV8gYSBuZXh0IGhvcCBpcyBiZWluZyByZW1vdmVkPyBJcyB0aGVyZSBlbm91Z2ggY29udGV4dCByZWNvcmRlZCB0byBkZWJ1ZyBpc3N1ZXMgaW4gYSBwcm9kdWN0aW9uIGVudmlyb25tZW50P1xuKiAgICoqUGVyZm9ybWFuY2U6KiogSSdtIGFsc28gdGhpbmtpbmcgYWJvdXQgdGhlIHNjYWxlIG9mIHRoZSBvcGVyYXRpb24uIERvZXMgdGhpcyBmdW5jdGlvbiBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gYmUgYSBib3R0bGVuZWNrPyBJZiBzbywgd2hhdCBhcmUgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgcmVtb3ZhbCBpdHNlbGYgKGUuZy4sIGhhc2ggbG9va3VwcywgbGlzdCBtYW5pcHVsYXRpb25zKT9cblxuVWx0aW1hdGVseSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoYXQgdGhpcyBpcyBhIGZhaXJseSBsb3ctbGV2ZWwgZnVuY3Rpb24gYW5kIHRyYWNpbmcgdGhvc2UgY2FsbGVycyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIG5ldHdvcmsncyBkYXRhIHBsYW5lIHN0YXRlIGlzIG1haW50YWluZWQsIGFzIHdlbGwgYXMgZ2l2aW5nIG1lIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIHBvc3NpYmxlIGZhaWx1cmUgbW9kZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MjcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowMTo1OC4wOTQ5MDE2OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA1ODc2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVtb3ZlX25leHRob3BfZnJvbV9ncm91cHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvbmV4dGhvcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L25leHRob3AuYz0yMTEyPXN0YXRpYyBib29sIF9fbXVzdF9jaGVja1xcbm5ldC9pcHY0L25leHRob3AuYzoyMTEzOnJlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxcbm5ldC9pcHY0L25leHRob3AuYy0yMTE0LVxcdFxcdFxcdCAgIHN0cnVjdCBubF9pbmZvICpubGluZm8pXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmM9MjE5Nj1zdGF0aWMgYm9vbCBfX211c3RfY2hlY2sgX19yZW1vdmVfbmV4dGhvcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXh0aG9wICpuaCxcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0yMjA5LVxcbm5ldC9pcHY0L25leHRob3AuYzoyMjEwOlxcdFxcdG5lZWRfZmx1c2ggfD0gcmVtb3ZlX25leHRob3BfZnJvbV9ncm91cHMobmV0LCBuaCwgbmxpbmZvKTtcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjIxMS1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAxOjU4LjE1NTQ5Njg5N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDA4MzU4Njk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgYF9fcmVtb3ZlX25leHRob3BgIENhbGxlciBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHRoZSBwcm9tcHQgaXMgYXNraW5nIG1lIHRvIGxvb2sgYXQgYWxsIHRoZSBwbGFjZXMgd2l0aGluIHRoaXMgY29kZSB0aGF0IGNhbGwgdGhlIGBfX3JlbW92ZV9uZXh0aG9wYCBmdW5jdGlvbi4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgb3IgcmVmYWN0b3JpbmcgdGFzay4gTXkgaW5pdGlhbCBhcHByb2FjaCB3b3VsZCBiZSB0byBsZXZlcmFnZSBteSBrbm93bGVkZ2Ugb2YgdGhlIGNvZGViYXNlIGFuZCBhbnkgdG9vbHMgYXZhaWxhYmxlLiBJJ2Qgc3RhcnQgd2l0aCBhIHNpbXBsZSBncmVwIG9yIGBmaW5kYCBjb21tYW5kIGlmIEknbSB3b3JraW5nIGluIGEgY29tbWFuZC1saW5lIGVudmlyb25tZW50LCBvciB1c2UgdGhlIFwiZmluZCBhbGwgcmVmZXJlbmNlc1wiIGZlYXR1cmUgaW4gbXkgSURFIGlmIEknbSBpbiBvbmUuIEknZCBiZSBsb29raW5nIGZvciBhbGwgb2NjdXJyZW5jZXMgb2YgdGhhdCBmdW5jdGlvbiBuYW1lLCBpbmNsdWRpbmcgYW55IHBvdGVudGlhbCB2YXJpYXRpb25zIHRoYXQgbWlnaHQgaW5kaWNhdGUgaG93IGl0J3MgYmVpbmcgdXNlZCDigJMgbWF5YmUgYSBuYW1lc3BhY2UgcHJlZml4IG9yIGEgbWV0aG9kIGNhbGwgb24gYW4gb2JqZWN0LlxuXG5PbmNlIEkgaGF2ZSBhIGxpc3Qgb2YgY2FsbGVycywgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgZWFjaCBjYWxsLiBJ4oCZZCB3YW50IHRvIHF1aWNrbHkgc2NhbiB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBncmFzcCB0aGUgcHVycG9zZSBvZiB0aGUgY2FsbDogV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGludm9sdmVkPyBXaGF0J3MgdGhlIG92ZXJhbGwgbG9naWMgZmxvdz8gV2hhdCdzIHRoZSBleHBlY3RlZCBzdGF0ZSBvZiB0aGUgc3lzdGVtIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGBfX3JlbW92ZV9uZXh0aG9wYCBmdW5jdGlvbiBleGVjdXRlcz8gSeKAmWQgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgY29uZGl0aW9uYWwgc3RhdGVtZW50cyBvciBsb29wcyB0aGF0IG1pZ2h0IGltcGFjdCBob3cgb2Z0ZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIHRoZSBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIGl0IGdldHMgaW52b2tlZC5cblxuSWYgSSdtIHdvcmtpbmcgb24gYSBwcm9qZWN0IHdpdGggZ29vZCBkb2N1bWVudGF0aW9uIG9yIGNvbW1lbnRzLCB0aGF0IHdpbGwgYmUgYW4gaW52YWx1YWJsZSByZXNvdXJjZS4gSWYgbm90LCBJ4oCZbGwgaGF2ZSB0byByZWx5IG9uIG15IGFiaWxpdHkgdG8gcXVpY2tseSBncm9rIHRoZSBjb2RlLiBGb3IgZWFjaCBjYWxsZXIsIEkgd291bGQgY29uc2lkZXIgdGhlIGltcGxpY2F0aW9ucyBvZiAqbm90KiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIElzIGl0IGNyaXRpY2FsIHRvIGRhdGEgaW50ZWdyaXR5PyBJcyBpdCBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbj8gRG9lcyBpdCBoYXZlIGFueSBpbXBsaWNhdGlvbnMgZm9yIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0/IEluIHRoZSBlbmQsIHRoZSBhaW0gaXMgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzLCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBuZXh0IHN0ZXBzIHdpbGwgbGlrZWx5IGJlIGRldGVybWluZWQgYnkgd2hhdCBJIGZpbmQgaW4gdGhlc2UgaW5pdGlhbCBpbnZlc3RpZ2F0aW9ucyFcblxuXG4iLCJJbnB1dFRva2VucyI6OTQ5NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAyOjAxLjU2Mzg1ODMyNFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA5NTcwOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19yZW1vdmVfbmV4dGhvcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9uZXh0aG9wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvbmV4dGhvcC5jPTIxNDI9c3RhdGljIHZvaWQgcmVtb3ZlX25leHRob3BfZ3JvdXAoc3RydWN0IG5leHRob3AgKm5oLCBzdHJ1Y3QgbmxfaW5mbyAqbmxpbmZvKVxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTIxNjMtLyogbm90IGNhbGxlZCBmb3IgbmV4dGhvcCByZXBsYWNlICovXFxubmV0L2lwdjQvbmV4dGhvcC5jOjIxNjQ6c3RhdGljIGJvb2wgX19tdXN0X2NoZWNrIF9fcmVtb3ZlX25leHRob3BfZmliKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjE2NS1cXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV4dGhvcCAqbmgpXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjE5NS1cXG5uZXQvaXB2NC9uZXh0aG9wLmM6MjE5NjpzdGF0aWMgYm9vbCBfX211c3RfY2hlY2sgX19yZW1vdmVfbmV4dGhvcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXh0aG9wICpuaCxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjE5Ny1cXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBubF9pbmZvICpubGluZm8pXFxubmV0L2lwdjQvbmV4dGhvcC5jLTIxOTgte1xcbm5ldC9pcHY0L25leHRob3AuYzoyMTk5OlxcdGJvb2wgbmVlZF9mbHVzaCA9IF9fcmVtb3ZlX25leHRob3BfZmliKG5ldCwgbmgpO1xcbm5ldC9pcHY0L25leHRob3AuYy0yMjAwLVxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jPTIyMTY9c3RhdGljIGJvb2wgX19tdXN0X2NoZWNrIHJlbW92ZV9uZXh0aG9wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTIyMjgtXFxubmV0L2lwdjQvbmV4dGhvcC5jOjIyMjk6XFx0bmVlZF9mbHVzaCA9IF9fcmVtb3ZlX25leHRob3AobmV0LCBuaCwgbmxpbmZvKTtcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMjIzMC1cXHRuaF9iYXNlX3NlcV9pbmMobmV0KTtcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYz0yNTc2PXN0YXRpYyBpbnQgcmVwbGFjZV9uZXh0aG9wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm9sZCxcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0yNjI3LVxcbm5ldC9pcHY0L25leHRob3AuYzoyNjI4OlxcdFxcdFdBUk5fT05fT05DRShfX3JlbW92ZV9uZXh0aG9wKG5ldCwgbmV3LCBOVUxMKSk7XFxubmV0L2lwdjQvbmV4dGhvcC5jLTI2MjktXFx0XFx0bmV4dGhvcF9wdXQobmV3KTtcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYz0zMDEwPXN0YXRpYyBzdHJ1Y3QgbmV4dGhvcCAqbmV4dGhvcF9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmhfY29uZmlnICpjZmcsXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzAzOC1cXHRpZiAoZXJyKSB7XFxubmV0L2lwdjQvbmV4dGhvcC5jOjMwMzk6XFx0XFx0V0FSTl9PTl9PTkNFKF9fcmVtb3ZlX25leHRob3AobmV0LCBuaCwgTlVMTCkpO1xcbm5ldC9pcHY0L25leHRob3AuYy0zMDQwLVxcdFxcdG5leHRob3BfcHV0KG5oKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDI6MDEuNjM0ODIwOTAxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1MzgxODY5NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIG9wZXJhdGlvbnMgYW5kIHdoZXJlIEknZCBzdGFydCBsb29raW5nOlxuXG4qKkFuYWx5emluZyBOZXh0aG9wIFJlbW92YWwgUm91dGluZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBhcmUgYWxsIGNsZWFybHkgcmVsYXRlZCB0byByZW1vdmluZyBuZXh0aG9wcyB3aXRoaW4gdGhlIElQdjQgcm91dGluZyBjb250ZXh0LiBUaGUgbmFtZXMgdGVsbCB0aGUgc3Rvcnk6IGByZW1vdmVfbmhfZ3JwX2VudHJ5YCBzdWdnZXN0cyByZW1vdmluZyBhbiBlbnRyeSBmcm9tIGEgbmV4dGhvcCBncm91cCwgYHJlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzYCBzb3VuZHMgbGlrZSBpdCBoYW5kbGVzIHJlbW92aW5nIGEgbmV4dGhvcCBmcm9tICptdWx0aXBsZSogZ3JvdXBzLCBgcmVtb3ZlX25leHRob3BgIGlzIHByb2JhYmx5IHRoZSBjb3JlIG5leHRob3AgcmVtb3ZhbCByb3V0aW5lIGl0c2VsZiwgYW5kIHRoZW4gd2UgaGF2ZSB0aGUgcm91dGluZyB0YWJsZSBtYW5hZ2VtZW50IChSVE0pIGZ1bmN0aW9uczogYHJ0bV9kZWxfbmV4dGhvcGAgZm9yIGRlbGV0aW5nIGEgbmV4dGhvcCBhbmQgYHJ0bV9uZXdfbmV4dGhvcGAgZm9yIGl0cyBjcmVhdGlvbi5cblxuR2l2ZW4gdGhlIHRhc2sgYXQgaGFuZCwgSSdkIGltbWVkaWF0ZWx5IGp1bXAgdG8gZXhhbWluaW5nIGBydG1fZGVsX25leHRob3BgLiBJdCdzIHRoZSBSVE0gZnVuY3Rpb24gZm9yICpkZWxldGlvbiosIHdoaWNoIG1ha2VzIGl0IHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBhIG5leHRob3AgaXMgY29tcGxldGVseSByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCByZXNvdXJjZXMgYXJlIGZyZWVkLCBob3cgdGhlIHJlZmVyZW5jZSBjb3VudHMgYXJlIG1hbmFnZWQsIGFuZCBob3cgdGhlIHJlbW92YWwgY2FzY2FkZXMgdGhyb3VnaCBhbnkgYXNzb2NpYXRlZCBncm91cHMgb3IgdGFibGVzLiBBbmQgdGhhdCBtZWFucyBhIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgbmV0L2lwdjQvbmV4dGhvcC5jYCB0byBzZWUgaG93IGl0IHdvcmtzIGluIHRoZSBJUHY0IGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjQzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDI6MDYuMTczMDEwOTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDk1NzYyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydG1fLipuZXh0aG9wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L25leHRob3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9uZXh0aG9wLmM9MzI4Nz1zdGF0aWMgaW50IHJ0bV90b19uaF9jb25maWdfcnRubChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKip0YixcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0zMzE4LS8qIHJ0bmwgKi9cXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzMxOTpzdGF0aWMgaW50IHJ0bV9uZXdfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzMyMC1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmM9MzM2MD1zdGF0aWMgaW50IG5oX3ZhbGlkX2dldF9kZWxfcmVxKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTMzODgtLyogcnRubCAqL1xcbm5ldC9pcHY0L25leHRob3AuYzozMzg5OnN0YXRpYyBpbnQgcnRtX2RlbF9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC9pcHY0L25leHRob3AuYy0zMzkwLVxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0zNDI2LS8qIHJ0bmwgKi9cXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzQyNzpzdGF0aWMgaW50IHJ0bV9nZXRfbmV4dGhvcChzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzQyOC1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmM9MzU3OD1ydG1fZHVtcF9uaF9jdHgoc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTM1ODUtXFxubmV0L2lwdjQvbmV4dGhvcC5jOjM1ODY6c3RhdGljIGludCBydG1fZHVtcF93YWxrX25leHRob3BzKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvbmV4dGhvcC5jLTM1ODctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzY0NS1cXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzY0NjpzdGF0aWMgaW50IHJ0bV9kdW1wX25leHRob3BfY2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbm5ldC9pcHY0L25leHRob3AuYy0zNjQ3LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV4dGhvcCAqbmgsIHZvaWQgKmRhdGEpXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzY2MC0vKiBydG5sICovXFxubmV0L2lwdjQvbmV4dGhvcC5jOjM2NjE6c3RhdGljIGludCBydG1fZHVtcF9uZXh0aG9wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzY2Mi17XFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzY3Mi1cXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzY3MzpcXHRlcnIgPSBydG1fZHVtcF93YWxrX25leHRob3BzKHNrYiwgY2IsIHJvb3QsIGN0eCxcXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzY3NDpcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZydG1fZHVtcF9uZXh0aG9wX2NiLCBcXHUwMDI2ZmlsdGVyKTtcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzY3NS1cXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYz0zNzY5PXJ0bV9kdW1wX3Jlc19idWNrZXRfY3R4KHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0zNzc2LVxcbm5ldC9pcHY0L25leHRob3AuYzozNzc3OnN0cnVjdCBydG1fZHVtcF9uZXh0aG9wX2J1Y2tldF9kYXRhIHtcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzc3OC1cXHRzdHJ1Y3QgcnRtX2R1bXBfcmVzX2J1Y2tldF9jdHggKmN0eDtcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0zNzgxLVxcbm5ldC9pcHY0L25leHRob3AuYzozNzgyOnN0YXRpYyBpbnQgcnRtX2R1bXBfbmV4dGhvcF9idWNrZXRfbmgoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzc4My1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxubmV0L2lwdjQvbmV4dGhvcC5jLTM3ODQtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5leHRob3AgKm5oLFxcbm5ldC9pcHY0L25leHRob3AuYzozNzg1OlxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBydG1fZHVtcF9uZXh0aG9wX2J1Y2tldF9kYXRhICpkZClcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzc4Ni17XFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzgyNC1cXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzgyNTpzdGF0aWMgaW50IHJ0bV9kdW1wX25leHRob3BfYnVja2V0X2NiKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvbmV4dGhvcC5jLTM4MjYtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jLTM4Mjgte1xcbm5ldC9pcHY0L25leHRob3AuYzozODI5OlxcdHN0cnVjdCBydG1fZHVtcF9uZXh0aG9wX2J1Y2tldF9kYXRhICpkZCA9IGRhdGE7XFxubmV0L2lwdjQvbmV4dGhvcC5jLTM4MzAtXFx0c3RydWN0IG5oX2dyb3VwICpuaGc7XFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzgzOC1cXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzgzOTpcXHRyZXR1cm4gcnRtX2R1bXBfbmV4dGhvcF9idWNrZXRfbmgoc2tiLCBjYiwgbmgsIGRkKTtcXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzg0MC19XFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzg0Mi0vKiBydG5sICovXFxubmV0L2lwdjQvbmV4dGhvcC5jOjM4NDM6c3RhdGljIGludCBydG1fZHVtcF9uZXh0aG9wX2J1Y2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L25leHRob3AuYy0zODQ0LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYilcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0zODQ2LVxcdHN0cnVjdCBydG1fZHVtcF9yZXNfYnVja2V0X2N0eCAqY3R4ID0gcnRtX2R1bXBfcmVzX2J1Y2tldF9jdHgoY2IpO1xcbm5ldC9pcHY0L25leHRob3AuYzozODQ3OlxcdHN0cnVjdCBydG1fZHVtcF9uZXh0aG9wX2J1Y2tldF9kYXRhIGRkID0geyAuY3R4ID0gY3R4IH07XFxubmV0L2lwdjQvbmV4dGhvcC5jLTM4NDgtXFx0c3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLVxcdTAwM2Vzayk7XFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmMtMzg2MC1cXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihuaCk7XFxubmV0L2lwdjQvbmV4dGhvcC5jOjM4NjE6XFx0XFx0ZXJyID0gcnRtX2R1bXBfbmV4dGhvcF9idWNrZXRfbmgoc2tiLCBjYiwgbmgsIFxcdTAwMjZkZCk7XFxubmV0L2lwdjQvbmV4dGhvcC5jLTM4NjItXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0zODY0LVxcbm5ldC9pcHY0L25leHRob3AuYzozODY1OlxcdFxcdGVyciA9IHJ0bV9kdW1wX3dhbGtfbmV4dGhvcHMoc2tiLCBjYiwgcm9vdCwgXFx1MDAyNmN0eC1cXHUwMDNlbmgsXFxubmV0L2lwdjQvbmV4dGhvcC5jOjM4NjY6XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2cnRtX2R1bXBfbmV4dGhvcF9idWNrZXRfY2IsIFxcdTAwMjZkZCk7XFxubmV0L2lwdjQvbmV4dGhvcC5jLTM4NjctXFx0fVxcbi0tXFxubmV0L2lwdjQvbmV4dGhvcC5jPTM4OTU9c3RhdGljIGludCBuaF92YWxpZF9nZXRfYnVja2V0X3JlcShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9pcHY0L25leHRob3AuYy0zOTI1LS8qIHJ0bmwgKi9cXG5uZXQvaXB2NC9uZXh0aG9wLmM6MzkyNjpzdGF0aWMgaW50IHJ0bV9nZXRfbmV4dGhvcF9idWNrZXQoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXFxubmV0L2lwdjQvbmV4dGhvcC5jLTM5MjctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2NC9uZXh0aG9wLmM9NDIwMT1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bmxfbXNnX2hhbmRsZXIgbmV4dGhvcF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbm5ldC9pcHY0L25leHRob3AuYzo0MjAyOlxcdHsubXNndHlwZSA9IFJUTV9ORVdORVhUSE9QLCAuZG9pdCA9IHJ0bV9uZXdfbmV4dGhvcCxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDIwMy1cXHQgLmZsYWdzID0gUlROTF9GTEFHX0RPSVRfUEVSTkVUfSxcXG5uZXQvaXB2NC9uZXh0aG9wLmM6NDIwNDpcXHR7Lm1zZ3R5cGUgPSBSVE1fREVMTkVYVEhPUCwgLmRvaXQgPSBydG1fZGVsX25leHRob3AsXFxubmV0L2lwdjQvbmV4dGhvcC5jLTQyMDUtXFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1BFUk5FVH0sXFxubmV0L2lwdjQvbmV4dGhvcC5jOjQyMDY6XFx0ey5tc2d0eXBlID0gUlRNX0dFVE5FWFRIT1AsIC5kb2l0ID0gcnRtX2dldF9uZXh0aG9wLFxcbm5ldC9pcHY0L25leHRob3AuYzo0MjA3OlxcdCAuZHVtcGl0ID0gcnRtX2R1bXBfbmV4dGhvcH0sXFxubmV0L2lwdjQvbmV4dGhvcC5jOjQyMDg6XFx0ey5tc2d0eXBlID0gUlRNX0dFVE5FWFRIT1BCVUNLRVQsIC5kb2l0ID0gcnRtX2dldF9uZXh0aG9wX2J1Y2tldCxcXG5uZXQvaXB2NC9uZXh0aG9wLmM6NDIwOTpcXHQgLmR1bXBpdCA9IHJ0bV9kdW1wX25leHRob3BfYnVja2V0fSxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDIxMC1cXHR7LnByb3RvY29sID0gUEZfSU5FVCwgLm1zZ3R5cGUgPSBSVE1fTkVXTkVYVEhPUCxcXG5uZXQvaXB2NC9uZXh0aG9wLmM6NDIxMTpcXHQgLmRvaXQgPSBydG1fbmV3X25leHRob3AsIC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1BFUk5FVH0sXFxubmV0L2lwdjQvbmV4dGhvcC5jLTQyMTItXFx0ey5wcm90b2NvbCA9IFBGX0lORVQsIC5tc2d0eXBlID0gUlRNX0dFVE5FWFRIT1AsXFxubmV0L2lwdjQvbmV4dGhvcC5jOjQyMTM6XFx0IC5kdW1waXQgPSBydG1fZHVtcF9uZXh0aG9wfSxcXG5uZXQvaXB2NC9uZXh0aG9wLmMtNDIxNC1cXHR7LnByb3RvY29sID0gUEZfSU5FVDYsIC5tc2d0eXBlID0gUlRNX05FV05FWFRIT1AsXFxubmV0L2lwdjQvbmV4dGhvcC5jOjQyMTU6XFx0IC5kb2l0ID0gcnRtX25ld19uZXh0aG9wLCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9QRVJORVR9LFxcbm5ldC9pcHY0L25leHRob3AuYy00MjE2LVxcdHsucHJvdG9jb2wgPSBQRl9JTkVUNiwgLm1zZ3R5cGUgPSBSVE1fR0VUTkVYVEhPUCxcXG5uZXQvaXB2NC9uZXh0aG9wLmM6NDIxNzpcXHQgLmR1bXBpdCA9IHJ0bV9kdW1wX25leHRob3B9LFxcbm5ldC9pcHY0L25leHRob3AuYy00MjE4LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAyOjA2LjMxNzk3NTA4NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODAwNzkwODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQ6IFBhdGNoIFZlcmlmaWNhdGlvbioqXG5cbk9rYXksIGxldCdzIHNlZS4gTXkgZm9jdXMgc3ltYm9scyBmb3IgdGVzdGluZyBhcmUgYHJlbW92ZV9uaF9ncnBfZW50cnlgLCBgcmVtb3ZlX25leHRob3BfZnJvbV9ncm91cHNgLCBgcnRtX2RlbF9uZXh0aG9wYCwgYW5kIGBydG1fbmV3X25leHRob3BgLiBUaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBuZWVkZWQgaXMgYElORVRgLlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gY29uZmlybSBldmVyeXRoaW5nIGlzIGFzIGl0IHNob3VsZCBiZS4gVGhlIHBhdGNoIGhhcyBgV29ydGhGdXp6aW5nYCBzZXQgdG8gYHRydWVgLCB3aGljaCBpcyB3aGF0IEkgZXhwZWN0LiBNeSB0YXJnZXQgY29uZmlndXJhdGlvbnMgYXJlIGxpc3RlZCBhcyBgW1wiSU5FVFwiXWAsIGFuZCBteSBzeW1ib2xzIGFyZSBjb3JyZWN0LiBUaGUgcmVhc29uaW5nIHNlZW1zIGNvbmNpc2UgYW5kIHJlbGV2YW50LiBUaGlzIHBhdGNoIGluaXRpYWxpemVzIHRoZSBgZXh0YWNrYCBzdHJ1Y3R1cmUgaW4gYHJlbW92ZV9uaF9ncnBfZW50cnlgIHRvIHByZXZlbnQgdW5pbml0aWFsaXplZCByZWFkcyB3aGVuIG5vdGlmaWVyIGVycm9ycyBoYXBwZW4gZHVyaW5nIG5leHRob3AgZ3JvdXAgZW50cnkgcmVtb3ZhbC4gVGhpcyBpcyBjcml0aWNhbCBiZWNhdXNlIGl0J3MgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIGFjY2Vzc2libGUgdmlhIG5ldGxpbmssIHdoaWNoIGlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdnVsbmVyYWJpbGl0eSBJJ20gaW50ZXJlc3RlZCBpbi4gU2VlbXMgdG8gYmUgYSBzb2xpZCBmaXguXG5cbkFscmlnaHQsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjA2LCJPdXRwdXRUb2tlbnMiOjE1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowMjowOS4xMTg3NzA0MzZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc5MjQ1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZW1vdmVfbmhfZ3JwX2VudHJ5XCIsXG4gICAgXCJyZW1vdmVfbmV4dGhvcF9mcm9tX2dyb3Vwc1wiLFxuICAgIFwicnRtX2RlbF9uZXh0aG9wXCIsXG4gICAgXCJydG1fbmV3X25leHRob3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbml0aWFsaXplcyB0aGUgbmV0bGlua19leHRfYWNrIHN0cnVjdHVyZSBpbiByZW1vdmVfbmhfZ3JwX2VudHJ5KCkgdG8gcHJldmVudCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGlmIG5vdGlmaWVycyByZXR1cm4gYW4gZXJyb3IuIFRoZSBjb2RlIHJlc2lkZXMgaW4gdGhlIGNvcmUgSVB2NCBuZXh0aG9wIG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBuZXh0aG9wIGNvbW1hbmRzIChSVE1fREVMTkVYVEhPUCwgUlRNX05FV05FWFRIT1ApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZW1vdmVfbmhfZ3JwX2VudHJ5XCIsXG4gICAgXCJyZW1vdmVfbmV4dGhvcF9mcm9tX2dyb3Vwc1wiLFxuICAgIFwicnRtX2RlbF9uZXh0aG9wXCIsXG4gICAgXCJydG1fbmV3X25leHRob3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbml0aWFsaXplcyB0aGUgbmV0bGlua19leHRfYWNrIHN0cnVjdHVyZSBpbiByZW1vdmVfbmhfZ3JwX2VudHJ5KCkgdG8gcHJldmVudCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIGlmIG5vdGlmaWVycyByZXR1cm4gYW4gZXJyb3IuIFRoZSBjb2RlIHJlc2lkZXMgaW4gdGhlIGNvcmUgSVB2NCBuZXh0aG9wIG1hbmFnZW1lbnQgc3Vic3lzdGVtIGFuZCBpcyByZWFjaGFibGUgdmlhIHJ0bmV0bGluayBuZXh0aG9wIGNvbW1hbmRzIChSVE1fREVMTkVYVEhPUCwgUlRNX05FV05FWFRIT1ApLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowMjowOS4yNDY3MDM1MzFaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MjEwMTM4NDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDI6MDkuMjQ3MTg0OTUxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTQyMDk2NTMwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFja2Agd2FzIGRlY2xhcmVkIG9uIHRoZSBzdGFjayB3aXRob3V0IGluaXRpYWxpemF0aW9uIGluIGByZW1vdmVfbmhfZ3JwX2VudHJ5KClgLiBCeSBpbml0aWFsaXppbmcgaXQgd2l0aCBgPSB7fWAsIGFsbCBmaWVsZHMgb2YgYGV4dGFja2AgYXJlIGV4cGxpY2l0bHkgemVyb2VkLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIGxlYWsgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXJzcGFjZSwgb3IgYWx0ZXIgY29udHJvbCBmbG93IGluIGEgd2F5IHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhlcmVmb3JlLCBydW5uaW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGVmODZkMTMwMDM4MjNjN2FjNDYwODI5MzUzZGQ3ZTZjZDQyZmRjYjJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCA0IDEwOjAxOjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV4dGhvcC5jIGIvbmV0L2lwdjQvbmV4dGhvcC5jXG5pbmRleCBhN2MyYjhkY2VkNGU3Li40MmU1NWI1YTc1NWVlIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvbmV4dGhvcC5jXG4rKysgYi9uZXQvaXB2NC9uZXh0aG9wLmNcbkBAIC0yMDM2LDcgKzIwMzYsNyBAQCByZW1vdmVfbmhfZ3JwX2VudHJ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5oX2dycF9lbnRyeSAqbmhnZSxcbiB7XG4gXHRzdHJ1Y3QgbmhfZ3JwX2VudHJ5ICpuaGdlcywgKm5ld19uaGdlcztcbiBcdHN0cnVjdCBuZXh0aG9wICpuaHAgPSBuaGdlLVx1MDAzZW5oX3BhcmVudDtcbi1cdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrO1xuK1x0c3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2sgPSB7fTtcbiBcdHN0cnVjdCBuZXh0aG9wICpuaCA9IG5oZ2UtXHUwMDNlbmg7XG4gXHRzdHJ1Y3QgbmhfZ3JvdXAgKm5oZywgKm5ld2c7XG4gXHRpbnQgaSwgaiwgZXJyO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDI6MDkuMjQ3MTg1ODkxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4NDU2OTAzNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXh0aG9wIENvZGUgTW9kaWZpY2F0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVpbmcgY2hhbmdlZCBhbmQgd2h5LCBzbyBJJ2xsIHN0YXJ0IHdpdGggdGhlIGZpbGUgYW5kIGxpbmUgbnVtYmVyLiBJdCBzZWVtcyB0aGlzIG1vZGlmaWNhdGlvbiB0YXJnZXRzIGBuZXQvaXB2NC9uZXh0aG9wLmNgIGFyb3VuZCBsaW5lIDIwMzYsIGFjY29yZGluZyB0byB0aGUgYGRpZmZgLiBSaWdodCwgbGV0J3Mgc2VlLCBpdCBsb29rcyBsaWtlIHRoZSBjaGFuZ2UgaXMgdG8gaW5pdGlhbGl6ZSB0aGUgYGV4dGFja2AgdmFyaWFibGUgdXNpbmcgYnJhY2UgaW5pdGlhbGl6YXRpb24gYHt9YC4gVGhpcyBpcyBhIHN1YnRsZSBidXQgaW1wb3J0YW50IGNoYW5nZS4gUHJldmlvdXNseSBpdCB3YXMgdW5pbml0aWFsaXplZCwgd2hpY2ggY2FuIGxlYWQgdG8gdW5kZWZpbmVkIGJlaGF2aW9yLCBhbmQgcG90ZW50aWFsIHNlY3VyaXR5IGlzc3VlcywgZGVwZW5kaW5nIG9uIHRoZSBjb21waWxlciBhbmQgZXhlY3V0aW9uIGVudmlyb25tZW50LiBJbml0aWFsaXppbmcgaXQgZXhwbGljaXRseSBlbnN1cmVzIHRoYXQgdGhlIGBleHRhY2tgIHN0cnVjdCBoYXMgZGVmaW5lZCB2YWx1ZXMsIHdoaWNoIEkgdW5kZXJzdGFuZCBpcyBjcnVjaWFsIGZvciBgbmV0bGlua19leHRfYWNrYCBlcnJvciByZXBvcnRpbmcuXG5cbkknbGwgcXVpY2tseSBjaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L2lwdjQvbmV4dGhvcC5jYCBhcm91bmQgdGhhdCBsaW5lLCBjb25maXJtaW5nIHRoZSBjb250ZXh0IHdpdGhpbiB0aGUgYHJlbW92ZV9uaF9ncnBfZW50cnlgIGZ1bmN0aW9uLiBJdCBpbnZvbHZlcyBtYW5hZ2luZyBuZXh0aG9wIGdyb3VwIGVudHJpZXMsIHNvIGFueSBlcnJvcnMgY291bGQgcG90ZW50aWFsbHkgaW1wYWN0IHJvdXRpbmcgb3IgZm9yd2FyZGluZyBkZWNpc2lvbnMuIFRoZSBpbml0aWFsaXphdGlvbiBvZiBgZXh0YWNrYCBoZXJlIGlzIGxpa2VseSByZWxhdGVkIHRvIGhhbmRsaW5nIGVycm9yIGNvbmRpdGlvbnMsIGVuc3VyaW5nIHRoYXQgaWYgYW4gZXJyb3Igb2NjdXJzLCBpdCdzIGNvbW11bmljYXRlZCBjb3JyZWN0bHkgdmlhIE5ldGxpbmsuIENvbnNpZGVyaW5nIHRoZSBjcml0aWNhbGl0eSBvZiB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIGZvcndhcmRpbmcgcGF0aCwgcHJldmVudGluZyB1bmV4cGVjdGVkIGJlaGF2aW9yIGZyb20gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaXMgYSBzZW5zaWJsZSBwcmVjYXV0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTA3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjk5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDI6MTQuMDkyODc5NDI3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxODY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9uZXh0aG9wLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAzMDpcXHRcXHR9XFxuMjAzMTpcXHR9XFxuMjAzMjpcXHRcXG4yMDMzOlxcdHN0YXRpYyBib29sIF9fbXVzdF9jaGVja1xcbjIwMzQ6XFx0cmVtb3ZlX25oX2dycF9lbnRyeShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuaF9ncnBfZW50cnkgKm5oZ2UsXFxuMjAzNTpcXHRcXHRcXHQgICAgc3RydWN0IG5sX2luZm8gKm5saW5mbywgc3RydWN0IGxpc3RfaGVhZCAqZGVmZXJyZWRfZnJlZSlcXG4yMDM2OlxcdHtcXG4yMDM3OlxcdFxcdHN0cnVjdCBuaF9ncnBfZW50cnkgKm5oZ2VzLCAqbmV3X25oZ2VzO1xcbjIwMzg6XFx0XFx0c3RydWN0IG5leHRob3AgKm5ocCA9IG5oZ2UtXFx1MDAzZW5oX3BhcmVudDtcXG4yMDM5OlxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgZXh0YWNrID0ge307XFxuMjA0MDpcXHRcXHRzdHJ1Y3QgbmV4dGhvcCAqbmggPSBuaGdlLVxcdTAwM2VuaDtcXG4yMDQxOlxcdFxcdHN0cnVjdCBuaF9ncm91cCAqbmhnLCAqbmV3ZztcXG4yMDQyOlxcdFxcdGludCBpLCBqLCBlcnI7XFxuMjA0MzpcXHRcXG4yMDQ0OlxcdFxcdFdBUk5fT04oIW5oKTtcXG4yMDQ1OlxcdFxcbjIwNDY6XFx0XFx0bmhnID0gcnRubF9kZXJlZmVyZW5jZShuaHAtXFx1MDAzZW5oX2dycCk7XFxuMjA0NzpcXHRcXHRuZXdnID0gbmhnLVxcdTAwM2VzcGFyZTtcXG4yMDQ4OlxcdFxcbjIwNDk6XFx0XFx0LyogbGFzdCBlbnRyeSwga2VlcCBpdCB2aXNpYmxlIGFuZCByZW1vdmUgdGhlIHBhcmVudCAqL1xcbjIwNTA6XFx0XFx0aWYgKG5oZy1cXHUwMDNlbnVtX25oID09IDEpXFxuMjA1MTpcXHRcXHRcXHRyZXR1cm4gcmVtb3ZlX25leHRob3AobmV0LCBuaHAsIG5saW5mbyk7XFxuMjA1MjpcXHRcXG4yMDUzOlxcdFxcdG5ld2ctXFx1MDAzZWhhc192NCA9IGZhbHNlO1xcbjIwNTQ6XFx0XFx0bmV3Zy1cXHUwMDNlaXNfbXVsdGlwYXRoID0gbmhnLVxcdTAwM2Vpc19tdWx0aXBhdGg7XFxuMjA1NTpcXHRcXHRuZXdnLVxcdTAwM2VoYXNoX3RocmVzaG9sZCA9IG5oZy1cXHUwMDNlaGFzaF90aHJlc2hvbGQ7XFxuMjA1NjpcXHRcXHRuZXdnLVxcdTAwM2VyZXNpbGllbnQgPSBuaGctXFx1MDAzZXJlc2lsaWVudDtcXG4yMDU3OlxcdFxcdG5ld2ctXFx1MDAzZWZkYl9uaCA9IG5oZy1cXHUwMDNlZmRiX25oO1xcbjIwNTg6XFx0XFx0bmV3Zy1cXHUwMDNlbnVtX25oID0gbmhnLVxcdTAwM2VudW1fbmg7XFxuMjA1OTpcXHRcXG4yMDYwOlxcdFxcdC8qIGNvcHkgb2xkIGVudHJpZXMgdG8gbmV3IGV4Y2VwdCB0aGUgb25lIGdldHRpbmcgcmVtb3ZlZCAqL1xcbjIwNjE6XFx0XFx0bmhnZXMgPSBuaGctXFx1MDAzZW5oX2VudHJpZXM7XFxuMjA2MjpcXHRcXHRuZXdfbmhnZXMgPSBuZXdnLVxcdTAwM2VuaF9lbnRyaWVzO1xcbjIwNjM6XFx0XFx0Zm9yIChpID0gMCwgaiA9IDA7IGkgXFx1MDAzYyBuaGctXFx1MDAzZW51bV9uaDsgKytpKSB7XFxuMjA2NDpcXHRcXHRcXHRzdHJ1Y3QgbmhfaW5mbyAqbmhpO1xcbjIwNjU6XFx0XFxuMjA2NjpcXHRcXHRcXHQvKiBjdXJyZW50IG5leHRob3AgZ2V0dGluZyByZW1vdmVkICovXFxuMjA2NzpcXHRcXHRcXHRpZiAobmhnLVxcdTAwM2VuaF9lbnRyaWVzW2ldLm5oID09IG5oKSB7XFxuMjA2ODpcXHRcXHRcXHRcXHRuZXdnLVxcdTAwM2VudW1fbmgtLTtcXG4yMDY5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjIwNzA6XFx0XFx0XFx0fVxcbjIwNzE6XFx0XFxuMjA3MjpcXHRcXHRcXHRuaGkgPSBydG5sX2RlcmVmZXJlbmNlKG5oZ2VzW2ldLm5oLVxcdTAwM2VuaF9pbmZvKTtcXG4yMDczOlxcdFxcdFxcdGlmIChuaGktXFx1MDAzZWZhbWlseSA9PSBBRl9JTkVUKVxcbjIwNzQ6XFx0XFx0XFx0XFx0bmV3Zy1cXHUwMDNlaGFzX3Y0ID0gdHJ1ZTtcXG4yMDc1OlxcdFxcbjIwNzY6XFx0XFx0XFx0bGlzdF9kZWwoXFx1MDAyNm5oZ2VzW2ldLm5oX2xpc3QpO1xcbjIwNzc6XFx0XFx0XFx0bmV3X25oZ2VzW2pdLnN0YXRzID0gbmhnZXNbaV0uc3RhdHM7XFxuMjA3ODpcXHRcXHRcXHRuZXdfbmhnZXNbal0ubmhfcGFyZW50ID0gbmhnZXNbaV0ubmhfcGFyZW50O1xcbjIwNzk6XFx0XFx0XFx0bmV3X25oZ2VzW2pdLm5oID0gbmhnZXNbaV0ubmg7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAyOjE0LjA5MzIwMTkyN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDI0MzAzNzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipUcmFjaW5nIHRoZSBgZXh0YWNrYCBpbiBgcmVtb3ZlX25oX2dycF9lbnRyeWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZmxvdyBvZiBgZXh0YWNrYCB3aXRoaW4gdGhlIGByZW1vdmVfbmhfZ3JwX2VudHJ5YCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gbWFwIHdoZXJlIHRoaXMgdmFyaWFibGUgaXMgYmVpbmcgcGFzc2VkLCB3aGljaCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgaXQncyB1c2VkIGFuZCBpdHMgc2lnbmlmaWNhbmNlIGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIG5ldHdvcmsgaGFuZGxpbmcgZ3JvdXAgZW50cnkgcmVtb3ZhbC4gSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGluZm9ybWF0aW9uIEkgY2FuIGdsZWFuIGp1c3QgZnJvbSBpdHMgbG9jYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBXaGVyZSBkb2VzIHRoZSB2YWx1ZSBvZiBgZXh0YWNrYCBjb21lIGZyb20gaW5pdGlhbGx5PyBXaGF0IG90aGVyIGZ1bmN0aW9ucyBvciBkYXRhIHN0cnVjdHVyZXMgaW50ZXJhY3Qgd2l0aCBpdCBiZWZvcmUgaXQgcmVhY2hlcyBgcmVtb3ZlX25oX2dycF9lbnRyeWA/IEtub3dpbmcgdGhlIGNhbGxpbmcgaGllcmFyY2h5IHdpbGwgYmUgY3JpdGljYWwgaGVyZSwgc28gSSdsbCBwcm9iYWJseSBzdGFydCB3aXRoIGEgc3RhdGljIGFuYWx5c2lzIHRvIGdldCBhIGJpcmQncy1leWUgdmlldywgdGhlbiBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIGZvbGxvdyB0aGUgc3BlY2lmaWMgcGFzc2VzIG9mIGBleHRhY2tgLiBUaGlzIHNob3VsZCBnaXZlIG1lIHRoZSBiYWNrZ3JvdW5kIEkgbmVlZCB0byBldmFsdWF0ZSB0aGUgaW1wbGljYXRpb25zIG9mIGhvdyBgZXh0YWNrYCBpcyBiZWluZyBtYW5hZ2VkLiBJdCB3aWxsIGFsc28gZXhwb3NlIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIGl0IG1pZ2h0IGhhdmUgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBvciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB3aXRoaW4gdGhlIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTg0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNFQxMDowMjoxNi41MTc1MDk3MDVaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzcyNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L25leHRob3AuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDgwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMDgwOlxcdFxcdFxcdG5ld19uaGdlc1tqXS53ZWlnaHQgPSBuaGdlc1tpXS53ZWlnaHQ7XFxuMjA4MTpcXHRcXHRcXHRsaXN0X2FkZChcXHUwMDI2bmV3X25oZ2VzW2pdLm5oX2xpc3QsIFxcdTAwMjZuZXdfbmhnZXNbal0ubmgtXFx1MDAzZWdycF9saXN0KTtcXG4yMDgyOlxcdFxcdFxcdGorKztcXG4yMDgzOlxcdFxcdH1cXG4yMDg0OlxcdFxcbjIwODU6XFx0XFx0aWYgKG5ld2ctXFx1MDAzZWhhc2hfdGhyZXNob2xkKVxcbjIwODY6XFx0XFx0XFx0bmhfaHRocl9ncm91cF9yZWJhbGFuY2UobmV3Zyk7XFxuMjA4NzpcXHRcXHRlbHNlIGlmIChuZXdnLVxcdTAwM2VyZXNpbGllbnQpXFxuMjA4ODpcXHRcXHRcXHRyZXBsYWNlX25leHRob3BfZ3JwX3JlcyhuaGcsIG5ld2cpO1xcbjIwODk6XFx0XFxuMjA5MDpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIobmhwLVxcdTAwM2VuaF9ncnAsIG5ld2cpO1xcbjIwOTE6XFx0XFxuMjA5MjpcXHRcXHRsaXN0X2RlbChcXHUwMDI2bmhnZS1cXHUwMDNlbmhfbGlzdCk7XFxuMjA5MzpcXHRcXHRuZXh0aG9wX3B1dChuaGdlLVxcdTAwM2VuaCk7XFxuMjA5NDpcXHRcXHRsaXN0X2FkZChcXHUwMDI2bmhnZS1cXHUwMDNlbmhfbGlzdCwgZGVmZXJyZWRfZnJlZSk7XFxuMjA5NTpcXHRcXG4yMDk2OlxcdFxcdC8qIFJlbW92YWwgb2YgYSBOSCBmcm9tIGEgcmVzaWxpZW50IGdyb3VwIGlzIG5vdGlmaWVkIHRocm91Z2hcXG4yMDk3OlxcdFxcdCAqIGJ1Y2tldCBub3RpZmljYXRpb25zLlxcbjIwOTg6XFx0XFx0ICovXFxuMjA5OTpcXHRcXHRpZiAobmV3Zy1cXHUwMDNlaGFzaF90aHJlc2hvbGQpIHtcXG4yMTAwOlxcdFxcdFxcdGVyciA9IGNhbGxfbmV4dGhvcF9ub3RpZmllcnMobmV0LCBORVhUSE9QX0VWRU5UX1JFUExBQ0UsIG5ocCxcXG4yMTAxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmV4dGFjayk7XFxuMjEwMjpcXHRcXHRcXHRpZiAoZXJyKVxcbjIxMDM6XFx0XFx0XFx0XFx0cHJfZXJyKFxcXCIlc1xcXFxuXFxcIiwgZXh0YWNrLl9tc2cpO1xcbjIxMDQ6XFx0XFx0fVxcbjIxMDU6XFx0XFxuMjEwNjpcXHRcXHRpZiAobmxpbmZvKVxcbjIxMDc6XFx0XFx0XFx0bmV4dGhvcF9ub3RpZnkoUlRNX05FV05FWFRIT1AsIG5ocCwgbmxpbmZvKTtcXG4yMTA4OlxcdFxcbjIxMDk6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjIxMTA6XFx0fVxcbjIxMTE6XFx0XFxuMjExMjpcXHRzdGF0aWMgYm9vbCBfX211c3RfY2hlY2tcXG4yMTEzOlxcdHJlbW92ZV9uZXh0aG9wX2Zyb21fZ3JvdXBzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5leHRob3AgKm5oLFxcbjIxMTQ6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5sX2luZm8gKm5saW5mbylcXG4yMTE1OlxcdHtcXG4yMTE2OlxcdFxcdHN0cnVjdCBuaF9ncnBfZW50cnkgKm5oZ2UsICp0bXA7XFxuMjExNzpcXHRcXHRMSVNUX0hFQUQoZGVmZXJyZWRfZnJlZSk7XFxuMjExODpcXHRcXHRib29sIG5lZWRfZmx1c2ggPSBmYWxzZTtcXG4yMTE5OlxcdFxcbjIxMjA6XFx0XFx0LyogSWYgdGhlcmUgaXMgbm90aGluZyB0byBkbywgbGV0J3MgYXZvaWQgdGhlIGNvc3RseSBjYWxsIHRvXFxuMjEyMTpcXHRcXHQgKiBzeW5jaHJvbml6ZV9uZXQoKVxcbjIxMjI6XFx0XFx0ICovXFxuMjEyMzpcXHRcXHRpZiAobGlzdF9lbXB0eShcXHUwMDI2bmgtXFx1MDAzZWdycF9saXN0KSlcXG4yMTI0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yMTI1OlxcdFxcbjIxMjY6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5oZ2UsIHRtcCwgXFx1MDAyNm5oLVxcdTAwM2VncnBfbGlzdCwgbmhfbGlzdClcXG4yMTI3OlxcdFxcdFxcdG5lZWRfZmx1c2ggfD0gcmVtb3ZlX25oX2dycF9lbnRyeShuZXQsIG5oZ2UsIG5saW5mbyxcXG4yMTI4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmRlZmVycmVkX2ZyZWUpO1xcbjIxMjk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA0VDEwOjAyOjE2LjUxNzg4NTkyNVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTM4OTM0NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBCdWcgRml4KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBMaW5lIDIwMzkgc2hvd3MgYSBjaGFuZ2UgZnJvbSBhIGRlY2xhcmF0aW9uIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjaztgIHRvIGFuIGluaXRpYWxpemF0aW9uIGBzdHJ1Y3QgbmV0bGlua19leHRfYWNrIGV4dGFjayA9IHt9O2AuICBUaGF0J3MgdGhlIGNvcmUgb2YgdGhlIHBhdGNoLiBUaGUgY29kZSBhdCBsaW5lcyAyMTAwLTIxMDMgbWFrZXMgdXNlIG9mIHRoaXMgc3RydWN0dXJlLiAgUHJldmlvdXNseSwgYGV4dGFja2Agd2FzIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUsICpwb3RlbnRpYWxseSogdW5pbml0aWFsaXplZC4gVGhpcyBjb3VsZCBoYXZlIGxlZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgc3RhY2sgZGF0YSwgcGFydGljdWxhcmx5IGlmIGBjYWxsX25leHRob3Bfbm90aWZpZXJzYCByZXR1cm5lZCBhbiBlcnJvciB3aXRob3V0IHNldHRpbmcgYGV4dGFjay5fbXNnYCwgb3IgaWYgdGhlIG5vdGlmaWVycyB0aGVtc2VsdmVzIHBlZWtlZCBhdCB0aGUgY29udGVudHMgb2YgYGV4dGFja2AgKHdoaWNoIGlzIGJhZCBmb3JtLCBidXQgY2VydGFpbmx5IHBvc3NpYmxlKSwgb3IgaWYgdGhlIGBwcl9lcnJgIGNhbGwgYXQgdGhlIGVuZCB3YXMgZXhlY3V0ZWQgd2l0aCBhbiB1bmluaXRpYWxpemVkIGBfbXNnYCBmaWVsZC4gIFRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IGVuc3VyaW5nIHRoZSB2YXJpYWJsZSBpcyB6ZXJvLWluaXRpYWxpemVkLlxuXG5Ob3csIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgbmVlZHMgS01TQU4uIEkgbmVlZCB0byBiZSAqYWJzb2x1dGVseSogc3VyZS4gV2hhdCBkb2VzIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHdhbnQ/IEFoLCBoZXJlIGFyZSB0aGUgcnVsZXMhIFwiVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cIiBLTVNBTiBpcyBleHBlbnNpdmUsIHNvIEkgc2hvdWxkIG9ubHkgdXNlIGl0IHdoZW4gKnVuaW5pdGlhbGl6ZWQgbWVtb3J5KiByaXNrcyBhcmUgcHJlc2VudCwgYW5kIHRob3NlIHJpc2tzIGFyZSAqb25seSogZGV0ZWN0YWJsZSBieSBLTVNBTi5cblxuVGhlIHByb21wdCBsaXN0cyBmb3VyIHNwZWNpZmljIHNjZW5hcmlvcyB0aGF0IHdhcnJhbnQgS01TQU4sIG9yIG5vdDpcbjEuICBTdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMgb3IgcGFkZGluZy4gSXMgdGhpcyB0aGUgY2FzZT8gTm8uXG4yLiAgQ29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiAgSXMgdGhpcyB0aGUgY2FzZT8gTm8uXG4zLiAgQWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlci4gSXMgdGhpcyB0aGUgY2FzZT8gTm8uXG40LiAgQnlwYXNzaW5nIG9yIG1hbmlwdWxhdGluZyBsZW5ndGggb3IgYm91bmRzIGNoZWNrcywgcG90ZW50aWFsbHkgYWxsb3dpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4gSXMgdGhpcyB0aGUgY2FzZT8gTm8uXG5cblRoZSBwcm9tcHQgdmVyeSBleHBsaWNpdGx5IHNheXM6IFwiU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6IC4uLiBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuICAuLi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlwiXG5cblRoaXMgcGF0Y2ggKmV4cGxpY2l0bHkqIGluaXRpYWxpemVzIHRoZSB2YXJpYWJsZSB3aXRoIGB7fWAuICBJdCBkb2VzICpub3QqIGludHJvZHVjZSBuZXcgcmlza3MuIEl0ICpwcmV2ZW50cyogYSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4gSXQgZG9lc24ndCBsZWFrIGluZm8uICBJJ3ZlIGNoZWNrZWQgZXZlcnl0aGluZy4gVGhlIG9yaWdpbmFsIHN0YXRlIHdhcyBwb3RlbnRpYWxseSB1bnNhZmUgKHVuaW5pdGlhbGl6ZWQgc3RhY2spLiBUaGUgbmV3IHN0YXRlIGlzIHNhZmUuXG5cbkknbSBjb21wbGV0ZWx5IGNvbmZpZGVudCB0aGF0IHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgYW55IG5ldywgb3IgZXZlbiBtYWludGFpbiBleGlzdGluZywgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCBvbmx5IGJlIGNhdWdodCBieSBLTVNBTi4gVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgbXVzdCBiZSBgZmFsc2VgLlxuXG5Pa2F5LCBJJ20gcmVhZHkgdG8gc2V0LXJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NjEsIk91dHB1dFRva2VucyI6MTI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDRUMTA6MDI6MjMuNDU2ODIyMzQzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2tgIHdhcyBkZWNsYXJlZCBvbiB0aGUgc3RhY2sgd2l0aG91dCBpbml0aWFsaXphdGlvbiBpbiBgcmVtb3ZlX25oX2dycF9lbnRyeSgpYC4gQnkgaW5pdGlhbGl6aW5nIGl0IHdpdGggYD0ge31gLCBhbGwgZmllbGRzIG9mIGBleHRhY2tgIGFyZSBleHBsaWNpdGx5IHplcm9lZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBsZWFrIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgc3RydWN0IG5ldGxpbmtfZXh0X2FjayBleHRhY2tgIHdhcyBkZWNsYXJlZCBvbiB0aGUgc3RhY2sgd2l0aG91dCBpbml0aWFsaXphdGlvbiBpbiBgcmVtb3ZlX25oX2dycF9lbnRyeSgpYC4gQnkgaW5pdGlhbGl6aW5nIGl0IHdpdGggYD0ge31gLCBhbGwgZmllbGRzIG9mIGBleHRhY2tgIGFyZSBleHBsaWNpdGx5IHplcm9lZC4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBsZWFrIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2Vyc3BhY2UsIG9yIGFsdGVyIGNvbnRyb2wgZmxvdyBpbiBhIHdheSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlZm9yZSwgcnVubmluZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowpbmd4[1] Phase: Succeeded StartedAt: 2026-09-04 10:02:34 +0000 UTC FinishedAt: 2026-09-04 10:02:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 10:02:34 +0000 UTC FinishedAt: 2026-09-04 10:02:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[2] Phase: Succeeded StartedAt: 2026-09-04 10:02:34 +0000 UTC FinishedAt: 2026-09-04 10:53:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:02:34 +0000 UTC FinishedAt: 2026-09-04 10:53:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:02:34 +0000 UTC FinishedAt: 2026-09-04 10:02:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:02:34 +0000 UTC FinishedAt: 2026-09-04 10:02:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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-workflowpbmd4/series-workflowpbmd4-convert-artifact-3647082189/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:02:44 +0000 UTC FinishedAt: 2026-09-04 10:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:02:44 +0000 UTC FinishedAt: 2026-09-04 10:22:11 +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:*4fb64fcc-28e9-4616-920c-81cc01fa90e8,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-workflowpbmd4/series-workflowpbmd4-convert-artifact-3647082189/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": "2cbe7003-11c9-4642-9690-7eaaa19b6793", "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-workflowpbmd4/series-workflowpbmd4-build-action-1532383043/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:02:44 +0000 UTC FinishedAt: 2026-09-04 10:22:01 +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:*4fb64fcc-28e9-4616-920c-81cc01fa90e8,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-workflowpbmd4/series-workflowpbmd4-convert-artifact-3647082189/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": "2cbe7003-11c9-4642-9690-7eaaa19b6793", "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-workflowpbmd4/series-workflowpbmd4-build-action-1532383043/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:22:11 +0000 UTC FinishedAt: 2026-09-04 10:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:22:11 +0000 UTC FinishedAt: 2026-09-04 10:22:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:22:11 +0000 UTC FinishedAt: 2026-09-04 10:22:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:22:11 +0000 UTC FinishedAt: 2026-09-04 10:22:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-workflowpbmd4/series-workflowpbmd4-convert-artifact-1858608424/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:22:22 +0000 UTC FinishedAt: 2026-09-04 10:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:22:22 +0000 UTC FinishedAt: 2026-09-04 10:24:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2cbe7003-11c9-4642-9690-7eaaa19b6793,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-workflowpbmd4/series-workflowpbmd4-build-action-1532383043/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-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:24:19 +0000 UTC FinishedAt: 2026-09-04 10:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:24:19 +0000 UTC FinishedAt: 2026-09-04 10:24:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:24:19 +0000 UTC FinishedAt: 2026-09-04 10:48:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:24:19 +0000 UTC FinishedAt: 2026-09-04 10:48:42 +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:*4fb64fcc-28e9-4616-920c-81cc01fa90e8,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-workflowpbmd4/series-workflowpbmd4-convert-artifact-1858608424/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": "6a0f57ed-4e2a-4310-a894-b903e904281d", "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-workflowpbmd4/series-workflowpbmd4-build-action-504437460/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:24:19 +0000 UTC FinishedAt: 2026-09-04 10:48:32 +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:*4fb64fcc-28e9-4616-920c-81cc01fa90e8,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-workflowpbmd4/series-workflowpbmd4-convert-artifact-1858608424/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": "6a0f57ed-4e2a-4310-a894-b903e904281d", "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-workflowpbmd4/series-workflowpbmd4-build-action-504437460/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:48:42 +0000 UTC FinishedAt: 2026-09-04 10:48:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:48:42 +0000 UTC FinishedAt: 2026-09-04 10:48:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:48:42 +0000 UTC FinishedAt: 2026-09-04 10:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:48:42 +0000 UTC FinishedAt: 2026-09-04 10:50:52 +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:*6a0f57ed-4e2a-4310-a894-b903e904281d,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-workflowpbmd4/series-workflowpbmd4-build-action-504437460/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-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:51:02 +0000 UTC FinishedAt: 2026-09-04 10:53:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:51:02 +0000 UTC FinishedAt: 2026-09-04 10:53:30 +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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"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:*2cbe7003-11c9-4642-9690-7eaaa19b6793,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6a0f57ed-4e2a-4310-a894-b903e904281d,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-workflowpbmd4/series-workflowpbmd4-build-action-1532383043/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-workflowpbmd4/series-workflowpbmd4-build-action-504437460/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:51:02 +0000 UTC FinishedAt: 2026-09-04 10:51:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:51:02 +0000 UTC FinishedAt: 2026-09-04 10:51:06 +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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"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-workflowpbmd4/series-workflowpbmd4-convert-artifact-1067207009/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:51:02 +0000 UTC FinishedAt: 2026-09-04 10:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:51:02 +0000 UTC FinishedAt: 2026-09-04 10:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:51:02 +0000 UTC FinishedAt: 2026-09-04 10:51:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:51:12 +0000 UTC FinishedAt: 2026-09-04 10:53:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpbmd4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"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":["remove_nh_grp_entry","remove_nexthop_from_groups","rtm_del_nexthop","rtm_new_nexthop"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET"],"series_id":"472df404-c500-4c6f-8cb4-8e0c4c9225af","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-09-04 10:51:12 +0000 UTC FinishedAt: 2026-09-04 10:53:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2cbe7003-11c9-4642-9690-7eaaa19b6793,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6a0f57ed-4e2a-4310-a894-b903e904281d,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-workflowpbmd4/series-workflowpbmd4-build-action-1532383043/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-workflowpbmd4/series-workflowpbmd4-build-action-504437460/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-workflowpbmd4/series-workflowpbmd4-convert-artifact-1067207009/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,}