Name: series-workflowvktk8 Phase: Succeeded StartedAt: 2026-09-12 01:17:58 +0000 UTC FinishedAt: 2026-09-12 05:18:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[0] Phase: Succeeded StartedAt: 2026-09-12 01:17:58 +0000 UTC FinishedAt: 2026-09-12 01:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[0].run-triage Phase: Succeeded StartedAt: 2026-09-12 01:17:58 +0000 UTC FinishedAt: 2026-09-12 01:37:26 +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": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CT_NETLINK", "NF_CONNTRACK", "NETFILTER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CT_NETLINK", "NF_CONNTRACK", "NETFILTER" ], "series_id": "b036b43e-3c46-47cc-883d-97249dba4e5a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "expect_iter_name", "ctnetlink_del_expect" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "78445023439506ebd83b86d40b1e428a3b309d4a", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4cGVjdF9pdGVyX25hbWUmIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2RlbF9leHBlY3QmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBgcmN1X2RlcmVmZXJlbmNlKGV4cC1cdTAwM2VoZWxwZXIpYCB3aXRoIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGV4cC1cdTAwM2VoZWxwZXIsIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spKWAgaW4gYGV4cGVjdF9pdGVyX25hbWUoKWAuXG5cbmBleHBlY3RfaXRlcl9uYW1lKClgIGlzIGludm9rZWQgYXMgYW4gaXRlcmF0b3IgY2FsbGJhY2sgZnJvbSBgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KClgLCB3aGljaCBhY3F1aXJlcyBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYCB2aWEgYHNwaW5fbG9ja19iaCgpYC4gVXNpbmcgYHJjdV9kZXJlZmVyZW5jZSgpYCB3aXRob3V0IGFuIFJDVSByZWFkLXNpZGUgbG9jayBjYXVzZXMgbG9ja2RlcC9SQ1UgZGVidWdnaW5nIHdhcm5pbmdzIHdoZW4gYENPTkZJR19QUk9WRV9SQ1VgIGlzIGVuYWJsZWQuIFRoZSBjaGFuZ2UgdXBkYXRlcyB0aGUgUkNVIGRlcmVmZXJlbmNlIG1hY3JvIHRvIGluZGljYXRlIHRoYXQgdGhlIGFjY2VzcyBpcyBwcm90ZWN0ZWQgYnkgYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhbiBSQ1UvbG9ja2RlcCBhbm5vdGF0aW9uLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIGNoYW5nZSBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBtZW1vcnkgY29weWluZywgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXhwZWN0X2l0ZXJfbmFtZSgpIGluIG5ldGZpbHRlciYjMzk7cyBjdG5ldGxpbmsgaW1wbGVtZW50YXRpb24sIHJlcGxhY2luZyByY3VfZGVyZWZlcmVuY2UoKSB3aXRoIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoKSBhbmQgZW5mb3JjaW5nIGEgbG9ja2RlcCBhc3NlcnRpb24gY2hlY2tpbmcgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayBzb2NrZXRzIChDVEFfRVhQRUNUX0hFTFBfTkFNRSBpbiBjdG5ldGxpbmtfZGVsX2V4cGVjdCkgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gdGVzdCB0aGUgbmV3IGxvY2tpbmcgYXNzZXJ0aW9uIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmU2NmY0Y2RmOTI4ZTA4OTVmODBhMmI0MGE2MjQwOWZkOGEwODQwZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDAxOjM2OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuaW5kZXggNTc5YWRhMDYzYjFiYi4uNGU1ZDdjNzAxNDM2OCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5AQCAtMzM5Miw3ICYjNDM7MzM5Miw4IEBAIHN0YXRpYyBib29sIGV4cGVjdF9pdGVyX25hbWUoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdm9pZCAqZGF0YSlcbiBcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXI7XG4gXHRjb25zdCBjaGFyICpuYW1lID0gZGF0YTtcbiBcbi1cdGhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZShleHAtXHUwMDNlaGVscGVyKTtcbiYjNDM7XHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGV4cC1cdTAwM2VoZWxwZXIsXG4mIzQzO1x0XHRcdFx0XHQgICBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSk7XG4gXHRpZiAoIWhlbHBlcilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4cGVjdF9pdGVyX25hbWUmIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2RlbF9leHBlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXhwZWN0X2l0ZXJfbmFtZSgpIGluIG5ldGZpbHRlciYjMzk7cyBjdG5ldGxpbmsgaW1wbGVtZW50YXRpb24sIHJlcGxhY2luZyByY3VfZGVyZWZlcmVuY2UoKSB3aXRoIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoKSBhbmQgZW5mb3JjaW5nIGEgbG9ja2RlcCBhc3NlcnRpb24gY2hlY2tpbmcgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayBzb2NrZXRzIChDVEFfRVhQRUNUX0hFTFBfTkFNRSBpbiBjdG5ldGxpbmtfZGVsX2V4cGVjdCkgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gdGVzdCB0aGUgbmV3IGxvY2tpbmcgYXNzZXJ0aW9uIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmU2NmY0Y2RmOTI4ZTA4OTVmODBhMmI0MGE2MjQwOWZkOGEwODQwZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDEyIDAxOjM2OjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDU3OWFkYTA2M2IxYmIuLjRlNWQ3YzcwMTQzNjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTMzOTIsNyAmIzQzOzMzOTIsOCBAQCBzdGF0aWMgYm9vbCBleHBlY3RfaXRlcl9uYW1lKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHZvaWQgKmRhdGEpCiAJc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjsKIAljb25zdCBjaGFyICpuYW1lID0gZGF0YTsKIAotCWhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZShleHAtJmd0O2hlbHBlcik7CiYjNDM7CWhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZXhwLSZndDtoZWxwZXIsCiYjNDM7CQkJCQkgICBsb2NrZGVwX2lzX2hlbGQoJmFtcDtuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spKTsKIAlpZiAoIWhlbHBlcikKIAkJcmV0dXJuIGZhbHNlOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MDUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29ubnRyYWNrIEV4cGVjdCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY2AuIFRoZSBkaWZmIHNob3dzIGEgbW9kaWZpY2F0aW9uIGFyb3VuZCBsaW5lIDMzOTIuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgdXBkYXRpbmcgdGhlIGFjY2VzcyB0byBgZXhwLSZndDtoZWxwZXJgIHdpdGhpbiB0aGUgYGV4cGVjdF9pdGVyX25hbWVgIGZ1bmN0aW9uLiBUaGV5JiMzOTtyZSBhZGRpbmcgYHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWRgIHdpdGggYSBgbG9ja2RlcF9pc19oZWxkYCBjaGVjayBvbiBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYC4gVGhpcyBpcyBpbnRlcmVzdGluZy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgcHJvdGVjdGlvbiBjaGFuZ2UgZm9yIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgdXNhZ2UsIHdoaWNoIGlzbiYjMzk7dCBlbnRpcmVseSBzdXJwcmlzaW5nIGdpdmVuIHRoZSBuYXR1cmUgb2YgY29ubnRyYWNrLiBTcGVjaWZpY2FsbHksIHRoaXMgY2hhbmdlIHN1Z2dlc3RzIHRoYXQgYWNjZXNzaW5nIGBleHAtJmd0O2hlbHBlcmAgcmVxdWlyZXMgdGhlIGBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2tgIHRvIGJlIGhlbGQsIGVuc3VyaW5nIHRoZSBzYWZldHkgb2YgY29uY3VycmVudCBhY2Nlc3Mgd2hlbiBSQ1UgaXMgZW5hYmxlZC4KClRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZywgSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB0aGUgdXNhZ2Ugb2YgYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AuIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcHVsbCB1cCB0aGUgc291cmNlIGNvZGUgZm9yIHRoaXMgZmlsZSBhbmQgaW5zcGVjdCB0aGUgYXJlYSBhcm91bmQgdGhhdCBsaW5lLCBhbmQgdGhlIGRlZmluaXRpb24gb2YgdGhlIGxvY2suIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHRoZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoaXMgY2hhbmdlIGlzIGRlc2lnbmVkIHRvIGFkZHJlc3MuIFRoaXMgYXBwZWFycyB0byBiZSBhIGdvb2QtZmFpdGggYXR0ZW1wdCB0byBpbXByb3ZlIFJDVSBzYWZldHksIGJ1dCBJIHdvdWxkIHdhbnQgdG8gdmVyaWZ5IHRoZSBzcGVjaWZpYyBsb2NrIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwMTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM4MDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKTtcbjMzODE6XHRcbjMzODI6XHRcdGlmIChlcnIgXHUwMDNjPSAwKSB7XG4zMzgzOlx0XHRcdGtmcmVlX3NrYihza2IyKTtcbjMzODQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zMzg1Olx0XHR9XG4zMzg2Olx0XG4zMzg3Olx0XHRyZXR1cm4gbmZuZXRsaW5rX3VuaWNhc3Qoc2tiMiwgaW5mby1cdTAwM2VuZXQsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQpO1xuMzM4ODpcdH1cbjMzODk6XHRcbjMzOTA6XHRzdGF0aWMgYm9vbCBleHBlY3RfaXRlcl9uYW1lKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHZvaWQgKmRhdGEpXG4zMzkxOlx0e1xuMzM5MjpcdFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjtcbjMzOTM6XHRcdGNvbnN0IGNoYXIgKm5hbWUgPSBkYXRhO1xuMzM5NDpcdFxuMzM5NTpcdFx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChleHAtXHUwMDNlaGVscGVyLFxuMzM5NjpcdFx0XHRcdFx0XHQgICBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSk7XG4zMzk3Olx0XHRpZiAoIWhlbHBlcilcbjMzOTg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMzM5OTpcdFxuMzQwMDpcdFx0cmV0dXJuIHN0cmNtcChoZWxwZXItXHUwMDNlbmFtZSwgbmFtZSkgPT0gMDtcbjM0MDE6XHR9XG4zNDAyOlx0XG4zNDAzOlx0c3RhdGljIGJvb2wgZXhwZWN0X2l0ZXJfYWxsKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHZvaWQgKmRhdGEpXG4zNDA0Olx0e1xuMzQwNTpcdFx0cmV0dXJuIHRydWU7XG4zNDA2Olx0fVxuMzQwNzpcdFxuMzQwODpcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX2RlbF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjM0MDk6XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4zNDEwOlx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pXG4zNDExOlx0e1xuMzQxMjpcdFx0dV9pbnQ4X3QgdTMgPSBpbmZvLVx1MDAzZW5mbXNnLVx1MDAzZW5mZ2VuX2ZhbWlseTtcbjM0MTM6XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7XG4zNDE0Olx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlO1xuMzQxNTpcdFx0c3RydWN0IG5mX2Nvbm50cmFja196b25lIHpvbmU7XG4zNDE2Olx0XHRpbnQgZXJyO1xuMzQxNzpcdFxuMzQxODpcdFx0aWYgKGNkYVtDVEFfRVhQRUNUX1RVUExFXSkge1xuMzQxOTpcdFx0XHQvKiBkZWxldGUgYSBzaW5nbGUgZXhwZWN0IGJ5IHR1cGxlICovXG4zNDIwOlx0XHRcdGVyciA9IGN0bmV0bGlua19wYXJzZV96b25lKGNkYVtDVEFfRVhQRUNUX1pPTkVdLCBcdTAwMjZ6b25lKTtcbjM0MjE6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjM0MjI6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMzQyMzpcdFxuMzQyNDpcdFx0XHRlcnIgPSBjdG5ldGxpbmtfcGFyc2VfdHVwbGUoY2RhLCBcdTAwMjZ0dXBsZSwgQ1RBX0VYUEVDVF9UVVBMRSxcbjM0MjU6XHRcdFx0XHRcdFx0ICAgIHUzLCBOVUxMKTtcbjM0MjY6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjM0Mjc6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMzQyODpcdFxuMzQyOTpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzI3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqVHJhY2luZyB0aGUgQ2FsbGVyIG9mIGBleHBlY3RfaXRlcl9uYW1lYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyBgZXhwZWN0X2l0ZXJfbmFtZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgYmVpbmcgdXNlZD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFNvLCBJIG5lZWQgdG8gc3RhcnQgYnkgdHJhY2luZyBpdHMgY2FsbCBzaXRlcy4gQSBxdWljayBzZWFyY2gsIGEgZ3JlcCwgb3IgbWF5YmUgZXZlbiBteSBJREUmIzM5O3MgJiMzNDtmaW5kIHVzYWdlcyYjMzQ7IGZlYXR1cmUgc2hvdWxkIGdpdmUgbWUgYSBsaXN0IG9mIGFsbCB0aGUgcGxhY2VzIGBleHBlY3RfaXRlcl9uYW1lYCBpcyBpbnZva2VkLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBwaWVjZSB0b2dldGhlciB0aGUgcHVycG9zZSBhbmQgaW5wdXRzIG9mIGBleHBlY3RfaXRlcl9uYW1lYC4gSXMgaXQgYSBjb3JlIHV0aWxpdHkgZnVuY3Rpb24sIG9yIGlzIGl0IHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBtb2R1bGUgb3IgY2xhc3M/IFVuZGVyc3RhbmRpbmcgaXRzIGNhbGxpbmcgY29udGV4dHMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGJlaGF2aW9yLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGluaXRpYWwgY2FsbCBsb29rcyBsaWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4cGVjdF9pdGVyX25hbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzMxMT1zdGF0aWMgaW50IGN0bmV0bGlua19nZXRfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTMzODktXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MzM5MDpzdGF0aWMgYm9vbCBleHBlY3RfaXRlcl9uYW1lKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHZvaWQgKmRhdGEpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzM5MS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM0MDg9c3RhdGljIGludCBjdG5ldGxpbmtfZGVsX2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNDU3LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM0NTg6XHRcdG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldChpbmZvLVx1MDAzZW5ldCwgZXhwZWN0X2l0ZXJfbmFtZSwgbmFtZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNDU5LVx0XHRcdFx0XHQgTkVUTElOS19DQihza2IpLnBvcnRpZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODQzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgQ29udGV4dDogYGN0bmV0bGlua19kZWxfZXhwZWN0YCBhbmQgYG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldGAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBjdG5ldGxpbmtfZGVsX2V4cGVjdGAgYW5kIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGFuZCB3aGF0IHRoZXkmIzM5O3JlIGRvaW5nIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLiBXaGF0IHRyaWdnZXJzIHRoZSBuZWVkIHRvIGRlbGV0ZSBhbiBleHBlY3RhdGlvbj8gSXMgYGN0bmV0bGlua19kZWxfZXhwZWN0YCBoYW5kbGluZyBhIHVzZXItc3BhY2UgcmVxdWVzdCB2aWEgbmV0bGluaywgbWVhbmluZyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGV4cGxpY2l0IHJlbW92YWwgb2YgYSB0cmFja2VkIGV4cGVjdGF0aW9uPyBJZiBzbywgd2hhdCBhcmUgdGhlIHVzZSBjYXNlcz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSB0aW1lb3V0LCBvciBhIHNwZWNpZmljLCBpbnRlbnRpb25hbCBkZWxldGlvbiByZXF1ZXN0ZWQgYnkgc29tZSBwcm9jZXNzPwoKTmV4dCwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGl0ZXJhdGlvbiBpdHNlbGYgd29ya3MuIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHRyYXZlcnNhbCBvZiBhIGxpc3QsIHRhYmxlLCBvciBkYXRhIHN0cnVjdHVyZSBob2xkaW5nIHRoZSBleHBlY3RhdGlvbnMgZm9yIGEgcGFydGljdWxhciBuZXR3b3JrIG5hbWVzcGFjZS4gSXMgdGhpcyBpdGVyYXRpb24gcGFydCBvZiBhIGNsZWFudXAgcHJvY2VzcywgcGVyaGFwcyBjaGVja2luZyBmb3Igc3RhbGUgZXhwZWN0YXRpb25zIG9yIGhhbmRsaW5nIHNvbWUga2luZCBvZiBleHBpcnk/IE9yIGlzIGl0IG1vcmUgZHluYW1pYywgbWF5YmUgdXNlZCBmb3Igc2VhcmNoaW5nIGFuZCBsb2NhdGluZyBhIHNwZWNpZmljIGV4cGVjdGF0aW9uPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRhdGEgc3RydWN0dXJlIGlzIGJlaW5nIGl0ZXJhdGVkIG92ZXIgYW5kIGhvdyBpdCBpcyBtYW5hZ2VkLgoKTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBpbnRlcm5hbHMgaXMgdGhhdCBgZXhwZWN0YXRpb25zYCBhcmUgYSBrZXkgcGFydCBvZiBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlIGhhbmRsZXMgcmVsYXRlZCBjb25uZWN0aW9ucywgc3VjaCBhcyB3aGVuIG9uZSBjb25uZWN0aW9uIG9wZW5zIGFub3RoZXIuIFRoZSBjb25uZWN0aW9uIGlzICYjMzQ7ZXhwZWN0ZWQmIzM0Oy4gVGhlcmVmb3JlLCBgY3RuZXRsaW5rX2RlbF9leHBlY3RgIGlzIGxpa2VseSBpbnZvbHZlZCBpbiBjbGVhbmluZyB1cCB0aGVzZSB0cmFja2VkIGV4cGVjdGF0aW9ucy4gSXQgY291bGQgYWxzbyBkZWFsIHdpdGggcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBpc3N1ZXMgdGhhdCByZXF1aXJlIHRoZSBleHBlY3RhdGlvbiB0byBiZSBkZWxldGVkLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY3Jvc3MtcmVmZXJlbmNlcyB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgY2FsbGluZyBwYXRocy4gV2hhdCBldmVudHMgb3IgY29uZGl0aW9ucyBsZWFkIHRvIHRoZSBpbnZvY2F0aW9uIG9mIGBjdG5ldGxpbmtfZGVsX2V4cGVjdGA/IFRoZW4sIEkmIzM5O2xsIGFuYWx5emUgaG93IGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgIGlzIHVzZWQgd2l0aGluIHRoYXQgY29udGV4dC4gRnJvbSB0aGVyZSwgSSBjYW4gcGlucG9pbnQgd2hhdCB0aGUgcHVycG9zZSBvZiB0aGUgaW50ZXJhY3Rpb24gaXMuIEJ5IGNvbm5lY3RpbmcgdGhlIGRvdHMgYmV0d2VlbiB0aG9zZSBmdW5jdGlvbnMsIEkgc2hvdWxkIGJlIGFibGUgdG8gY2xhcmlmeSB0aGUgbW9kdWxlJiMzOTtzIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDMwOlx0XG4zNDMxOlx0XHRcdC8qIGJ1bXAgdXNhZ2UgY291bnQgdG8gMiAqL1xuMzQzMjpcdFx0XHRleHAgPSBuZl9jdF9leHBlY3RfZmluZF9nZXQoaW5mby1cdTAwM2VuZXQsIFx1MDAyNnpvbmUsIFx1MDAyNnR1cGxlKTtcbjM0MzM6XHRcdFx0aWYgKCFleHApIHtcbjM0MzQ6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xuMzQzNTpcdFx0XHRcdHJldHVybiAtRU5PRU5UO1xuMzQzNjpcdFx0XHR9XG4zNDM3Olx0XG4zNDM4Olx0XHRcdGlmIChjZGFbQ1RBX0VYUEVDVF9JRF0pIHtcbjM0Mzk6XHRcdFx0XHRfX2JlMzIgaWQgPSBubGFfZ2V0X2JlMzIoY2RhW0NUQV9FWFBFQ1RfSURdKTtcbjM0NDA6XHRcbjM0NDE6XHRcdFx0XHRpZiAoaWQgIT0gbmZfZXhwZWN0X2dldF9pZChleHApKSB7XG4zNDQyOlx0XHRcdFx0XHRuZl9jdF9leHBlY3RfcHV0KGV4cCk7XG4zNDQzOlx0XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xuMzQ0NDpcdFx0XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4zNDQ1Olx0XHRcdFx0fVxuMzQ0NjpcdFx0XHR9XG4zNDQ3Olx0XG4zNDQ4Olx0XHRcdC8qIGFmdGVyIGxpc3QgcmVtb3ZhbCwgdXNhZ2UgY291bnQgPT0gMSAqL1xuMzQ0OTpcdFx0XHRuZl9jdF91bmxpbmtfZXhwZWN0X3JlcG9ydChleHAsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQsXG4zNDUwOlx0XHRcdFx0XHRcdCAgIG5sbXNnX3JlcG9ydChpbmZvLVx1MDAzZW5saCkpO1xuMzQ1MTpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xuMzQ1MjpcdFx0XHQvKiBoYXZlIHRvIHB1dCB3aGF0IHdlICYjMzk7Z2V0JiMzOTsgYWJvdmUuXG4zNDUzOlx0XHRcdCAqIGFmdGVyIHRoaXMgbGluZSB1c2FnZSBjb3VudCA9PSAwICovXG4zNDU0Olx0XHRcdG5mX2N0X2V4cGVjdF9wdXQoZXhwKTtcbjM0NTU6XHRcdH0gZWxzZSBpZiAoY2RhW0NUQV9FWFBFQ1RfSEVMUF9OQU1FXSkge1xuMzQ1NjpcdFx0XHRjaGFyICpuYW1lID0gbmxhX2RhdGEoY2RhW0NUQV9FWFBFQ1RfSEVMUF9OQU1FXSk7XG4zNDU3Olx0XG4zNDU4Olx0XHRcdG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldChpbmZvLVx1MDAzZW5ldCwgZXhwZWN0X2l0ZXJfbmFtZSwgbmFtZSxcbjM0NTk6XHRcdFx0XHRcdFx0IE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQsXG4zNDYwOlx0XHRcdFx0XHRcdCBubG1zZ19yZXBvcnQoaW5mby1cdTAwM2VubGgpKTtcbjM0NjE6XHRcdH0gZWxzZSB7XG4zNDYyOlx0XHRcdC8qIFRoaXMgYmFzaWNhbGx5IG1lYW5zIHdlIGhhdmUgdG8gZmx1c2ggZXZlcnl0aGluZyovXG4zNDYzOlx0XHRcdG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldChpbmZvLVx1MDAzZW5ldCwgZXhwZWN0X2l0ZXJfYWxsLCBOVUxMLFxuMzQ2NDpcdFx0XHRcdFx0XHQgTkVUTElOS19DQihza2IpLnBvcnRpZCxcbjM0NjU6XHRcdFx0XHRcdFx0IG5sbXNnX3JlcG9ydChpbmZvLVx1MDAzZW5saCkpO1xuMzQ2NjpcdFx0fVxuMzQ2NzpcdFxuMzQ2ODpcdFx0cmV0dXJuIDA7XG4zNDY5Olx0fVxuMzQ3MDpcdHN0YXRpYyBpbnRcbjM0NzE6XHRjdG5ldGxpbmtfY2hhbmdlX2V4cGVjdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqeCxcbjM0NzI6XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pXG4zNDczOlx0e1xuMzQ3NDpcdFx0aWYgKGNkYVtDVEFfRVhQRUNUX1RJTUVPVVRdKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgKioKCk9rYXksIHRpbWUgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0YCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gW21lbnRpb24gc3BlY2lmaWMgYXJlYXMgb3IgYXNwZWN0cyB5b3Ugd2FudCB0byBpbnZlc3RpZ2F0ZSBiYXNlZCBvbiB5b3VyIGV4cGVydGlzZSwgZS5nLiwgaG93IHRoZSBpdGVyYXRpb24gaXMgaGFuZGxlZCwgYW55IHBvdGVudGlhbCBsb2NraW5nIGlzc3VlcywgdGhlIGludGVyYWN0aW9uIHdpdGggY29ubmVjdGlvbiB0cmFja2luZyBlbnRyaWVzLCB3aGV0aGVyIHRoZXJlJiMzOTtzIGFueSBjbGV2ZXJuZXNzIHdpdGggaGFzaCBidWNrZXRzLCBvciBpZiB0aGUgY29kZSBsb29rcyBlbGVnYW50IGFuZCBlZmZpY2llbnRdLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgW01lbnRpb24gd2hhdCB5b3UgYXJlIGV4cGVjdGluZyB0byBzZWUuIGUuZy4gaG93IHRoZSBleHBlY3QgdGFibGUgaXMgd2Fsa2VkLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgdXRpbGl6ZWQsIGFuZCB3aGF0IHNvcnQgb2YgbG9ja2luZyBpcyBiZWluZyBkb25lXS4gSG9wZWZ1bGx5LCBpdCYjMzk7cyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGRvZXNuJiMzOTt0IGhhdmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcmFjZSBjb25kaXRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBncmFzcCBob3cgaXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZXhwZWN0YXRpb25zLCBob3cgaXQgaGFuZGxlcyBjb25jdXJyZW50IGFjY2VzcywgYW5kIHdoYXQgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYXJlLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgY29ubmVjdGlvbiB0cmFja2luZywgYW5kIGFueSBpbmVmZmljaWVuY2llcyBoZXJlIGNvdWxkIGhhdmUgYSBzaWduaWZpY2FudCBpbXBhY3Qgb24gb3ZlcmFsbCBuZXR3b3JrIHBlcmZvcm1hbmNlLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIGl0JiMzOTtzIG9wdGltaXplZCBmb3IgY29tbW9uIHVzZSBjYXNlcyBvciBpZiB0aGVyZSYjMzk7cyByb29tIGZvciBpbXByb3ZlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM9NjEyPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9pdGVyYXRlX2Rlc3Ryb3kpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtNjEzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6NjE0OnZvaWQgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTYxNS1cdFx0XHQgICAgICBib29sICgqaXRlcikoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmUsIHZvaWQgKmRhdGEpLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTYzOS19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYzo2NDA6RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTY0MS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzQwOD1zdGF0aWMgaW50IGN0bmV0bGlua19kZWxfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0NTctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MzQ1ODpcdFx0bmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KGluZm8tXHUwMDNlbmV0LCBleHBlY3RfaXRlcl9uYW1lLCBuYW1lLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0NTktXHRcdFx0XHRcdCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNDYyLVx0XHQvKiBUaGlzIGJhc2ljYWxseSBtZWFucyB3ZSBoYXZlIHRvIGZsdXNoIGV2ZXJ5dGhpbmcqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM0NjM6XHRcdG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldChpbmZvLVx1MDAzZW5ldCwgZXhwZWN0X2l0ZXJfYWxsLCBOVUxMLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0NjQtXHRcdFx0XHRcdCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTA2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldGAuIEl0JiMzOTtzIGxvY2F0ZWQgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCBpdGVyYXRpbmcgb3ZlciBvciBtYW5hZ2luZyBleHBlY3RlZCBjb25uZWN0aW9ucyB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3lzdGVtLiBHaXZlbiB0aGUgYGV4cGVjdGAgcHJlZml4LCBJJiMzOTttIGFudGljaXBhdGluZyB0aGlzIGlzIGEgY3JpdGljYWwgcGllY2UgaW4gaGFuZGxpbmcgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyaWVzIHRoYXQgYXJlICpleHBlY3RlZCosIGJ1dCBub3QgeWV0IGZ1bGx5IGVzdGFibGlzaGVkLiBUaGluZ3MgbGlrZSBwYXNzaXZlIEZUUCBkYXRhIGNvbm5lY3Rpb25zLCBOQVQgdHJhdmVyc2FsLCBvciBwZXJoYXBzIGV2ZW4gQUxHLXJlbGF0ZWQgY29ubmVjdGlvbiBzZXR1cC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGUgaW1wbGVtZW50YXRpb24gaW4gdGhlIGBuZXRmaWx0ZXJgIHN1YnN5c3RlbSBoYXMgdGhlIHVzdWFsIGltcGxpY2F0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBsb2NraW5nIHN0cnVjdHVyZXMgdGhhdCBhcmUgbGlrZWx5IGludm9sdmVkIGFuZCBob3cgdGhleSBpbnRlcmFjdCB0byBtYWludGFpbiB0aGUgaW50ZWdyaXR5IG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHRhYmxlLiBNeSBleHBlcnRpc2UgZ3VpZGVzIG1lIHRvIGV4cGVjdCBpc3N1ZXMgcmVsYXRpbmcgdG8gcG9zc2libGUgcmFjZSBjb25kaXRpb25zIGhlcmUsIHBhcnRpY3VsYXJseSBpZiB0aGUgY29kZSYjMzk7cyBkZWFsaW5nIHdpdGggbXVsdGlwbGUgdGhyZWFkcyBvciBjb3JlcyB0cnlpbmcgdG8gbWFuaXB1bGF0ZSB0aGUgc2FtZSBleHBlY3RlZCBlbnRyeS4gSSYjMzk7bGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGxvY2sgb3JkZXIgaXNzdWVzLiBJIHdpbGwgYWxzbyBiZSBwcmVwYXJlZCB0byBvYnNlcnZlIGhvdyB0aGlzIHRpZXMgaW50byB0aGUgcmVzdCBvZiB0aGUgbmV0ZmlsdGVyIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjEwOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xuIDYxMTpcdH1cbiA2MTI6XHRFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfaXRlcmF0ZV9kZXN0cm95KTtcbiA2MTM6XHRcbiA2MTQ6XHR2b2lkIG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldChzdHJ1Y3QgbmV0ICpuZXQsXG4gNjE1Olx0XHRcdFx0ICAgICAgYm9vbCAoKml0ZXIpKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICplLCB2b2lkICpkYXRhKSxcbiA2MTY6XHRcdFx0XHQgICAgICB2b2lkICpkYXRhLFxuIDYxNzpcdFx0XHRcdCAgICAgIHUzMiBwb3J0aWQsIGludCByZXBvcnQpXG4gNjE4Olx0e1xuIDYxOTpcdFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDtcbiA2MjA6XHRcdGNvbnN0IHN0cnVjdCBobGlzdF9ub2RlICpuZXh0O1xuIDYyMTpcdFx0dW5zaWduZWQgaW50IGk7XG4gNjIyOlx0XG4gNjIzOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKTtcbiA2MjQ6XHRcbiA2MjU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5mX2N0X2V4cGVjdF9oc2l6ZTsgaSYjNDM7JiM0MzspIHtcbiA2MjY6XHRcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShleHAsIG5leHQsXG4gNjI3Olx0XHRcdFx0XHRcdCAgXHUwMDI2bmZfY3RfZXhwZWN0X2hhc2hbaV0sXG4gNjI4Olx0XHRcdFx0XHRcdCAgaG5vZGUpIHtcbiA2Mjk6XHRcbiA2MzA6XHRcdFx0XHRpZiAoIW5ldF9lcShuZl9jdF9leHBfbmV0KGV4cCksIG5ldCkpXG4gNjMxOlx0XHRcdFx0XHRjb250aW51ZTtcbiA2MzI6XHRcbiA2MzM6XHRcdFx0XHRpZiAoaXRlcihleHAsIGRhdGEpKVxuIDYzNDpcdFx0XHRcdFx0bmZfY3RfdW5saW5rX2V4cGVjdF9yZXBvcnQoZXhwLCBwb3J0aWQsIHJlcG9ydCk7XG4gNjM1Olx0XHRcdH1cbiA2MzY6XHRcdH1cbiA2Mzc6XHRcbiA2Mzg6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jayk7XG4gNjM5Olx0fVxuIDY0MDpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldCk7XG4gNjQxOlx0XG4gNjQyOlx0I2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ0ZTXG4gNjQzOlx0c3RydWN0IGN0X2V4cGVjdF9pdGVyX3N0YXRlIHtcbiA2NDQ6XHRcdHN0cnVjdCBzZXFfbmV0X3ByaXZhdGUgcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDE6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgwMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgQ29uY3VycmVuY3kgSXNzdWUgaW4gbmV0ZmlsdGVyL25mX2Nvbm50cmFjayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0YCBmdW5jdGlvbiwgYW5kIGl0IGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbiBiZWNhdXNlIGl0IGFjcXVpcmVzIGBzcGluX2xvY2tfYmgoJmFtcDtuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spYC4gTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0IGlzIHRoZSBsaW5lIGBoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoZXhwLSZndDtoZWxwZXIpO2AgcmlnaHQgYmVmb3JlIHRoYXQuIEkgaW1tZWRpYXRlbHkgcmVhbGl6ZSB0aGlzIGlzIGEgcG90ZW50aWFsIGxvY2tkZXAgcHJvYmxlbS4KCmByY3VfZGVyZWZlcmVuY2VgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgdW5kZXIgYW4gUkNVIHJlYWQgbG9jaywgYXMgdmVyaWZpZWQgYnkgbG9ja2RlcCBhbmQgUkNVIGRlYnVnZ2luZyAoUFJPVkVfUkNVKS4gVGhlIGZhY3QgdGhhdCB0aGUgY29kZSBpcyB0YWtpbmcgYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AgaGVyZSwgYW5kIG5vdCBuZWNlc3NhcmlseSBhbiBSQ1UgcmVhZCBsb2NrLCByYWlzZXMgYSByZWQgZmxhZy4gU28sIHRoZSBmaXgsIG9yIG1vcmUgYWNjdXJhdGVseSB0aGUgY2hhbmdlIHRvIHRoZSBsb2NrZGVwIGNoZWNrLCBzZWVtcyBsaWtlIGl0IHNob3VsZCBiZSBgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChleHAtJmd0O2hlbHBlciwgbG9ja2RlcF9pc19oZWxkKCZhbXA7bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSk7YCB3aGljaCBpcyBnb29kLgoKQnV0LCBoYW5nIG9u4oCmIEkgbmVlZCB0byBjb25zaWRlciB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMuIFRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW4gYXNzZXJ0aW9uIOKAkyBlc3NlbnRpYWxseSBhIG5ldyBjaGVjaywgd2hpY2ggaXMgYSBiaWcgZGVhbCBhbmQgc2hvdWxkIGJlIGZ1enplZCEgU2VjdGlvbiAxIGFuZCAzIG9mIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIGFyZSBzY3JlYW1pbmcgYXQgbWU6ICpORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRCouIEJ5IHVzaW5nIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkYCB3aXRoIHRoYXQgYGxvY2tkZXBfaXNfaGVsZGAgYXNzZXJ0aW9uLCB3ZSYjMzk7cmUgY2hhbmdpbmcgdGhlIHZhbGlkYXRpb24uIFNwZWNpZmljYWxseSwgYHJjdV9kZXJlZmVyZW5jZWAgd2FzIG9yaWdpbmFsbHkgYXNzZXJ0aW5nIGByY3VfcmVhZF9sb2NrX2hlbGQoKWAsIGFuZCBub3cgaXQmIzM5O3MgYXNzZXJ0aW5nIGBsb2NrZGVwX2lzX2hlbGQoJmFtcDtuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spYCEKCkFuZCB0aGlzIGlzIG5vdCBzb21lIG9ic2N1cmUgY29ybmVyIGNhc2UuIFRoZSBjb2RlIGlzIHdpdGhpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgb2YgbmV0ZmlsdGVyJiMzOTtzIG5ldGxpbmsgaW50ZXJmYWNlLiBJdCYjMzk7cyB0b3RhbGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIG5ldGZpbHRlciBuZXRsaW5rIHNvY2tldHMgKGBORk5MX1NVQlNZU19DVE5FVExJTktfRVhQYCwgYElQQ1ROTF9NU0dfRVhQX0RFTEVURWApLiBUaGlzIGlzIGhpZ2gtdmFsdWUsIHVzZXItYWNjZXNzaWJsZSBjb2RlISBUaGUgcG90ZW50aWFsIGZvciB1bnVzdWFsIG9wZXJhdGlvbiBzZXF1ZW5jZXMgdGhhdCB0cmlnZ2VyIHRoZSBhc3NlcnRpb24gaXMgdmVyeSByZWFsLiBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGZpbGUgdG9vIHRvIGVuc3VyZSB0aGUgZnV6emluZyBpcyBhY3R1YWxseSByZWxldmFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX25ldGxpbmtcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0zND1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLKSAmIzQzOz0gbmZfY29ubnRyYWNrLm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTM2LSMgbmV0bGluayBpbnRlcmZhY2UgZm9yIG5mX2Nvbm50cmFja1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfTkZfQ1RfTkVUTElOSykgJiM0Mzs9IG5mX2Nvbm50cmFja19uZXRsaW5rLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfVElNRU9VVCkgJiM0Mzs9IG5mbmV0bGlua19jdHRpbWVvdXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBORl9DVF9ORVRMSU5LYCBpbiBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgbmV0bGluayBpbnRlcmFjdHMgd2l0aCBjb25uZWN0aW9uIHRyYWNraW5nLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIGNoZWNrIHRoZSBLY29uZmlnIGVudHJ5IGZvciBgTkZfQ1RfTkVUTElOS2AuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGF0IG9wdGlvbiBjb250cm9scyBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqIGl0JiMzOTtzIHJlbGV2YW50IGluIHRoZSBjb250ZXh0IEkmIzM5O20gY3VycmVudGx5IHdvcmtpbmcgaW4uIElzIHRoaXMgZW5hYmxpbmcgbmV0bGluayBub3RpZmljYXRpb25zIGZvciBjb25uZWN0aW9uIGV2ZW50cz8gRG9lcyBpdCBleHBvc2UgY29ubmVjdGlvbiB0cmFja2luZyBpbmZvcm1hdGlvbiB0byB1c2Vyc3BhY2UgYXBwbGljYXRpb25zLCBhbmQgaWYgc28sIHdoYXQga2luZD8gQXJlIHRoZXJlIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEkgbmVlZCB0byBjbGFyaWZ5IHdoZXRoZXIgdGhpcyBpcyB0aGUga2V5IHRvIG15IGN1cnJlbnQgaXNzdWUgb3IganVzdCBhIHBvdGVudGlhbCBkaXN0cmFjdGlvbi4gUmlnaHQsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9DVF9ORVRMSU5LXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTM1NT1jb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzY1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM2Njpjb25maWcgTkZfQ1RfTkVUTElOS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTM2Ny1cdHRyaXN0YXRlICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNDkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBLY29uZmlnIGVudHJ5OgoKKipBbmFseXppbmcgYE5GX0NUX05FVExJTktgIGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgKioKCk9rYXksIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBLY29uZmlnYCBmb3IgYE5GX0NUX05FVExJTktgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldGxpbmstcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhlIE5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gcmVhZCB0aGUgZW50cnkgY2FyZWZ1bGx5IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGRlcGVuZGVuY2llcy4gV2hhdCBkb2VzIGl0IGFjdHVhbGx5ICpkbyo/IElzIGl0IGVuYWJsaW5nIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHksIGRlYnVnZ2luZyBmZWF0dXJlcywgb3IgaXMgaXQgbWVyZWx5IHNldHRpbmcgdGhlIHN0YWdlIGZvciBzb21ldGhpbmcgZWxzZT8gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgaGVscGAgdGV4dCDigJMgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBleHBsYW5hdGlvbiBpcy4KCkkmIzM5O2xsIGxvb2sgYXQgdGhlIGRlcGVuZGVuY2llcy4gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzIHRoYXQgKm11c3QqIGJlIGVuYWJsZWQgZm9yIGBORl9DVF9ORVRMSU5LYCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IFdoYXQgb3RoZXIgcmVsYXRlZCBvcHRpb25zIGFyZSBpbnZvbHZlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgY29uZmlnIG9wdGlvbiBhbmQgb3RoZXIgTmV0ZmlsdGVyIGNvbXBvbmVudHMsIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYnJvYWRlciBuZXR3b3JraW5nIHN0YWNrLiBJJiMzOTtsbCBtZW50YWxseSBtYXAgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgb3B0aW9uLgoKRmluYWxseSwgSSYjMzk7bGwgY29uc2lkZXIgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24ga2VybmVsIHNpemUsIHBlcmZvcm1hbmNlLCBhbmQgc2VjdXJpdHkuIFdoYXQgYXJlIHRoZSB0cmFkZS1vZmZzPyBEb2VzIGVuYWJsaW5nIGl0IGludHJvZHVjZSBhbnkga25vd24gdnVsbmVyYWJpbGl0aWVzPyBJcyBpdCBhIGNvcmUgZmVhdHVyZSwgYSBkZWJ1Z2dpbmcgYWlkLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gQWZ0ZXIgYW5hbHl6aW5nIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIE5ldGZpbHRlciBlY29zeXN0ZW0gYW5kIGRldGVybWluaW5nIGl0cyBwdXJwb3NlLCBJIGNhbiBwcm9wZXJseSB1bmRlcnN0YW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgcGxhY2UgaW4gdGhlIHByb2plY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjU6XHRcbiAzNjY6XHRjb25maWcgTkZfQ1RfTkVUTElOS1xuIDM2NzpcdFx0dHJpc3RhdGUgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIG5ldGxpbmsgaW50ZXJmYWNlJiMzOTtcbiAzNjg6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuIDM2OTpcdFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXG4gMzcwOlx0XHRoZWxwXG4gMzcxOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgYSBuZXRsaW5rLWJhc2VkIHVzZXJzcGFjZSBpbnRlcmZhY2VcbiAzNzI6XHRcbiAzNzM6XHRjb25maWcgTkZfQ1RfTkVUTElOS19USU1FT1VUXG4gMzc0Olx0XHR0cmlzdGF0ZSAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQgdHVuaW5nIHZpYSBOZXRsaW5rJiMzOTtcbiAzNzU6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuIDM3NjpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAzNzc6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLX1RJTUVPVVRcbiAzNzg6XHRcdGhlbHBcbiAzNzk6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBjb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXRcbiAzODA6XHRcdCAgZmluZS1ncmFpbiB0dW5pbmcuIFRoaXMgYWxsb3dzIHlvdSB0byBhdHRhY2ggc3BlY2lmaWMgdGltZW91dFxuIDM4MTpcdFx0ICBwb2xpY2llcyB0byBmbG93cywgaW5zdGVhZCBvZiB1c2luZyB0aGUgZ2xvYmFsIHRpbWVvdXQgcG9saWN5LlxuIDM4MjpcdFxuIDM4MzpcdFx0ICBJZiB1bnN1cmUsIHNheSBgTiYjMzk7LlxuIDM4NDpcdFxuIDM4NTpcdGNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxuIDM4NjpcdFx0dHJpc3RhdGUgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgaW4gdXNlci1zcGFjZSB2aWEgTmV0bGluayYjMzk7XG4gMzg3Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAzODg6XHRcdGRlcGVuZHMgb24gTkZfQ1RfTkVUTElOS1xuIDM4OTpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19RVUVVRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTg5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIE5GXF9DVFxfTkVUTElOSyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGBORl9DVF9ORVRMSU5LYCBpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yayByZWxpZXMgdXBvbi4gTXkgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIGRlcGVuZGVuY2llcyBhcmUgdXN1YWxseSBkZWZpbmVkLiBJIGtub3cgaXQmIzM5O3MgbG9jYXRlZCBpbiBgbmV0L25ldGZpbHRlci9gLCBzbyBJJiMzOTtsbCBzdGFydCBieSBsb29raW5nIGF0IHRoYXQuIE5vdywgSSB2YWd1ZWx5IHJlY2FsbCB0aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlIHR5cGljYWxseSBsaXN0ZWQgbmVhciB0aGUgcmVsZXZhbnQgb3B0aW9uJiMzOTtzIGRlZmluaXRpb24sIGFuZCB0aGF0IGlzIHVzdWFsbHkgd2VsbCBhYm92ZSB0aGUgbGluZSB3aGVyZSBpdCBpcyBkZWZpbmVkLiBTbywgbGV0JiMzOTtzIHN0YXJ0IGFyb3VuZCBsaW5lIDM2NSwgYXMgdGhlIHByb21wdCBzdWdnZXN0ZWQsIGFuZCB3b3JrIG91ciB3YXkgdXB3YXJkcyB1bnRpbCBJIGZpbmQgdGhlIGluZm9ybWF0aW9uIEkgbmVlZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBvciBzaW1pbGFyIGNvbmZpZyBvcHRpb25zIHRoYXQgcG9pbnQgdG8gd2hhdCBgTkZfQ1RfTkVUTElOS2AgcmVxdWlyZXMgdG8gYmUgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51IFwmIzM0O0NvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIE5FVEZJTFRFUl9JTkdSRVNTXG4gICA2Olx0XHRib29sIFwmIzM0O05ldGZpbHRlciBpbmdyZXNzIHN1cHBvcnRcJiMzNDtcbiAgIDc6XHRcdGRlZmF1bHQgeVxuICAgODpcdFx0c2VsZWN0IE5FVF9JTkdSRVNTXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFRoaXMgYWxsb3dzIHlvdSB0byBjbGFzc2lmeSBwYWNrZXRzIGZyb20gaW5ncmVzcyB1c2luZyB0aGUgTmV0ZmlsdGVyXG4gIDExOlx0XHQgIGluZnJhc3RydWN0dXJlLlxuICAxMjpcdFxuICAxMzpcdGNvbmZpZyBORVRGSUxURVJfRUdSRVNTXG4gIDE0Olx0XHRib29sIFwmIzM0O05ldGZpbHRlciBlZ3Jlc3Mgc3VwcG9ydFwmIzM0O1xuICAxNTpcdFx0ZGVmYXVsdCB5XG4gIDE2Olx0XHRzZWxlY3QgTkVUX0VHUkVTU1xuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gY2xhc3NpZnkgcGFja2V0cyBiZWZvcmUgdHJhbnNtaXNzaW9uIHVzaW5nIHRoZVxuICAxOTpcdFx0ICBOZXRmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUuXG4gIDIwOlx0XG4gIDIxOlx0Y29uZmlnIE5FVEZJTFRFUl9TS0lQX0VHUkVTU1xuICAyMjpcdFx0ZGVmX2Jvb2wgTkVURklMVEVSX0VHUkVTUyBcdTAwMjZcdTAwMjYgKE5FVF9DTFNfQUNUIHx8IElGQilcbiAgMjM6XHRcbiAgMjQ6XHRjb25maWcgTkVURklMVEVSX05FVExJTktcbiAgMjU6XHRcdGJvb2xcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcbiAgMjg6XHRcdGJvb2xcbiAgMjk6XHRcbiAgMzA6XHRjb25maWcgTkVURklMVEVSX0ZBTUlMWV9BUlBcbiAgMzE6XHRcdGJvb2xcbiAgMzI6XHRcbiAgMzM6XHRjb25maWcgTkVURklMVEVSX0JQRl9MSU5LXG4gIDM0Olx0XHRkZWZfYm9vbCBCUEZfU1lTQ0FMTFxuICAzNTpcdFxuICAzNjpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXG4gIDM3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgYmFzZSBob29rIGR1bXAgc3VwcG9ydFwmIzM0O1xuICAzODpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAgMzk6XHRcdGRlcGVuZHMgb24gTkZfVEFCTEVTXG4gIDQwOlx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDE6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2OTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyB0aGUgQ29ubmVjdGlvbiBUcmFja2luZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoZSBuZXR3b3JrIGZpbHRlcmluZyBjb25maWd1cmF0aW9uIHRvIHNlZSBpZiBgTkZfQ09OTlRSQUNLYCBpcyBkZWZpbmVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaGVhZGluZyBvdmVyIHRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIGNvbmZpcm0gaXRzIHN0YXR1cy4gS25vd2luZyBpZiBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGVuYWJsZWQgYXQgdGhlIGtlcm5lbCBsZXZlbCBpcyB0aGUgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIHN0YXRlZnVsIHBhY2tldCBpbnNwZWN0aW9uIGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggb3RoZXIgTmV0ZmlsdGVyIG1vZHVsZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IGlmIHRoaXMgZmVhdHVyZSBpcyBiZWluZyB1c2VkLiBUaGlzIGNvdWxkIGhhdmUgYSBiaWcgaW1wYWN0IG9uIG92ZXJhbGwgbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmIE5GX0NPTk5UUkFDSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz05OD1jb25maWcgTkZfTE9HX1NZU0xPR1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMDktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTEwOmlmIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTExMS1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk3MQoJCQkJCQkJb3V0cHV0OiAxNjIKCQkJCQkJCXRob3VnaHRzOiAxNTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIE5ldGZpbHRlciBDb25udHJhY2sgTmV0bGluayBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSB0aGF0IGBORl9DVF9ORVRMSU5LYCBpcyBjb250aW5nZW50IG9uIGBORl9DT05OVFJBQ0tgLCBhbmQgYm90aCBhcmUgdW5kZXIgYElORVQgJmFtcDsmYW1wOyBORVRGSUxURVJgLCBzbyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBORVRGSUxURVJgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9DVF9ORVRMSU5LYC4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBjb2RlLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYGV4cGVjdF9pdGVyX25hbWVgLCB3aGljaCBpcyBkZWNsYXJlZCBgc3RhdGljYCB3aXRoaW4gYG5mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBJbml0aWFsbHksIEkgd2FzIGEgYml0IGNvbmNlcm5lZCBhYm91dCBzdGF0aWMgZnVuY3Rpb25zLCBhcyB0aGV5IGNhbiBzb21ldGltZXMgYmUgaW5saW5lZCwgYW5kIHRob3NlIGFyZSBkaWZmaWN1bHQgdG8gdGFyZ2V0IGRpcmVjdGx5IHdpdGggc3ltYm9sIGNvdmVyYWdlLiBIb3dldmVyLCB0aGUgZG9jdW1lbnRhdGlvbiBjbGFyaWZpZXMgdGhhdCB3ZSBzaG91bGQgbG9vayBmb3Igbm9uLXN0YXRpYyBjYWxsZXJzIGlmIHRoZSBjb2RlIHVzZXMgc3RhdGljIGlubGluZXMgaW4gLmggZmlsZXMuCgpCdXQsIGBleHBlY3RfaXRlcl9uYW1lYCBpcyBpbiBhIGAuY2AgZmlsZSwgbm90IGEgYC5oYCBoZWFkZXIsIHNvIGlzIGl0IGlubGluZWQ/IExldCYjMzk7cyB2ZXJpZnkuIExpbmUgMzQ1OCBzaG93cyBpdHMgYWRkcmVzcyBpcyB0YWtlbiBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgYXJndW1lbnQsIHNvIHRoZSBjb21waWxlciBjYW5ub3QgaW5saW5lIGl0LiBUaHVzLCBgZXhwZWN0X2l0ZXJfbmFtZWAgaXMgYSBkaXN0aW5jdCBzeW1ib2wuIFRoZSBkaXJlY3QgQVBJIGVudHJ5cG9pbnQgaW4gdGhpcyBjYXNlIGlzIGBjdG5ldGxpbmtfZGVsX2V4cGVjdGAsIHdoaWNoIGNhbGxzIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgLCBhbmQgdGhhdCBpbiB0dXJuIGNhbGxzIGBleHBlY3RfaXRlcl9uYW1lYCwgc28gdGhleSBib3RoIGFyZSB2YWxpZCBmb2N1cyBzeW1ib2xzLiBDaGVja2luZyBmb3Igb3RoZXIgY2FsbGVycyBvZiBgZXhwZWN0X2l0ZXJfbmFtZWAgY29uZmlybXMgdGhhdCBgY3RuZXRsaW5rX2RlbF9leHBlY3RgIGlzIHRoZSBzb2xlIGNhbGxlci4KCkxvb2tpbmcgYXQgdGhlIGdpdCBkaWZmLCB0aGUgY2hhbmdlIGludm9sdmVzIHVzaW5nIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkYCB3aXRoIGEgYGxvY2tkZXBfaXNfaGVsZGAgYXNzZXJ0aW9uLiBUaGlzIGFzc2VydGlvbiBjaGVjayBtZWFucyB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgdHJ1ZWAgYmVjYXVzZSBpdCBpbnRyb2R1Y2VzIGEgcnVudGltZSBhc3NlcnRpb24gaW4gcmVhY2hhYmxlIGNvZGUuIE5ldGZpbHRlciBuZXRsaW5rIGlzIGVhc2lseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIHNvIHRoaXMgY29kZSBpcyBpbmRlZWQgcmVhY2hhYmxlLiBBbHNvIFN5emthbGxlciBhY3RpdmVseSB0ZXN0cyB0aGVzZSBuZXRsaW5rIHNvY2tldHMsIHNwZWNpZmljYWxseSBgbmZuZXRsaW5rYCBhbmQgYGN0bmV0bGlua2AsIG1ha2luZyB0aGlzIGV2ZW4gbW9yZSByZWxldmFudCB0byBmdXp6aW5nLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZm9jdXMgc3ltYm9sczogYGV4cGVjdF9pdGVyX25hbWVgIGFuZCBgY3RuZXRsaW5rX2RlbF9leHBlY3RgIGFyZSB0aGUgbW9zdCBzcGVjaWZpYyBhbmQgdXNlZnVsIHRhcmdldHMgaGVyZS4KCkZpbmFsbHksIHdlIG5lZWQgdG8gbGlzdCB0aGUgZW5hYmxlIGNvbmZpZ3VyYXRpb25zLCB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdCB0aGUgY29uZmlncyByZXF1aXJlZCBmb3IgdGhlIGNvZGUgYXJlIGBORl9DVF9ORVRMSU5LYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkVURklMVEVSYC4KClNvLCB0aGUgZnV6emluZyB2ZXJkaWN0IGlzIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4gVGhlIGBSZWFzb25pbmdgIHNob3VsZCBiZTogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrZGVwIGFzc2VydGlvbiAoYHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWRgKSBpbiByZWFjaGFibGUgTmV0ZmlsdGVyIG5ldGxpbmsgY29kZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7CgpUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGBbJiMzNDtleHBlY3RfaXRlcl9uYW1lJiMzNDssICYjMzQ7Y3RuZXRsaW5rX2RlbF9leHBlY3QmIzM0O11gLCBhbmQgdGhlIGBFbmFibGVDb25maWdzYCBhcmUgYFsmIzM0O05GX0NUX05FVExJTksmIzM0OywgJiMzNDtORl9DT05OVFJBQ0smIzM0OywgJiMzNDtORVRGSUxURVImIzM0O11gLiBFdmVyeXRoaW5nIGlzIGFjY291bnRlZCBmb3IsIGFuZCBpdCBpcyBhIHNvbGlkIHBsYW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHBlY3RfaXRlcl9uYW1lJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19kZWxfZXhwZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGV4cGVjdF9pdGVyX25hbWUoKSBpbiBuZXRmaWx0ZXImIzM5O3MgY3RuZXRsaW5rIGltcGxlbWVudGF0aW9uLCByZXBsYWNpbmcgcmN1X2RlcmVmZXJlbmNlKCkgd2l0aCByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKCkgYW5kIGVuZm9yY2luZyBhIGxvY2tkZXAgYXNzZXJ0aW9uIGNoZWNraW5nIG5mX2Nvbm50cmFja19leHBlY3RfbG9jay4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgc29ja2V0cyAoQ1RBX0VYUEVDVF9IRUxQX05BTUUgaW4gY3RuZXRsaW5rX2RlbF9leHBlY3QpIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIHRlc3QgdGhlIG5ldyBsb2NraW5nIGFzc2VydGlvbiBhbmQgcHJldmVudCByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ1RfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXhwZWN0X2l0ZXJfbmFtZSYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZGVsX2V4cGVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHBlY3RfaXRlcl9uYW1lKCkgaW4gbmV0ZmlsdGVyJiMzOTtzIGN0bmV0bGluayBpbXBsZW1lbnRhdGlvbiwgcmVwbGFjaW5nIHJjdV9kZXJlZmVyZW5jZSgpIHdpdGggcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCgpIGFuZCBlbmZvcmNpbmcgYSBsb2NrZGVwIGFzc2VydGlvbiBjaGVja2luZyBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2suIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIHNvY2tldHMgKENUQV9FWFBFQ1RfSEVMUF9OQU1FIGluIGN0bmV0bGlua19kZWxfZXhwZWN0KSBhbmQgd2FycmFudHMgZnV6emluZyB0byB0ZXN0IHRoZSBuZXcgbG9ja2luZyBhc3NlcnRpb24gYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDE6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBgcmN1X2RlcmVmZXJlbmNlKGV4cC1cdTAwM2VoZWxwZXIpYCB3aXRoIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGV4cC1cdTAwM2VoZWxwZXIsIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spKWAgaW4gYGV4cGVjdF9pdGVyX25hbWUoKWAuXG5cbmBleHBlY3RfaXRlcl9uYW1lKClgIGlzIGludm9rZWQgYXMgYW4gaXRlcmF0b3IgY2FsbGJhY2sgZnJvbSBgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KClgLCB3aGljaCBhY3F1aXJlcyBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYCB2aWEgYHNwaW5fbG9ja19iaCgpYC4gVXNpbmcgYHJjdV9kZXJlZmVyZW5jZSgpYCB3aXRob3V0IGFuIFJDVSByZWFkLXNpZGUgbG9jayBjYXVzZXMgbG9ja2RlcC9SQ1UgZGVidWdnaW5nIHdhcm5pbmdzIHdoZW4gYENPTkZJR19QUk9WRV9SQ1VgIGlzIGVuYWJsZWQuIFRoZSBjaGFuZ2UgdXBkYXRlcyB0aGUgUkNVIGRlcmVmZXJlbmNlIG1hY3JvIHRvIGluZGljYXRlIHRoYXQgdGhlIGFjY2VzcyBpcyBwcm90ZWN0ZWQgYnkgYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhbiBSQ1UvbG9ja2RlcCBhbm5vdGF0aW9uLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIGNoYW5nZSBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBtZW1vcnkgY29weWluZywgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJlNjZmNGNkZjkyOGUwODk1ZjgwYTJiNDBhNjI0MDlmZDhhMDg0MGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAwMTozNjowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCA1NzlhZGEwNjNiMWJiLi40ZTVkN2M3MDE0MzY4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC0zMzkyLDcgJiM0MzszMzkyLDggQEAgc3RhdGljIGJvb2wgZXhwZWN0X2l0ZXJfbmFtZShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCB2b2lkICpkYXRhKQogCXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXI7CiAJY29uc3QgY2hhciAqbmFtZSA9IGRhdGE7CiAKLQloZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoZXhwLSZndDtoZWxwZXIpOwomIzQzOwloZWxwZXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGV4cC0mZ3Q7aGVscGVyLAomIzQzOwkJCQkJICAgbG9ja2RlcF9pc19oZWxkKCZhbXA7bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSk7CiAJaWYgKCFoZWxwZXIpCiAJCXJldHVybiBmYWxzZTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDE6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb25udHJhY2sgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgcHJvdmlkZWQgcGF0Y2ggdGFyZ2V0cyBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIG5ldGxpbmsgaW50ZXJmYWNlLiBUaGUgY2hhbmdlIGlzIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgY3JpdGljYWwuIFRoZXkmIzM5O3ZlIHVwZGF0ZWQgdGhlIGBleHBlY3RfaXRlcl9uYW1lYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgdGhlIGBoZWxwZXJgIG1lbWJlciBvZiBgbmZfY29ubnRyYWNrX2V4cGVjdGAgaXMgYWNjZXNzZWQuCgpCZWZvcmUgdGhlIHBhdGNoLCB3ZSBoYWQgYSBzaW1wbGUgYHJjdV9kZXJlZmVyZW5jZWAuIE5vdywgaXQmIzM5O3MgYHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWRgIHdpdGggYSBsb2NrIGRlcGVuZGVuY3kgY2hlY2sgdXNpbmcgYGxvY2tkZXBfaXNfaGVsZGAgb24gYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AuIFRoYXQmIzM5O3MgYSByZWQgZmxhZyDigJMgYSBnb29kIG9uZS4gSXQgaW5kaWNhdGVzIGEgcG90ZW50aWFsIGRhdGEgcmFjZSBvciBzeW5jaHJvbml6YXRpb24gaXNzdWUgd2FzIGlkZW50aWZpZWQsIGFuZCB0aGlzIHBhdGNoIGFpbXMgdG8gcHJvdmlkZSBhIG1vcmUgcm9idXN0IG1lbW9yeSBiYXJyaWVyLiBUaGlzIGhpbnRzIGF0IHRoZSBwb3NzaWJpbGl0eSBvZiBhIHVzZS1hZnRlci1mcmVlIG9yIGRhdGEgY29ycnVwdGlvbiBzY2VuYXJpbyBpZiB0aGUgYGhlbHBlcmAgcG9pbnRlciBpcyBhY2Nlc3NlZCBjb25jdXJyZW50bHkgd2l0aCBtb2RpZmljYXRpb25zIHRvIHRoZSBgbmZfY29ubnRyYWNrX2V4cGVjdGAgc3RydWN0dXJlLiBUaGUgbG9jayBpbXBsaWVzIHdlIGFyZSBwcm9iYWJseSBtb3ZpbmcgZnJvbSBhIFJDVS1vbmx5IHdvcmxkIHRvIGEgbW9yZSBjb21wbGV4IGxvY2tpbmcgc2NoZW1lLCBidXQgcGVyaGFwcyBvbmx5IGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4KClRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBhbmQgdGhlIHNldmVyaXR5IG9mIHRoZSBvcmlnaW5hbCBmbGF3LCBJIHNob3VsZCBpbW1lZGlhdGVseSBncmFiIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIGxpbmUgMzM5Mi4gTGV0JiMzOTtzIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgcGFydGljdWxhciBgbmZfY29ubnRyYWNrX2V4cGVjdGAgc3RydWN0dXJlIGlzIHVzZWQsIGhvdyB0aGUgaGVscGVyIGlzIGFzc2lnbmVkLCBhbmQgd2hhdCBvdGhlciB0aHJlYWRzIG1pZ2h0IGJlIGludm9sdmVkIGluIHRoZSBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiBvZiB0aGUgYGhlbHBlcmAgcG9pbnRlci4gS25vd2luZyB3aGF0IG90aGVyIGRhdGEgaXMgYmVpbmcgcmVhZCBhbmQgbW9kaWZpZWQgb24gdGhlIHNhbWUgc3RydWN0dXJlcyB3aWxsIGhpZ2hsaWdodCB3aGVyZSB0aGUgcmFjZSBjb25kaXRpb24gb2NjdXJzLiBJIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIGhvdyBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYCBpcyBhY3F1aXJlZCBhbmQgcmVsZWFzZWQuCgpJdCYjMzk7cyBhIGdvb2QgcGF0Y2ggc28gZmFyIGJlY2F1c2UgaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgbW92aW5nIHRvd2FyZHMgbW9yZSBkaXNjaXBsaW5lZCBtZW1vcnkgYWNjZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYnJvYWRlciBjb2RlIGNvbnRleHQgYmVmb3JlIEkgY2FuIGZ1bGx5IGFzc2VzcyB0aGUgaW1wYWN0IGFuZCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzODA6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jayk7XG4zMzgxOlx0XG4zMzgyOlx0XHRpZiAoZXJyIFx1MDAzYz0gMCkge1xuMzM4MzpcdFx0XHRrZnJlZV9za2Ioc2tiMik7XG4zMzg0Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMzM4NTpcdFx0fVxuMzM4NjpcdFxuMzM4NzpcdFx0cmV0dXJuIG5mbmV0bGlua191bmljYXN0KHNrYjIsIGluZm8tXHUwMDNlbmV0LCBORVRMSU5LX0NCKHNrYikucG9ydGlkKTtcbjMzODg6XHR9XG4zMzg5Olx0XG4zMzkwOlx0c3RhdGljIGJvb2wgZXhwZWN0X2l0ZXJfbmFtZShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCB2b2lkICpkYXRhKVxuMzM5MTpcdHtcbjMzOTI6XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXI7XG4zMzkzOlx0XHRjb25zdCBjaGFyICpuYW1lID0gZGF0YTtcbjMzOTQ6XHRcbjMzOTU6XHRcdGhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZXhwLVx1MDAzZWhlbHBlcixcbjMzOTY6XHRcdFx0XHRcdFx0ICAgbG9ja2RlcF9pc19oZWxkKFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jaykpO1xuMzM5NzpcdFx0aWYgKCFoZWxwZXIpXG4zMzk4Olx0XHRcdHJldHVybiBmYWxzZTtcbjMzOTk6XHRcbjM0MDA6XHRcdHJldHVybiBzdHJjbXAoaGVscGVyLVx1MDAzZW5hbWUsIG5hbWUpID09IDA7XG4zNDAxOlx0fVxuMzQwMjpcdFxuMzQwMzpcdHN0YXRpYyBib29sIGV4cGVjdF9pdGVyX2FsbChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCB2b2lkICpkYXRhKVxuMzQwNDpcdHtcbjM0MDU6XHRcdHJldHVybiB0cnVlO1xuMzQwNjpcdH1cbjM0MDc6XHRcbjM0MDg6XHRzdGF0aWMgaW50IGN0bmV0bGlua19kZWxfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsXG4zNDA5Olx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuMzQxMDpcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKVxuMzQxMTpcdHtcbjM0MTI6XHRcdHVfaW50OF90IHUzID0gaW5mby1cdTAwM2VuZm1zZy1cdTAwM2VuZmdlbl9mYW1pbHk7XG4zNDEzOlx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwO1xuMzQxNDpcdFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTtcbjM0MTU6XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSB6b25lO1xuMzQxNjpcdFx0aW50IGVycjtcbjM0MTc6XHRcbjM0MTg6XHRcdGlmIChjZGFbQ1RBX0VYUEVDVF9UVVBMRV0pIHtcbjM0MTk6XHRcdFx0LyogZGVsZXRlIGEgc2luZ2xlIGV4cGVjdCBieSB0dXBsZSAqL1xuMzQyMDpcdFx0XHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX0VYUEVDVF9aT05FXSwgXHUwMDI2em9uZSk7XG4zNDIxOlx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4zNDIyOlx0XHRcdFx0cmV0dXJuIGVycjtcbjM0MjM6XHRcbjM0MjQ6XHRcdFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlKGNkYSwgXHUwMDI2dHVwbGUsIENUQV9FWFBFQ1RfVFVQTEUsXG4zNDI1Olx0XHRcdFx0XHRcdCAgICB1MywgTlVMTCk7XG4zNDI2Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4zNDI3Olx0XHRcdFx0cmV0dXJuIGVycjtcbjM0Mjg6XHRcbjM0Mjk6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYGV4cGVjdF9pdGVyX25hbWVgKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgYGV4cGVjdF9pdGVyX25hbWVgLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCwgYXMgYWx3YXlzLCBpcyB0byBmb2xsb3cgdGhlIGJyZWFkY3J1bWJzIG9mIGl0cyB1c2FnZS4gTGV0JiMzOTtzIGZpbmQgb3V0IHdoZXJlIHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgY2FsbGVkLiBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIHF1aWNrIHNlYXJjaCBmb3IgYWxsIHRoZSBjYWxsZXJzIG9mIGBleHBlY3RfaXRlcl9uYW1lYCB3aXRoaW4gdGhlIGNvZGViYXNlLiBLbm93aW5nIHRoZSBjb250ZXh0cyB3aGVyZSBpdCYjMzk7cyB1c2VkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgZWFjaCBjYWxsIHNpdGUgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gaG93IGl0JiMzOTtzIGJlaW5nIGVtcGxveWVkIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4cGVjdF9pdGVyX25hbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTMzMTE9c3RhdGljIGludCBjdG5ldGxpbmtfZ2V0X2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zMzg5LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjMzOTA6c3RhdGljIGJvb2wgZXhwZWN0X2l0ZXJfbmFtZShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCB2b2lkICpkYXRhKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTMzOTEte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zNDA4PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2RlbF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzQ1Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNDU4Olx0XHRuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXQoaW5mby1cdTAwM2VuZXQsIGV4cGVjdF9pdGVyX25hbWUsIG5hbWUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzQ1OS1cdFx0XHRcdFx0IE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNTcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGl0ZXJhdG9yIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLCBwYXJ0aWN1bGFybHkgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldGxpbmsgaW50ZXJmYWNlIGFuZCB0aGUgdW5kZXJseWluZyBleHBlY3RhdGlvbiB0YWJsZS4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBudWFuY2VzOiB0aGUgaGFuZGxpbmcgb2YgY29uY3VycmVudCBhY2Nlc3MsIHBvdGVudGlhbCBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCB0byBtYWludGFpbiBjb25zaXN0ZW5jeSwgYW5kIGhvdyBpdCBkZWFscyB3aXRoIGl0ZXJhdGluZyB0aHJvdWdoIGEgcG90ZW50aWFsbHkgbGFyZ2UgbnVtYmVyIG9mIGV4cGVjdGF0aW9ucyB3aXRob3V0IGNhdXNpbmcgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgaXQgZWZmaWNpZW50bHkgaGFuZGxlcyBuZXN0ZWQgZXhwZWN0YXRpb25zIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgY2xldmVyIHVzZSBvZiBkYXRhIHN0cnVjdHVyZXMgdG8gc3BlZWQgdXAgdGhlIGl0ZXJhdGlvbiBwcm9jZXNzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgb3IgYXJlYXMgd2hlcmUgaXQgbWlnaHQgYmUgdnVsbmVyYWJsZSB0byBkZW5pYWwtb2Ytc2VydmljZSBhdHRhY2tzLiBJJiMzOTttIGFsc28gY3VyaW91cyB0byBzZWUgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgY29ubnRyYWNrIGhlbHBlcnMgYW5kIHdoZXRoZXIgaXQgcHJvdmlkZXMgYW55IGZpbHRlcmluZyBjYXBhYmlsaXRpZXMgdG8gbGltaXQgdGhlIHNjb3BlIG9mIHRoZSBpdGVyYXRpb24uIEJhc2ljYWxseSwgSSB3YW50IHRvIHNlZSBpZiB0aGlzIGNvZGUgaXMgY2xlYW4sIGVmZmljaWVudCwgYW5kIHJvYnVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg9MTQ2PXZvaWQgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfZGVzdHJveShib29sICgqaXRlcikoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmUsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg6MTQ3OnZvaWQgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KHN0cnVjdCBuZXQgKm5ldCxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgtMTQ4LVx0XHRcdCAgICAgIGJvb2wgKCppdGVyKShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZSwgdm9pZCAqZGF0YSksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM9NjEyPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9pdGVyYXRlX2Rlc3Ryb3kpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtNjEzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6NjE0OnZvaWQgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTYxNS1cdFx0XHQgICAgICBib29sICgqaXRlcikoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmUsIHZvaWQgKmRhdGEpLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTYzOS19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYzo2NDA6RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTY0MS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzQwOD1zdGF0aWMgaW50IGN0bmV0bGlua19kZWxfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0NTctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MzQ1ODpcdFx0bmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KGluZm8tXHUwMDNlbmV0LCBleHBlY3RfaXRlcl9uYW1lLCBuYW1lLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0NTktXHRcdFx0XHRcdCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNDYyLVx0XHQvKiBUaGlzIGJhc2ljYWxseSBtZWFucyB3ZSBoYXZlIHRvIGZsdXNoIGV2ZXJ5dGhpbmcqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM0NjM6XHRcdG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldChpbmZvLVx1MDAzZW5ldCwgZXhwZWN0X2l0ZXJfYWxsLCBOVUxMLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0NjQtXHRcdFx0XHRcdCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwMTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTUxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gQ29ubnRyYWNrIEV4cGVjdGF0aW9ucyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0JiMzOTtzIGNydWNpYWwgZm9yIGl0ZXJhdGluZyB0aHJvdWdoIGNvbm50cmFjayBleHBlY3RhdGlvbnMsIGFuZCBpdCYjMzk7cyBsb2NhdGVkIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNgLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCB0cmF2ZXJzZXMgdGhlIGV4cGVjdGF0aW9uIHRhYmxlIGFuZCB3aGF0IGtpbmQgb2YgZGF0YSBpdCYjMzk7cyBleHRyYWN0aW5nIGR1cmluZyB0aGUgcHJvY2Vzcy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIGluIGNvbm50cmFjayB3aXRoIG11bHRpcGxlIG5ldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYxNDpcdHZvaWQgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KHN0cnVjdCBuZXQgKm5ldCxcbiA2MTU6XHRcdFx0XHQgICAgICBib29sICgqaXRlcikoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmUsIHZvaWQgKmRhdGEpLFxuIDYxNjpcdFx0XHRcdCAgICAgIHZvaWQgKmRhdGEsXG4gNjE3Olx0XHRcdFx0ICAgICAgdTMyIHBvcnRpZCwgaW50IHJlcG9ydClcbiA2MTg6XHR7XG4gNjE5Olx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwO1xuIDYyMDpcdFx0Y29uc3Qgc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7XG4gNjIxOlx0XHR1bnNpZ25lZCBpbnQgaTtcbiA2MjI6XHRcbiA2MjM6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xuIDYyNDpcdFxuIDYyNTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmZfY3RfZXhwZWN0X2hzaXplOyBpJiM0MzsmIzQzOykge1xuIDYyNjpcdFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV4cCwgbmV4dCxcbiA2Mjc6XHRcdFx0XHRcdFx0ICBcdTAwMjZuZl9jdF9leHBlY3RfaGFzaFtpXSxcbiA2Mjg6XHRcdFx0XHRcdFx0ICBobm9kZSkge1xuIDYyOTpcdFxuIDYzMDpcdFx0XHRcdGlmICghbmV0X2VxKG5mX2N0X2V4cF9uZXQoZXhwKSwgbmV0KSlcbiA2MzE6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDYzMjpcdFxuIDYzMzpcdFx0XHRcdGlmIChpdGVyKGV4cCwgZGF0YSkpXG4gNjM0Olx0XHRcdFx0XHRuZl9jdF91bmxpbmtfZXhwZWN0X3JlcG9ydChleHAsIHBvcnRpZCwgcmVwb3J0KTtcbiA2MzU6XHRcdFx0fVxuIDYzNjpcdFx0fVxuIDYzNzpcdFxuIDYzODpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKTtcbiA2Mzk6XHR9XG4gNjQwOlx0RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KTtcbiA2NDE6XHRcbiA2NDI6XHQjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19QUk9DRlNcbiA2NDM6XHRzdHJ1Y3QgY3RfZXhwZWN0X2l0ZXJfc3RhdGUge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwMTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjM5CgkJCQkJCQlvdXRwdXQ6IDI1MAoJCQkJCQkJdGhvdWdodHM6IDY5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYW4gUkNVIGFuZCBMb2NrZGVwIEludGVyYWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgZnJvbSB3aGF0IEkgY2FuIHRlbGwsIGl0JiMzOTtzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgY2hhbmdlIHJlbGF0ZWQgdG8gaG93IFJDVSBhbmQgbG9ja2RlcCBpbnRlcmFjdCB3aXRoaW4gdGhlIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUsIHdoZW4gY2FsbGluZyBgaXRlcihleHAsIGRhdGEpYCB3aGlsZSBob2xkaW5nIGBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2tgLCB3YXMgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZShleHAtJmd0O2hlbHBlcilgIHdpdGhpbiBgZXhwZWN0X2l0ZXJfbmFtZWAuIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2l0aCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBsb2NrZGVwIGFuZCBSQ1UgZW5hYmxlZCwgdGhpcyBjYW4gdHJpZ2dlciBhICYjMzQ7c3VzcGljaW91cyByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSB1c2FnZSEmIzM0OyB3YXJuaW5nLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IGByY3VfZGVyZWZlcmVuY2VgIGRvZXNuJiMzOTt0IGV4cGxpY2l0bHkgc3RhdGUgdGhhdCB0aGUgUkNVIHJlYWQgbG9jayBpcyBiZWluZyBoZWxkLCBldmVuIHRob3VnaCBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYCBwcm92aWRlcyB0aGUgc2FtZSBsZXZlbCBvZiBwcm90ZWN0aW9uLgoKVGhlIGZpeCwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpbnZvbHZlcyByZXBsYWNpbmcgdGhlIHBvdGVudGlhbGx5IG1pc2xlYWRpbmcgYHJjdV9kZXJlZmVyZW5jZWAgd2l0aCBgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChleHAtJmd0O2hlbHBlciwgbG9ja2RlcF9pc19oZWxkKCZhbXA7bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSlgLiBUaGlzIG5ldyBjb25zdHJ1Y3Rpb24gZXhwbGljaXRseSBhc3NlcnRzIHRoYXQgYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AgaXMgaGVsZCB3aGVuIGFjY2Vzc2luZyBgZXhwLSZndDtoZWxwZXJgLCB0aGVyZWJ5IHNpbGVuY2luZyB0aGUgbG9ja2RlcCBmYWxzZSBwb3NpdGl2ZSBvciB2YWxpZGF0aW5nIHRoYXQgaXQmIzM5O3MgYmVpbmcgaGVsZCBhcyBpbnRlbmRlZC4KCk5vdywgbXkgcmVhbCBjb25jZXJuIGhlcmUgaXMgYWx3YXlzIGFyb3VuZCBwb3RlbnRpYWwgbWVtb3J5IGlzc3Vlcy4gRG9lcyB0aGlzIHNlZW1pbmdseSBiZW5pZ24gY2hhbmdlICppbnRyb2R1Y2UqIG9yIHNvbWVob3cgKmV4cG9zZSogdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBpdCBkb2VzbiYjMzk7dC4gVGhpcyBpc24mIzM5O3QgdG91Y2hpbmcgbWVtb3J5IGFsbG9jYXRpb24uIEl0JiMzOTtzIG5vdCBjcmVhdGluZyBuZXcgdmFyaWFibGVzLCBjb3B5aW5nIGRhdGEgdG8gdXNlcnNwYWNlLCBtZXNzaW5nIHdpdGggYnVmZmVyIGxlbmd0aHMsIG9yIGNoYW5naW5nIHRoZSBjb250cm9sIGZsb3cgKGJleW9uZCB0aGUgUkNVIGxvY2tkZXAgY2hlY2spLiBJdCYjMzk7cyBwdXJlbHkgYW4gUkNVIGFubm90YXRpb24gb3IgbG9ja2RlcCB2ZXJpZmljYXRpb24gY2hhbmdlLCB3aGljaCBzaG91bGQgYmUgZmluZS4KCkxldCBtZSBxdWlja2x5IHJldmlldyB0aGUgZ3VpZGVsaW5lcyBmb3Igc2V0dGluZyBgTmVlZHNLTVNBTmAuIEkgbmVlZCB0byBzZXQgdGhhdCBmbGFnIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpbnZvbHZlcyBhbGxvY2F0aW5nIG9yIGluaXRpYWxpemluZyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLCBvciBkb2VzIGFueXRoaW5nIHRoYXQgbWlnaHQgY3JlYXRlIGEgdnVsbmVyYWJpbGl0eSB3aXRoIGJvdW5kcyBjaGVja3MuCgpIb3dldmVyLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgcGF0Y2gsIGBOZWVkc0tNU0FOYCBpcyAqY2xlYXJseSogYGZhbHNlYC4gSXQmIzM5O3Mgb25seSByZXBsYWNpbmcgYW4gUkNVIGRlcmVmZXJlbmNlIHdpdGggYSBwcm90ZWN0ZWQgdmVyc2lvbiwgYmVjYXVzZSB0aGUgY2FsbGluZyBjb250ZXh0ICphbHJlYWR5KiBndWFyYW50ZWVzIHByb3RlY3Rpb24gdmlhIHRoZSBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYC4gVGhlIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgbGVhayByaXNrIGlzIHplcm8gaGVyZS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgYW4gZXhwbGljaXQgc3RhdGVtZW50IGFib3V0IHRoZSBleGlzdGluZyBsb2NraW5nIGFuZCBSQ1UgZ3VhcmFudGVlcy4KCkFscmlnaHQsIHdpdGggdGhhdCBhc3Nlc3NtZW50IGNvbXBsZXRlLCBJIHRoaW5rIEkmIzM5O20gcmVhZHkgdG8gZm9ybXVsYXRlIG15IHJlc3BvbnNlIGFuZCBzZXQgdGhlIHJlc3VsdHMgYWNjb3JkaW5nbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGByY3VfZGVyZWZlcmVuY2UoZXhwLVx1MDAzZWhlbHBlcilgIHdpdGggYHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZXhwLVx1MDAzZWhlbHBlciwgbG9ja2RlcF9pc19oZWxkKFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jaykpYCBpbiBgZXhwZWN0X2l0ZXJfbmFtZSgpYC5cblxuYGV4cGVjdF9pdGVyX25hbWUoKWAgaXMgaW52b2tlZCBhcyBhbiBpdGVyYXRvciBjYWxsYmFjayBmcm9tIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXQoKWAsIHdoaWNoIGFjcXVpcmVzIGBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2tgIHZpYSBgc3Bpbl9sb2NrX2JoKClgLiBVc2luZyBgcmN1X2RlcmVmZXJlbmNlKClgIHdpdGhvdXQgYW4gUkNVIHJlYWQtc2lkZSBsb2NrIGNhdXNlcyBsb2NrZGVwL1JDVSBkZWJ1Z2dpbmcgd2FybmluZ3Mgd2hlbiBgQ09ORklHX1BST1ZFX1JDVWAgaXMgZW5hYmxlZC4gVGhlIGNoYW5nZSB1cGRhdGVzIHRoZSBSQ1UgZGVyZWZlcmVuY2UgbWFjcm8gdG8gaW5kaWNhdGUgdGhhdCB0aGUgYWNjZXNzIGlzIHByb3RlY3RlZCBieSBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYC5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFuIFJDVS9sb2NrZGVwIGFubm90YXRpb24uIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSwgY2hhbmdlIGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBhbHRlciBidWZmZXIgYm91bmRzIG9yIG1lbW9yeSBjb3B5aW5nLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYHJjdV9kZXJlZmVyZW5jZShleHAtXHUwMDNlaGVscGVyKWAgd2l0aCBgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChleHAtXHUwMDNlaGVscGVyLCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSlgIGluIGBleHBlY3RfaXRlcl9uYW1lKClgLlxuXG5gZXhwZWN0X2l0ZXJfbmFtZSgpYCBpcyBpbnZva2VkIGFzIGFuIGl0ZXJhdG9yIGNhbGxiYWNrIGZyb20gYG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldCgpYCwgd2hpY2ggYWNxdWlyZXMgYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AgdmlhIGBzcGluX2xvY2tfYmgoKWAuIFVzaW5nIGByY3VfZGVyZWZlcmVuY2UoKWAgd2l0aG91dCBhbiBSQ1UgcmVhZC1zaWRlIGxvY2sgY2F1c2VzIGxvY2tkZXAvUkNVIGRlYnVnZ2luZyB3YXJuaW5ncyB3aGVuIGBDT05GSUdfUFJPVkVfUkNVYCBpcyBlbmFibGVkLiBUaGUgY2hhbmdlIHVwZGF0ZXMgdGhlIFJDVSBkZXJlZmVyZW5jZSBtYWNybyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBhY2Nlc3MgaXMgcHJvdGVjdGVkIGJ5IGBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2tgLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYW4gUkNVL2xvY2tkZXAgYW5ub3RhdGlvbi4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBjaGFuZ2UgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgbWVtb3J5IGNvcHlpbmcsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDAxOjM2OjA4LjU2MDA3MzExMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NTg3MzM1NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NUX05FVExJTktcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXhwZWN0X2l0ZXJfbmFtZVwiLFxuICAgIFwiY3RuZXRsaW5rX2RlbF9leHBlY3RcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGByY3VfZGVyZWZlcmVuY2UoZXhwLVxcdTAwM2VoZWxwZXIpYCB3aXRoIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGV4cC1cXHUwMDNlaGVscGVyLCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jaykpYCBpbiBgZXhwZWN0X2l0ZXJfbmFtZSgpYC5cXG5cXG5gZXhwZWN0X2l0ZXJfbmFtZSgpYCBpcyBpbnZva2VkIGFzIGFuIGl0ZXJhdG9yIGNhbGxiYWNrIGZyb20gYG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldCgpYCwgd2hpY2ggYWNxdWlyZXMgYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AgdmlhIGBzcGluX2xvY2tfYmgoKWAuIFVzaW5nIGByY3VfZGVyZWZlcmVuY2UoKWAgd2l0aG91dCBhbiBSQ1UgcmVhZC1zaWRlIGxvY2sgY2F1c2VzIGxvY2tkZXAvUkNVIGRlYnVnZ2luZyB3YXJuaW5ncyB3aGVuIGBDT05GSUdfUFJPVkVfUkNVYCBpcyBlbmFibGVkLiBUaGUgY2hhbmdlIHVwZGF0ZXMgdGhlIFJDVSBkZXJlZmVyZW5jZSBtYWNybyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBhY2Nlc3MgaXMgcHJvdGVjdGVkIGJ5IGBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2tgLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhbiBSQ1UvbG9ja2RlcCBhbm5vdGF0aW9uLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIGNoYW5nZSBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBtZW1vcnkgY29weWluZywgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleHBlY3RfaXRlcl9uYW1lKCkgaW4gbmV0ZmlsdGVyJ3MgY3RuZXRsaW5rIGltcGxlbWVudGF0aW9uLCByZXBsYWNpbmcgcmN1X2RlcmVmZXJlbmNlKCkgd2l0aCByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKCkgYW5kIGVuZm9yY2luZyBhIGxvY2tkZXAgYXNzZXJ0aW9uIGNoZWNraW5nIG5mX2Nvbm50cmFja19leHBlY3RfbG9jay4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgc29ja2V0cyAoQ1RBX0VYUEVDVF9IRUxQX05BTUUgaW4gY3RuZXRsaW5rX2RlbF9leHBlY3QpIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIHRlc3QgdGhlIG5ldyBsb2NraW5nIGFzc2VydGlvbiBhbmQgcHJldmVudCByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6MzY6MDguNTYwMDc5OTgxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTY2OTM4NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiZTY2ZjRjZGY5MjhlMDg5NWY4MGEyYjQwYTYyNDA5ZmQ4YTA4NDBkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDEyIDAxOjM2OjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xcbmluZGV4IDU3OWFkYTA2M2IxYmIuLjRlNWQ3YzcwMTQzNjggMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXFxuQEAgLTMzOTIsNyArMzM5Miw4IEBAIHN0YXRpYyBib29sIGV4cGVjdF9pdGVyX25hbWUoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdm9pZCAqZGF0YSlcXG4gXFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjtcXG4gXFx0Y29uc3QgY2hhciAqbmFtZSA9IGRhdGE7XFxuIFxcbi1cXHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoZXhwLVxcdTAwM2VoZWxwZXIpO1xcbitcXHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGV4cC1cXHUwMDNlaGVscGVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jaykpO1xcbiBcXHRpZiAoIWhlbHBlcilcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6MzY6MDkuMDU3NDQzNTIzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NTYwNTU5NTU5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4cGVjdF9pdGVyX25hbWVcIixcbiAgICBcImN0bmV0bGlua19kZWxfZXhwZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXhwZWN0X2l0ZXJfbmFtZSgpIGluIG5ldGZpbHRlcidzIGN0bmV0bGluayBpbXBsZW1lbnRhdGlvbiwgcmVwbGFjaW5nIHJjdV9kZXJlZmVyZW5jZSgpIHdpdGggcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCgpIGFuZCBlbmZvcmNpbmcgYSBsb2NrZGVwIGFzc2VydGlvbiBjaGVja2luZyBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2suIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIHNvY2tldHMgKENUQV9FWFBFQ1RfSEVMUF9OQU1FIGluIGN0bmV0bGlua19kZWxfZXhwZWN0KSBhbmQgd2FycmFudHMgZnV6emluZyB0byB0ZXN0IHRoZSBuZXcgbG9ja2luZyBhc3NlcnRpb24gYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmU2NmY0Y2RmOTI4ZTA4OTVmODBhMmI0MGE2MjQwOWZkOGEwODQwZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDAxOjM2OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5pbmRleCA1NzlhZGEwNjNiMWJiLi40ZTVkN2M3MDE0MzY4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbkBAIC0zMzkyLDcgKzMzOTIsOCBAQCBzdGF0aWMgYm9vbCBleHBlY3RfaXRlcl9uYW1lKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHZvaWQgKmRhdGEpXG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyO1xuIFx0Y29uc3QgY2hhciAqbmFtZSA9IGRhdGE7XG4gXG4tXHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoZXhwLVx1MDAzZWhlbHBlcik7XG4rXHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGV4cC1cdTAwM2VoZWxwZXIsXG4rXHRcdFx0XHRcdCAgIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spKTtcbiBcdGlmICghaGVscGVyKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjowOS4wNTc0NDUyMjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1OTI5NTEyMDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvbm50cmFjayBFeHBlY3QgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWluZyBjaGFuZ2VkIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBUaGUgZGlmZiBzaG93cyBhIG1vZGlmaWNhdGlvbiBhcm91bmQgbGluZSAzMzkyLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgdXBkYXRpbmcgdGhlIGFjY2VzcyB0byBgZXhwLVx1MDAzZWhlbHBlcmAgd2l0aGluIHRoZSBgZXhwZWN0X2l0ZXJfbmFtZWAgZnVuY3Rpb24uIFRoZXkncmUgYWRkaW5nIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkYCB3aXRoIGEgYGxvY2tkZXBfaXNfaGVsZGAgY2hlY2sgb24gYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AuIFRoaXMgaXMgaW50ZXJlc3RpbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgcHJvdGVjdGlvbiBjaGFuZ2UgZm9yIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgdXNhZ2UsIHdoaWNoIGlzbid0IGVudGlyZWx5IHN1cnByaXNpbmcgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBjb25udHJhY2suIFNwZWNpZmljYWxseSwgdGhpcyBjaGFuZ2Ugc3VnZ2VzdHMgdGhhdCBhY2Nlc3NpbmcgYGV4cC1cdTAwM2VoZWxwZXJgIHJlcXVpcmVzIHRoZSBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYCB0byBiZSBoZWxkLCBlbnN1cmluZyB0aGUgc2FmZXR5IG9mIGNvbmN1cnJlbnQgYWNjZXNzIHdoZW4gUkNVIGlzIGVuYWJsZWQuXG5cblRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZywgSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHRoZSB1c2FnZSBvZiBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYC4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGlzIGZpbGUgYW5kIGluc3BlY3QgdGhlIGFyZWEgYXJvdW5kIHRoYXQgbGluZSwgYW5kIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBsb2NrLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGlzIGNoYW5nZSBpcyBkZXNpZ25lZCB0byBhZGRyZXNzLiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBnb29kLWZhaXRoIGF0dGVtcHQgdG8gaW1wcm92ZSBSQ1Ugc2FmZXR5LCBidXQgSSB3b3VsZCB3YW50IHRvIHZlcmlmeSB0aGUgc3BlY2lmaWMgbG9jayBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MDUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjoxNC45ODY5NjAxNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM4MDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKTtcXG4zMzgxOlxcdFxcbjMzODI6XFx0XFx0aWYgKGVyciBcXHUwMDNjPSAwKSB7XFxuMzM4MzpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiMik7XFxuMzM4NDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zMzg1OlxcdFxcdH1cXG4zMzg2OlxcdFxcbjMzODc6XFx0XFx0cmV0dXJuIG5mbmV0bGlua191bmljYXN0KHNrYjIsIGluZm8tXFx1MDAzZW5ldCwgTkVUTElOS19DQihza2IpLnBvcnRpZCk7XFxuMzM4ODpcXHR9XFxuMzM4OTpcXHRcXG4zMzkwOlxcdHN0YXRpYyBib29sIGV4cGVjdF9pdGVyX25hbWUoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdm9pZCAqZGF0YSlcXG4zMzkxOlxcdHtcXG4zMzkyOlxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXI7XFxuMzM5MzpcXHRcXHRjb25zdCBjaGFyICpuYW1lID0gZGF0YTtcXG4zMzk0OlxcdFxcbjMzOTU6XFx0XFx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChleHAtXFx1MDAzZWhlbHBlcixcXG4zMzk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSk7XFxuMzM5NzpcXHRcXHRpZiAoIWhlbHBlcilcXG4zMzk4OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4zMzk5OlxcdFxcbjM0MDA6XFx0XFx0cmV0dXJuIHN0cmNtcChoZWxwZXItXFx1MDAzZW5hbWUsIG5hbWUpID09IDA7XFxuMzQwMTpcXHR9XFxuMzQwMjpcXHRcXG4zNDAzOlxcdHN0YXRpYyBib29sIGV4cGVjdF9pdGVyX2FsbChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCB2b2lkICpkYXRhKVxcbjM0MDQ6XFx0e1xcbjM0MDU6XFx0XFx0cmV0dXJuIHRydWU7XFxuMzQwNjpcXHR9XFxuMzQwNzpcXHRcXG4zNDA4OlxcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX2RlbF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4zNDA5OlxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuMzQxMDpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pXFxuMzQxMTpcXHR7XFxuMzQxMjpcXHRcXHR1X2ludDhfdCB1MyA9IGluZm8tXFx1MDAzZW5mbXNnLVxcdTAwM2VuZmdlbl9mYW1pbHk7XFxuMzQxMzpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwO1xcbjM0MTQ6XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTtcXG4zNDE1OlxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSB6b25lO1xcbjM0MTY6XFx0XFx0aW50IGVycjtcXG4zNDE3OlxcdFxcbjM0MTg6XFx0XFx0aWYgKGNkYVtDVEFfRVhQRUNUX1RVUExFXSkge1xcbjM0MTk6XFx0XFx0XFx0LyogZGVsZXRlIGEgc2luZ2xlIGV4cGVjdCBieSB0dXBsZSAqL1xcbjM0MjA6XFx0XFx0XFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9FWFBFQ1RfWk9ORV0sIFxcdTAwMjZ6b25lKTtcXG4zNDIxOlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjM0MjI6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zNDIzOlxcdFxcbjM0MjQ6XFx0XFx0XFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlKGNkYSwgXFx1MDAyNnR1cGxlLCBDVEFfRVhQRUNUX1RVUExFLFxcbjM0MjU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHUzLCBOVUxMKTtcXG4zNDI2OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjM0Mjc6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zNDI4OlxcdFxcbjM0Mjk6XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjoxNC45ODcxMjcyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTgzNjE1MDMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVHJhY2luZyB0aGUgQ2FsbGVyIG9mIGBleHBlY3RfaXRlcl9uYW1lYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIGBleHBlY3RfaXRlcl9uYW1lYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBiZWluZyB1c2VkP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gU28sIEkgbmVlZCB0byBzdGFydCBieSB0cmFjaW5nIGl0cyBjYWxsIHNpdGVzLiBBIHF1aWNrIHNlYXJjaCwgYSBncmVwLCBvciBtYXliZSBldmVuIG15IElERSdzIFwiZmluZCB1c2FnZXNcIiBmZWF0dXJlIHNob3VsZCBnaXZlIG1lIGEgbGlzdCBvZiBhbGwgdGhlIHBsYWNlcyBgZXhwZWN0X2l0ZXJfbmFtZWAgaXMgaW52b2tlZC4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gcGllY2UgdG9nZXRoZXIgdGhlIHB1cnBvc2UgYW5kIGlucHV0cyBvZiBgZXhwZWN0X2l0ZXJfbmFtZWAuIElzIGl0IGEgY29yZSB1dGlsaXR5IGZ1bmN0aW9uLCBvciBpcyBpdCBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgbW9kdWxlIG9yIGNsYXNzPyBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsaW5nIGNvbnRleHRzIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCBiZWhhdmlvci4gTGV0J3Mgc2VlIHdoYXQgdGhlIGluaXRpYWwgY2FsbCBsb29rcyBsaWtlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzI3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjoxNi44MjMyNzk3MjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgxNTgxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXhwZWN0X2l0ZXJfbmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzMxMT1zdGF0aWMgaW50IGN0bmV0bGlua19nZXRfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzM4OS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MzM5MDpzdGF0aWMgYm9vbCBleHBlY3RfaXRlcl9uYW1lKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHZvaWQgKmRhdGEpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTMzOTEte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM0MDg9c3RhdGljIGludCBjdG5ldGxpbmtfZGVsX2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0NTctXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM0NTg6XFx0XFx0bmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KGluZm8tXFx1MDAzZW5ldCwgZXhwZWN0X2l0ZXJfbmFtZSwgbmFtZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzQ1OS1cXHRcXHRcXHRcXHRcXHQgTkVUTElOS19DQihza2IpLnBvcnRpZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6MzY6MTYuODgxNDQ0MDNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNzYxODUwNDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBDb250ZXh0OiBgY3RuZXRsaW5rX2RlbF9leHBlY3RgIGFuZCBgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0YCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBjdG5ldGxpbmtfZGVsX2V4cGVjdGAgYW5kIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGFuZCB3aGF0IHRoZXkncmUgZG9pbmcgd2l0aGluIHRoZSBsYXJnZXIgY29ubmVjdGlvbiB0cmFja2luZyBmcmFtZXdvcmsuIFdoYXQgdHJpZ2dlcnMgdGhlIG5lZWQgdG8gZGVsZXRlIGFuIGV4cGVjdGF0aW9uPyBJcyBgY3RuZXRsaW5rX2RlbF9leHBlY3RgIGhhbmRsaW5nIGEgdXNlci1zcGFjZSByZXF1ZXN0IHZpYSBuZXRsaW5rLCBtZWFuaW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCBleHBsaWNpdCByZW1vdmFsIG9mIGEgdHJhY2tlZCBleHBlY3RhdGlvbj8gSWYgc28sIHdoYXQgYXJlIHRoZSB1c2UgY2FzZXM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgdGltZW91dCwgb3IgYSBzcGVjaWZpYywgaW50ZW50aW9uYWwgZGVsZXRpb24gcmVxdWVzdGVkIGJ5IHNvbWUgcHJvY2Vzcz9cblxuTmV4dCwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGl0ZXJhdGlvbiBpdHNlbGYgd29ya3MuIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHRyYXZlcnNhbCBvZiBhIGxpc3QsIHRhYmxlLCBvciBkYXRhIHN0cnVjdHVyZSBob2xkaW5nIHRoZSBleHBlY3RhdGlvbnMgZm9yIGEgcGFydGljdWxhciBuZXR3b3JrIG5hbWVzcGFjZS4gSXMgdGhpcyBpdGVyYXRpb24gcGFydCBvZiBhIGNsZWFudXAgcHJvY2VzcywgcGVyaGFwcyBjaGVja2luZyBmb3Igc3RhbGUgZXhwZWN0YXRpb25zIG9yIGhhbmRsaW5nIHNvbWUga2luZCBvZiBleHBpcnk/IE9yIGlzIGl0IG1vcmUgZHluYW1pYywgbWF5YmUgdXNlZCBmb3Igc2VhcmNoaW5nIGFuZCBsb2NhdGluZyBhIHNwZWNpZmljIGV4cGVjdGF0aW9uPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRhdGEgc3RydWN0dXJlIGlzIGJlaW5nIGl0ZXJhdGVkIG92ZXIgYW5kIGhvdyBpdCBpcyBtYW5hZ2VkLlxuXG5NeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGludGVybmFscyBpcyB0aGF0IGBleHBlY3RhdGlvbnNgIGFyZSBhIGtleSBwYXJ0IG9mIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUgaGFuZGxlcyByZWxhdGVkIGNvbm5lY3Rpb25zLCBzdWNoIGFzIHdoZW4gb25lIGNvbm5lY3Rpb24gb3BlbnMgYW5vdGhlci4gVGhlIGNvbm5lY3Rpb24gaXMgXCJleHBlY3RlZFwiLiBUaGVyZWZvcmUsIGBjdG5ldGxpbmtfZGVsX2V4cGVjdGAgaXMgbGlrZWx5IGludm9sdmVkIGluIGNsZWFuaW5nIHVwIHRoZXNlIHRyYWNrZWQgZXhwZWN0YXRpb25zLiBJdCBjb3VsZCBhbHNvIGRlYWwgd2l0aCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGlzc3VlcyB0aGF0IHJlcXVpcmUgdGhlIGV4cGVjdGF0aW9uIHRvIGJlIGRlbGV0ZWQuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgY3Jvc3MtcmVmZXJlbmNlcyB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgY2FsbGluZyBwYXRocy4gV2hhdCBldmVudHMgb3IgY29uZGl0aW9ucyBsZWFkIHRvIHRoZSBpbnZvY2F0aW9uIG9mIGBjdG5ldGxpbmtfZGVsX2V4cGVjdGA/IFRoZW4sIEknbGwgYW5hbHl6ZSBob3cgYG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldGAgaXMgdXNlZCB3aXRoaW4gdGhhdCBjb250ZXh0LiBGcm9tIHRoZXJlLCBJIGNhbiBwaW5wb2ludCB3aGF0IHRoZSBwdXJwb3NlIG9mIHRoZSBpbnRlcmFjdGlvbiBpcy4gQnkgY29ubmVjdGluZyB0aGUgZG90cyBiZXR3ZWVuIHRob3NlIGZ1bmN0aW9ucywgSSBzaG91bGQgYmUgYWJsZSB0byBjbGFyaWZ5IHRoZSBtb2R1bGUncyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg0MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDAxOjM2OjIwLjY0MzI5NjMzMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQzMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQzMDpcXHRcXG4zNDMxOlxcdFxcdFxcdC8qIGJ1bXAgdXNhZ2UgY291bnQgdG8gMiAqL1xcbjM0MzI6XFx0XFx0XFx0ZXhwID0gbmZfY3RfZXhwZWN0X2ZpbmRfZ2V0KGluZm8tXFx1MDAzZW5ldCwgXFx1MDAyNnpvbmUsIFxcdTAwMjZ0dXBsZSk7XFxuMzQzMzpcXHRcXHRcXHRpZiAoIWV4cCkge1xcbjM0MzQ6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jayk7XFxuMzQzNTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4zNDM2OlxcdFxcdFxcdH1cXG4zNDM3OlxcdFxcbjM0Mzg6XFx0XFx0XFx0aWYgKGNkYVtDVEFfRVhQRUNUX0lEXSkge1xcbjM0Mzk6XFx0XFx0XFx0XFx0X19iZTMyIGlkID0gbmxhX2dldF9iZTMyKGNkYVtDVEFfRVhQRUNUX0lEXSk7XFxuMzQ0MDpcXHRcXG4zNDQxOlxcdFxcdFxcdFxcdGlmIChpZCAhPSBuZl9leHBlY3RfZ2V0X2lkKGV4cCkpIHtcXG4zNDQyOlxcdFxcdFxcdFxcdFxcdG5mX2N0X2V4cGVjdF9wdXQoZXhwKTtcXG4zNDQzOlxcdFxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xcbjM0NDQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuMzQ0NTpcXHRcXHRcXHRcXHR9XFxuMzQ0NjpcXHRcXHRcXHR9XFxuMzQ0NzpcXHRcXG4zNDQ4OlxcdFxcdFxcdC8qIGFmdGVyIGxpc3QgcmVtb3ZhbCwgdXNhZ2UgY291bnQgPT0gMSAqL1xcbjM0NDk6XFx0XFx0XFx0bmZfY3RfdW5saW5rX2V4cGVjdF9yZXBvcnQoZXhwLCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxcbjM0NTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgbmxtc2dfcmVwb3J0KGluZm8tXFx1MDAzZW5saCkpO1xcbjM0NTE6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jayk7XFxuMzQ1MjpcXHRcXHRcXHQvKiBoYXZlIHRvIHB1dCB3aGF0IHdlICdnZXQnIGFib3ZlLlxcbjM0NTM6XFx0XFx0XFx0ICogYWZ0ZXIgdGhpcyBsaW5lIHVzYWdlIGNvdW50ID09IDAgKi9cXG4zNDU0OlxcdFxcdFxcdG5mX2N0X2V4cGVjdF9wdXQoZXhwKTtcXG4zNDU1OlxcdFxcdH0gZWxzZSBpZiAoY2RhW0NUQV9FWFBFQ1RfSEVMUF9OQU1FXSkge1xcbjM0NTY6XFx0XFx0XFx0Y2hhciAqbmFtZSA9IG5sYV9kYXRhKGNkYVtDVEFfRVhQRUNUX0hFTFBfTkFNRV0pO1xcbjM0NTc6XFx0XFxuMzQ1ODpcXHRcXHRcXHRuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXQoaW5mby1cXHUwMDNlbmV0LCBleHBlY3RfaXRlcl9uYW1lLCBuYW1lLFxcbjM0NTk6XFx0XFx0XFx0XFx0XFx0XFx0IE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQsXFxuMzQ2MDpcXHRcXHRcXHRcXHRcXHRcXHQgbmxtc2dfcmVwb3J0KGluZm8tXFx1MDAzZW5saCkpO1xcbjM0NjE6XFx0XFx0fSBlbHNlIHtcXG4zNDYyOlxcdFxcdFxcdC8qIFRoaXMgYmFzaWNhbGx5IG1lYW5zIHdlIGhhdmUgdG8gZmx1c2ggZXZlcnl0aGluZyovXFxuMzQ2MzpcXHRcXHRcXHRuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXQoaW5mby1cXHUwMDNlbmV0LCBleHBlY3RfaXRlcl9hbGwsIE5VTEwsXFxuMzQ2NDpcXHRcXHRcXHRcXHRcXHRcXHQgTkVUTElOS19DQihza2IpLnBvcnRpZCxcXG4zNDY1OlxcdFxcdFxcdFxcdFxcdFxcdCBubG1zZ19yZXBvcnQoaW5mby1cXHUwMDNlbmxoKSk7XFxuMzQ2NjpcXHRcXHR9XFxuMzQ2NzpcXHRcXG4zNDY4OlxcdFxcdHJldHVybiAwO1xcbjM0Njk6XFx0fVxcbjM0NzA6XFx0c3RhdGljIGludFxcbjM0NzE6XFx0Y3RuZXRsaW5rX2NoYW5nZV9leHBlY3Qoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKngsXFxuMzQ3MjpcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pXFxuMzQ3MzpcXHR7XFxuMzQ3NDpcXHRcXHRpZiAoY2RhW0NUQV9FWFBFQ1RfVElNRU9VVF0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDAxOjM2OjIwLjY0MzQ1Mzc2MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2MjQ4NTcwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldGAqKlxuXG5Pa2F5LCB0aW1lIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldGAgaW1wbGVtZW50YXRpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gW21lbnRpb24gc3BlY2lmaWMgYXJlYXMgb3IgYXNwZWN0cyB5b3Ugd2FudCB0byBpbnZlc3RpZ2F0ZSBiYXNlZCBvbiB5b3VyIGV4cGVydGlzZSwgZS5nLiwgaG93IHRoZSBpdGVyYXRpb24gaXMgaGFuZGxlZCwgYW55IHBvdGVudGlhbCBsb2NraW5nIGlzc3VlcywgdGhlIGludGVyYWN0aW9uIHdpdGggY29ubmVjdGlvbiB0cmFja2luZyBlbnRyaWVzLCB3aGV0aGVyIHRoZXJlJ3MgYW55IGNsZXZlcm5lc3Mgd2l0aCBoYXNoIGJ1Y2tldHMsIG9yIGlmIHRoZSBjb2RlIGxvb2tzIGVsZWdhbnQgYW5kIGVmZmljaWVudF0uIEknbSBleHBlY3RpbmcgdG8gc2VlIFtNZW50aW9uIHdoYXQgeW91IGFyZSBleHBlY3RpbmcgdG8gc2VlLiBlLmcuIGhvdyB0aGUgZXhwZWN0IHRhYmxlIGlzIHdhbGtlZCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIHV0aWxpemVkLCBhbmQgd2hhdCBzb3J0IG9mIGxvY2tpbmcgaXMgYmVpbmcgZG9uZV0uIEhvcGVmdWxseSwgaXQncyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGRvZXNuJ3QgaGF2ZSBhbnkgb2J2aW91cyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciByYWNlIGNvbmRpdGlvbnMuIEkgd2FudCB0byBxdWlja2x5IGdyYXNwIGhvdyBpdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBleHBlY3RhdGlvbnMsIGhvdyBpdCBoYW5kbGVzIGNvbmN1cnJlbnQgYWNjZXNzLCBhbmQgd2hhdCB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhcmUuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIGZvciBjb25uZWN0aW9uIHRyYWNraW5nLCBhbmQgYW55IGluZWZmaWNpZW5jaWVzIGhlcmUgY291bGQgaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdCBvbiBvdmVyYWxsIG5ldHdvcmsgcGVyZm9ybWFuY2UuIEknbSBrZWVuIHRvIHNlZSBpZiBpdCdzIG9wdGltaXplZCBmb3IgY29tbW9uIHVzZSBjYXNlcyBvciBpZiB0aGVyZSdzIHJvb20gZm9yIGltcHJvdmVtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTEyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjoyMy4yNjgzMTM4NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyMTEwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jPTYxMj1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfaXRlcmF0ZV9kZXN0cm95KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy02MTMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6NjE0OnZvaWQgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy02MTUtXFx0XFx0XFx0ICAgICAgYm9vbCAoKml0ZXIpKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICplLCB2b2lkICpkYXRhKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTYzOS19XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6NjQwOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtNjQxLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM0MDg9c3RhdGljIGludCBjdG5ldGxpbmtfZGVsX2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0NTctXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM0NTg6XFx0XFx0bmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KGluZm8tXFx1MDAzZW5ldCwgZXhwZWN0X2l0ZXJfbmFtZSwgbmFtZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzQ1OS1cXHRcXHRcXHRcXHRcXHQgTkVUTElOS19DQihza2IpLnBvcnRpZCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNDYyLVxcdFxcdC8qIFRoaXMgYmFzaWNhbGx5IG1lYW5zIHdlIGhhdmUgdG8gZmx1c2ggZXZlcnl0aGluZyovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM0NjM6XFx0XFx0bmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KGluZm8tXFx1MDAzZW5ldCwgZXhwZWN0X2l0ZXJfYWxsLCBOVUxMLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNDY0LVxcdFxcdFxcdFxcdFxcdCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjoyMy4zMjQ1MzI2ODhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzcxODUzNDYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgLiBJdCdzIGxvY2F0ZWQgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCBpdGVyYXRpbmcgb3ZlciBvciBtYW5hZ2luZyBleHBlY3RlZCBjb25uZWN0aW9ucyB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3lzdGVtLiBHaXZlbiB0aGUgYGV4cGVjdGAgcHJlZml4LCBJJ20gYW50aWNpcGF0aW5nIHRoaXMgaXMgYSBjcml0aWNhbCBwaWVjZSBpbiBoYW5kbGluZyBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJpZXMgdGhhdCBhcmUgKmV4cGVjdGVkKiwgYnV0IG5vdCB5ZXQgZnVsbHkgZXN0YWJsaXNoZWQuIFRoaW5ncyBsaWtlIHBhc3NpdmUgRlRQIGRhdGEgY29ubmVjdGlvbnMsIE5BVCB0cmF2ZXJzYWwsIG9yIHBlcmhhcHMgZXZlbiBBTEctcmVsYXRlZCBjb25uZWN0aW9uIHNldHVwLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgYG5ldGZpbHRlcmAgc3Vic3lzdGVtIGhhcyB0aGUgdXN1YWwgaW1wbGljYXRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUgbG9ja2luZyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGxpa2VseSBpbnZvbHZlZCBhbmQgaG93IHRoZXkgaW50ZXJhY3QgdG8gbWFpbnRhaW4gdGhlIGludGVncml0eSBvZiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyB0YWJsZS4gTXkgZXhwZXJ0aXNlIGd1aWRlcyBtZSB0byBleHBlY3QgaXNzdWVzIHJlbGF0aW5nIHRvIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucyBoZXJlLCBwYXJ0aWN1bGFybHkgaWYgdGhlIGNvZGUncyBkZWFsaW5nIHdpdGggbXVsdGlwbGUgdGhyZWFkcyBvciBjb3JlcyB0cnlpbmcgdG8gbWFuaXB1bGF0ZSB0aGUgc2FtZSBleHBlY3RlZCBlbnRyeS4gSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgbG9jayBvcmRlciBpc3N1ZXMuIEkgd2lsbCBhbHNvIGJlIHByZXBhcmVkIHRvIG9ic2VydmUgaG93IHRoaXMgdGllcyBpbnRvIHRoZSByZXN0IG9mIHRoZSBuZXRmaWx0ZXIgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTA2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6MzY6MjcuMDQzMDcyODRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYxMDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKTtcXG4gNjExOlxcdH1cXG4gNjEyOlxcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9pdGVyYXRlX2Rlc3Ryb3kpO1xcbiA2MTM6XFx0XFxuIDYxNDpcXHR2b2lkIG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldChzdHJ1Y3QgbmV0ICpuZXQsXFxuIDYxNTpcXHRcXHRcXHRcXHQgICAgICBib29sICgqaXRlcikoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmUsIHZvaWQgKmRhdGEpLFxcbiA2MTY6XFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqZGF0YSxcXG4gNjE3OlxcdFxcdFxcdFxcdCAgICAgIHUzMiBwb3J0aWQsIGludCByZXBvcnQpXFxuIDYxODpcXHR7XFxuIDYxOTpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwO1xcbiA2MjA6XFx0XFx0Y29uc3Qgc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7XFxuIDYyMTpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4gNjIyOlxcdFxcbiA2MjM6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xcbiA2MjQ6XFx0XFxuIDYyNTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmZfY3RfZXhwZWN0X2hzaXplOyBpKyspIHtcXG4gNjI2OlxcdFxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXhwLCBuZXh0LFxcbiA2Mjc6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2bmZfY3RfZXhwZWN0X2hhc2hbaV0sXFxuIDYyODpcXHRcXHRcXHRcXHRcXHRcXHQgIGhub2RlKSB7XFxuIDYyOTpcXHRcXG4gNjMwOlxcdFxcdFxcdFxcdGlmICghbmV0X2VxKG5mX2N0X2V4cF9uZXQoZXhwKSwgbmV0KSlcXG4gNjMxOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA2MzI6XFx0XFxuIDYzMzpcXHRcXHRcXHRcXHRpZiAoaXRlcihleHAsIGRhdGEpKVxcbiA2MzQ6XFx0XFx0XFx0XFx0XFx0bmZfY3RfdW5saW5rX2V4cGVjdF9yZXBvcnQoZXhwLCBwb3J0aWQsIHJlcG9ydCk7XFxuIDYzNTpcXHRcXHRcXHR9XFxuIDYzNjpcXHRcXHR9XFxuIDYzNzpcXHRcXG4gNjM4OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xcbiA2Mzk6XFx0fVxcbiA2NDA6XFx0RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KTtcXG4gNjQxOlxcdFxcbiA2NDI6XFx0I2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ0ZTXFxuIDY0MzpcXHRzdHJ1Y3QgY3RfZXhwZWN0X2l0ZXJfc3RhdGUge1xcbiA2NDQ6XFx0XFx0c3RydWN0IHNlcV9uZXRfcHJpdmF0ZSBwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjoyNy4wNDMyMjUxNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NDI0NTYxNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBDb25jdXJyZW5jeSBJc3N1ZSBpbiBuZXRmaWx0ZXIvbmZfY29ubnRyYWNrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0YCBmdW5jdGlvbiwgYW5kIGl0IGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbiBiZWNhdXNlIGl0IGFjcXVpcmVzIGBzcGluX2xvY2tfYmgoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKWAuIE5vdywgdGhlIGludGVyZXN0aW5nIGJpdCBpcyB0aGUgbGluZSBgaGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGV4cC1cdTAwM2VoZWxwZXIpO2AgcmlnaHQgYmVmb3JlIHRoYXQuIEkgaW1tZWRpYXRlbHkgcmVhbGl6ZSB0aGlzIGlzIGEgcG90ZW50aWFsIGxvY2tkZXAgcHJvYmxlbS5cblxuYHJjdV9kZXJlZmVyZW5jZWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCB1bmRlciBhbiBSQ1UgcmVhZCBsb2NrLCBhcyB2ZXJpZmllZCBieSBsb2NrZGVwIGFuZCBSQ1UgZGVidWdnaW5nIChQUk9WRV9SQ1UpLiBUaGUgZmFjdCB0aGF0IHRoZSBjb2RlIGlzIHRha2luZyBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYCBoZXJlLCBhbmQgbm90IG5lY2Vzc2FyaWx5IGFuIFJDVSByZWFkIGxvY2ssIHJhaXNlcyBhIHJlZCBmbGFnLiBTbywgdGhlIGZpeCwgb3IgbW9yZSBhY2N1cmF0ZWx5IHRoZSBjaGFuZ2UgdG8gdGhlIGxvY2tkZXAgY2hlY2ssIHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGV4cC1cdTAwM2VoZWxwZXIsIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spKTtgIHdoaWNoIGlzIGdvb2QuXG5cbkJ1dCwgaGFuZyBvbuKApiBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zLiBUaGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFuIGFzc2VydGlvbiDigJMgZXNzZW50aWFsbHkgYSBuZXcgY2hlY2ssIHdoaWNoIGlzIGEgYmlnIGRlYWwgYW5kIHNob3VsZCBiZSBmdXp6ZWQhIFNlY3Rpb24gMSBhbmQgMyBvZiB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBhcmUgc2NyZWFtaW5nIGF0IG1lOiAqTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQqLiBCeSB1c2luZyBgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZGAgd2l0aCB0aGF0IGBsb2NrZGVwX2lzX2hlbGRgIGFzc2VydGlvbiwgd2UncmUgY2hhbmdpbmcgdGhlIHZhbGlkYXRpb24uIFNwZWNpZmljYWxseSwgYHJjdV9kZXJlZmVyZW5jZWAgd2FzIG9yaWdpbmFsbHkgYXNzZXJ0aW5nIGByY3VfcmVhZF9sb2NrX2hlbGQoKWAsIGFuZCBub3cgaXQncyBhc3NlcnRpbmcgYGxvY2tkZXBfaXNfaGVsZChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spYCFcblxuQW5kIHRoaXMgaXMgbm90IHNvbWUgb2JzY3VyZSBjb3JuZXIgY2FzZS4gVGhlIGNvZGUgaXMgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLCB3aGljaCBpcyB0aGUgY29yZSBvZiBuZXRmaWx0ZXIncyBuZXRsaW5rIGludGVyZmFjZS4gSXQncyB0b3RhbGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIG5ldGZpbHRlciBuZXRsaW5rIHNvY2tldHMgKGBORk5MX1NVQlNZU19DVE5FVExJTktfRVhQYCwgYElQQ1ROTF9NU0dfRVhQX0RFTEVURWApLiBUaGlzIGlzIGhpZ2gtdmFsdWUsIHVzZXItYWNjZXNzaWJsZSBjb2RlISBUaGUgcG90ZW50aWFsIGZvciB1bnVzdWFsIG9wZXJhdGlvbiBzZXF1ZW5jZXMgdGhhdCB0cmlnZ2VyIHRoZSBhc3NlcnRpb24gaXMgdmVyeSByZWFsLiBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyByZXF1aXJlbWVudHMgZm9yIHRoaXMgZmlsZSB0b28gdG8gZW5zdXJlIHRoZSBmdXp6aW5nIGlzIGFjdHVhbGx5IHJlbGV2YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODAyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6MzY6MzEuNDY3Nzg5OTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTc3NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja19uZXRsaW5rXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MzQ9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDSykgKz0gbmZfY29ubnRyYWNrLm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzYtIyBuZXRsaW5rIGludGVyZmFjZSBmb3IgbmZfY29ubnRyYWNrXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfTkZfQ1RfTkVUTElOSykgKz0gbmZfY29ubnRyYWNrX25ldGxpbmsub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfVElNRU9VVCkgKz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDAxOjM2OjMxLjUyMjM3Mzk1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwMzI1MDkzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgTkZfQ1RfTkVUTElOS2AgaW4gS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgbmV0bGluayBpbnRlcmFjdHMgd2l0aCBjb25uZWN0aW9uIHRyYWNraW5nLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIGNoZWNrIHRoZSBLY29uZmlnIGVudHJ5IGZvciBgTkZfQ1RfTkVUTElOS2AuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGF0IG9wdGlvbiBjb250cm9scyBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqIGl0J3MgcmVsZXZhbnQgaW4gdGhlIGNvbnRleHQgSSdtIGN1cnJlbnRseSB3b3JraW5nIGluLiBJcyB0aGlzIGVuYWJsaW5nIG5ldGxpbmsgbm90aWZpY2F0aW9ucyBmb3IgY29ubmVjdGlvbiBldmVudHM/IERvZXMgaXQgZXhwb3NlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaW5mb3JtYXRpb24gdG8gdXNlcnNwYWNlIGFwcGxpY2F0aW9ucywgYW5kIGlmIHNvLCB3aGF0IGtpbmQ/IEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBJIG5lZWQgdG8gY2xhcmlmeSB3aGV0aGVyIHRoaXMgaXMgdGhlIGtleSB0byBteSBjdXJyZW50IGlzc3VlIG9yIGp1c3QgYSBwb3RlbnRpYWwgZGlzdHJhY3Rpb24uIFJpZ2h0LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjozNC41NTQ4ODY0MjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxODE4NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DVF9ORVRMSU5LXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTM1NT1jb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNjUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM2Njpjb25maWcgTkZfQ1RfTkVUTElOS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNjctXFx0dHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDAxOjM2OjM0LjYwNjcxMTIwMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDY1NzA4ODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgdGhpbmtpbmcgdGhyb3VnaCB0aGUgS2NvbmZpZyBlbnRyeTpcblxuKipBbmFseXppbmcgYE5GX0NUX05FVExJTktgIGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgKipcblxuT2theSwgSSdtIGRpdmluZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZm9yIGBORl9DVF9ORVRMSU5LYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBuZXRsaW5rLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoZSBOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHJlYWQgdGhlIGVudHJ5IGNhcmVmdWxseSB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBkZXBlbmRlbmNpZXMuIFdoYXQgZG9lcyBpdCBhY3R1YWxseSAqZG8qPyBJcyBpdCBlbmFibGluZyBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LCBkZWJ1Z2dpbmcgZmVhdHVyZXMsIG9yIGlzIGl0IG1lcmVseSBzZXR0aW5nIHRoZSBzdGFnZSBmb3Igc29tZXRoaW5nIGVsc2U/IEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgaGVscGAgdGV4dCDigJMgdGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIGV4cGxhbmF0aW9uIGlzLlxuXG5JJ2xsIGxvb2sgYXQgdGhlIGRlcGVuZGVuY2llcy4gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzIHRoYXQgKm11c3QqIGJlIGVuYWJsZWQgZm9yIGBORl9DVF9ORVRMSU5LYCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IFdoYXQgb3RoZXIgcmVsYXRlZCBvcHRpb25zIGFyZSBpbnZvbHZlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgY29uZmlnIG9wdGlvbiBhbmQgb3RoZXIgTmV0ZmlsdGVyIGNvbXBvbmVudHMsIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYnJvYWRlciBuZXR3b3JraW5nIHN0YWNrLiBJJ2xsIG1lbnRhbGx5IG1hcCBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBvcHRpb24uXG5cbkZpbmFsbHksIEknbGwgY29uc2lkZXIgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24ga2VybmVsIHNpemUsIHBlcmZvcm1hbmNlLCBhbmQgc2VjdXJpdHkuIFdoYXQgYXJlIHRoZSB0cmFkZS1vZmZzPyBEb2VzIGVuYWJsaW5nIGl0IGludHJvZHVjZSBhbnkga25vd24gdnVsbmVyYWJpbGl0aWVzPyBJcyBpdCBhIGNvcmUgZmVhdHVyZSwgYSBkZWJ1Z2dpbmcgYWlkLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gQWZ0ZXIgYW5hbHl6aW5nIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIE5ldGZpbHRlciBlY29zeXN0ZW0gYW5kIGRldGVybWluaW5nIGl0cyBwdXJwb3NlLCBJIGNhbiBwcm9wZXJseSB1bmRlcnN0YW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgcGxhY2UgaW4gdGhlIHByb2plY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjozNy4wNzI0MjQ2NzJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNjU6XFx0XFxuIDM2NjpcXHRjb25maWcgTkZfQ1RfTkVUTElOS1xcbiAzNjc6XFx0XFx0dHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UnXFxuIDM2ODpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gMzY5OlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAzNzA6XFx0XFx0aGVscFxcbiAzNzE6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGEgbmV0bGluay1iYXNlZCB1c2Vyc3BhY2UgaW50ZXJmYWNlXFxuIDM3MjpcXHRcXG4gMzczOlxcdGNvbmZpZyBORl9DVF9ORVRMSU5LX1RJTUVPVVRcXG4gMzc0OlxcdFxcdHRyaXN0YXRlICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0IHR1bmluZyB2aWEgTmV0bGluaydcXG4gMzc1OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAzNzY6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gMzc3OlxcdFxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG4gMzc4OlxcdFxcdGhlbHBcXG4gMzc5OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBjb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXRcXG4gMzgwOlxcdFxcdCAgZmluZS1ncmFpbiB0dW5pbmcuIFRoaXMgYWxsb3dzIHlvdSB0byBhdHRhY2ggc3BlY2lmaWMgdGltZW91dFxcbiAzODE6XFx0XFx0ICBwb2xpY2llcyB0byBmbG93cywgaW5zdGVhZCBvZiB1c2luZyB0aGUgZ2xvYmFsIHRpbWVvdXQgcG9saWN5LlxcbiAzODI6XFx0XFxuIDM4MzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IGBOJy5cXG4gMzg0OlxcdFxcbiAzODU6XFx0Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXFxuIDM4NjpcXHRcXHR0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGluIHVzZXItc3BhY2UgdmlhIE5ldGxpbmsnXFxuIDM4NzpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gMzg4OlxcdFxcdGRlcGVuZHMgb24gTkZfQ1RfTkVUTElOS1xcbiAzODk6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjozNy4wNzI1MzQzMTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjYzNjk2OTQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIE5GXFxfQ1RcXF9ORVRMSU5LKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgTkZfQ1RfTkVUTElOS2AgaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsgcmVsaWVzIHVwb24uIE15IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZSwgc2luY2UgdGhhdCdzIHdoZXJlIGRlcGVuZGVuY2llcyBhcmUgdXN1YWxseSBkZWZpbmVkLiBJIGtub3cgaXQncyBsb2NhdGVkIGluIGBuZXQvbmV0ZmlsdGVyL2AsIHNvIEknbGwgc3RhcnQgYnkgbG9va2luZyBhdCB0aGF0LiBOb3csIEkgdmFndWVseSByZWNhbGwgdGhhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSB0eXBpY2FsbHkgbGlzdGVkIG5lYXIgdGhlIHJlbGV2YW50IG9wdGlvbidzIGRlZmluaXRpb24sIGFuZCB0aGF0IGlzIHVzdWFsbHkgd2VsbCBhYm92ZSB0aGUgbGluZSB3aGVyZSBpdCBpcyBkZWZpbmVkLiBTbywgbGV0J3Mgc3RhcnQgYXJvdW5kIGxpbmUgMzY1LCBhcyB0aGUgcHJvbXB0IHN1Z2dlc3RlZCwgYW5kIHdvcmsgb3VyIHdheSB1cHdhcmRzIHVudGlsIEkgZmluZCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgb3Igc2ltaWxhciBjb25maWcgb3B0aW9ucyB0aGF0IHBvaW50IHRvIHdoYXQgYE5GX0NUX05FVExJTktgIHJlcXVpcmVzIHRvIGJlIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5ODksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDAxOjM2OjM5LjcwOTUwNzEyMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDIzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51IFxcXCJDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uXFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUlxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgTkVURklMVEVSX0lOR1JFU1NcXG4gICA2OlxcdFxcdGJvb2wgXFxcIk5ldGZpbHRlciBpbmdyZXNzIHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRkZWZhdWx0IHlcXG4gICA4OlxcdFxcdHNlbGVjdCBORVRfSU5HUkVTU1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gY2xhc3NpZnkgcGFja2V0cyBmcm9tIGluZ3Jlc3MgdXNpbmcgdGhlIE5ldGZpbHRlclxcbiAgMTE6XFx0XFx0ICBpbmZyYXN0cnVjdHVyZS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0Y29uZmlnIE5FVEZJTFRFUl9FR1JFU1NcXG4gIDE0OlxcdFxcdGJvb2wgXFxcIk5ldGZpbHRlciBlZ3Jlc3Mgc3VwcG9ydFxcXCJcXG4gIDE1OlxcdFxcdGRlZmF1bHQgeVxcbiAgMTY6XFx0XFx0c2VsZWN0IE5FVF9FR1JFU1NcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgVGhpcyBhbGxvd3MgeW91IHRvIGNsYXNzaWZ5IHBhY2tldHMgYmVmb3JlIHRyYW5zbWlzc2lvbiB1c2luZyB0aGVcXG4gIDE5OlxcdFxcdCAgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgTkVURklMVEVSX1NLSVBfRUdSRVNTXFxuICAyMjpcXHRcXHRkZWZfYm9vbCBORVRGSUxURVJfRUdSRVNTIFxcdTAwMjZcXHUwMDI2IChORVRfQ0xTX0FDVCB8fCBJRkIpXFxuICAyMzpcXHRcXG4gIDI0OlxcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS1xcbiAgMjU6XFx0XFx0Ym9vbFxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcXG4gIDI4OlxcdFxcdGJvb2xcXG4gIDI5OlxcdFxcbiAgMzA6XFx0Y29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQVJQXFxuICAzMTpcXHRcXHRib29sXFxuICAzMjpcXHRcXG4gIDMzOlxcdGNvbmZpZyBORVRGSUxURVJfQlBGX0xJTktcXG4gIDM0OlxcdFxcdGRlZl9ib29sIEJQRl9TWVNDQUxMXFxuICAzNTpcXHRcXG4gIDM2OlxcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXFxuICAzNzpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGJhc2UgaG9vayBkdW1wIHN1cHBvcnRcXFwiXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAgMzk6XFx0XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcXG4gIDQwOlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjozOS43MDk2NTE4NjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI3NjkxNTI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgdGhlIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGUgbmV0d29yayBmaWx0ZXJpbmcgY29uZmlndXJhdGlvbiB0byBzZWUgaWYgYE5GX0NPTk5UUkFDS2AgaXMgZGVmaW5lZC4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyBvdmVyIHRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIGNvbmZpcm0gaXRzIHN0YXR1cy4gS25vd2luZyBpZiBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGVuYWJsZWQgYXQgdGhlIGtlcm5lbCBsZXZlbCBpcyB0aGUgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIHN0YXRlZnVsIHBhY2tldCBpbnNwZWN0aW9uIGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggb3RoZXIgTmV0ZmlsdGVyIG1vZHVsZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IGlmIHRoaXMgZmVhdHVyZSBpcyBiZWluZyB1c2VkLiBUaGlzIGNvdWxkIGhhdmUgYSBiaWcgaW1wYWN0IG9uIG92ZXJhbGwgbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjkzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjo0MS45ODY1Njk5NjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODYzMDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmIE5GX0NPTk5UUkFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9OTg9Y29uZmlnIE5GX0xPR19TWVNMT0dcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMDktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjExMDppZiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTExLWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDAxOjM2OjQyLjAzNzQ0MjUzNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMjU0MzU1MTYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBOZXRmaWx0ZXIgQ29ubnRyYWNrIE5ldGxpbmsgUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHRoYXQgYE5GX0NUX05FVExJTktgIGlzIGNvbnRpbmdlbnQgb24gYE5GX0NPTk5UUkFDS2AsIGFuZCBib3RoIGFyZSB1bmRlciBgSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSYCwgc28gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgTkVURklMVEVSYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfQ1RfTkVUTElOS2AuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIGNvZGUuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgZXhwZWN0X2l0ZXJfbmFtZWAsIHdoaWNoIGlzIGRlY2xhcmVkIGBzdGF0aWNgIHdpdGhpbiBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2AuIEluaXRpYWxseSwgSSB3YXMgYSBiaXQgY29uY2VybmVkIGFib3V0IHN0YXRpYyBmdW5jdGlvbnMsIGFzIHRoZXkgY2FuIHNvbWV0aW1lcyBiZSBpbmxpbmVkLCBhbmQgdGhvc2UgYXJlIGRpZmZpY3VsdCB0byB0YXJnZXQgZGlyZWN0bHkgd2l0aCBzeW1ib2wgY292ZXJhZ2UuIEhvd2V2ZXIsIHRoZSBkb2N1bWVudGF0aW9uIGNsYXJpZmllcyB0aGF0IHdlIHNob3VsZCBsb29rIGZvciBub24tc3RhdGljIGNhbGxlcnMgaWYgdGhlIGNvZGUgdXNlcyBzdGF0aWMgaW5saW5lcyBpbiAuaCBmaWxlcy5cblxuQnV0LCBgZXhwZWN0X2l0ZXJfbmFtZWAgaXMgaW4gYSBgLmNgIGZpbGUsIG5vdCBhIGAuaGAgaGVhZGVyLCBzbyBpcyBpdCBpbmxpbmVkPyBMZXQncyB2ZXJpZnkuIExpbmUgMzQ1OCBzaG93cyBpdHMgYWRkcmVzcyBpcyB0YWtlbiBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgYXJndW1lbnQsIHNvIHRoZSBjb21waWxlciBjYW5ub3QgaW5saW5lIGl0LiBUaHVzLCBgZXhwZWN0X2l0ZXJfbmFtZWAgaXMgYSBkaXN0aW5jdCBzeW1ib2wuIFRoZSBkaXJlY3QgQVBJIGVudHJ5cG9pbnQgaW4gdGhpcyBjYXNlIGlzIGBjdG5ldGxpbmtfZGVsX2V4cGVjdGAsIHdoaWNoIGNhbGxzIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgLCBhbmQgdGhhdCBpbiB0dXJuIGNhbGxzIGBleHBlY3RfaXRlcl9uYW1lYCwgc28gdGhleSBib3RoIGFyZSB2YWxpZCBmb2N1cyBzeW1ib2xzLiBDaGVja2luZyBmb3Igb3RoZXIgY2FsbGVycyBvZiBgZXhwZWN0X2l0ZXJfbmFtZWAgY29uZmlybXMgdGhhdCBgY3RuZXRsaW5rX2RlbF9leHBlY3RgIGlzIHRoZSBzb2xlIGNhbGxlci5cblxuTG9va2luZyBhdCB0aGUgZ2l0IGRpZmYsIHRoZSBjaGFuZ2UgaW52b2x2ZXMgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWRgIHdpdGggYSBgbG9ja2RlcF9pc19oZWxkYCBhc3NlcnRpb24uIFRoaXMgYXNzZXJ0aW9uIGNoZWNrIG1lYW5zIHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGB0cnVlYCBiZWNhdXNlIGl0IGludHJvZHVjZXMgYSBydW50aW1lIGFzc2VydGlvbiBpbiByZWFjaGFibGUgY29kZS4gTmV0ZmlsdGVyIG5ldGxpbmsgaXMgZWFzaWx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgc28gdGhpcyBjb2RlIGlzIGluZGVlZCByZWFjaGFibGUuIEFsc28gU3l6a2FsbGVyIGFjdGl2ZWx5IHRlc3RzIHRoZXNlIG5ldGxpbmsgc29ja2V0cywgc3BlY2lmaWNhbGx5IGBuZm5ldGxpbmtgIGFuZCBgY3RuZXRsaW5rYCwgbWFraW5nIHRoaXMgZXZlbiBtb3JlIHJlbGV2YW50IHRvIGZ1enppbmcuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgZm9jdXMgc3ltYm9sczogYGV4cGVjdF9pdGVyX25hbWVgIGFuZCBgY3RuZXRsaW5rX2RlbF9leHBlY3RgIGFyZSB0aGUgbW9zdCBzcGVjaWZpYyBhbmQgdXNlZnVsIHRhcmdldHMgaGVyZS5cblxuRmluYWxseSwgd2UgbmVlZCB0byBsaXN0IHRoZSBlbmFibGUgY29uZmlndXJhdGlvbnMsIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0IHRoZSBjb25maWdzIHJlcXVpcmVkIGZvciB0aGUgY29kZSBhcmUgYE5GX0NUX05FVExJTktgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORVRGSUxURVJgLlxuXG5TbywgdGhlIGZ1enppbmcgdmVyZGljdCBpcyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIFRoZSBgUmVhc29uaW5nYCBzaG91bGQgYmU6IFwiVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2RlcCBhc3NlcnRpb24gKGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkYCkgaW4gcmVhY2hhYmxlIE5ldGZpbHRlciBuZXRsaW5rIGNvZGUuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZy5cIlxuXG5UaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGBbXCJleHBlY3RfaXRlcl9uYW1lXCIsIFwiY3RuZXRsaW5rX2RlbF9leHBlY3RcIl1gLCBhbmQgdGhlIGBFbmFibGVDb25maWdzYCBhcmUgYFtcIk5GX0NUX05FVExJTktcIiwgXCJORl9DT05OVFJBQ0tcIiwgXCJORVRGSUxURVJcIl1gLiBFdmVyeXRoaW5nIGlzIGFjY291bnRlZCBmb3IsIGFuZCBpdCBpcyBhIHNvbGlkIHBsYW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTcxLCJPdXRwdXRUb2tlbnMiOjE2MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6MzY6NTQuNTgxMDAwNTU2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIwMzM4ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NUX05FVExJTktcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXhwZWN0X2l0ZXJfbmFtZVwiLFxuICAgIFwiY3RuZXRsaW5rX2RlbF9leHBlY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleHBlY3RfaXRlcl9uYW1lKCkgaW4gbmV0ZmlsdGVyJ3MgY3RuZXRsaW5rIGltcGxlbWVudGF0aW9uLCByZXBsYWNpbmcgcmN1X2RlcmVmZXJlbmNlKCkgd2l0aCByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKCkgYW5kIGVuZm9yY2luZyBhIGxvY2tkZXAgYXNzZXJ0aW9uIGNoZWNraW5nIG5mX2Nvbm50cmFja19leHBlY3RfbG9jay4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgc29ja2V0cyAoQ1RBX0VYUEVDVF9IRUxQX05BTUUgaW4gY3RuZXRsaW5rX2RlbF9leHBlY3QpIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIHRlc3QgdGhlIG5ldyBsb2NraW5nIGFzc2VydGlvbiBhbmQgcHJldmVudCByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4cGVjdF9pdGVyX25hbWVcIixcbiAgICBcImN0bmV0bGlua19kZWxfZXhwZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXhwZWN0X2l0ZXJfbmFtZSgpIGluIG5ldGZpbHRlcidzIGN0bmV0bGluayBpbXBsZW1lbnRhdGlvbiwgcmVwbGFjaW5nIHJjdV9kZXJlZmVyZW5jZSgpIHdpdGggcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCgpIGFuZCBlbmZvcmNpbmcgYSBsb2NrZGVwIGFzc2VydGlvbiBjaGVja2luZyBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2suIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIHNvY2tldHMgKENUQV9FWFBFQ1RfSEVMUF9OQU1FIGluIGN0bmV0bGlua19kZWxfZXhwZWN0KSBhbmQgd2FycmFudHMgZnV6emluZyB0byB0ZXN0IHRoZSBuZXcgbG9ja2luZyBhc3NlcnRpb24gYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDAxOjM2OjU0LjY2MzA0MzE3NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0ODQzNTU4MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjo1NC42NjM1MTMxNDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTQ4Mzg4MDYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYHJjdV9kZXJlZmVyZW5jZShleHAtXFx1MDAzZWhlbHBlcilgIHdpdGggYHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZXhwLVxcdTAwM2VoZWxwZXIsIGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSlgIGluIGBleHBlY3RfaXRlcl9uYW1lKClgLlxcblxcbmBleHBlY3RfaXRlcl9uYW1lKClgIGlzIGludm9rZWQgYXMgYW4gaXRlcmF0b3IgY2FsbGJhY2sgZnJvbSBgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KClgLCB3aGljaCBhY3F1aXJlcyBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYCB2aWEgYHNwaW5fbG9ja19iaCgpYC4gVXNpbmcgYHJjdV9kZXJlZmVyZW5jZSgpYCB3aXRob3V0IGFuIFJDVSByZWFkLXNpZGUgbG9jayBjYXVzZXMgbG9ja2RlcC9SQ1UgZGVidWdnaW5nIHdhcm5pbmdzIHdoZW4gYENPTkZJR19QUk9WRV9SQ1VgIGlzIGVuYWJsZWQuIFRoZSBjaGFuZ2UgdXBkYXRlcyB0aGUgUkNVIGRlcmVmZXJlbmNlIG1hY3JvIHRvIGluZGljYXRlIHRoYXQgdGhlIGFjY2VzcyBpcyBwcm90ZWN0ZWQgYnkgYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFuIFJDVS9sb2NrZGVwIGFubm90YXRpb24uIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSwgY2hhbmdlIGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBhbHRlciBidWZmZXIgYm91bmRzIG9yIG1lbW9yeSBjb3B5aW5nLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJlNjZmNGNkZjkyOGUwODk1ZjgwYTJiNDBhNjI0MDlmZDhhMDg0MGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAwMTozNjowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuaW5kZXggNTc5YWRhMDYzYjFiYi4uNGU1ZDdjNzAxNDM2OCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5AQCAtMzM5Miw3ICszMzkyLDggQEAgc3RhdGljIGJvb2wgZXhwZWN0X2l0ZXJfbmFtZShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCB2b2lkICpkYXRhKVxuIFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjtcbiBcdGNvbnN0IGNoYXIgKm5hbWUgPSBkYXRhO1xuIFxuLVx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGV4cC1cdTAwM2VoZWxwZXIpO1xuK1x0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChleHAtXHUwMDNlaGVscGVyLFxuK1x0XHRcdFx0XHQgICBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSk7XG4gXHRpZiAoIWhlbHBlcilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6MzY6NTQuNjYzNTE0MDI1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU1NjkzMjQ5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29ubnRyYWNrIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwcm92aWRlZCBwYXRjaCB0YXJnZXRzIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIGludGVyYWN0aW9ucyB3aXRoIHRoZSBuZXRsaW5rIGludGVyZmFjZS4gVGhlIGNoYW5nZSBpcyBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IGNyaXRpY2FsLiBUaGV5J3ZlIHVwZGF0ZWQgdGhlIGBleHBlY3RfaXRlcl9uYW1lYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgdGhlIGBoZWxwZXJgIG1lbWJlciBvZiBgbmZfY29ubnRyYWNrX2V4cGVjdGAgaXMgYWNjZXNzZWQuXG5cbkJlZm9yZSB0aGUgcGF0Y2gsIHdlIGhhZCBhIHNpbXBsZSBgcmN1X2RlcmVmZXJlbmNlYC4gTm93LCBpdCdzIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkYCB3aXRoIGEgbG9jayBkZXBlbmRlbmN5IGNoZWNrIHVzaW5nIGBsb2NrZGVwX2lzX2hlbGRgIG9uIGBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2tgLiBUaGF0J3MgYSByZWQgZmxhZyDigJMgYSBnb29kIG9uZS4gSXQgaW5kaWNhdGVzIGEgcG90ZW50aWFsIGRhdGEgcmFjZSBvciBzeW5jaHJvbml6YXRpb24gaXNzdWUgd2FzIGlkZW50aWZpZWQsIGFuZCB0aGlzIHBhdGNoIGFpbXMgdG8gcHJvdmlkZSBhIG1vcmUgcm9idXN0IG1lbW9yeSBiYXJyaWVyLiBUaGlzIGhpbnRzIGF0IHRoZSBwb3NzaWJpbGl0eSBvZiBhIHVzZS1hZnRlci1mcmVlIG9yIGRhdGEgY29ycnVwdGlvbiBzY2VuYXJpbyBpZiB0aGUgYGhlbHBlcmAgcG9pbnRlciBpcyBhY2Nlc3NlZCBjb25jdXJyZW50bHkgd2l0aCBtb2RpZmljYXRpb25zIHRvIHRoZSBgbmZfY29ubnRyYWNrX2V4cGVjdGAgc3RydWN0dXJlLiBUaGUgbG9jayBpbXBsaWVzIHdlIGFyZSBwcm9iYWJseSBtb3ZpbmcgZnJvbSBhIFJDVS1vbmx5IHdvcmxkIHRvIGEgbW9yZSBjb21wbGV4IGxvY2tpbmcgc2NoZW1lLCBidXQgcGVyaGFwcyBvbmx5IGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC5cblxuVG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGFuZCB0aGUgc2V2ZXJpdHkgb2YgdGhlIG9yaWdpbmFsIGZsYXcsIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGdyYWIgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgbGluZSAzMzkyLiBMZXQncyB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgYG5mX2Nvbm50cmFja19leHBlY3RgIHN0cnVjdHVyZSBpcyB1c2VkLCBob3cgdGhlIGhlbHBlciBpcyBhc3NpZ25lZCwgYW5kIHdoYXQgb3RoZXIgdGhyZWFkcyBtaWdodCBiZSBpbnZvbHZlZCBpbiB0aGUgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gb2YgdGhlIGBoZWxwZXJgIHBvaW50ZXIuIEtub3dpbmcgd2hhdCBvdGhlciBkYXRhIGlzIGJlaW5nIHJlYWQgYW5kIG1vZGlmaWVkIG9uIHRoZSBzYW1lIHN0cnVjdHVyZXMgd2lsbCBoaWdobGlnaHQgd2hlcmUgdGhlIHJhY2UgY29uZGl0aW9uIG9jY3Vycy4gSSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSBob3cgYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AgaXMgYWNxdWlyZWQgYW5kIHJlbGVhc2VkLlxuXG5JdCdzIGEgZ29vZCBwYXRjaCBzbyBmYXIgYmVjYXVzZSBpdCBsb29rcyBsaWtlIHdlJ3JlIG1vdmluZyB0b3dhcmRzIG1vcmUgZGlzY2lwbGluZWQgbWVtb3J5IGFjY2Vzcy4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYnJvYWRlciBjb2RlIGNvbnRleHQgYmVmb3JlIEkgY2FuIGZ1bGx5IGFzc2VzcyB0aGUgaW1wYWN0IGFuZCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDAxOjM3OjAwLjIzMjg0MzM2N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzg2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzODA6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jayk7XFxuMzM4MTpcXHRcXG4zMzgyOlxcdFxcdGlmIChlcnIgXFx1MDAzYz0gMCkge1xcbjMzODM6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYjIpO1xcbjMzODQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzM4NTpcXHRcXHR9XFxuMzM4NjpcXHRcXG4zMzg3OlxcdFxcdHJldHVybiBuZm5ldGxpbmtfdW5pY2FzdChza2IyLCBpbmZvLVxcdTAwM2VuZXQsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQpO1xcbjMzODg6XFx0fVxcbjMzODk6XFx0XFxuMzM5MDpcXHRzdGF0aWMgYm9vbCBleHBlY3RfaXRlcl9uYW1lKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHZvaWQgKmRhdGEpXFxuMzM5MTpcXHR7XFxuMzM5MjpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyO1xcbjMzOTM6XFx0XFx0Y29uc3QgY2hhciAqbmFtZSA9IGRhdGE7XFxuMzM5NDpcXHRcXG4zMzk1OlxcdFxcdGhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZXhwLVxcdTAwM2VoZWxwZXIsXFxuMzM5NjpcXHRcXHRcXHRcXHRcXHRcXHQgICBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jaykpO1xcbjMzOTc6XFx0XFx0aWYgKCFoZWxwZXIpXFxuMzM5ODpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMzM5OTpcXHRcXG4zNDAwOlxcdFxcdHJldHVybiBzdHJjbXAoaGVscGVyLVxcdTAwM2VuYW1lLCBuYW1lKSA9PSAwO1xcbjM0MDE6XFx0fVxcbjM0MDI6XFx0XFxuMzQwMzpcXHRzdGF0aWMgYm9vbCBleHBlY3RfaXRlcl9hbGwoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdm9pZCAqZGF0YSlcXG4zNDA0OlxcdHtcXG4zNDA1OlxcdFxcdHJldHVybiB0cnVlO1xcbjM0MDY6XFx0fVxcbjM0MDc6XFx0XFxuMzQwODpcXHRzdGF0aWMgaW50IGN0bmV0bGlua19kZWxfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuMzQwOTpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbjM0MTA6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKVxcbjM0MTE6XFx0e1xcbjM0MTI6XFx0XFx0dV9pbnQ4X3QgdTMgPSBpbmZvLVxcdTAwM2VuZm1zZy1cXHUwMDNlbmZnZW5fZmFtaWx5O1xcbjM0MTM6XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDtcXG4zNDE0OlxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7XFxuMzQxNTpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgem9uZTtcXG4zNDE2OlxcdFxcdGludCBlcnI7XFxuMzQxNzpcXHRcXG4zNDE4OlxcdFxcdGlmIChjZGFbQ1RBX0VYUEVDVF9UVVBMRV0pIHtcXG4zNDE5OlxcdFxcdFxcdC8qIGRlbGV0ZSBhIHNpbmdsZSBleHBlY3QgYnkgdHVwbGUgKi9cXG4zNDIwOlxcdFxcdFxcdGVyciA9IGN0bmV0bGlua19wYXJzZV96b25lKGNkYVtDVEFfRVhQRUNUX1pPTkVdLCBcXHUwMDI2em9uZSk7XFxuMzQyMTpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4zNDIyOlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzQyMzpcXHRcXG4zNDI0OlxcdFxcdFxcdGVyciA9IGN0bmV0bGlua19wYXJzZV90dXBsZShjZGEsIFxcdTAwMjZ0dXBsZSwgQ1RBX0VYUEVDVF9UVVBMRSxcXG4zNDI1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICB1MywgTlVMTCk7XFxuMzQyNjpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4zNDI3OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzQyODpcXHRcXG4zNDI5OlxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6Mzc6MDAuMjMzMTI2NTI3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2MzY5Mzc5MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipUcmFjaW5nIHRoZSBVc2FnZSBvZiBgZXhwZWN0X2l0ZXJfbmFtZWAqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIGBleHBlY3RfaXRlcl9uYW1lYC4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQsIGFzIGFsd2F5cywgaXMgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icyBvZiBpdHMgdXNhZ2UuIExldCdzIGZpbmQgb3V0IHdoZXJlIHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgY2FsbGVkLiBJJ20gZ29pbmcgdG8gcnVuIGEgcXVpY2sgc2VhcmNoIGZvciBhbGwgdGhlIGNhbGxlcnMgb2YgYGV4cGVjdF9pdGVyX25hbWVgIHdpdGhpbiB0aGUgY29kZWJhc2UuIEtub3dpbmcgdGhlIGNvbnRleHRzIHdoZXJlIGl0J3MgdXNlZCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiBhbnkgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgZWFjaCBjYWxsIHNpdGUgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gaG93IGl0J3MgYmVpbmcgZW1wbG95ZWQgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MzU1NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6Mzc6MDEuODcwMDY3NzYyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjEwNzIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHBlY3RfaXRlcl9uYW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzMxMT1zdGF0aWMgaW50IGN0bmV0bGlua19nZXRfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzM4OS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MzM5MDpzdGF0aWMgYm9vbCBleHBlY3RfaXRlcl9uYW1lKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHZvaWQgKmRhdGEpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTMzOTEte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM0MDg9c3RhdGljIGludCBjdG5ldGxpbmtfZGVsX2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0NTctXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM0NTg6XFx0XFx0bmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KGluZm8tXFx1MDAzZW5ldCwgZXhwZWN0X2l0ZXJfbmFtZSwgbmFtZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzQ1OS1cXHRcXHRcXHRcXHRcXHQgTkVUTElOS19DQihza2IpLnBvcnRpZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6Mzc6MDEuOTI2MTgxOTQxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwMzQ2NTMxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0YCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBpdGVyYXRvciBmdW5jdGlvbnMgd2l0aGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGZyYW1ld29yaywgcGFydGljdWxhcmx5IGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXRsaW5rIGludGVyZmFjZSBhbmQgdGhlIHVuZGVybHlpbmcgZXhwZWN0YXRpb24gdGFibGUuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBudWFuY2VzOiB0aGUgaGFuZGxpbmcgb2YgY29uY3VycmVudCBhY2Nlc3MsIHBvdGVudGlhbCBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCB0byBtYWludGFpbiBjb25zaXN0ZW5jeSwgYW5kIGhvdyBpdCBkZWFscyB3aXRoIGl0ZXJhdGluZyB0aHJvdWdoIGEgcG90ZW50aWFsbHkgbGFyZ2UgbnVtYmVyIG9mIGV4cGVjdGF0aW9ucyB3aXRob3V0IGNhdXNpbmcgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEknbSBrZWVuIHRvIHNlZSBpZiBpdCBlZmZpY2llbnRseSBoYW5kbGVzIG5lc3RlZCBleHBlY3RhdGlvbnMgYW5kIGlmIHRoZXJlJ3MgYW55IGNsZXZlciB1c2Ugb2YgZGF0YSBzdHJ1Y3R1cmVzIHRvIHNwZWVkIHVwIHRoZSBpdGVyYXRpb24gcHJvY2Vzcy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgb3IgYXJlYXMgd2hlcmUgaXQgbWlnaHQgYmUgdnVsbmVyYWJsZSB0byBkZW5pYWwtb2Ytc2VydmljZSBhdHRhY2tzLiBJJ20gYWxzbyBjdXJpb3VzIHRvIHNlZSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBjb25udHJhY2sgaGVscGVycyBhbmQgd2hldGhlciBpdCBwcm92aWRlcyBhbnkgZmlsdGVyaW5nIGNhcGFiaWxpdGllcyB0byBsaW1pdCB0aGUgc2NvcGUgb2YgdGhlIGl0ZXJhdGlvbi4gQmFzaWNhbGx5LCBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgY29kZSBpcyBjbGVhbiwgZWZmaWNpZW50LCBhbmQgcm9idXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDU3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6Mzc6MDMuOTYwODM4MDk5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgxMDk1ODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oPTE0Nj12b2lkIG5mX2N0X2V4cGVjdF9pdGVyYXRlX2Rlc3Ryb3koYm9vbCAoKml0ZXIpKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICplLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaDoxNDc6dm9pZCBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXQoc3RydWN0IG5ldCAqbmV0LFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgtMTQ4LVxcdFxcdFxcdCAgICAgIGJvb2wgKCppdGVyKShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZSwgdm9pZCAqZGF0YSksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYz02MTI9RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZXhwZWN0X2l0ZXJhdGVfZGVzdHJveSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtNjEzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jOjYxNDp2b2lkIG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtNjE1LVxcdFxcdFxcdCAgICAgIGJvb2wgKCppdGVyKShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZSwgdm9pZCAqZGF0YSksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy02MzktfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jOjY0MDpFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTY0MS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zNDA4PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2RlbF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNDU3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNDU4OlxcdFxcdG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldChpbmZvLVxcdTAwM2VuZXQsIGV4cGVjdF9pdGVyX25hbWUsIG5hbWUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0NTktXFx0XFx0XFx0XFx0XFx0IE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzQ2Mi1cXHRcXHQvKiBUaGlzIGJhc2ljYWxseSBtZWFucyB3ZSBoYXZlIHRvIGZsdXNoIGV2ZXJ5dGhpbmcqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNDYzOlxcdFxcdG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldChpbmZvLVxcdTAwM2VuZXQsIGV4cGVjdF9pdGVyX2FsbCwgTlVMTCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzQ2NC1cXHRcXHRcXHRcXHRcXHQgTkVUTElOS19DQihza2IpLnBvcnRpZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6Mzc6MDUuNzQxOTQyMzMxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5MzkyMTM2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIENvbm50cmFjayBFeHBlY3RhdGlvbnMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0J3MgY3J1Y2lhbCBmb3IgaXRlcmF0aW5nIHRocm91Z2ggY29ubnRyYWNrIGV4cGVjdGF0aW9ucywgYW5kIGl0J3MgbG9jYXRlZCByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jYC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQgdHJhdmVyc2VzIHRoZSBleHBlY3RhdGlvbiB0YWJsZSBhbmQgd2hhdCBraW5kIG9mIGRhdGEgaXQncyBleHRyYWN0aW5nIGR1cmluZyB0aGUgcHJvY2Vzcy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIGluIGNvbm50cmFjayB3aXRoIG11bHRpcGxlIG5ldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NTEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNzowNy42ODExNjU4OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjE0LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjE0OlxcdHZvaWQgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KHN0cnVjdCBuZXQgKm5ldCxcXG4gNjE1OlxcdFxcdFxcdFxcdCAgICAgIGJvb2wgKCppdGVyKShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZSwgdm9pZCAqZGF0YSksXFxuIDYxNjpcXHRcXHRcXHRcXHQgICAgICB2b2lkICpkYXRhLFxcbiA2MTc6XFx0XFx0XFx0XFx0ICAgICAgdTMyIHBvcnRpZCwgaW50IHJlcG9ydClcXG4gNjE4OlxcdHtcXG4gNjE5OlxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7XFxuIDYyMDpcXHRcXHRjb25zdCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDtcXG4gNjIxOlxcdFxcdHVuc2lnbmVkIGludCBpO1xcbiA2MjI6XFx0XFxuIDYyMzpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jayk7XFxuIDYyNDpcXHRcXG4gNjI1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuZl9jdF9leHBlY3RfaHNpemU7IGkrKykge1xcbiA2MjY6XFx0XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShleHAsIG5leHQsXFxuIDYyNzpcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZuZl9jdF9leHBlY3RfaGFzaFtpXSxcXG4gNjI4OlxcdFxcdFxcdFxcdFxcdFxcdCAgaG5vZGUpIHtcXG4gNjI5OlxcdFxcbiA2MzA6XFx0XFx0XFx0XFx0aWYgKCFuZXRfZXEobmZfY3RfZXhwX25ldChleHApLCBuZXQpKVxcbiA2MzE6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDYzMjpcXHRcXG4gNjMzOlxcdFxcdFxcdFxcdGlmIChpdGVyKGV4cCwgZGF0YSkpXFxuIDYzNDpcXHRcXHRcXHRcXHRcXHRuZl9jdF91bmxpbmtfZXhwZWN0X3JlcG9ydChleHAsIHBvcnRpZCwgcmVwb3J0KTtcXG4gNjM1OlxcdFxcdFxcdH1cXG4gNjM2OlxcdFxcdH1cXG4gNjM3OlxcdFxcbiA2Mzg6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jayk7XFxuIDYzOTpcXHR9XFxuIDY0MDpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXQpO1xcbiA2NDE6XFx0XFxuIDY0MjpcXHQjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19QUk9DRlNcXG4gNjQzOlxcdHN0cnVjdCBjdF9leHBlY3RfaXRlcl9zdGF0ZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDAxOjM3OjA3LjY4MTI2OTM1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY0NjYxMDEwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGFuIFJDVSBhbmQgTG9ja2RlcCBJbnRlcmFjdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBmcm9tIHdoYXQgSSBjYW4gdGVsbCwgaXQncyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSByZWxhdGVkIHRvIGhvdyBSQ1UgYW5kIGxvY2tkZXAgaW50ZXJhY3Qgd2l0aGluIHRoZSBgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0YCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlLCB3aGVuIGNhbGxpbmcgYGl0ZXIoZXhwLCBkYXRhKWAgd2hpbGUgaG9sZGluZyBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYCwgd2FzIHVzaW5nIGByY3VfZGVyZWZlcmVuY2UoZXhwLVx1MDAzZWhlbHBlcilgIHdpdGhpbiBgZXhwZWN0X2l0ZXJfbmFtZWAuIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2l0aCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBsb2NrZGVwIGFuZCBSQ1UgZW5hYmxlZCwgdGhpcyBjYW4gdHJpZ2dlciBhIFwic3VzcGljaW91cyByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSB1c2FnZSFcIiB3YXJuaW5nLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IGByY3VfZGVyZWZlcmVuY2VgIGRvZXNuJ3QgZXhwbGljaXRseSBzdGF0ZSB0aGF0IHRoZSBSQ1UgcmVhZCBsb2NrIGlzIGJlaW5nIGhlbGQsIGV2ZW4gdGhvdWdoIGBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2tgIHByb3ZpZGVzIHRoZSBzYW1lIGxldmVsIG9mIHByb3RlY3Rpb24uXG5cblRoZSBmaXgsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaW52b2x2ZXMgcmVwbGFjaW5nIHRoZSBwb3RlbnRpYWxseSBtaXNsZWFkaW5nIGByY3VfZGVyZWZlcmVuY2VgIHdpdGggYHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZXhwLVx1MDAzZWhlbHBlciwgbG9ja2RlcF9pc19oZWxkKFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jaykpYC4gVGhpcyBuZXcgY29uc3RydWN0aW9uIGV4cGxpY2l0bHkgYXNzZXJ0cyB0aGF0IGBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2tgIGlzIGhlbGQgd2hlbiBhY2Nlc3NpbmcgYGV4cC1cdTAwM2VoZWxwZXJgLCB0aGVyZWJ5IHNpbGVuY2luZyB0aGUgbG9ja2RlcCBmYWxzZSBwb3NpdGl2ZSBvciB2YWxpZGF0aW5nIHRoYXQgaXQncyBiZWluZyBoZWxkIGFzIGludGVuZGVkLlxuXG5Ob3csIG15IHJlYWwgY29uY2VybiBoZXJlIGlzIGFsd2F5cyBhcm91bmQgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMuIERvZXMgdGhpcyBzZWVtaW5nbHkgYmVuaWduIGNoYW5nZSAqaW50cm9kdWNlKiBvciBzb21laG93ICpleHBvc2UqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgaXQgZG9lc24ndC4gVGhpcyBpc24ndCB0b3VjaGluZyBtZW1vcnkgYWxsb2NhdGlvbi4gSXQncyBub3QgY3JlYXRpbmcgbmV3IHZhcmlhYmxlcywgY29weWluZyBkYXRhIHRvIHVzZXJzcGFjZSwgbWVzc2luZyB3aXRoIGJ1ZmZlciBsZW5ndGhzLCBvciBjaGFuZ2luZyB0aGUgY29udHJvbCBmbG93IChiZXlvbmQgdGhlIFJDVSBsb2NrZGVwIGNoZWNrKS4gSXQncyBwdXJlbHkgYW4gUkNVIGFubm90YXRpb24gb3IgbG9ja2RlcCB2ZXJpZmljYXRpb24gY2hhbmdlLCB3aGljaCBzaG91bGQgYmUgZmluZS5cblxuTGV0IG1lIHF1aWNrbHkgcmV2aWV3IHRoZSBndWlkZWxpbmVzIGZvciBzZXR0aW5nIGBOZWVkc0tNU0FOYC4gSSBuZWVkIHRvIHNldCB0aGF0IGZsYWcgaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGludm9sdmVzIGFsbG9jYXRpbmcgb3IgaW5pdGlhbGl6aW5nIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIsIG9yIGRvZXMgYW55dGhpbmcgdGhhdCBtaWdodCBjcmVhdGUgYSB2dWxuZXJhYmlsaXR5IHdpdGggYm91bmRzIGNoZWNrcy5cblxuSG93ZXZlciwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHBhdGNoLCBgTmVlZHNLTVNBTmAgaXMgKmNsZWFybHkqIGBmYWxzZWAuIEl0J3Mgb25seSByZXBsYWNpbmcgYW4gUkNVIGRlcmVmZXJlbmNlIHdpdGggYSBwcm90ZWN0ZWQgdmVyc2lvbiwgYmVjYXVzZSB0aGUgY2FsbGluZyBjb250ZXh0ICphbHJlYWR5KiBndWFyYW50ZWVzIHByb3RlY3Rpb24gdmlhIHRoZSBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYC4gVGhlIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgbGVhayByaXNrIGlzIHplcm8gaGVyZS4gSXQncyBlc3NlbnRpYWxseSBhbiBleHBsaWNpdCBzdGF0ZW1lbnQgYWJvdXQgdGhlIGV4aXN0aW5nIGxvY2tpbmcgYW5kIFJDVSBndWFyYW50ZWVzLlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgYXNzZXNzbWVudCBjb21wbGV0ZSwgSSB0aGluayBJJ20gcmVhZHkgdG8gZm9ybXVsYXRlIG15IHJlc3BvbnNlIGFuZCBzZXQgdGhlIHJlc3VsdHMgYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MzksIk91dHB1dFRva2VucyI6MjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6Mzc6MTQuMTQ3MzcyNjQ4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBgcmN1X2RlcmVmZXJlbmNlKGV4cC1cXHUwMDNlaGVscGVyKWAgd2l0aCBgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChleHAtXFx1MDAzZWhlbHBlciwgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spKWAgaW4gYGV4cGVjdF9pdGVyX25hbWUoKWAuXFxuXFxuYGV4cGVjdF9pdGVyX25hbWUoKWAgaXMgaW52b2tlZCBhcyBhbiBpdGVyYXRvciBjYWxsYmFjayBmcm9tIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXQoKWAsIHdoaWNoIGFjcXVpcmVzIGBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2tgIHZpYSBgc3Bpbl9sb2NrX2JoKClgLiBVc2luZyBgcmN1X2RlcmVmZXJlbmNlKClgIHdpdGhvdXQgYW4gUkNVIHJlYWQtc2lkZSBsb2NrIGNhdXNlcyBsb2NrZGVwL1JDVSBkZWJ1Z2dpbmcgd2FybmluZ3Mgd2hlbiBgQ09ORklHX1BST1ZFX1JDVWAgaXMgZW5hYmxlZC4gVGhlIGNoYW5nZSB1cGRhdGVzIHRoZSBSQ1UgZGVyZWZlcmVuY2UgbWFjcm8gdG8gaW5kaWNhdGUgdGhhdCB0aGUgYWNjZXNzIGlzIHByb3RlY3RlZCBieSBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYC5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYW4gUkNVL2xvY2tkZXAgYW5ub3RhdGlvbi4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBjaGFuZ2UgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgbWVtb3J5IGNvcHlpbmcsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYHJjdV9kZXJlZmVyZW5jZShleHAtXFx1MDAzZWhlbHBlcilgIHdpdGggYHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZXhwLVxcdTAwM2VoZWxwZXIsIGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSlgIGluIGBleHBlY3RfaXRlcl9uYW1lKClgLlxcblxcbmBleHBlY3RfaXRlcl9uYW1lKClgIGlzIGludm9rZWQgYXMgYW4gaXRlcmF0b3IgY2FsbGJhY2sgZnJvbSBgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KClgLCB3aGljaCBhY3F1aXJlcyBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYCB2aWEgYHNwaW5fbG9ja19iaCgpYC4gVXNpbmcgYHJjdV9kZXJlZmVyZW5jZSgpYCB3aXRob3V0IGFuIFJDVSByZWFkLXNpZGUgbG9jayBjYXVzZXMgbG9ja2RlcC9SQ1UgZGVidWdnaW5nIHdhcm5pbmdzIHdoZW4gYENPTkZJR19QUk9WRV9SQ1VgIGlzIGVuYWJsZWQuIFRoZSBjaGFuZ2UgdXBkYXRlcyB0aGUgUkNVIGRlcmVmZXJlbmNlIG1hY3JvIHRvIGluZGljYXRlIHRoYXQgdGhlIGFjY2VzcyBpcyBwcm90ZWN0ZWQgYnkgYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFuIFJDVS9sb2NrZGVwIGFubm90YXRpb24uIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSwgY2hhbmdlIGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBhbHRlciBidWZmZXIgYm91bmRzIG9yIG1lbW9yeSBjb3B5aW5nLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvktk8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-12 01:17:58 +0000 UTC FinishedAt: 2026-09-12 01:37:16 +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": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CT_NETLINK", "NF_CONNTRACK", "NETFILTER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_CT_NETLINK", "NF_CONNTRACK", "NETFILTER" ], "series_id": "b036b43e-3c46-47cc-883d-97249dba4e5a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "expect_iter_name", "ctnetlink_del_expect" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "78445023439506ebd83b86d40b1e428a3b309d4a", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4cGVjdF9pdGVyX25hbWUmIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2RlbF9leHBlY3QmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBgcmN1X2RlcmVmZXJlbmNlKGV4cC1cdTAwM2VoZWxwZXIpYCB3aXRoIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGV4cC1cdTAwM2VoZWxwZXIsIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spKWAgaW4gYGV4cGVjdF9pdGVyX25hbWUoKWAuXG5cbmBleHBlY3RfaXRlcl9uYW1lKClgIGlzIGludm9rZWQgYXMgYW4gaXRlcmF0b3IgY2FsbGJhY2sgZnJvbSBgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KClgLCB3aGljaCBhY3F1aXJlcyBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYCB2aWEgYHNwaW5fbG9ja19iaCgpYC4gVXNpbmcgYHJjdV9kZXJlZmVyZW5jZSgpYCB3aXRob3V0IGFuIFJDVSByZWFkLXNpZGUgbG9jayBjYXVzZXMgbG9ja2RlcC9SQ1UgZGVidWdnaW5nIHdhcm5pbmdzIHdoZW4gYENPTkZJR19QUk9WRV9SQ1VgIGlzIGVuYWJsZWQuIFRoZSBjaGFuZ2UgdXBkYXRlcyB0aGUgUkNVIGRlcmVmZXJlbmNlIG1hY3JvIHRvIGluZGljYXRlIHRoYXQgdGhlIGFjY2VzcyBpcyBwcm90ZWN0ZWQgYnkgYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhbiBSQ1UvbG9ja2RlcCBhbm5vdGF0aW9uLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIGNoYW5nZSBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBtZW1vcnkgY29weWluZywgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXhwZWN0X2l0ZXJfbmFtZSgpIGluIG5ldGZpbHRlciYjMzk7cyBjdG5ldGxpbmsgaW1wbGVtZW50YXRpb24sIHJlcGxhY2luZyByY3VfZGVyZWZlcmVuY2UoKSB3aXRoIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoKSBhbmQgZW5mb3JjaW5nIGEgbG9ja2RlcCBhc3NlcnRpb24gY2hlY2tpbmcgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayBzb2NrZXRzIChDVEFfRVhQRUNUX0hFTFBfTkFNRSBpbiBjdG5ldGxpbmtfZGVsX2V4cGVjdCkgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gdGVzdCB0aGUgbmV3IGxvY2tpbmcgYXNzZXJ0aW9uIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmU2NmY0Y2RmOTI4ZTA4OTVmODBhMmI0MGE2MjQwOWZkOGEwODQwZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDAxOjM2OjA3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuaW5kZXggNTc5YWRhMDYzYjFiYi4uNGU1ZDdjNzAxNDM2OCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5AQCAtMzM5Miw3ICYjNDM7MzM5Miw4IEBAIHN0YXRpYyBib29sIGV4cGVjdF9pdGVyX25hbWUoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdm9pZCAqZGF0YSlcbiBcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXI7XG4gXHRjb25zdCBjaGFyICpuYW1lID0gZGF0YTtcbiBcbi1cdGhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZShleHAtXHUwMDNlaGVscGVyKTtcbiYjNDM7XHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGV4cC1cdTAwM2VoZWxwZXIsXG4mIzQzO1x0XHRcdFx0XHQgICBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSk7XG4gXHRpZiAoIWhlbHBlcilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0NUX05FVExJTksmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4cGVjdF9pdGVyX25hbWUmIzM0OywKICAgICYjMzQ7Y3RuZXRsaW5rX2RlbF9leHBlY3QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXhwZWN0X2l0ZXJfbmFtZSgpIGluIG5ldGZpbHRlciYjMzk7cyBjdG5ldGxpbmsgaW1wbGVtZW50YXRpb24sIHJlcGxhY2luZyByY3VfZGVyZWZlcmVuY2UoKSB3aXRoIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoKSBhbmQgZW5mb3JjaW5nIGEgbG9ja2RlcCBhc3NlcnRpb24gY2hlY2tpbmcgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayBzb2NrZXRzIChDVEFfRVhQRUNUX0hFTFBfTkFNRSBpbiBjdG5ldGxpbmtfZGVsX2V4cGVjdCkgYW5kIHdhcnJhbnRzIGZ1enppbmcgdG8gdGVzdCB0aGUgbmV3IGxvY2tpbmcgYXNzZXJ0aW9uIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmU2NmY0Y2RmOTI4ZTA4OTVmODBhMmI0MGE2MjQwOWZkOGEwODQwZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDEyIDAxOjM2OjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDU3OWFkYTA2M2IxYmIuLjRlNWQ3YzcwMTQzNjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTMzOTIsNyAmIzQzOzMzOTIsOCBAQCBzdGF0aWMgYm9vbCBleHBlY3RfaXRlcl9uYW1lKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHZvaWQgKmRhdGEpCiAJc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjsKIAljb25zdCBjaGFyICpuYW1lID0gZGF0YTsKIAotCWhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZShleHAtJmd0O2hlbHBlcik7CiYjNDM7CWhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZXhwLSZndDtoZWxwZXIsCiYjNDM7CQkJCQkgICBsb2NrZGVwX2lzX2hlbGQoJmFtcDtuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spKTsKIAlpZiAoIWhlbHBlcikKIAkJcmV0dXJuIGZhbHNlOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MDUKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAzMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ29ubnRyYWNrIEV4cGVjdCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY2AuIFRoZSBkaWZmIHNob3dzIGEgbW9kaWZpY2F0aW9uIGFyb3VuZCBsaW5lIDMzOTIuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgdXBkYXRpbmcgdGhlIGFjY2VzcyB0byBgZXhwLSZndDtoZWxwZXJgIHdpdGhpbiB0aGUgYGV4cGVjdF9pdGVyX25hbWVgIGZ1bmN0aW9uLiBUaGV5JiMzOTtyZSBhZGRpbmcgYHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWRgIHdpdGggYSBgbG9ja2RlcF9pc19oZWxkYCBjaGVjayBvbiBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYC4gVGhpcyBpcyBpbnRlcmVzdGluZy4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgcHJvdGVjdGlvbiBjaGFuZ2UgZm9yIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgdXNhZ2UsIHdoaWNoIGlzbiYjMzk7dCBlbnRpcmVseSBzdXJwcmlzaW5nIGdpdmVuIHRoZSBuYXR1cmUgb2YgY29ubnRyYWNrLiBTcGVjaWZpY2FsbHksIHRoaXMgY2hhbmdlIHN1Z2dlc3RzIHRoYXQgYWNjZXNzaW5nIGBleHAtJmd0O2hlbHBlcmAgcmVxdWlyZXMgdGhlIGBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2tgIHRvIGJlIGhlbGQsIGVuc3VyaW5nIHRoZSBzYWZldHkgb2YgY29uY3VycmVudCBhY2Nlc3Mgd2hlbiBSQ1UgaXMgZW5hYmxlZC4KClRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZywgSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB0aGUgdXNhZ2Ugb2YgYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AuIEkmIzM5O2xsIHVzZSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgdG8gcHVsbCB1cCB0aGUgc291cmNlIGNvZGUgZm9yIHRoaXMgZmlsZSBhbmQgaW5zcGVjdCB0aGUgYXJlYSBhcm91bmQgdGhhdCBsaW5lLCBhbmQgdGhlIGRlZmluaXRpb24gb2YgdGhlIGxvY2suIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHRoZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoaXMgY2hhbmdlIGlzIGRlc2lnbmVkIHRvIGFkZHJlc3MuIFRoaXMgYXBwZWFycyB0byBiZSBhIGdvb2QtZmFpdGggYXR0ZW1wdCB0byBpbXByb3ZlIFJDVSBzYWZldHksIGJ1dCBJIHdvdWxkIHdhbnQgdG8gdmVyaWZ5IHRoZSBzcGVjaWZpYyBsb2NrIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwMTozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzM4MDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKTtcbjMzODE6XHRcbjMzODI6XHRcdGlmIChlcnIgXHUwMDNjPSAwKSB7XG4zMzgzOlx0XHRcdGtmcmVlX3NrYihza2IyKTtcbjMzODQ6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4zMzg1Olx0XHR9XG4zMzg2Olx0XG4zMzg3Olx0XHRyZXR1cm4gbmZuZXRsaW5rX3VuaWNhc3Qoc2tiMiwgaW5mby1cdTAwM2VuZXQsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQpO1xuMzM4ODpcdH1cbjMzODk6XHRcbjMzOTA6XHRzdGF0aWMgYm9vbCBleHBlY3RfaXRlcl9uYW1lKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHZvaWQgKmRhdGEpXG4zMzkxOlx0e1xuMzM5MjpcdFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjtcbjMzOTM6XHRcdGNvbnN0IGNoYXIgKm5hbWUgPSBkYXRhO1xuMzM5NDpcdFxuMzM5NTpcdFx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChleHAtXHUwMDNlaGVscGVyLFxuMzM5NjpcdFx0XHRcdFx0XHQgICBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSk7XG4zMzk3Olx0XHRpZiAoIWhlbHBlcilcbjMzOTg6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMzM5OTpcdFxuMzQwMDpcdFx0cmV0dXJuIHN0cmNtcChoZWxwZXItXHUwMDNlbmFtZSwgbmFtZSkgPT0gMDtcbjM0MDE6XHR9XG4zNDAyOlx0XG4zNDAzOlx0c3RhdGljIGJvb2wgZXhwZWN0X2l0ZXJfYWxsKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHZvaWQgKmRhdGEpXG4zNDA0Olx0e1xuMzQwNTpcdFx0cmV0dXJuIHRydWU7XG4zNDA2Olx0fVxuMzQwNzpcdFxuMzQwODpcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX2RlbF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbjM0MDk6XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4zNDEwOlx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pXG4zNDExOlx0e1xuMzQxMjpcdFx0dV9pbnQ4X3QgdTMgPSBpbmZvLVx1MDAzZW5mbXNnLVx1MDAzZW5mZ2VuX2ZhbWlseTtcbjM0MTM6XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7XG4zNDE0Olx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlO1xuMzQxNTpcdFx0c3RydWN0IG5mX2Nvbm50cmFja196b25lIHpvbmU7XG4zNDE2Olx0XHRpbnQgZXJyO1xuMzQxNzpcdFxuMzQxODpcdFx0aWYgKGNkYVtDVEFfRVhQRUNUX1RVUExFXSkge1xuMzQxOTpcdFx0XHQvKiBkZWxldGUgYSBzaW5nbGUgZXhwZWN0IGJ5IHR1cGxlICovXG4zNDIwOlx0XHRcdGVyciA9IGN0bmV0bGlua19wYXJzZV96b25lKGNkYVtDVEFfRVhQRUNUX1pPTkVdLCBcdTAwMjZ6b25lKTtcbjM0MjE6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjM0MjI6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMzQyMzpcdFxuMzQyNDpcdFx0XHRlcnIgPSBjdG5ldGxpbmtfcGFyc2VfdHVwbGUoY2RhLCBcdTAwMjZ0dXBsZSwgQ1RBX0VYUEVDVF9UVVBMRSxcbjM0MjU6XHRcdFx0XHRcdFx0ICAgIHUzLCBOVUxMKTtcbjM0MjY6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjM0Mjc6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMzQyODpcdFxuMzQyOTpcdFx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzI3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqVHJhY2luZyB0aGUgQ2FsbGVyIG9mIGBleHBlY3RfaXRlcl9uYW1lYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyBgZXhwZWN0X2l0ZXJfbmFtZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgYmVpbmcgdXNlZD8mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIFNvLCBJIG5lZWQgdG8gc3RhcnQgYnkgdHJhY2luZyBpdHMgY2FsbCBzaXRlcy4gQSBxdWljayBzZWFyY2gsIGEgZ3JlcCwgb3IgbWF5YmUgZXZlbiBteSBJREUmIzM5O3MgJiMzNDtmaW5kIHVzYWdlcyYjMzQ7IGZlYXR1cmUgc2hvdWxkIGdpdmUgbWUgYSBsaXN0IG9mIGFsbCB0aGUgcGxhY2VzIGBleHBlY3RfaXRlcl9uYW1lYCBpcyBpbnZva2VkLiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBwaWVjZSB0b2dldGhlciB0aGUgcHVycG9zZSBhbmQgaW5wdXRzIG9mIGBleHBlY3RfaXRlcl9uYW1lYC4gSXMgaXQgYSBjb3JlIHV0aWxpdHkgZnVuY3Rpb24sIG9yIGlzIGl0IHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBtb2R1bGUgb3IgY2xhc3M/IFVuZGVyc3RhbmRpbmcgaXRzIGNhbGxpbmcgY29udGV4dHMgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGJlaGF2aW9yLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGluaXRpYWwgY2FsbCBsb29rcyBsaWtlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4cGVjdF9pdGVyX25hbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzMxMT1zdGF0aWMgaW50IGN0bmV0bGlua19nZXRfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTMzODktXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MzM5MDpzdGF0aWMgYm9vbCBleHBlY3RfaXRlcl9uYW1lKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHZvaWQgKmRhdGEpXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzM5MS17XG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM0MDg9c3RhdGljIGludCBjdG5ldGxpbmtfZGVsX2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNDU3LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM0NTg6XHRcdG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldChpbmZvLVx1MDAzZW5ldCwgZXhwZWN0X2l0ZXJfbmFtZSwgbmFtZSxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNDU5LVx0XHRcdFx0XHQgTkVUTElOS19DQihza2IpLnBvcnRpZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODQzCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyB0aGUgQ29udGV4dDogYGN0bmV0bGlua19kZWxfZXhwZWN0YCBhbmQgYG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldGAqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBjdG5ldGxpbmtfZGVsX2V4cGVjdGAgYW5kIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGFuZCB3aGF0IHRoZXkmIzM5O3JlIGRvaW5nIHdpdGhpbiB0aGUgbGFyZ2VyIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLiBXaGF0IHRyaWdnZXJzIHRoZSBuZWVkIHRvIGRlbGV0ZSBhbiBleHBlY3RhdGlvbj8gSXMgYGN0bmV0bGlua19kZWxfZXhwZWN0YCBoYW5kbGluZyBhIHVzZXItc3BhY2UgcmVxdWVzdCB2aWEgbmV0bGluaywgbWVhbmluZyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGV4cGxpY2l0IHJlbW92YWwgb2YgYSB0cmFja2VkIGV4cGVjdGF0aW9uPyBJZiBzbywgd2hhdCBhcmUgdGhlIHVzZSBjYXNlcz8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSB0aW1lb3V0LCBvciBhIHNwZWNpZmljLCBpbnRlbnRpb25hbCBkZWxldGlvbiByZXF1ZXN0ZWQgYnkgc29tZSBwcm9jZXNzPwoKTmV4dCwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGl0ZXJhdGlvbiBpdHNlbGYgd29ya3MuIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHRyYXZlcnNhbCBvZiBhIGxpc3QsIHRhYmxlLCBvciBkYXRhIHN0cnVjdHVyZSBob2xkaW5nIHRoZSBleHBlY3RhdGlvbnMgZm9yIGEgcGFydGljdWxhciBuZXR3b3JrIG5hbWVzcGFjZS4gSXMgdGhpcyBpdGVyYXRpb24gcGFydCBvZiBhIGNsZWFudXAgcHJvY2VzcywgcGVyaGFwcyBjaGVja2luZyBmb3Igc3RhbGUgZXhwZWN0YXRpb25zIG9yIGhhbmRsaW5nIHNvbWUga2luZCBvZiBleHBpcnk/IE9yIGlzIGl0IG1vcmUgZHluYW1pYywgbWF5YmUgdXNlZCBmb3Igc2VhcmNoaW5nIGFuZCBsb2NhdGluZyBhIHNwZWNpZmljIGV4cGVjdGF0aW9uPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRhdGEgc3RydWN0dXJlIGlzIGJlaW5nIGl0ZXJhdGVkIG92ZXIgYW5kIGhvdyBpdCBpcyBtYW5hZ2VkLgoKTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBpbnRlcm5hbHMgaXMgdGhhdCBgZXhwZWN0YXRpb25zYCBhcmUgYSBrZXkgcGFydCBvZiBob3cgdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbW9kdWxlIGhhbmRsZXMgcmVsYXRlZCBjb25uZWN0aW9ucywgc3VjaCBhcyB3aGVuIG9uZSBjb25uZWN0aW9uIG9wZW5zIGFub3RoZXIuIFRoZSBjb25uZWN0aW9uIGlzICYjMzQ7ZXhwZWN0ZWQmIzM0Oy4gVGhlcmVmb3JlLCBgY3RuZXRsaW5rX2RlbF9leHBlY3RgIGlzIGxpa2VseSBpbnZvbHZlZCBpbiBjbGVhbmluZyB1cCB0aGVzZSB0cmFja2VkIGV4cGVjdGF0aW9ucy4gSXQgY291bGQgYWxzbyBkZWFsIHdpdGggcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBpc3N1ZXMgdGhhdCByZXF1aXJlIHRoZSBleHBlY3RhdGlvbiB0byBiZSBkZWxldGVkLgoKSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY3Jvc3MtcmVmZXJlbmNlcyB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgY2FsbGluZyBwYXRocy4gV2hhdCBldmVudHMgb3IgY29uZGl0aW9ucyBsZWFkIHRvIHRoZSBpbnZvY2F0aW9uIG9mIGBjdG5ldGxpbmtfZGVsX2V4cGVjdGA/IFRoZW4sIEkmIzM5O2xsIGFuYWx5emUgaG93IGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgIGlzIHVzZWQgd2l0aGluIHRoYXQgY29udGV4dC4gRnJvbSB0aGVyZSwgSSBjYW4gcGlucG9pbnQgd2hhdCB0aGUgcHVycG9zZSBvZiB0aGUgaW50ZXJhY3Rpb24gaXMuIEJ5IGNvbm5lY3RpbmcgdGhlIGRvdHMgYmV0d2VlbiB0aG9zZSBmdW5jdGlvbnMsIEkgc2hvdWxkIGJlIGFibGUgdG8gY2xhcmlmeSB0aGUgbW9kdWxlJiMzOTtzIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzQzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszNDMwOlx0XG4zNDMxOlx0XHRcdC8qIGJ1bXAgdXNhZ2UgY291bnQgdG8gMiAqL1xuMzQzMjpcdFx0XHRleHAgPSBuZl9jdF9leHBlY3RfZmluZF9nZXQoaW5mby1cdTAwM2VuZXQsIFx1MDAyNnpvbmUsIFx1MDAyNnR1cGxlKTtcbjM0MzM6XHRcdFx0aWYgKCFleHApIHtcbjM0MzQ6XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xuMzQzNTpcdFx0XHRcdHJldHVybiAtRU5PRU5UO1xuMzQzNjpcdFx0XHR9XG4zNDM3Olx0XG4zNDM4Olx0XHRcdGlmIChjZGFbQ1RBX0VYUEVDVF9JRF0pIHtcbjM0Mzk6XHRcdFx0XHRfX2JlMzIgaWQgPSBubGFfZ2V0X2JlMzIoY2RhW0NUQV9FWFBFQ1RfSURdKTtcbjM0NDA6XHRcbjM0NDE6XHRcdFx0XHRpZiAoaWQgIT0gbmZfZXhwZWN0X2dldF9pZChleHApKSB7XG4zNDQyOlx0XHRcdFx0XHRuZl9jdF9leHBlY3RfcHV0KGV4cCk7XG4zNDQzOlx0XHRcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xuMzQ0NDpcdFx0XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4zNDQ1Olx0XHRcdFx0fVxuMzQ0NjpcdFx0XHR9XG4zNDQ3Olx0XG4zNDQ4Olx0XHRcdC8qIGFmdGVyIGxpc3QgcmVtb3ZhbCwgdXNhZ2UgY291bnQgPT0gMSAqL1xuMzQ0OTpcdFx0XHRuZl9jdF91bmxpbmtfZXhwZWN0X3JlcG9ydChleHAsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQsXG4zNDUwOlx0XHRcdFx0XHRcdCAgIG5sbXNnX3JlcG9ydChpbmZvLVx1MDAzZW5saCkpO1xuMzQ1MTpcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xuMzQ1MjpcdFx0XHQvKiBoYXZlIHRvIHB1dCB3aGF0IHdlICYjMzk7Z2V0JiMzOTsgYWJvdmUuXG4zNDUzOlx0XHRcdCAqIGFmdGVyIHRoaXMgbGluZSB1c2FnZSBjb3VudCA9PSAwICovXG4zNDU0Olx0XHRcdG5mX2N0X2V4cGVjdF9wdXQoZXhwKTtcbjM0NTU6XHRcdH0gZWxzZSBpZiAoY2RhW0NUQV9FWFBFQ1RfSEVMUF9OQU1FXSkge1xuMzQ1NjpcdFx0XHRjaGFyICpuYW1lID0gbmxhX2RhdGEoY2RhW0NUQV9FWFBFQ1RfSEVMUF9OQU1FXSk7XG4zNDU3Olx0XG4zNDU4Olx0XHRcdG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldChpbmZvLVx1MDAzZW5ldCwgZXhwZWN0X2l0ZXJfbmFtZSwgbmFtZSxcbjM0NTk6XHRcdFx0XHRcdFx0IE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQsXG4zNDYwOlx0XHRcdFx0XHRcdCBubG1zZ19yZXBvcnQoaW5mby1cdTAwM2VubGgpKTtcbjM0NjE6XHRcdH0gZWxzZSB7XG4zNDYyOlx0XHRcdC8qIFRoaXMgYmFzaWNhbGx5IG1lYW5zIHdlIGhhdmUgdG8gZmx1c2ggZXZlcnl0aGluZyovXG4zNDYzOlx0XHRcdG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldChpbmZvLVx1MDAzZW5ldCwgZXhwZWN0X2l0ZXJfYWxsLCBOVUxMLFxuMzQ2NDpcdFx0XHRcdFx0XHQgTkVUTElOS19DQihza2IpLnBvcnRpZCxcbjM0NjU6XHRcdFx0XHRcdFx0IG5sbXNnX3JlcG9ydChpbmZvLVx1MDAzZW5saCkpO1xuMzQ2NjpcdFx0fVxuMzQ2NzpcdFxuMzQ2ODpcdFx0cmV0dXJuIDA7XG4zNDY5Olx0fVxuMzQ3MDpcdHN0YXRpYyBpbnRcbjM0NzE6XHRjdG5ldGxpbmtfY2hhbmdlX2V4cGVjdChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqeCxcbjM0NzI6XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pXG4zNDczOlx0e1xuMzQ3NDpcdFx0aWYgKGNkYVtDVEFfRVhQRUNUX1RJTUVPVVRdKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMTIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgKioKCk9rYXksIHRpbWUgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0YCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gW21lbnRpb24gc3BlY2lmaWMgYXJlYXMgb3IgYXNwZWN0cyB5b3Ugd2FudCB0byBpbnZlc3RpZ2F0ZSBiYXNlZCBvbiB5b3VyIGV4cGVydGlzZSwgZS5nLiwgaG93IHRoZSBpdGVyYXRpb24gaXMgaGFuZGxlZCwgYW55IHBvdGVudGlhbCBsb2NraW5nIGlzc3VlcywgdGhlIGludGVyYWN0aW9uIHdpdGggY29ubmVjdGlvbiB0cmFja2luZyBlbnRyaWVzLCB3aGV0aGVyIHRoZXJlJiMzOTtzIGFueSBjbGV2ZXJuZXNzIHdpdGggaGFzaCBidWNrZXRzLCBvciBpZiB0aGUgY29kZSBsb29rcyBlbGVnYW50IGFuZCBlZmZpY2llbnRdLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgW01lbnRpb24gd2hhdCB5b3UgYXJlIGV4cGVjdGluZyB0byBzZWUuIGUuZy4gaG93IHRoZSBleHBlY3QgdGFibGUgaXMgd2Fsa2VkLCB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgdXRpbGl6ZWQsIGFuZCB3aGF0IHNvcnQgb2YgbG9ja2luZyBpcyBiZWluZyBkb25lXS4gSG9wZWZ1bGx5LCBpdCYjMzk7cyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGRvZXNuJiMzOTt0IGhhdmUgYW55IG9idmlvdXMgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcmFjZSBjb25kaXRpb25zLiBJIHdhbnQgdG8gcXVpY2tseSBncmFzcCBob3cgaXQgaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZXhwZWN0YXRpb25zLCBob3cgaXQgaGFuZGxlcyBjb25jdXJyZW50IGFjY2VzcywgYW5kIHdoYXQgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYXJlLiBUaGlzIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgY29ubmVjdGlvbiB0cmFja2luZywgYW5kIGFueSBpbmVmZmljaWVuY2llcyBoZXJlIGNvdWxkIGhhdmUgYSBzaWduaWZpY2FudCBpbXBhY3Qgb24gb3ZlcmFsbCBuZXR3b3JrIHBlcmZvcm1hbmNlLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIGl0JiMzOTtzIG9wdGltaXplZCBmb3IgY29tbW9uIHVzZSBjYXNlcyBvciBpZiB0aGVyZSYjMzk7cyByb29tIGZvciBpbXByb3ZlbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM9NjEyPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9pdGVyYXRlX2Rlc3Ryb3kpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtNjEzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6NjE0OnZvaWQgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTYxNS1cdFx0XHQgICAgICBib29sICgqaXRlcikoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmUsIHZvaWQgKmRhdGEpLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTYzOS19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYzo2NDA6RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTY0MS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzQwOD1zdGF0aWMgaW50IGN0bmV0bGlua19kZWxfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0NTctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MzQ1ODpcdFx0bmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KGluZm8tXHUwMDNlbmV0LCBleHBlY3RfaXRlcl9uYW1lLCBuYW1lLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0NTktXHRcdFx0XHRcdCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNDYyLVx0XHQvKiBUaGlzIGJhc2ljYWxseSBtZWFucyB3ZSBoYXZlIHRvIGZsdXNoIGV2ZXJ5dGhpbmcqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM0NjM6XHRcdG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldChpbmZvLVx1MDAzZW5ldCwgZXhwZWN0X2l0ZXJfYWxsLCBOVUxMLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0NjQtXHRcdFx0XHRcdCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTA2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldGAuIEl0JiMzOTtzIGxvY2F0ZWQgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCBpdGVyYXRpbmcgb3ZlciBvciBtYW5hZ2luZyBleHBlY3RlZCBjb25uZWN0aW9ucyB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3lzdGVtLiBHaXZlbiB0aGUgYGV4cGVjdGAgcHJlZml4LCBJJiMzOTttIGFudGljaXBhdGluZyB0aGlzIGlzIGEgY3JpdGljYWwgcGllY2UgaW4gaGFuZGxpbmcgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyaWVzIHRoYXQgYXJlICpleHBlY3RlZCosIGJ1dCBub3QgeWV0IGZ1bGx5IGVzdGFibGlzaGVkLiBUaGluZ3MgbGlrZSBwYXNzaXZlIEZUUCBkYXRhIGNvbm5lY3Rpb25zLCBOQVQgdHJhdmVyc2FsLCBvciBwZXJoYXBzIGV2ZW4gQUxHLXJlbGF0ZWQgY29ubmVjdGlvbiBzZXR1cC4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGUgaW1wbGVtZW50YXRpb24gaW4gdGhlIGBuZXRmaWx0ZXJgIHN1YnN5c3RlbSBoYXMgdGhlIHVzdWFsIGltcGxpY2F0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBsb2NraW5nIHN0cnVjdHVyZXMgdGhhdCBhcmUgbGlrZWx5IGludm9sdmVkIGFuZCBob3cgdGhleSBpbnRlcmFjdCB0byBtYWludGFpbiB0aGUgaW50ZWdyaXR5IG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIHRhYmxlLiBNeSBleHBlcnRpc2UgZ3VpZGVzIG1lIHRvIGV4cGVjdCBpc3N1ZXMgcmVsYXRpbmcgdG8gcG9zc2libGUgcmFjZSBjb25kaXRpb25zIGhlcmUsIHBhcnRpY3VsYXJseSBpZiB0aGUgY29kZSYjMzk7cyBkZWFsaW5nIHdpdGggbXVsdGlwbGUgdGhyZWFkcyBvciBjb3JlcyB0cnlpbmcgdG8gbWFuaXB1bGF0ZSB0aGUgc2FtZSBleHBlY3RlZCBlbnRyeS4gSSYjMzk7bGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIGxvY2sgb3JkZXIgaXNzdWVzLiBJIHdpbGwgYWxzbyBiZSBwcmVwYXJlZCB0byBvYnNlcnZlIGhvdyB0aGlzIHRpZXMgaW50byB0aGUgcmVzdCBvZiB0aGUgbmV0ZmlsdGVyIGFyY2hpdGVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjEwOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xuIDYxMTpcdH1cbiA2MTI6XHRFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfaXRlcmF0ZV9kZXN0cm95KTtcbiA2MTM6XHRcbiA2MTQ6XHR2b2lkIG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldChzdHJ1Y3QgbmV0ICpuZXQsXG4gNjE1Olx0XHRcdFx0ICAgICAgYm9vbCAoKml0ZXIpKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICplLCB2b2lkICpkYXRhKSxcbiA2MTY6XHRcdFx0XHQgICAgICB2b2lkICpkYXRhLFxuIDYxNzpcdFx0XHRcdCAgICAgIHUzMiBwb3J0aWQsIGludCByZXBvcnQpXG4gNjE4Olx0e1xuIDYxOTpcdFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDtcbiA2MjA6XHRcdGNvbnN0IHN0cnVjdCBobGlzdF9ub2RlICpuZXh0O1xuIDYyMTpcdFx0dW5zaWduZWQgaW50IGk7XG4gNjIyOlx0XG4gNjIzOlx0XHRzcGluX2xvY2tfYmgoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKTtcbiA2MjQ6XHRcbiA2MjU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5mX2N0X2V4cGVjdF9oc2l6ZTsgaSYjNDM7JiM0MzspIHtcbiA2MjY6XHRcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShleHAsIG5leHQsXG4gNjI3Olx0XHRcdFx0XHRcdCAgXHUwMDI2bmZfY3RfZXhwZWN0X2hhc2hbaV0sXG4gNjI4Olx0XHRcdFx0XHRcdCAgaG5vZGUpIHtcbiA2Mjk6XHRcbiA2MzA6XHRcdFx0XHRpZiAoIW5ldF9lcShuZl9jdF9leHBfbmV0KGV4cCksIG5ldCkpXG4gNjMxOlx0XHRcdFx0XHRjb250aW51ZTtcbiA2MzI6XHRcbiA2MzM6XHRcdFx0XHRpZiAoaXRlcihleHAsIGRhdGEpKVxuIDYzNDpcdFx0XHRcdFx0bmZfY3RfdW5saW5rX2V4cGVjdF9yZXBvcnQoZXhwLCBwb3J0aWQsIHJlcG9ydCk7XG4gNjM1Olx0XHRcdH1cbiA2MzY6XHRcdH1cbiA2Mzc6XHRcbiA2Mzg6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jayk7XG4gNjM5Olx0fVxuIDY0MDpcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldCk7XG4gNjQxOlx0XG4gNjQyOlx0I2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ0ZTXG4gNjQzOlx0c3RydWN0IGN0X2V4cGVjdF9pdGVyX3N0YXRlIHtcbiA2NDQ6XHRcdHN0cnVjdCBzZXFfbmV0X3ByaXZhdGUgcDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDE6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzgwMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgQ29uY3VycmVuY3kgSXNzdWUgaW4gbmV0ZmlsdGVyL25mX2Nvbm50cmFjayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0YCBmdW5jdGlvbiwgYW5kIGl0IGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbiBiZWNhdXNlIGl0IGFjcXVpcmVzIGBzcGluX2xvY2tfYmgoJmFtcDtuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spYC4gTm93LCB0aGUgaW50ZXJlc3RpbmcgYml0IGlzIHRoZSBsaW5lIGBoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoZXhwLSZndDtoZWxwZXIpO2AgcmlnaHQgYmVmb3JlIHRoYXQuIEkgaW1tZWRpYXRlbHkgcmVhbGl6ZSB0aGlzIGlzIGEgcG90ZW50aWFsIGxvY2tkZXAgcHJvYmxlbS4KCmByY3VfZGVyZWZlcmVuY2VgIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgdW5kZXIgYW4gUkNVIHJlYWQgbG9jaywgYXMgdmVyaWZpZWQgYnkgbG9ja2RlcCBhbmQgUkNVIGRlYnVnZ2luZyAoUFJPVkVfUkNVKS4gVGhlIGZhY3QgdGhhdCB0aGUgY29kZSBpcyB0YWtpbmcgYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AgaGVyZSwgYW5kIG5vdCBuZWNlc3NhcmlseSBhbiBSQ1UgcmVhZCBsb2NrLCByYWlzZXMgYSByZWQgZmxhZy4gU28sIHRoZSBmaXgsIG9yIG1vcmUgYWNjdXJhdGVseSB0aGUgY2hhbmdlIHRvIHRoZSBsb2NrZGVwIGNoZWNrLCBzZWVtcyBsaWtlIGl0IHNob3VsZCBiZSBgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChleHAtJmd0O2hlbHBlciwgbG9ja2RlcF9pc19oZWxkKCZhbXA7bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSk7YCB3aGljaCBpcyBnb29kLgoKQnV0LCBoYW5nIG9u4oCmIEkgbmVlZCB0byBjb25zaWRlciB0aGUgYnJvYWRlciBpbXBsaWNhdGlvbnMuIFRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW4gYXNzZXJ0aW9uIOKAkyBlc3NlbnRpYWxseSBhIG5ldyBjaGVjaywgd2hpY2ggaXMgYSBiaWcgZGVhbCBhbmQgc2hvdWxkIGJlIGZ1enplZCEgU2VjdGlvbiAxIGFuZCAzIG9mIHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uIGFyZSBzY3JlYW1pbmcgYXQgbWU6ICpORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRCouIEJ5IHVzaW5nIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkYCB3aXRoIHRoYXQgYGxvY2tkZXBfaXNfaGVsZGAgYXNzZXJ0aW9uLCB3ZSYjMzk7cmUgY2hhbmdpbmcgdGhlIHZhbGlkYXRpb24uIFNwZWNpZmljYWxseSwgYHJjdV9kZXJlZmVyZW5jZWAgd2FzIG9yaWdpbmFsbHkgYXNzZXJ0aW5nIGByY3VfcmVhZF9sb2NrX2hlbGQoKWAsIGFuZCBub3cgaXQmIzM5O3MgYXNzZXJ0aW5nIGBsb2NrZGVwX2lzX2hlbGQoJmFtcDtuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spYCEKCkFuZCB0aGlzIGlzIG5vdCBzb21lIG9ic2N1cmUgY29ybmVyIGNhc2UuIFRoZSBjb2RlIGlzIHdpdGhpbiBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgb2YgbmV0ZmlsdGVyJiMzOTtzIG5ldGxpbmsgaW50ZXJmYWNlLiBJdCYjMzk7cyB0b3RhbGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIG5ldGZpbHRlciBuZXRsaW5rIHNvY2tldHMgKGBORk5MX1NVQlNZU19DVE5FVExJTktfRVhQYCwgYElQQ1ROTF9NU0dfRVhQX0RFTEVURWApLiBUaGlzIGlzIGhpZ2gtdmFsdWUsIHVzZXItYWNjZXNzaWJsZSBjb2RlISBUaGUgcG90ZW50aWFsIGZvciB1bnVzdWFsIG9wZXJhdGlvbiBzZXF1ZW5jZXMgdGhhdCB0cmlnZ2VyIHRoZSBhc3NlcnRpb24gaXMgdmVyeSByZWFsLiBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgcmVxdWlyZW1lbnRzIGZvciB0aGlzIGZpbGUgdG9vIHRvIGVuc3VyZSB0aGUgZnV6emluZyBpcyBhY3R1YWxseSByZWxldmFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY29ubnRyYWNrX25ldGxpbmtcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0zND1vYmotJChDT05GSUdfTkZfQ09OTlRSQUNLKSAmIzQzOz0gbmZfY29ubnRyYWNrLm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTM2LSMgbmV0bGluayBpbnRlcmZhY2UgZm9yIG5mX2Nvbm50cmFja1xubmV0L25ldGZpbHRlci9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfTkZfQ1RfTkVUTElOSykgJiM0Mzs9IG5mX2Nvbm50cmFja19uZXRsaW5rLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfVElNRU9VVCkgJiM0Mzs9IG5mbmV0bGlua19jdHRpbWVvdXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBORl9DVF9ORVRMSU5LYCBpbiBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgbmV0bGluayBpbnRlcmFjdHMgd2l0aCBjb25uZWN0aW9uIHRyYWNraW5nLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIGNoZWNrIHRoZSBLY29uZmlnIGVudHJ5IGZvciBgTkZfQ1RfTkVUTElOS2AuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGF0IG9wdGlvbiBjb250cm9scyBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqIGl0JiMzOTtzIHJlbGV2YW50IGluIHRoZSBjb250ZXh0IEkmIzM5O20gY3VycmVudGx5IHdvcmtpbmcgaW4uIElzIHRoaXMgZW5hYmxpbmcgbmV0bGluayBub3RpZmljYXRpb25zIGZvciBjb25uZWN0aW9uIGV2ZW50cz8gRG9lcyBpdCBleHBvc2UgY29ubmVjdGlvbiB0cmFja2luZyBpbmZvcm1hdGlvbiB0byB1c2Vyc3BhY2UgYXBwbGljYXRpb25zLCBhbmQgaWYgc28sIHdoYXQga2luZD8gQXJlIHRoZXJlIGRlcGVuZGVuY2llcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IEkgbmVlZCB0byBjbGFyaWZ5IHdoZXRoZXIgdGhpcyBpcyB0aGUga2V5IHRvIG15IGN1cnJlbnQgaXNzdWUgb3IganVzdCBhIHBvdGVudGlhbCBkaXN0cmFjdGlvbi4gUmlnaHQsIGxldCYjMzk7cyBsb29rIGF0IHRoZSBjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9DVF9ORVRMSU5LXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTM1NT1jb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMzY1LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjM2Njpjb25maWcgTkZfQ1RfTkVUTElOS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTM2Ny1cdHRyaXN0YXRlICYjMzk7Q29ubmVjdGlvbiB0cmFja2luZyBuZXRsaW5rIGludGVyZmFjZSYjMzk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNDkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSBwcm9jZXNzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBLY29uZmlnIGVudHJ5OgoKKipBbmFseXppbmcgYE5GX0NUX05FVExJTktgIGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgKioKCk9rYXksIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBLY29uZmlnYCBmb3IgYE5GX0NUX05FVExJTktgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG5ldGxpbmstcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgdGhlIE5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nIG1vZHVsZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gcmVhZCB0aGUgZW50cnkgY2FyZWZ1bGx5IHRvIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2UgYW5kIGRlcGVuZGVuY2llcy4gV2hhdCBkb2VzIGl0IGFjdHVhbGx5ICpkbyo/IElzIGl0IGVuYWJsaW5nIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHksIGRlYnVnZ2luZyBmZWF0dXJlcywgb3IgaXMgaXQgbWVyZWx5IHNldHRpbmcgdGhlIHN0YWdlIGZvciBzb21ldGhpbmcgZWxzZT8gSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgaGVscGAgdGV4dCDigJMgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtZWF0IG9mIHRoZSBleHBsYW5hdGlvbiBpcy4KCkkmIzM5O2xsIGxvb2sgYXQgdGhlIGRlcGVuZGVuY2llcy4gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzIHRoYXQgKm11c3QqIGJlIGVuYWJsZWQgZm9yIGBORl9DVF9ORVRMSU5LYCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IFdoYXQgb3RoZXIgcmVsYXRlZCBvcHRpb25zIGFyZSBpbnZvbHZlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgY29uZmlnIG9wdGlvbiBhbmQgb3RoZXIgTmV0ZmlsdGVyIGNvbXBvbmVudHMsIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYnJvYWRlciBuZXR3b3JraW5nIHN0YWNrLiBJJiMzOTtsbCBtZW50YWxseSBtYXAgb3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgb3B0aW9uLgoKRmluYWxseSwgSSYjMzk7bGwgY29uc2lkZXIgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24ga2VybmVsIHNpemUsIHBlcmZvcm1hbmNlLCBhbmQgc2VjdXJpdHkuIFdoYXQgYXJlIHRoZSB0cmFkZS1vZmZzPyBEb2VzIGVuYWJsaW5nIGl0IGludHJvZHVjZSBhbnkga25vd24gdnVsbmVyYWJpbGl0aWVzPyBJcyBpdCBhIGNvcmUgZmVhdHVyZSwgYSBkZWJ1Z2dpbmcgYWlkLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gQWZ0ZXIgYW5hbHl6aW5nIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIE5ldGZpbHRlciBlY29zeXN0ZW0gYW5kIGRldGVybWluaW5nIGl0cyBwdXJwb3NlLCBJIGNhbiBwcm9wZXJseSB1bmRlcnN0YW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgcGxhY2UgaW4gdGhlIHByb2plY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNjU6XHRcbiAzNjY6XHRjb25maWcgTkZfQ1RfTkVUTElOS1xuIDM2NzpcdFx0dHJpc3RhdGUgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIG5ldGxpbmsgaW50ZXJmYWNlJiMzOTtcbiAzNjg6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuIDM2OTpcdFx0ZGVmYXVsdCBtIGlmIE5FVEZJTFRFUl9BRFZBTkNFRD1uXG4gMzcwOlx0XHRoZWxwXG4gMzcxOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgYSBuZXRsaW5rLWJhc2VkIHVzZXJzcGFjZSBpbnRlcmZhY2VcbiAzNzI6XHRcbiAzNzM6XHRjb25maWcgTkZfQ1RfTkVUTElOS19USU1FT1VUXG4gMzc0Olx0XHR0cmlzdGF0ZSAgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXQgdHVuaW5nIHZpYSBOZXRsaW5rJiMzOTtcbiAzNzU6XHRcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xuIDM3NjpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAzNzc6XHRcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLX1RJTUVPVVRcbiAzNzg6XHRcdGhlbHBcbiAzNzk6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBjb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXRcbiAzODA6XHRcdCAgZmluZS1ncmFpbiB0dW5pbmcuIFRoaXMgYWxsb3dzIHlvdSB0byBhdHRhY2ggc3BlY2lmaWMgdGltZW91dFxuIDM4MTpcdFx0ICBwb2xpY2llcyB0byBmbG93cywgaW5zdGVhZCBvZiB1c2luZyB0aGUgZ2xvYmFsIHRpbWVvdXQgcG9saWN5LlxuIDM4MjpcdFxuIDM4MzpcdFx0ICBJZiB1bnN1cmUsIHNheSBgTiYjMzk7LlxuIDM4NDpcdFxuIDM4NTpcdGNvbmZpZyBORl9DVF9ORVRMSU5LX0hFTFBFUlxuIDM4NjpcdFx0dHJpc3RhdGUgJiMzOTtDb25uZWN0aW9uIHRyYWNraW5nIGhlbHBlcnMgaW4gdXNlci1zcGFjZSB2aWEgTmV0bGluayYjMzk7XG4gMzg3Olx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiAzODg6XHRcdGRlcGVuZHMgb24gTkZfQ1RfTkVUTElOS1xuIDM4OTpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19RVUVVRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTg5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIE5GXF9DVFxfTkVUTElOSyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGBORl9DVF9ORVRMSU5LYCBpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yayByZWxpZXMgdXBvbi4gTXkgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLCBzaW5jZSB0aGF0JiMzOTtzIHdoZXJlIGRlcGVuZGVuY2llcyBhcmUgdXN1YWxseSBkZWZpbmVkLiBJIGtub3cgaXQmIzM5O3MgbG9jYXRlZCBpbiBgbmV0L25ldGZpbHRlci9gLCBzbyBJJiMzOTtsbCBzdGFydCBieSBsb29raW5nIGF0IHRoYXQuIE5vdywgSSB2YWd1ZWx5IHJlY2FsbCB0aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlIHR5cGljYWxseSBsaXN0ZWQgbmVhciB0aGUgcmVsZXZhbnQgb3B0aW9uJiMzOTtzIGRlZmluaXRpb24sIGFuZCB0aGF0IGlzIHVzdWFsbHkgd2VsbCBhYm92ZSB0aGUgbGluZSB3aGVyZSBpdCBpcyBkZWZpbmVkLiBTbywgbGV0JiMzOTtzIHN0YXJ0IGFyb3VuZCBsaW5lIDM2NSwgYXMgdGhlIHByb21wdCBzdWdnZXN0ZWQsIGFuZCB3b3JrIG91ciB3YXkgdXB3YXJkcyB1bnRpbCBJIGZpbmQgdGhlIGluZm9ybWF0aW9uIEkgbmVlZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBgZGVwZW5kcyBvbmAgc3RhdGVtZW50cyBvciBzaW1pbGFyIGNvbmZpZyBvcHRpb25zIHRoYXQgcG9pbnQgdG8gd2hhdCBgTkZfQ1RfTkVUTElOS2AgcmVxdWlyZXMgdG8gYmUgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRtZW51IFwmIzM0O0NvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb25cJiMzNDtcbiAgIDM6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSXG4gICA0Olx0XG4gICA1Olx0Y29uZmlnIE5FVEZJTFRFUl9JTkdSRVNTXG4gICA2Olx0XHRib29sIFwmIzM0O05ldGZpbHRlciBpbmdyZXNzIHN1cHBvcnRcJiMzNDtcbiAgIDc6XHRcdGRlZmF1bHQgeVxuICAgODpcdFx0c2VsZWN0IE5FVF9JTkdSRVNTXG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIFRoaXMgYWxsb3dzIHlvdSB0byBjbGFzc2lmeSBwYWNrZXRzIGZyb20gaW5ncmVzcyB1c2luZyB0aGUgTmV0ZmlsdGVyXG4gIDExOlx0XHQgIGluZnJhc3RydWN0dXJlLlxuICAxMjpcdFxuICAxMzpcdGNvbmZpZyBORVRGSUxURVJfRUdSRVNTXG4gIDE0Olx0XHRib29sIFwmIzM0O05ldGZpbHRlciBlZ3Jlc3Mgc3VwcG9ydFwmIzM0O1xuICAxNTpcdFx0ZGVmYXVsdCB5XG4gIDE2Olx0XHRzZWxlY3QgTkVUX0VHUkVTU1xuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gY2xhc3NpZnkgcGFja2V0cyBiZWZvcmUgdHJhbnNtaXNzaW9uIHVzaW5nIHRoZVxuICAxOTpcdFx0ICBOZXRmaWx0ZXIgaW5mcmFzdHJ1Y3R1cmUuXG4gIDIwOlx0XG4gIDIxOlx0Y29uZmlnIE5FVEZJTFRFUl9TS0lQX0VHUkVTU1xuICAyMjpcdFx0ZGVmX2Jvb2wgTkVURklMVEVSX0VHUkVTUyBcdTAwMjZcdTAwMjYgKE5FVF9DTFNfQUNUIHx8IElGQilcbiAgMjM6XHRcbiAgMjQ6XHRjb25maWcgTkVURklMVEVSX05FVExJTktcbiAgMjU6XHRcdGJvb2xcbiAgMjY6XHRcbiAgMjc6XHRjb25maWcgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcbiAgMjg6XHRcdGJvb2xcbiAgMjk6XHRcbiAgMzA6XHRjb25maWcgTkVURklMVEVSX0ZBTUlMWV9BUlBcbiAgMzE6XHRcdGJvb2xcbiAgMzI6XHRcbiAgMzM6XHRjb25maWcgTkVURklMVEVSX0JQRl9MSU5LXG4gIDM0Olx0XHRkZWZfYm9vbCBCUEZfU1lTQ0FMTFxuICAzNTpcdFxuICAzNjpcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXG4gIDM3Olx0XHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgYmFzZSBob29rIGR1bXAgc3VwcG9ydFwmIzM0O1xuICAzODpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbiAgMzk6XHRcdGRlcGVuZHMgb24gTkZfVEFCTEVTXG4gIDQwOlx0XHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDE6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2OTMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyB0aGUgQ29ubmVjdGlvbiBUcmFja2luZyBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoZSBuZXR3b3JrIGZpbHRlcmluZyBjb25maWd1cmF0aW9uIHRvIHNlZSBpZiBgTkZfQ09OTlRSQUNLYCBpcyBkZWZpbmVkLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaGVhZGluZyBvdmVyIHRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIGNvbmZpcm0gaXRzIHN0YXR1cy4gS25vd2luZyBpZiBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGVuYWJsZWQgYXQgdGhlIGtlcm5lbCBsZXZlbCBpcyB0aGUgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIHN0YXRlZnVsIHBhY2tldCBpbnNwZWN0aW9uIGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggb3RoZXIgTmV0ZmlsdGVyIG1vZHVsZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IGlmIHRoaXMgZmVhdHVyZSBpcyBiZWluZyB1c2VkLiBUaGlzIGNvdWxkIGhhdmUgYSBiaWcgaW1wYWN0IG9uIG92ZXJhbGwgbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lmIE5GX0NPTk5UUkFDSyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz05OD1jb25maWcgTkZfTE9HX1NZU0xPR1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMDktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6MTEwOmlmIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9LY29uZmlnLTExMS1jb25maWcgTkVURklMVEVSX0NPTk5DT1VOVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk3MQoJCQkJCQkJb3V0cHV0OiAxNjIKCQkJCQkJCXRob3VnaHRzOiAxNTcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIE5ldGZpbHRlciBDb25udHJhY2sgTmV0bGluayBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSB0aGF0IGBORl9DVF9ORVRMSU5LYCBpcyBjb250aW5nZW50IG9uIGBORl9DT05OVFJBQ0tgLCBhbmQgYm90aCBhcmUgdW5kZXIgYElORVQgJmFtcDsmYW1wOyBORVRGSUxURVJgLCBzbyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYXJlIGBORVRGSUxURVJgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORl9DVF9ORVRMSU5LYC4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBjb2RlLiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24gaXMgYGV4cGVjdF9pdGVyX25hbWVgLCB3aGljaCBpcyBkZWNsYXJlZCBgc3RhdGljYCB3aXRoaW4gYG5mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBJbml0aWFsbHksIEkgd2FzIGEgYml0IGNvbmNlcm5lZCBhYm91dCBzdGF0aWMgZnVuY3Rpb25zLCBhcyB0aGV5IGNhbiBzb21ldGltZXMgYmUgaW5saW5lZCwgYW5kIHRob3NlIGFyZSBkaWZmaWN1bHQgdG8gdGFyZ2V0IGRpcmVjdGx5IHdpdGggc3ltYm9sIGNvdmVyYWdlLiBIb3dldmVyLCB0aGUgZG9jdW1lbnRhdGlvbiBjbGFyaWZpZXMgdGhhdCB3ZSBzaG91bGQgbG9vayBmb3Igbm9uLXN0YXRpYyBjYWxsZXJzIGlmIHRoZSBjb2RlIHVzZXMgc3RhdGljIGlubGluZXMgaW4gLmggZmlsZXMuCgpCdXQsIGBleHBlY3RfaXRlcl9uYW1lYCBpcyBpbiBhIGAuY2AgZmlsZSwgbm90IGEgYC5oYCBoZWFkZXIsIHNvIGlzIGl0IGlubGluZWQ/IExldCYjMzk7cyB2ZXJpZnkuIExpbmUgMzQ1OCBzaG93cyBpdHMgYWRkcmVzcyBpcyB0YWtlbiBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgYXJndW1lbnQsIHNvIHRoZSBjb21waWxlciBjYW5ub3QgaW5saW5lIGl0LiBUaHVzLCBgZXhwZWN0X2l0ZXJfbmFtZWAgaXMgYSBkaXN0aW5jdCBzeW1ib2wuIFRoZSBkaXJlY3QgQVBJIGVudHJ5cG9pbnQgaW4gdGhpcyBjYXNlIGlzIGBjdG5ldGxpbmtfZGVsX2V4cGVjdGAsIHdoaWNoIGNhbGxzIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgLCBhbmQgdGhhdCBpbiB0dXJuIGNhbGxzIGBleHBlY3RfaXRlcl9uYW1lYCwgc28gdGhleSBib3RoIGFyZSB2YWxpZCBmb2N1cyBzeW1ib2xzLiBDaGVja2luZyBmb3Igb3RoZXIgY2FsbGVycyBvZiBgZXhwZWN0X2l0ZXJfbmFtZWAgY29uZmlybXMgdGhhdCBgY3RuZXRsaW5rX2RlbF9leHBlY3RgIGlzIHRoZSBzb2xlIGNhbGxlci4KCkxvb2tpbmcgYXQgdGhlIGdpdCBkaWZmLCB0aGUgY2hhbmdlIGludm9sdmVzIHVzaW5nIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkYCB3aXRoIGEgYGxvY2tkZXBfaXNfaGVsZGAgYXNzZXJ0aW9uLiBUaGlzIGFzc2VydGlvbiBjaGVjayBtZWFucyB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgdHJ1ZWAgYmVjYXVzZSBpdCBpbnRyb2R1Y2VzIGEgcnVudGltZSBhc3NlcnRpb24gaW4gcmVhY2hhYmxlIGNvZGUuIE5ldGZpbHRlciBuZXRsaW5rIGlzIGVhc2lseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UsIHNvIHRoaXMgY29kZSBpcyBpbmRlZWQgcmVhY2hhYmxlLiBBbHNvIFN5emthbGxlciBhY3RpdmVseSB0ZXN0cyB0aGVzZSBuZXRsaW5rIHNvY2tldHMsIHNwZWNpZmljYWxseSBgbmZuZXRsaW5rYCBhbmQgYGN0bmV0bGlua2AsIG1ha2luZyB0aGlzIGV2ZW4gbW9yZSByZWxldmFudCB0byBmdXp6aW5nLgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayB0aGUgZm9jdXMgc3ltYm9sczogYGV4cGVjdF9pdGVyX25hbWVgIGFuZCBgY3RuZXRsaW5rX2RlbF9leHBlY3RgIGFyZSB0aGUgbW9zdCBzcGVjaWZpYyBhbmQgdXNlZnVsIHRhcmdldHMgaGVyZS4KCkZpbmFsbHksIHdlIG5lZWQgdG8gbGlzdCB0aGUgZW5hYmxlIGNvbmZpZ3VyYXRpb25zLCB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdCB0aGUgY29uZmlncyByZXF1aXJlZCBmb3IgdGhlIGNvZGUgYXJlIGBORl9DVF9ORVRMSU5LYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkVURklMVEVSYC4KClNvLCB0aGUgZnV6emluZyB2ZXJkaWN0IGlzIGBXb3J0aEZ1enppbmcgPSB0cnVlYC4gVGhlIGBSZWFzb25pbmdgIHNob3VsZCBiZTogJiMzNDtUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBsb2NrZGVwIGFzc2VydGlvbiAoYHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWRgKSBpbiByZWFjaGFibGUgTmV0ZmlsdGVyIG5ldGxpbmsgY29kZS4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7CgpUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGBbJiMzNDtleHBlY3RfaXRlcl9uYW1lJiMzNDssICYjMzQ7Y3RuZXRsaW5rX2RlbF9leHBlY3QmIzM0O11gLCBhbmQgdGhlIGBFbmFibGVDb25maWdzYCBhcmUgYFsmIzM0O05GX0NUX05FVExJTksmIzM0OywgJiMzNDtORl9DT05OVFJBQ0smIzM0OywgJiMzNDtORVRGSUxURVImIzM0O11gLiBFdmVyeXRoaW5nIGlzIGFjY291bnRlZCBmb3IsIGFuZCBpdCBpcyBhIHNvbGlkIHBsYW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9DVF9ORVRMSU5LJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORVRGSUxURVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHBlY3RfaXRlcl9uYW1lJiMzNDssCiAgICAmIzM0O2N0bmV0bGlua19kZWxfZXhwZWN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGV4cGVjdF9pdGVyX25hbWUoKSBpbiBuZXRmaWx0ZXImIzM5O3MgY3RuZXRsaW5rIGltcGxlbWVudGF0aW9uLCByZXBsYWNpbmcgcmN1X2RlcmVmZXJlbmNlKCkgd2l0aCByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKCkgYW5kIGVuZm9yY2luZyBhIGxvY2tkZXAgYXNzZXJ0aW9uIGNoZWNraW5nIG5mX2Nvbm50cmFja19leHBlY3RfbG9jay4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgc29ja2V0cyAoQ1RBX0VYUEVDVF9IRUxQX05BTUUgaW4gY3RuZXRsaW5rX2RlbF9leHBlY3QpIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIHRlc3QgdGhlIG5ldyBsb2NraW5nIGFzc2VydGlvbiBhbmQgcHJldmVudCByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfQ1RfTkVUTElOSyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkVURklMVEVSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXhwZWN0X2l0ZXJfbmFtZSYjMzQ7LAogICAgJiMzNDtjdG5ldGxpbmtfZGVsX2V4cGVjdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHBlY3RfaXRlcl9uYW1lKCkgaW4gbmV0ZmlsdGVyJiMzOTtzIGN0bmV0bGluayBpbXBsZW1lbnRhdGlvbiwgcmVwbGFjaW5nIHJjdV9kZXJlZmVyZW5jZSgpIHdpdGggcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCgpIGFuZCBlbmZvcmNpbmcgYSBsb2NrZGVwIGFzc2VydGlvbiBjaGVja2luZyBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2suIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIHNvY2tldHMgKENUQV9FWFBFQ1RfSEVMUF9OQU1FIGluIGN0bmV0bGlua19kZWxfZXhwZWN0KSBhbmQgd2FycmFudHMgZnV6emluZyB0byB0ZXN0IHRoZSBuZXcgbG9ja2luZyBhc3NlcnRpb24gYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDE6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXBsYWNlcyBgcmN1X2RlcmVmZXJlbmNlKGV4cC1cdTAwM2VoZWxwZXIpYCB3aXRoIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGV4cC1cdTAwM2VoZWxwZXIsIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spKWAgaW4gYGV4cGVjdF9pdGVyX25hbWUoKWAuXG5cbmBleHBlY3RfaXRlcl9uYW1lKClgIGlzIGludm9rZWQgYXMgYW4gaXRlcmF0b3IgY2FsbGJhY2sgZnJvbSBgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KClgLCB3aGljaCBhY3F1aXJlcyBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYCB2aWEgYHNwaW5fbG9ja19iaCgpYC4gVXNpbmcgYHJjdV9kZXJlZmVyZW5jZSgpYCB3aXRob3V0IGFuIFJDVSByZWFkLXNpZGUgbG9jayBjYXVzZXMgbG9ja2RlcC9SQ1UgZGVidWdnaW5nIHdhcm5pbmdzIHdoZW4gYENPTkZJR19QUk9WRV9SQ1VgIGlzIGVuYWJsZWQuIFRoZSBjaGFuZ2UgdXBkYXRlcyB0aGUgUkNVIGRlcmVmZXJlbmNlIG1hY3JvIHRvIGluZGljYXRlIHRoYXQgdGhlIGFjY2VzcyBpcyBwcm90ZWN0ZWQgYnkgYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhbiBSQ1UvbG9ja2RlcCBhbm5vdGF0aW9uLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIGNoYW5nZSBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBtZW1vcnkgY29weWluZywgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJlNjZmNGNkZjkyOGUwODk1ZjgwYTJiNDBhNjI0MDlmZDhhMDg0MGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAwMTozNjowNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCA1NzlhZGEwNjNiMWJiLi40ZTVkN2M3MDE0MzY4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC0zMzkyLDcgJiM0MzszMzkyLDggQEAgc3RhdGljIGJvb2wgZXhwZWN0X2l0ZXJfbmFtZShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCB2b2lkICpkYXRhKQogCXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXI7CiAJY29uc3QgY2hhciAqbmFtZSA9IGRhdGE7CiAKLQloZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoZXhwLSZndDtoZWxwZXIpOwomIzQzOwloZWxwZXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGV4cC0mZ3Q7aGVscGVyLAomIzQzOwkJCQkJICAgbG9ja2RlcF9pc19oZWxkKCZhbXA7bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSk7CiAJaWYgKCFoZWxwZXIpCiAJCXJldHVybiBmYWxzZTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDE6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNwoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb25udHJhY2sgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgcHJvdmlkZWQgcGF0Y2ggdGFyZ2V0cyBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBuZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgaW50ZXJhY3Rpb25zIHdpdGggdGhlIG5ldGxpbmsgaW50ZXJmYWNlLiBUaGUgY2hhbmdlIGlzIHN1YnRsZSBidXQgcG90ZW50aWFsbHkgY3JpdGljYWwuIFRoZXkmIzM5O3ZlIHVwZGF0ZWQgdGhlIGBleHBlY3RfaXRlcl9uYW1lYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgdGhlIGBoZWxwZXJgIG1lbWJlciBvZiBgbmZfY29ubnRyYWNrX2V4cGVjdGAgaXMgYWNjZXNzZWQuCgpCZWZvcmUgdGhlIHBhdGNoLCB3ZSBoYWQgYSBzaW1wbGUgYHJjdV9kZXJlZmVyZW5jZWAuIE5vdywgaXQmIzM5O3MgYHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWRgIHdpdGggYSBsb2NrIGRlcGVuZGVuY3kgY2hlY2sgdXNpbmcgYGxvY2tkZXBfaXNfaGVsZGAgb24gYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AuIFRoYXQmIzM5O3MgYSByZWQgZmxhZyDigJMgYSBnb29kIG9uZS4gSXQgaW5kaWNhdGVzIGEgcG90ZW50aWFsIGRhdGEgcmFjZSBvciBzeW5jaHJvbml6YXRpb24gaXNzdWUgd2FzIGlkZW50aWZpZWQsIGFuZCB0aGlzIHBhdGNoIGFpbXMgdG8gcHJvdmlkZSBhIG1vcmUgcm9idXN0IG1lbW9yeSBiYXJyaWVyLiBUaGlzIGhpbnRzIGF0IHRoZSBwb3NzaWJpbGl0eSBvZiBhIHVzZS1hZnRlci1mcmVlIG9yIGRhdGEgY29ycnVwdGlvbiBzY2VuYXJpbyBpZiB0aGUgYGhlbHBlcmAgcG9pbnRlciBpcyBhY2Nlc3NlZCBjb25jdXJyZW50bHkgd2l0aCBtb2RpZmljYXRpb25zIHRvIHRoZSBgbmZfY29ubnRyYWNrX2V4cGVjdGAgc3RydWN0dXJlLiBUaGUgbG9jayBpbXBsaWVzIHdlIGFyZSBwcm9iYWJseSBtb3ZpbmcgZnJvbSBhIFJDVS1vbmx5IHdvcmxkIHRvIGEgbW9yZSBjb21wbGV4IGxvY2tpbmcgc2NoZW1lLCBidXQgcGVyaGFwcyBvbmx5IGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4KClRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBhbmQgdGhlIHNldmVyaXR5IG9mIHRoZSBvcmlnaW5hbCBmbGF3LCBJIHNob3VsZCBpbW1lZGlhdGVseSBncmFiIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIGxpbmUgMzM5Mi4gTGV0JiMzOTtzIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHVuZGVyc3RhbmQgaG93IHRoaXMgcGFydGljdWxhciBgbmZfY29ubnRyYWNrX2V4cGVjdGAgc3RydWN0dXJlIGlzIHVzZWQsIGhvdyB0aGUgaGVscGVyIGlzIGFzc2lnbmVkLCBhbmQgd2hhdCBvdGhlciB0aHJlYWRzIG1pZ2h0IGJlIGludm9sdmVkIGluIHRoZSBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiBvZiB0aGUgYGhlbHBlcmAgcG9pbnRlci4gS25vd2luZyB3aGF0IG90aGVyIGRhdGEgaXMgYmVpbmcgcmVhZCBhbmQgbW9kaWZpZWQgb24gdGhlIHNhbWUgc3RydWN0dXJlcyB3aWxsIGhpZ2hsaWdodCB3aGVyZSB0aGUgcmFjZSBjb25kaXRpb24gb2NjdXJzLiBJIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIGhvdyBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYCBpcyBhY3F1aXJlZCBhbmQgcmVsZWFzZWQuCgpJdCYjMzk7cyBhIGdvb2QgcGF0Y2ggc28gZmFyIGJlY2F1c2UgaXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgbW92aW5nIHRvd2FyZHMgbW9yZSBkaXNjaXBsaW5lZCBtZW1vcnkgYWNjZXNzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYnJvYWRlciBjb2RlIGNvbnRleHQgYmVmb3JlIEkgY2FuIGZ1bGx5IGFzc2VzcyB0aGUgaW1wYWN0IGFuZCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzODA6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jayk7XG4zMzgxOlx0XG4zMzgyOlx0XHRpZiAoZXJyIFx1MDAzYz0gMCkge1xuMzM4MzpcdFx0XHRrZnJlZV9za2Ioc2tiMik7XG4zMzg0Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuMzM4NTpcdFx0fVxuMzM4NjpcdFxuMzM4NzpcdFx0cmV0dXJuIG5mbmV0bGlua191bmljYXN0KHNrYjIsIGluZm8tXHUwMDNlbmV0LCBORVRMSU5LX0NCKHNrYikucG9ydGlkKTtcbjMzODg6XHR9XG4zMzg5Olx0XG4zMzkwOlx0c3RhdGljIGJvb2wgZXhwZWN0X2l0ZXJfbmFtZShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCB2b2lkICpkYXRhKVxuMzM5MTpcdHtcbjMzOTI6XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXI7XG4zMzkzOlx0XHRjb25zdCBjaGFyICpuYW1lID0gZGF0YTtcbjMzOTQ6XHRcbjMzOTU6XHRcdGhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZXhwLVx1MDAzZWhlbHBlcixcbjMzOTY6XHRcdFx0XHRcdFx0ICAgbG9ja2RlcF9pc19oZWxkKFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jaykpO1xuMzM5NzpcdFx0aWYgKCFoZWxwZXIpXG4zMzk4Olx0XHRcdHJldHVybiBmYWxzZTtcbjMzOTk6XHRcbjM0MDA6XHRcdHJldHVybiBzdHJjbXAoaGVscGVyLVx1MDAzZW5hbWUsIG5hbWUpID09IDA7XG4zNDAxOlx0fVxuMzQwMjpcdFxuMzQwMzpcdHN0YXRpYyBib29sIGV4cGVjdF9pdGVyX2FsbChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCB2b2lkICpkYXRhKVxuMzQwNDpcdHtcbjM0MDU6XHRcdHJldHVybiB0cnVlO1xuMzQwNjpcdH1cbjM0MDc6XHRcbjM0MDg6XHRzdGF0aWMgaW50IGN0bmV0bGlua19kZWxfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsXG4zNDA5Olx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuMzQxMDpcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKVxuMzQxMTpcdHtcbjM0MTI6XHRcdHVfaW50OF90IHUzID0gaW5mby1cdTAwM2VuZm1zZy1cdTAwM2VuZmdlbl9mYW1pbHk7XG4zNDEzOlx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwO1xuMzQxNDpcdFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTtcbjM0MTU6XHRcdHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSB6b25lO1xuMzQxNjpcdFx0aW50IGVycjtcbjM0MTc6XHRcbjM0MTg6XHRcdGlmIChjZGFbQ1RBX0VYUEVDVF9UVVBMRV0pIHtcbjM0MTk6XHRcdFx0LyogZGVsZXRlIGEgc2luZ2xlIGV4cGVjdCBieSB0dXBsZSAqL1xuMzQyMDpcdFx0XHRlcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX0VYUEVDVF9aT05FXSwgXHUwMDI2em9uZSk7XG4zNDIxOlx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4zNDIyOlx0XHRcdFx0cmV0dXJuIGVycjtcbjM0MjM6XHRcbjM0MjQ6XHRcdFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlKGNkYSwgXHUwMDI2dHVwbGUsIENUQV9FWFBFQ1RfVFVQTEUsXG4zNDI1Olx0XHRcdFx0XHRcdCAgICB1MywgTlVMTCk7XG4zNDI2Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4zNDI3Olx0XHRcdFx0cmV0dXJuIGVycjtcbjM0Mjg6XHRcbjM0Mjk6XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYGV4cGVjdF9pdGVyX25hbWVgKioKCk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgYGV4cGVjdF9pdGVyX25hbWVgLiBUaGUgYmVzdCB3YXkgdG8gZG8gdGhhdCwgYXMgYWx3YXlzLCBpcyB0byBmb2xsb3cgdGhlIGJyZWFkY3J1bWJzIG9mIGl0cyB1c2FnZS4gTGV0JiMzOTtzIGZpbmQgb3V0IHdoZXJlIHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgY2FsbGVkLiBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIHF1aWNrIHNlYXJjaCBmb3IgYWxsIHRoZSBjYWxsZXJzIG9mIGBleHBlY3RfaXRlcl9uYW1lYCB3aXRoaW4gdGhlIGNvZGViYXNlLiBLbm93aW5nIHRoZSBjb250ZXh0cyB3aGVyZSBpdCYjMzk7cyB1c2VkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBjaGFuZ2VzLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgZWFjaCBjYWxsIHNpdGUgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gaG93IGl0JiMzOTtzIGJlaW5nIGVtcGxveWVkIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4cGVjdF9pdGVyX25hbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTMzMTE9c3RhdGljIGludCBjdG5ldGxpbmtfZ2V0X2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zMzg5LVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjMzOTA6c3RhdGljIGJvb2wgZXhwZWN0X2l0ZXJfbmFtZShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCB2b2lkICpkYXRhKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTMzOTEte1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zNDA4PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2RlbF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzQ1Ny1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNDU4Olx0XHRuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXQoaW5mby1cdTAwM2VuZXQsIGV4cGVjdF9pdGVyX25hbWUsIG5hbWUsXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzQ1OS1cdFx0XHRcdFx0IE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNTcKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGl0ZXJhdG9yIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLCBwYXJ0aWN1bGFybHkgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIG5ldGxpbmsgaW50ZXJmYWNlIGFuZCB0aGUgdW5kZXJseWluZyBleHBlY3RhdGlvbiB0YWJsZS4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBudWFuY2VzOiB0aGUgaGFuZGxpbmcgb2YgY29uY3VycmVudCBhY2Nlc3MsIHBvdGVudGlhbCBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCB0byBtYWludGFpbiBjb25zaXN0ZW5jeSwgYW5kIGhvdyBpdCBkZWFscyB3aXRoIGl0ZXJhdGluZyB0aHJvdWdoIGEgcG90ZW50aWFsbHkgbGFyZ2UgbnVtYmVyIG9mIGV4cGVjdGF0aW9ucyB3aXRob3V0IGNhdXNpbmcgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEkmIzM5O20ga2VlbiB0byBzZWUgaWYgaXQgZWZmaWNpZW50bHkgaGFuZGxlcyBuZXN0ZWQgZXhwZWN0YXRpb25zIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgY2xldmVyIHVzZSBvZiBkYXRhIHN0cnVjdHVyZXMgdG8gc3BlZWQgdXAgdGhlIGl0ZXJhdGlvbiBwcm9jZXNzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgb3IgYXJlYXMgd2hlcmUgaXQgbWlnaHQgYmUgdnVsbmVyYWJsZSB0byBkZW5pYWwtb2Ytc2VydmljZSBhdHRhY2tzLiBJJiMzOTttIGFsc28gY3VyaW91cyB0byBzZWUgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgY29ubnRyYWNrIGhlbHBlcnMgYW5kIHdoZXRoZXIgaXQgcHJvdmlkZXMgYW55IGZpbHRlcmluZyBjYXBhYmlsaXRpZXMgdG8gbGltaXQgdGhlIHNjb3BlIG9mIHRoZSBpdGVyYXRpb24uIEJhc2ljYWxseSwgSSB3YW50IHRvIHNlZSBpZiB0aGlzIGNvZGUgaXMgY2xlYW4sIGVmZmljaWVudCwgYW5kIHJvYnVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMDE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg9MTQ2PXZvaWQgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfZGVzdHJveShib29sICgqaXRlcikoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmUsIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKTtcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg6MTQ3OnZvaWQgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KHN0cnVjdCBuZXQgKm5ldCxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgtMTQ4LVx0XHRcdCAgICAgIGJvb2wgKCppdGVyKShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZSwgdm9pZCAqZGF0YSksXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM9NjEyPUVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9pdGVyYXRlX2Rlc3Ryb3kpO1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtNjEzLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6NjE0OnZvaWQgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTYxNS1cdFx0XHQgICAgICBib29sICgqaXRlcikoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmUsIHZvaWQgKmRhdGEpLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTYzOS19XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYzo2NDA6RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTY0MS1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzQwOD1zdGF0aWMgaW50IGN0bmV0bGlua19kZWxfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0NTctXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MzQ1ODpcdFx0bmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KGluZm8tXHUwMDNlbmV0LCBleHBlY3RfaXRlcl9uYW1lLCBuYW1lLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0NTktXHRcdFx0XHRcdCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNDYyLVx0XHQvKiBUaGlzIGJhc2ljYWxseSBtZWFucyB3ZSBoYXZlIHRvIGZsdXNoIGV2ZXJ5dGhpbmcqL1xubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM0NjM6XHRcdG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldChpbmZvLVx1MDAzZW5ldCwgZXhwZWN0X2l0ZXJfYWxsLCBOVUxMLFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0NjQtXHRcdFx0XHRcdCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwMTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTUxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gQ29ubnRyYWNrIEV4cGVjdGF0aW9ucyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0JiMzOTtzIGNydWNpYWwgZm9yIGl0ZXJhdGluZyB0aHJvdWdoIGNvbm50cmFjayBleHBlY3RhdGlvbnMsIGFuZCBpdCYjMzk7cyBsb2NhdGVkIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyBgbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNgLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCB0cmF2ZXJzZXMgdGhlIGV4cGVjdGF0aW9uIHRhYmxlIGFuZCB3aGF0IGtpbmQgb2YgZGF0YSBpdCYjMzk7cyBleHRyYWN0aW5nIGR1cmluZyB0aGUgcHJvY2Vzcy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIGluIGNvbm50cmFjayB3aXRoIG11bHRpcGxlIG5ldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MTQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYxNDpcdHZvaWQgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KHN0cnVjdCBuZXQgKm5ldCxcbiA2MTU6XHRcdFx0XHQgICAgICBib29sICgqaXRlcikoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmUsIHZvaWQgKmRhdGEpLFxuIDYxNjpcdFx0XHRcdCAgICAgIHZvaWQgKmRhdGEsXG4gNjE3Olx0XHRcdFx0ICAgICAgdTMyIHBvcnRpZCwgaW50IHJlcG9ydClcbiA2MTg6XHR7XG4gNjE5Olx0XHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwO1xuIDYyMDpcdFx0Y29uc3Qgc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7XG4gNjIxOlx0XHR1bnNpZ25lZCBpbnQgaTtcbiA2MjI6XHRcbiA2MjM6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xuIDYyNDpcdFxuIDYyNTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbmZfY3RfZXhwZWN0X2hzaXplOyBpJiM0MzsmIzQzOykge1xuIDYyNjpcdFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV4cCwgbmV4dCxcbiA2Mjc6XHRcdFx0XHRcdFx0ICBcdTAwMjZuZl9jdF9leHBlY3RfaGFzaFtpXSxcbiA2Mjg6XHRcdFx0XHRcdFx0ICBobm9kZSkge1xuIDYyOTpcdFxuIDYzMDpcdFx0XHRcdGlmICghbmV0X2VxKG5mX2N0X2V4cF9uZXQoZXhwKSwgbmV0KSlcbiA2MzE6XHRcdFx0XHRcdGNvbnRpbnVlO1xuIDYzMjpcdFxuIDYzMzpcdFx0XHRcdGlmIChpdGVyKGV4cCwgZGF0YSkpXG4gNjM0Olx0XHRcdFx0XHRuZl9jdF91bmxpbmtfZXhwZWN0X3JlcG9ydChleHAsIHBvcnRpZCwgcmVwb3J0KTtcbiA2MzU6XHRcdFx0fVxuIDYzNjpcdFx0fVxuIDYzNzpcdFxuIDYzODpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKTtcbiA2Mzk6XHR9XG4gNjQwOlx0RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KTtcbiA2NDE6XHRcbiA2NDI6XHQjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19QUk9DRlNcbiA2NDM6XHRzdHJ1Y3QgY3RfZXhwZWN0X2l0ZXJfc3RhdGUge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAwMTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjM5CgkJCQkJCQlvdXRwdXQ6IDI1MAoJCQkJCQkJdGhvdWdodHM6IDY5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYW4gUkNVIGFuZCBMb2NrZGVwIEludGVyYWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgZnJvbSB3aGF0IEkgY2FuIHRlbGwsIGl0JiMzOTtzIGEgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQgY2hhbmdlIHJlbGF0ZWQgdG8gaG93IFJDVSBhbmQgbG9ja2RlcCBpbnRlcmFjdCB3aXRoaW4gdGhlIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgdGhlIG9yaWdpbmFsIGNvZGUsIHdoZW4gY2FsbGluZyBgaXRlcihleHAsIGRhdGEpYCB3aGlsZSBob2xkaW5nIGBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2tgLCB3YXMgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZShleHAtJmd0O2hlbHBlcilgIHdpdGhpbiBgZXhwZWN0X2l0ZXJfbmFtZWAuIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2l0aCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBsb2NrZGVwIGFuZCBSQ1UgZW5hYmxlZCwgdGhpcyBjYW4gdHJpZ2dlciBhICYjMzQ7c3VzcGljaW91cyByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSB1c2FnZSEmIzM0OyB3YXJuaW5nLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IGByY3VfZGVyZWZlcmVuY2VgIGRvZXNuJiMzOTt0IGV4cGxpY2l0bHkgc3RhdGUgdGhhdCB0aGUgUkNVIHJlYWQgbG9jayBpcyBiZWluZyBoZWxkLCBldmVuIHRob3VnaCBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYCBwcm92aWRlcyB0aGUgc2FtZSBsZXZlbCBvZiBwcm90ZWN0aW9uLgoKVGhlIGZpeCwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpbnZvbHZlcyByZXBsYWNpbmcgdGhlIHBvdGVudGlhbGx5IG1pc2xlYWRpbmcgYHJjdV9kZXJlZmVyZW5jZWAgd2l0aCBgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChleHAtJmd0O2hlbHBlciwgbG9ja2RlcF9pc19oZWxkKCZhbXA7bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSlgLiBUaGlzIG5ldyBjb25zdHJ1Y3Rpb24gZXhwbGljaXRseSBhc3NlcnRzIHRoYXQgYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AgaXMgaGVsZCB3aGVuIGFjY2Vzc2luZyBgZXhwLSZndDtoZWxwZXJgLCB0aGVyZWJ5IHNpbGVuY2luZyB0aGUgbG9ja2RlcCBmYWxzZSBwb3NpdGl2ZSBvciB2YWxpZGF0aW5nIHRoYXQgaXQmIzM5O3MgYmVpbmcgaGVsZCBhcyBpbnRlbmRlZC4KCk5vdywgbXkgcmVhbCBjb25jZXJuIGhlcmUgaXMgYWx3YXlzIGFyb3VuZCBwb3RlbnRpYWwgbWVtb3J5IGlzc3Vlcy4gRG9lcyB0aGlzIHNlZW1pbmdseSBiZW5pZ24gY2hhbmdlICppbnRyb2R1Y2UqIG9yIHNvbWVob3cgKmV4cG9zZSogdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLCBpdCBkb2VzbiYjMzk7dC4gVGhpcyBpc24mIzM5O3QgdG91Y2hpbmcgbWVtb3J5IGFsbG9jYXRpb24uIEl0JiMzOTtzIG5vdCBjcmVhdGluZyBuZXcgdmFyaWFibGVzLCBjb3B5aW5nIGRhdGEgdG8gdXNlcnNwYWNlLCBtZXNzaW5nIHdpdGggYnVmZmVyIGxlbmd0aHMsIG9yIGNoYW5naW5nIHRoZSBjb250cm9sIGZsb3cgKGJleW9uZCB0aGUgUkNVIGxvY2tkZXAgY2hlY2spLiBJdCYjMzk7cyBwdXJlbHkgYW4gUkNVIGFubm90YXRpb24gb3IgbG9ja2RlcCB2ZXJpZmljYXRpb24gY2hhbmdlLCB3aGljaCBzaG91bGQgYmUgZmluZS4KCkxldCBtZSBxdWlja2x5IHJldmlldyB0aGUgZ3VpZGVsaW5lcyBmb3Igc2V0dGluZyBgTmVlZHNLTVNBTmAuIEkgbmVlZCB0byBzZXQgdGhhdCBmbGFnIGlmIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIGtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlLCBkZXBlbmRzIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpbnZvbHZlcyBhbGxvY2F0aW5nIG9yIGluaXRpYWxpemluZyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLCBvciBkb2VzIGFueXRoaW5nIHRoYXQgbWlnaHQgY3JlYXRlIGEgdnVsbmVyYWJpbGl0eSB3aXRoIGJvdW5kcyBjaGVja3MuCgpIb3dldmVyLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgcGF0Y2gsIGBOZWVkc0tNU0FOYCBpcyAqY2xlYXJseSogYGZhbHNlYC4gSXQmIzM5O3Mgb25seSByZXBsYWNpbmcgYW4gUkNVIGRlcmVmZXJlbmNlIHdpdGggYSBwcm90ZWN0ZWQgdmVyc2lvbiwgYmVjYXVzZSB0aGUgY2FsbGluZyBjb250ZXh0ICphbHJlYWR5KiBndWFyYW50ZWVzIHByb3RlY3Rpb24gdmlhIHRoZSBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYC4gVGhlIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgbGVhayByaXNrIGlzIHplcm8gaGVyZS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgYW4gZXhwbGljaXQgc3RhdGVtZW50IGFib3V0IHRoZSBleGlzdGluZyBsb2NraW5nIGFuZCBSQ1UgZ3VhcmFudGVlcy4KCkFscmlnaHQsIHdpdGggdGhhdCBhc3Nlc3NtZW50IGNvbXBsZXRlLCBJIHRoaW5rIEkmIzM5O20gcmVhZHkgdG8gZm9ybXVsYXRlIG15IHJlc3BvbnNlIGFuZCBzZXQgdGhlIHJlc3VsdHMgYWNjb3JkaW5nbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDAxOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlcGxhY2VzIGByY3VfZGVyZWZlcmVuY2UoZXhwLVx1MDAzZWhlbHBlcilgIHdpdGggYHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZXhwLVx1MDAzZWhlbHBlciwgbG9ja2RlcF9pc19oZWxkKFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jaykpYCBpbiBgZXhwZWN0X2l0ZXJfbmFtZSgpYC5cblxuYGV4cGVjdF9pdGVyX25hbWUoKWAgaXMgaW52b2tlZCBhcyBhbiBpdGVyYXRvciBjYWxsYmFjayBmcm9tIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXQoKWAsIHdoaWNoIGFjcXVpcmVzIGBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2tgIHZpYSBgc3Bpbl9sb2NrX2JoKClgLiBVc2luZyBgcmN1X2RlcmVmZXJlbmNlKClgIHdpdGhvdXQgYW4gUkNVIHJlYWQtc2lkZSBsb2NrIGNhdXNlcyBsb2NrZGVwL1JDVSBkZWJ1Z2dpbmcgd2FybmluZ3Mgd2hlbiBgQ09ORklHX1BST1ZFX1JDVWAgaXMgZW5hYmxlZC4gVGhlIGNoYW5nZSB1cGRhdGVzIHRoZSBSQ1UgZGVyZWZlcmVuY2UgbWFjcm8gdG8gaW5kaWNhdGUgdGhhdCB0aGUgYWNjZXNzIGlzIHByb3RlY3RlZCBieSBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYC5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFuIFJDVS9sb2NrZGVwIGFubm90YXRpb24uIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSwgY2hhbmdlIGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBhbHRlciBidWZmZXIgYm91bmRzIG9yIG1lbW9yeSBjb3B5aW5nLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVwbGFjZXMgYHJjdV9kZXJlZmVyZW5jZShleHAtXHUwMDNlaGVscGVyKWAgd2l0aCBgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChleHAtXHUwMDNlaGVscGVyLCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSlgIGluIGBleHBlY3RfaXRlcl9uYW1lKClgLlxuXG5gZXhwZWN0X2l0ZXJfbmFtZSgpYCBpcyBpbnZva2VkIGFzIGFuIGl0ZXJhdG9yIGNhbGxiYWNrIGZyb20gYG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldCgpYCwgd2hpY2ggYWNxdWlyZXMgYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AgdmlhIGBzcGluX2xvY2tfYmgoKWAuIFVzaW5nIGByY3VfZGVyZWZlcmVuY2UoKWAgd2l0aG91dCBhbiBSQ1UgcmVhZC1zaWRlIGxvY2sgY2F1c2VzIGxvY2tkZXAvUkNVIGRlYnVnZ2luZyB3YXJuaW5ncyB3aGVuIGBDT05GSUdfUFJPVkVfUkNVYCBpcyBlbmFibGVkLiBUaGUgY2hhbmdlIHVwZGF0ZXMgdGhlIFJDVSBkZXJlZmVyZW5jZSBtYWNybyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBhY2Nlc3MgaXMgcHJvdGVjdGVkIGJ5IGBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2tgLlxuXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYW4gUkNVL2xvY2tkZXAgYW5ub3RhdGlvbi4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBjaGFuZ2UgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgbWVtb3J5IGNvcHlpbmcsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDAxOjM2OjA4LjU2MDA3MzExMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NTg3MzM1NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NUX05FVExJTktcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXhwZWN0X2l0ZXJfbmFtZVwiLFxuICAgIFwiY3RuZXRsaW5rX2RlbF9leHBlY3RcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlcGxhY2VzIGByY3VfZGVyZWZlcmVuY2UoZXhwLVxcdTAwM2VoZWxwZXIpYCB3aXRoIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGV4cC1cXHUwMDNlaGVscGVyLCBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jaykpYCBpbiBgZXhwZWN0X2l0ZXJfbmFtZSgpYC5cXG5cXG5gZXhwZWN0X2l0ZXJfbmFtZSgpYCBpcyBpbnZva2VkIGFzIGFuIGl0ZXJhdG9yIGNhbGxiYWNrIGZyb20gYG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldCgpYCwgd2hpY2ggYWNxdWlyZXMgYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AgdmlhIGBzcGluX2xvY2tfYmgoKWAuIFVzaW5nIGByY3VfZGVyZWZlcmVuY2UoKWAgd2l0aG91dCBhbiBSQ1UgcmVhZC1zaWRlIGxvY2sgY2F1c2VzIGxvY2tkZXAvUkNVIGRlYnVnZ2luZyB3YXJuaW5ncyB3aGVuIGBDT05GSUdfUFJPVkVfUkNVYCBpcyBlbmFibGVkLiBUaGUgY2hhbmdlIHVwZGF0ZXMgdGhlIFJDVSBkZXJlZmVyZW5jZSBtYWNybyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBhY2Nlc3MgaXMgcHJvdGVjdGVkIGJ5IGBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2tgLlxcblxcblRoaXMgY2hhbmdlIGlzIHB1cmVseSBhbiBSQ1UvbG9ja2RlcCBhbm5vdGF0aW9uLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIGNoYW5nZSBkYXRhIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiwgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBtZW1vcnkgY29weWluZywgb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleHBlY3RfaXRlcl9uYW1lKCkgaW4gbmV0ZmlsdGVyJ3MgY3RuZXRsaW5rIGltcGxlbWVudGF0aW9uLCByZXBsYWNpbmcgcmN1X2RlcmVmZXJlbmNlKCkgd2l0aCByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKCkgYW5kIGVuZm9yY2luZyBhIGxvY2tkZXAgYXNzZXJ0aW9uIGNoZWNraW5nIG5mX2Nvbm50cmFja19leHBlY3RfbG9jay4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgc29ja2V0cyAoQ1RBX0VYUEVDVF9IRUxQX05BTUUgaW4gY3RuZXRsaW5rX2RlbF9leHBlY3QpIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIHRlc3QgdGhlIG5ldyBsb2NraW5nIGFzc2VydGlvbiBhbmQgcHJldmVudCByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6MzY6MDguNTYwMDc5OTgxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTY2OTM4NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiZTY2ZjRjZGY5MjhlMDg5NWY4MGEyYjQwYTYyNDA5ZmQ4YTA4NDBkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDEyIDAxOjM2OjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xcbmluZGV4IDU3OWFkYTA2M2IxYmIuLjRlNWQ3YzcwMTQzNjggMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXFxuQEAgLTMzOTIsNyArMzM5Miw4IEBAIHN0YXRpYyBib29sIGV4cGVjdF9pdGVyX25hbWUoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdm9pZCAqZGF0YSlcXG4gXFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjtcXG4gXFx0Y29uc3QgY2hhciAqbmFtZSA9IGRhdGE7XFxuIFxcbi1cXHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoZXhwLVxcdTAwM2VoZWxwZXIpO1xcbitcXHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGV4cC1cXHUwMDNlaGVscGVyLFxcbitcXHRcXHRcXHRcXHRcXHQgICBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jaykpO1xcbiBcXHRpZiAoIWhlbHBlcilcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6MzY6MDkuMDU3NDQzNTIzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NTYwNTU5NTU5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4cGVjdF9pdGVyX25hbWVcIixcbiAgICBcImN0bmV0bGlua19kZWxfZXhwZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXhwZWN0X2l0ZXJfbmFtZSgpIGluIG5ldGZpbHRlcidzIGN0bmV0bGluayBpbXBsZW1lbnRhdGlvbiwgcmVwbGFjaW5nIHJjdV9kZXJlZmVyZW5jZSgpIHdpdGggcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCgpIGFuZCBlbmZvcmNpbmcgYSBsb2NrZGVwIGFzc2VydGlvbiBjaGVja2luZyBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2suIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIHNvY2tldHMgKENUQV9FWFBFQ1RfSEVMUF9OQU1FIGluIGN0bmV0bGlua19kZWxfZXhwZWN0KSBhbmQgd2FycmFudHMgZnV6emluZyB0byB0ZXN0IHRoZSBuZXcgbG9ja2luZyBhc3NlcnRpb24gYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmU2NmY0Y2RmOTI4ZTA4OTVmODBhMmI0MGE2MjQwOWZkOGEwODQwZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDAxOjM2OjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5pbmRleCA1NzlhZGEwNjNiMWJiLi40ZTVkN2M3MDE0MzY4IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcbkBAIC0zMzkyLDcgKzMzOTIsOCBAQCBzdGF0aWMgYm9vbCBleHBlY3RfaXRlcl9uYW1lKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHZvaWQgKmRhdGEpXG4gXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyO1xuIFx0Y29uc3QgY2hhciAqbmFtZSA9IGRhdGE7XG4gXG4tXHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UoZXhwLVx1MDAzZWhlbHBlcik7XG4rXHRoZWxwZXIgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGV4cC1cdTAwM2VoZWxwZXIsXG4rXHRcdFx0XHRcdCAgIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spKTtcbiBcdGlmICghaGVscGVyKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjowOS4wNTc0NDUyMjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1OTI5NTEyMDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvbm50cmFjayBFeHBlY3QgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWluZyBjaGFuZ2VkIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLiBUaGUgZGlmZiBzaG93cyBhIG1vZGlmaWNhdGlvbiBhcm91bmQgbGluZSAzMzkyLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgdXBkYXRpbmcgdGhlIGFjY2VzcyB0byBgZXhwLVx1MDAzZWhlbHBlcmAgd2l0aGluIHRoZSBgZXhwZWN0X2l0ZXJfbmFtZWAgZnVuY3Rpb24uIFRoZXkncmUgYWRkaW5nIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkYCB3aXRoIGEgYGxvY2tkZXBfaXNfaGVsZGAgY2hlY2sgb24gYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AuIFRoaXMgaXMgaW50ZXJlc3RpbmcuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgcHJvdGVjdGlvbiBjaGFuZ2UgZm9yIFJDVSAoUmVhZC1Db3B5LVVwZGF0ZSkgdXNhZ2UsIHdoaWNoIGlzbid0IGVudGlyZWx5IHN1cnByaXNpbmcgZ2l2ZW4gdGhlIG5hdHVyZSBvZiBjb25udHJhY2suIFNwZWNpZmljYWxseSwgdGhpcyBjaGFuZ2Ugc3VnZ2VzdHMgdGhhdCBhY2Nlc3NpbmcgYGV4cC1cdTAwM2VoZWxwZXJgIHJlcXVpcmVzIHRoZSBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYCB0byBiZSBoZWxkLCBlbnN1cmluZyB0aGUgc2FmZXR5IG9mIGNvbmN1cnJlbnQgYWNjZXNzIHdoZW4gUkNVIGlzIGVuYWJsZWQuXG5cblRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZywgSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIHRoZSB1c2FnZSBvZiBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYC4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGlzIGZpbGUgYW5kIGluc3BlY3QgdGhlIGFyZWEgYXJvdW5kIHRoYXQgbGluZSwgYW5kIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBsb2NrLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGlzIGNoYW5nZSBpcyBkZXNpZ25lZCB0byBhZGRyZXNzLiBUaGlzIGFwcGVhcnMgdG8gYmUgYSBnb29kLWZhaXRoIGF0dGVtcHQgdG8gaW1wcm92ZSBSQ1Ugc2FmZXR5LCBidXQgSSB3b3VsZCB3YW50IHRvIHZlcmlmeSB0aGUgc3BlY2lmaWMgbG9jayBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MDUsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjoxNC45ODY5NjAxNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTIxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM4MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM4MDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKTtcXG4zMzgxOlxcdFxcbjMzODI6XFx0XFx0aWYgKGVyciBcXHUwMDNjPSAwKSB7XFxuMzM4MzpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiMik7XFxuMzM4NDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4zMzg1OlxcdFxcdH1cXG4zMzg2OlxcdFxcbjMzODc6XFx0XFx0cmV0dXJuIG5mbmV0bGlua191bmljYXN0KHNrYjIsIGluZm8tXFx1MDAzZW5ldCwgTkVUTElOS19DQihza2IpLnBvcnRpZCk7XFxuMzM4ODpcXHR9XFxuMzM4OTpcXHRcXG4zMzkwOlxcdHN0YXRpYyBib29sIGV4cGVjdF9pdGVyX25hbWUoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdm9pZCAqZGF0YSlcXG4zMzkxOlxcdHtcXG4zMzkyOlxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXI7XFxuMzM5MzpcXHRcXHRjb25zdCBjaGFyICpuYW1lID0gZGF0YTtcXG4zMzk0OlxcdFxcbjMzOTU6XFx0XFx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChleHAtXFx1MDAzZWhlbHBlcixcXG4zMzk2OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSk7XFxuMzM5NzpcXHRcXHRpZiAoIWhlbHBlcilcXG4zMzk4OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4zMzk5OlxcdFxcbjM0MDA6XFx0XFx0cmV0dXJuIHN0cmNtcChoZWxwZXItXFx1MDAzZW5hbWUsIG5hbWUpID09IDA7XFxuMzQwMTpcXHR9XFxuMzQwMjpcXHRcXG4zNDAzOlxcdHN0YXRpYyBib29sIGV4cGVjdF9pdGVyX2FsbChzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCB2b2lkICpkYXRhKVxcbjM0MDQ6XFx0e1xcbjM0MDU6XFx0XFx0cmV0dXJuIHRydWU7XFxuMzQwNjpcXHR9XFxuMzQwNzpcXHRcXG4zNDA4OlxcdHN0YXRpYyBpbnQgY3RuZXRsaW5rX2RlbF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4zNDA5OlxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuMzQxMDpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pXFxuMzQxMTpcXHR7XFxuMzQxMjpcXHRcXHR1X2ludDhfdCB1MyA9IGluZm8tXFx1MDAzZW5mbXNnLVxcdTAwM2VuZmdlbl9mYW1pbHk7XFxuMzQxMzpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwO1xcbjM0MTQ6XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTtcXG4zNDE1OlxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSB6b25lO1xcbjM0MTY6XFx0XFx0aW50IGVycjtcXG4zNDE3OlxcdFxcbjM0MTg6XFx0XFx0aWYgKGNkYVtDVEFfRVhQRUNUX1RVUExFXSkge1xcbjM0MTk6XFx0XFx0XFx0LyogZGVsZXRlIGEgc2luZ2xlIGV4cGVjdCBieSB0dXBsZSAqL1xcbjM0MjA6XFx0XFx0XFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9FWFBFQ1RfWk9ORV0sIFxcdTAwMjZ6b25lKTtcXG4zNDIxOlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjM0MjI6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zNDIzOlxcdFxcbjM0MjQ6XFx0XFx0XFx0ZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlKGNkYSwgXFx1MDAyNnR1cGxlLCBDVEFfRVhQRUNUX1RVUExFLFxcbjM0MjU6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHUzLCBOVUxMKTtcXG4zNDI2OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjM0Mjc6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4zNDI4OlxcdFxcbjM0Mjk6XFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjoxNC45ODcxMjcyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTgzNjE1MDMxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqVHJhY2luZyB0aGUgQ2FsbGVyIG9mIGBleHBlY3RfaXRlcl9uYW1lYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIGBleHBlY3RfaXRlcl9uYW1lYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiV2hlcmUgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSBiZWluZyB1c2VkP1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gU28sIEkgbmVlZCB0byBzdGFydCBieSB0cmFjaW5nIGl0cyBjYWxsIHNpdGVzLiBBIHF1aWNrIHNlYXJjaCwgYSBncmVwLCBvciBtYXliZSBldmVuIG15IElERSdzIFwiZmluZCB1c2FnZXNcIiBmZWF0dXJlIHNob3VsZCBnaXZlIG1lIGEgbGlzdCBvZiBhbGwgdGhlIHBsYWNlcyBgZXhwZWN0X2l0ZXJfbmFtZWAgaXMgaW52b2tlZC4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gcGllY2UgdG9nZXRoZXIgdGhlIHB1cnBvc2UgYW5kIGlucHV0cyBvZiBgZXhwZWN0X2l0ZXJfbmFtZWAuIElzIGl0IGEgY29yZSB1dGlsaXR5IGZ1bmN0aW9uLCBvciBpcyBpdCBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgbW9kdWxlIG9yIGNsYXNzPyBVbmRlcnN0YW5kaW5nIGl0cyBjYWxsaW5nIGNvbnRleHRzIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCBiZWhhdmlvci4gTGV0J3Mgc2VlIHdoYXQgdGhlIGluaXRpYWwgY2FsbCBsb29rcyBsaWtlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzI3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjoxNi44MjMyNzk3MjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgxNTgxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXhwZWN0X2l0ZXJfbmFtZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzMxMT1zdGF0aWMgaW50IGN0bmV0bGlua19nZXRfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzM4OS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MzM5MDpzdGF0aWMgYm9vbCBleHBlY3RfaXRlcl9uYW1lKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHZvaWQgKmRhdGEpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTMzOTEte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM0MDg9c3RhdGljIGludCBjdG5ldGxpbmtfZGVsX2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0NTctXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM0NTg6XFx0XFx0bmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KGluZm8tXFx1MDAzZW5ldCwgZXhwZWN0X2l0ZXJfbmFtZSwgbmFtZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzQ1OS1cXHRcXHRcXHRcXHRcXHQgTkVUTElOS19DQihza2IpLnBvcnRpZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6MzY6MTYuODgxNDQ0MDNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNzYxODUwNDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBDb250ZXh0OiBgY3RuZXRsaW5rX2RlbF9leHBlY3RgIGFuZCBgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0YCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBjdG5ldGxpbmtfZGVsX2V4cGVjdGAgYW5kIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgLiBNeSBpbml0aWFsIGFwcHJvYWNoIGlzIHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGFuZCB3aGF0IHRoZXkncmUgZG9pbmcgd2l0aGluIHRoZSBsYXJnZXIgY29ubmVjdGlvbiB0cmFja2luZyBmcmFtZXdvcmsuIFdoYXQgdHJpZ2dlcnMgdGhlIG5lZWQgdG8gZGVsZXRlIGFuIGV4cGVjdGF0aW9uPyBJcyBgY3RuZXRsaW5rX2RlbF9leHBlY3RgIGhhbmRsaW5nIGEgdXNlci1zcGFjZSByZXF1ZXN0IHZpYSBuZXRsaW5rLCBtZWFuaW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCBleHBsaWNpdCByZW1vdmFsIG9mIGEgdHJhY2tlZCBleHBlY3RhdGlvbj8gSWYgc28sIHdoYXQgYXJlIHRoZSB1c2UgY2FzZXM/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgdGltZW91dCwgb3IgYSBzcGVjaWZpYywgaW50ZW50aW9uYWwgZGVsZXRpb24gcmVxdWVzdGVkIGJ5IHNvbWUgcHJvY2Vzcz9cblxuTmV4dCwgSSBuZWVkIHRvIHNlZSBob3cgdGhlIGl0ZXJhdGlvbiBpdHNlbGYgd29ya3MuIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgIHN1Z2dlc3RzIGEgcG90ZW50aWFsIHRyYXZlcnNhbCBvZiBhIGxpc3QsIHRhYmxlLCBvciBkYXRhIHN0cnVjdHVyZSBob2xkaW5nIHRoZSBleHBlY3RhdGlvbnMgZm9yIGEgcGFydGljdWxhciBuZXR3b3JrIG5hbWVzcGFjZS4gSXMgdGhpcyBpdGVyYXRpb24gcGFydCBvZiBhIGNsZWFudXAgcHJvY2VzcywgcGVyaGFwcyBjaGVja2luZyBmb3Igc3RhbGUgZXhwZWN0YXRpb25zIG9yIGhhbmRsaW5nIHNvbWUga2luZCBvZiBleHBpcnk/IE9yIGlzIGl0IG1vcmUgZHluYW1pYywgbWF5YmUgdXNlZCBmb3Igc2VhcmNoaW5nIGFuZCBsb2NhdGluZyBhIHNwZWNpZmljIGV4cGVjdGF0aW9uPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRhdGEgc3RydWN0dXJlIGlzIGJlaW5nIGl0ZXJhdGVkIG92ZXIgYW5kIGhvdyBpdCBpcyBtYW5hZ2VkLlxuXG5NeSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGludGVybmFscyBpcyB0aGF0IGBleHBlY3RhdGlvbnNgIGFyZSBhIGtleSBwYXJ0IG9mIGhvdyB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUgaGFuZGxlcyByZWxhdGVkIGNvbm5lY3Rpb25zLCBzdWNoIGFzIHdoZW4gb25lIGNvbm5lY3Rpb24gb3BlbnMgYW5vdGhlci4gVGhlIGNvbm5lY3Rpb24gaXMgXCJleHBlY3RlZFwiLiBUaGVyZWZvcmUsIGBjdG5ldGxpbmtfZGVsX2V4cGVjdGAgaXMgbGlrZWx5IGludm9sdmVkIGluIGNsZWFuaW5nIHVwIHRoZXNlIHRyYWNrZWQgZXhwZWN0YXRpb25zLiBJdCBjb3VsZCBhbHNvIGRlYWwgd2l0aCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIG90aGVyIGlzc3VlcyB0aGF0IHJlcXVpcmUgdGhlIGV4cGVjdGF0aW9uIHRvIGJlIGRlbGV0ZWQuXG5cbkknbGwgYmUgbG9va2luZyBmb3IgY3Jvc3MtcmVmZXJlbmNlcyB0byB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgY2FsbGluZyBwYXRocy4gV2hhdCBldmVudHMgb3IgY29uZGl0aW9ucyBsZWFkIHRvIHRoZSBpbnZvY2F0aW9uIG9mIGBjdG5ldGxpbmtfZGVsX2V4cGVjdGA/IFRoZW4sIEknbGwgYW5hbHl6ZSBob3cgYG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldGAgaXMgdXNlZCB3aXRoaW4gdGhhdCBjb250ZXh0LiBGcm9tIHRoZXJlLCBJIGNhbiBwaW5wb2ludCB3aGF0IHRoZSBwdXJwb3NlIG9mIHRoZSBpbnRlcmFjdGlvbiBpcy4gQnkgY29ubmVjdGluZyB0aGUgZG90cyBiZXR3ZWVuIHRob3NlIGZ1bmN0aW9ucywgSSBzaG91bGQgYmUgYWJsZSB0byBjbGFyaWZ5IHRoZSBtb2R1bGUncyBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg0MywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDAxOjM2OjIwLjY0MzI5NjMzMVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQzMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQzMDpcXHRcXG4zNDMxOlxcdFxcdFxcdC8qIGJ1bXAgdXNhZ2UgY291bnQgdG8gMiAqL1xcbjM0MzI6XFx0XFx0XFx0ZXhwID0gbmZfY3RfZXhwZWN0X2ZpbmRfZ2V0KGluZm8tXFx1MDAzZW5ldCwgXFx1MDAyNnpvbmUsIFxcdTAwMjZ0dXBsZSk7XFxuMzQzMzpcXHRcXHRcXHRpZiAoIWV4cCkge1xcbjM0MzQ6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jayk7XFxuMzQzNTpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4zNDM2OlxcdFxcdFxcdH1cXG4zNDM3OlxcdFxcbjM0Mzg6XFx0XFx0XFx0aWYgKGNkYVtDVEFfRVhQRUNUX0lEXSkge1xcbjM0Mzk6XFx0XFx0XFx0XFx0X19iZTMyIGlkID0gbmxhX2dldF9iZTMyKGNkYVtDVEFfRVhQRUNUX0lEXSk7XFxuMzQ0MDpcXHRcXG4zNDQxOlxcdFxcdFxcdFxcdGlmIChpZCAhPSBuZl9leHBlY3RfZ2V0X2lkKGV4cCkpIHtcXG4zNDQyOlxcdFxcdFxcdFxcdFxcdG5mX2N0X2V4cGVjdF9wdXQoZXhwKTtcXG4zNDQzOlxcdFxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xcbjM0NDQ6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuMzQ0NTpcXHRcXHRcXHRcXHR9XFxuMzQ0NjpcXHRcXHRcXHR9XFxuMzQ0NzpcXHRcXG4zNDQ4OlxcdFxcdFxcdC8qIGFmdGVyIGxpc3QgcmVtb3ZhbCwgdXNhZ2UgY291bnQgPT0gMSAqL1xcbjM0NDk6XFx0XFx0XFx0bmZfY3RfdW5saW5rX2V4cGVjdF9yZXBvcnQoZXhwLCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxcbjM0NTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgbmxtc2dfcmVwb3J0KGluZm8tXFx1MDAzZW5saCkpO1xcbjM0NTE6XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jayk7XFxuMzQ1MjpcXHRcXHRcXHQvKiBoYXZlIHRvIHB1dCB3aGF0IHdlICdnZXQnIGFib3ZlLlxcbjM0NTM6XFx0XFx0XFx0ICogYWZ0ZXIgdGhpcyBsaW5lIHVzYWdlIGNvdW50ID09IDAgKi9cXG4zNDU0OlxcdFxcdFxcdG5mX2N0X2V4cGVjdF9wdXQoZXhwKTtcXG4zNDU1OlxcdFxcdH0gZWxzZSBpZiAoY2RhW0NUQV9FWFBFQ1RfSEVMUF9OQU1FXSkge1xcbjM0NTY6XFx0XFx0XFx0Y2hhciAqbmFtZSA9IG5sYV9kYXRhKGNkYVtDVEFfRVhQRUNUX0hFTFBfTkFNRV0pO1xcbjM0NTc6XFx0XFxuMzQ1ODpcXHRcXHRcXHRuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXQoaW5mby1cXHUwMDNlbmV0LCBleHBlY3RfaXRlcl9uYW1lLCBuYW1lLFxcbjM0NTk6XFx0XFx0XFx0XFx0XFx0XFx0IE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQsXFxuMzQ2MDpcXHRcXHRcXHRcXHRcXHRcXHQgbmxtc2dfcmVwb3J0KGluZm8tXFx1MDAzZW5saCkpO1xcbjM0NjE6XFx0XFx0fSBlbHNlIHtcXG4zNDYyOlxcdFxcdFxcdC8qIFRoaXMgYmFzaWNhbGx5IG1lYW5zIHdlIGhhdmUgdG8gZmx1c2ggZXZlcnl0aGluZyovXFxuMzQ2MzpcXHRcXHRcXHRuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXQoaW5mby1cXHUwMDNlbmV0LCBleHBlY3RfaXRlcl9hbGwsIE5VTEwsXFxuMzQ2NDpcXHRcXHRcXHRcXHRcXHRcXHQgTkVUTElOS19DQihza2IpLnBvcnRpZCxcXG4zNDY1OlxcdFxcdFxcdFxcdFxcdFxcdCBubG1zZ19yZXBvcnQoaW5mby1cXHUwMDNlbmxoKSk7XFxuMzQ2NjpcXHRcXHR9XFxuMzQ2NzpcXHRcXG4zNDY4OlxcdFxcdHJldHVybiAwO1xcbjM0Njk6XFx0fVxcbjM0NzA6XFx0c3RhdGljIGludFxcbjM0NzE6XFx0Y3RuZXRsaW5rX2NoYW5nZV9leHBlY3Qoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKngsXFxuMzQ3MjpcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pXFxuMzQ3MzpcXHR7XFxuMzQ3NDpcXHRcXHRpZiAoY2RhW0NUQV9FWFBFQ1RfVElNRU9VVF0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDAxOjM2OjIwLjY0MzQ1Mzc2MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI2MjQ4NTcwNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldGAqKlxuXG5Pa2F5LCB0aW1lIHRvIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgYG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldGAgaW1wbGVtZW50YXRpb24uIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gW21lbnRpb24gc3BlY2lmaWMgYXJlYXMgb3IgYXNwZWN0cyB5b3Ugd2FudCB0byBpbnZlc3RpZ2F0ZSBiYXNlZCBvbiB5b3VyIGV4cGVydGlzZSwgZS5nLiwgaG93IHRoZSBpdGVyYXRpb24gaXMgaGFuZGxlZCwgYW55IHBvdGVudGlhbCBsb2NraW5nIGlzc3VlcywgdGhlIGludGVyYWN0aW9uIHdpdGggY29ubmVjdGlvbiB0cmFja2luZyBlbnRyaWVzLCB3aGV0aGVyIHRoZXJlJ3MgYW55IGNsZXZlcm5lc3Mgd2l0aCBoYXNoIGJ1Y2tldHMsIG9yIGlmIHRoZSBjb2RlIGxvb2tzIGVsZWdhbnQgYW5kIGVmZmljaWVudF0uIEknbSBleHBlY3RpbmcgdG8gc2VlIFtNZW50aW9uIHdoYXQgeW91IGFyZSBleHBlY3RpbmcgdG8gc2VlLiBlLmcuIGhvdyB0aGUgZXhwZWN0IHRhYmxlIGlzIHdhbGtlZCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIHV0aWxpemVkLCBhbmQgd2hhdCBzb3J0IG9mIGxvY2tpbmcgaXMgYmVpbmcgZG9uZV0uIEhvcGVmdWxseSwgaXQncyB3ZWxsLXN0cnVjdHVyZWQgYW5kIGRvZXNuJ3QgaGF2ZSBhbnkgb2J2aW91cyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciByYWNlIGNvbmRpdGlvbnMuIEkgd2FudCB0byBxdWlja2x5IGdyYXNwIGhvdyBpdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSBleHBlY3RhdGlvbnMsIGhvdyBpdCBoYW5kbGVzIGNvbmN1cnJlbnQgYWNjZXNzLCBhbmQgd2hhdCB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhcmUuIFRoaXMgaXMgYSBjcnVjaWFsIGZ1bmN0aW9uIGZvciBjb25uZWN0aW9uIHRyYWNraW5nLCBhbmQgYW55IGluZWZmaWNpZW5jaWVzIGhlcmUgY291bGQgaGF2ZSBhIHNpZ25pZmljYW50IGltcGFjdCBvbiBvdmVyYWxsIG5ldHdvcmsgcGVyZm9ybWFuY2UuIEknbSBrZWVuIHRvIHNlZSBpZiBpdCdzIG9wdGltaXplZCBmb3IgY29tbW9uIHVzZSBjYXNlcyBvciBpZiB0aGVyZSdzIHJvb20gZm9yIGltcHJvdmVtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTEyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjoyMy4yNjgzMTM4NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTYyMTEwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jPTYxMj1FWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfaXRlcmF0ZV9kZXN0cm95KTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy02MTMtXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6NjE0OnZvaWQgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy02MTUtXFx0XFx0XFx0ICAgICAgYm9vbCAoKml0ZXIpKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICplLCB2b2lkICpkYXRhKSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTYzOS19XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmM6NjQwOkVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldCk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtNjQxLVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM0MDg9c3RhdGljIGludCBjdG5ldGxpbmtfZGVsX2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0NTctXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM0NTg6XFx0XFx0bmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KGluZm8tXFx1MDAzZW5ldCwgZXhwZWN0X2l0ZXJfbmFtZSwgbmFtZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzQ1OS1cXHRcXHRcXHRcXHRcXHQgTkVUTElOS19DQihza2IpLnBvcnRpZCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNDYyLVxcdFxcdC8qIFRoaXMgYmFzaWNhbGx5IG1lYW5zIHdlIGhhdmUgdG8gZmx1c2ggZXZlcnl0aGluZyovXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM0NjM6XFx0XFx0bmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KGluZm8tXFx1MDAzZW5ldCwgZXhwZWN0X2l0ZXJfYWxsLCBOVUxMLFxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNDY0LVxcdFxcdFxcdFxcdFxcdCBORVRMSU5LX0NCKHNrYikucG9ydGlkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjoyMy4zMjQ1MzI2ODhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzcxODUzNDYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgLiBJdCdzIGxvY2F0ZWQgaW4gYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBsaWtlbHkgZGVhbHMgd2l0aCBpdGVyYXRpbmcgb3ZlciBvciBtYW5hZ2luZyBleHBlY3RlZCBjb25uZWN0aW9ucyB3aXRoaW4gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgc3lzdGVtLiBHaXZlbiB0aGUgYGV4cGVjdGAgcHJlZml4LCBJJ20gYW50aWNpcGF0aW5nIHRoaXMgaXMgYSBjcml0aWNhbCBwaWVjZSBpbiBoYW5kbGluZyBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJpZXMgdGhhdCBhcmUgKmV4cGVjdGVkKiwgYnV0IG5vdCB5ZXQgZnVsbHkgZXN0YWJsaXNoZWQuIFRoaW5ncyBsaWtlIHBhc3NpdmUgRlRQIGRhdGEgY29ubmVjdGlvbnMsIE5BVCB0cmF2ZXJzYWwsIG9yIHBlcmhhcHMgZXZlbiBBTEctcmVsYXRlZCBjb25uZWN0aW9uIHNldHVwLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgYG5ldGZpbHRlcmAgc3Vic3lzdGVtIGhhcyB0aGUgdXN1YWwgaW1wbGljYXRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUgbG9ja2luZyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGxpa2VseSBpbnZvbHZlZCBhbmQgaG93IHRoZXkgaW50ZXJhY3QgdG8gbWFpbnRhaW4gdGhlIGludGVncml0eSBvZiB0aGUgY29ubmVjdGlvbiB0cmFja2luZyB0YWJsZS4gTXkgZXhwZXJ0aXNlIGd1aWRlcyBtZSB0byBleHBlY3QgaXNzdWVzIHJlbGF0aW5nIHRvIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucyBoZXJlLCBwYXJ0aWN1bGFybHkgaWYgdGhlIGNvZGUncyBkZWFsaW5nIHdpdGggbXVsdGlwbGUgdGhyZWFkcyBvciBjb3JlcyB0cnlpbmcgdG8gbWFuaXB1bGF0ZSB0aGUgc2FtZSBleHBlY3RlZCBlbnRyeS4gSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgbG9jayBvcmRlciBpc3N1ZXMuIEkgd2lsbCBhbHNvIGJlIHByZXBhcmVkIHRvIG9ic2VydmUgaG93IHRoaXMgdGllcyBpbnRvIHRoZSByZXN0IG9mIHRoZSBuZXRmaWx0ZXIgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTA2LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6MzY6MjcuMDQzMDcyODRaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxMCxcbiAgXCJMaW5lQ291bnRcIjogMzVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYxMDpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKTtcXG4gNjExOlxcdH1cXG4gNjEyOlxcdEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9pdGVyYXRlX2Rlc3Ryb3kpO1xcbiA2MTM6XFx0XFxuIDYxNDpcXHR2b2lkIG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldChzdHJ1Y3QgbmV0ICpuZXQsXFxuIDYxNTpcXHRcXHRcXHRcXHQgICAgICBib29sICgqaXRlcikoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmUsIHZvaWQgKmRhdGEpLFxcbiA2MTY6XFx0XFx0XFx0XFx0ICAgICAgdm9pZCAqZGF0YSxcXG4gNjE3OlxcdFxcdFxcdFxcdCAgICAgIHUzMiBwb3J0aWQsIGludCByZXBvcnQpXFxuIDYxODpcXHR7XFxuIDYxOTpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwO1xcbiA2MjA6XFx0XFx0Y29uc3Qgc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7XFxuIDYyMTpcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4gNjIyOlxcdFxcbiA2MjM6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xcbiA2MjQ6XFx0XFxuIDYyNTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbmZfY3RfZXhwZWN0X2hzaXplOyBpKyspIHtcXG4gNjI2OlxcdFxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXhwLCBuZXh0LFxcbiA2Mjc6XFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2bmZfY3RfZXhwZWN0X2hhc2hbaV0sXFxuIDYyODpcXHRcXHRcXHRcXHRcXHRcXHQgIGhub2RlKSB7XFxuIDYyOTpcXHRcXG4gNjMwOlxcdFxcdFxcdFxcdGlmICghbmV0X2VxKG5mX2N0X2V4cF9uZXQoZXhwKSwgbmV0KSlcXG4gNjMxOlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiA2MzI6XFx0XFxuIDYzMzpcXHRcXHRcXHRcXHRpZiAoaXRlcihleHAsIGRhdGEpKVxcbiA2MzQ6XFx0XFx0XFx0XFx0XFx0bmZfY3RfdW5saW5rX2V4cGVjdF9yZXBvcnQoZXhwLCBwb3J0aWQsIHJlcG9ydCk7XFxuIDYzNTpcXHRcXHRcXHR9XFxuIDYzNjpcXHRcXHR9XFxuIDYzNzpcXHRcXG4gNjM4OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spO1xcbiA2Mzk6XFx0fVxcbiA2NDA6XFx0RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KTtcXG4gNjQxOlxcdFxcbiA2NDI6XFx0I2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ0ZTXFxuIDY0MzpcXHRzdHJ1Y3QgY3RfZXhwZWN0X2l0ZXJfc3RhdGUge1xcbiA2NDQ6XFx0XFx0c3RydWN0IHNlcV9uZXRfcHJpdmF0ZSBwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjoyNy4wNDMyMjUxNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NDI0NTYxNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBDb25jdXJyZW5jeSBJc3N1ZSBpbiBuZXRmaWx0ZXIvbmZfY29ubnRyYWNrKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0YCBmdW5jdGlvbiwgYW5kIGl0IGltbWVkaWF0ZWx5IGdyYWJzIG15IGF0dGVudGlvbiBiZWNhdXNlIGl0IGFjcXVpcmVzIGBzcGluX2xvY2tfYmgoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKWAuIE5vdywgdGhlIGludGVyZXN0aW5nIGJpdCBpcyB0aGUgbGluZSBgaGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGV4cC1cdTAwM2VoZWxwZXIpO2AgcmlnaHQgYmVmb3JlIHRoYXQuIEkgaW1tZWRpYXRlbHkgcmVhbGl6ZSB0aGlzIGlzIGEgcG90ZW50aWFsIGxvY2tkZXAgcHJvYmxlbS5cblxuYHJjdV9kZXJlZmVyZW5jZWAgaXMgc3VwcG9zZWQgdG8gYmUgdXNlZCB1bmRlciBhbiBSQ1UgcmVhZCBsb2NrLCBhcyB2ZXJpZmllZCBieSBsb2NrZGVwIGFuZCBSQ1UgZGVidWdnaW5nIChQUk9WRV9SQ1UpLiBUaGUgZmFjdCB0aGF0IHRoZSBjb2RlIGlzIHRha2luZyBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYCBoZXJlLCBhbmQgbm90IG5lY2Vzc2FyaWx5IGFuIFJDVSByZWFkIGxvY2ssIHJhaXNlcyBhIHJlZCBmbGFnLiBTbywgdGhlIGZpeCwgb3IgbW9yZSBhY2N1cmF0ZWx5IHRoZSBjaGFuZ2UgdG8gdGhlIGxvY2tkZXAgY2hlY2ssIHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGV4cC1cdTAwM2VoZWxwZXIsIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spKTtgIHdoaWNoIGlzIGdvb2QuXG5cbkJ1dCwgaGFuZyBvbuKApiBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgaW1wbGljYXRpb25zLiBUaGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFuIGFzc2VydGlvbiDigJMgZXNzZW50aWFsbHkgYSBuZXcgY2hlY2ssIHdoaWNoIGlzIGEgYmlnIGRlYWwgYW5kIHNob3VsZCBiZSBmdXp6ZWQhIFNlY3Rpb24gMSBhbmQgMyBvZiB0aGUgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBhcmUgc2NyZWFtaW5nIGF0IG1lOiAqTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQqLiBCeSB1c2luZyBgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZGAgd2l0aCB0aGF0IGBsb2NrZGVwX2lzX2hlbGRgIGFzc2VydGlvbiwgd2UncmUgY2hhbmdpbmcgdGhlIHZhbGlkYXRpb24uIFNwZWNpZmljYWxseSwgYHJjdV9kZXJlZmVyZW5jZWAgd2FzIG9yaWdpbmFsbHkgYXNzZXJ0aW5nIGByY3VfcmVhZF9sb2NrX2hlbGQoKWAsIGFuZCBub3cgaXQncyBhc3NlcnRpbmcgYGxvY2tkZXBfaXNfaGVsZChcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spYCFcblxuQW5kIHRoaXMgaXMgbm90IHNvbWUgb2JzY3VyZSBjb3JuZXIgY2FzZS4gVGhlIGNvZGUgaXMgd2l0aGluIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLCB3aGljaCBpcyB0aGUgY29yZSBvZiBuZXRmaWx0ZXIncyBuZXRsaW5rIGludGVyZmFjZS4gSXQncyB0b3RhbGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIG5ldGZpbHRlciBuZXRsaW5rIHNvY2tldHMgKGBORk5MX1NVQlNZU19DVE5FVExJTktfRVhQYCwgYElQQ1ROTF9NU0dfRVhQX0RFTEVURWApLiBUaGlzIGlzIGhpZ2gtdmFsdWUsIHVzZXItYWNjZXNzaWJsZSBjb2RlISBUaGUgcG90ZW50aWFsIGZvciB1bnVzdWFsIG9wZXJhdGlvbiBzZXF1ZW5jZXMgdGhhdCB0cmlnZ2VyIHRoZSBhc3NlcnRpb24gaXMgdmVyeSByZWFsLiBJJ2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyByZXF1aXJlbWVudHMgZm9yIHRoaXMgZmlsZSB0b28gdG8gZW5zdXJlIHRoZSBmdXp6aW5nIGlzIGFjdHVhbGx5IHJlbGV2YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODAyLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDU1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6MzY6MzEuNDY3Nzg5OTNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTc3NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Nvbm50cmFja19uZXRsaW5rXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MzQ9b2JqLSQoQ09ORklHX05GX0NPTk5UUkFDSykgKz0gbmZfY29ubnRyYWNrLm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzYtIyBuZXRsaW5rIGludGVyZmFjZSBmb3IgbmZfY29ubnRyYWNrXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTozNzpvYmotJChDT05GSUdfTkZfQ1RfTkVUTElOSykgKz0gbmZfY29ubnRyYWNrX25ldGxpbmsub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMzgtb2JqLSQoQ09ORklHX05GX0NUX05FVExJTktfVElNRU9VVCkgKz0gbmZuZXRsaW5rX2N0dGltZW91dC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDAxOjM2OjMxLjUyMjM3Mzk1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMwMzI1MDkzNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgTkZfQ1RfTkVUTElOS2AgaW4gS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgbmV0bGluayBpbnRlcmFjdHMgd2l0aCBjb25uZWN0aW9uIHRyYWNraW5nLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIGNoZWNrIHRoZSBLY29uZmlnIGVudHJ5IGZvciBgTkZfQ1RfTkVUTElOS2AuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGF0IG9wdGlvbiBjb250cm9scyBhbmQsIG1vcmUgaW1wb3J0YW50bHksICp3aHkqIGl0J3MgcmVsZXZhbnQgaW4gdGhlIGNvbnRleHQgSSdtIGN1cnJlbnRseSB3b3JraW5nIGluLiBJcyB0aGlzIGVuYWJsaW5nIG5ldGxpbmsgbm90aWZpY2F0aW9ucyBmb3IgY29ubmVjdGlvbiBldmVudHM/IERvZXMgaXQgZXhwb3NlIGNvbm5lY3Rpb24gdHJhY2tpbmcgaW5mb3JtYXRpb24gdG8gdXNlcnNwYWNlIGFwcGxpY2F0aW9ucywgYW5kIGlmIHNvLCB3aGF0IGtpbmQ/IEFyZSB0aGVyZSBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBJIG5lZWQgdG8gY2xhcmlmeSB3aGV0aGVyIHRoaXMgaXMgdGhlIGtleSB0byBteSBjdXJyZW50IGlzc3VlIG9yIGp1c3QgYSBwb3RlbnRpYWwgZGlzdHJhY3Rpb24uIFJpZ2h0LCBsZXQncyBsb29rIGF0IHRoZSBjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MzMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjozNC41NTQ4ODY0MjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxODE4NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9DVF9ORVRMSU5LXFxcXGJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTM1NT1jb25maWcgTkZfQ09OTlRSQUNLX1RGVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNjUtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjM2Njpjb25maWcgTkZfQ1RfTkVUTElOS1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zNjctXFx0dHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UnXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDAxOjM2OjM0LjYwNjcxMTIwMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDY1NzA4ODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgcHJvY2VzcywgdGhpbmtpbmcgdGhyb3VnaCB0aGUgS2NvbmZpZyBlbnRyeTpcblxuKipBbmFseXppbmcgYE5GX0NUX05FVExJTktgIGluIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgKipcblxuT2theSwgSSdtIGRpdmluZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZm9yIGBORl9DVF9ORVRMSU5LYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBuZXRsaW5rLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIHRoZSBOZXRmaWx0ZXIgY29ubmVjdGlvbiB0cmFja2luZyBtb2R1bGUuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHJlYWQgdGhlIGVudHJ5IGNhcmVmdWxseSB0byB1bmRlcnN0YW5kIGl0cyBwdXJwb3NlIGFuZCBkZXBlbmRlbmNpZXMuIFdoYXQgZG9lcyBpdCBhY3R1YWxseSAqZG8qPyBJcyBpdCBlbmFibGluZyBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LCBkZWJ1Z2dpbmcgZmVhdHVyZXMsIG9yIGlzIGl0IG1lcmVseSBzZXR0aW5nIHRoZSBzdGFnZSBmb3Igc29tZXRoaW5nIGVsc2U/IEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBgaGVscGAgdGV4dCDigJMgdGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIG1lYXQgb2YgdGhlIGV4cGxhbmF0aW9uIGlzLlxuXG5JJ2xsIGxvb2sgYXQgdGhlIGRlcGVuZGVuY2llcy4gQXJlIHRoZXJlIGFueSBwcmVyZXF1aXNpdGVzIHRoYXQgKm11c3QqIGJlIGVuYWJsZWQgZm9yIGBORl9DVF9ORVRMSU5LYCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IFdoYXQgb3RoZXIgcmVsYXRlZCBvcHRpb25zIGFyZSBpbnZvbHZlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoaXMgY29uZmlnIG9wdGlvbiBhbmQgb3RoZXIgTmV0ZmlsdGVyIGNvbXBvbmVudHMsIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYnJvYWRlciBuZXR3b3JraW5nIHN0YWNrLiBJJ2xsIG1lbnRhbGx5IG1hcCBvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBvcHRpb24uXG5cbkZpbmFsbHksIEknbGwgY29uc2lkZXIgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb24ga2VybmVsIHNpemUsIHBlcmZvcm1hbmNlLCBhbmQgc2VjdXJpdHkuIFdoYXQgYXJlIHRoZSB0cmFkZS1vZmZzPyBEb2VzIGVuYWJsaW5nIGl0IGludHJvZHVjZSBhbnkga25vd24gdnVsbmVyYWJpbGl0aWVzPyBJcyBpdCBhIGNvcmUgZmVhdHVyZSwgYSBkZWJ1Z2dpbmcgYWlkLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gQWZ0ZXIgYW5hbHl6aW5nIGl0cyBwb3NpdGlvbiB3aXRoaW4gdGhlIE5ldGZpbHRlciBlY29zeXN0ZW0gYW5kIGRldGVybWluaW5nIGl0cyBwdXJwb3NlLCBJIGNhbiBwcm9wZXJseSB1bmRlcnN0YW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgcGxhY2UgaW4gdGhlIHByb2plY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjozNy4wNzI0MjQ2NzJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNjU6XFx0XFxuIDM2NjpcXHRjb25maWcgTkZfQ1RfTkVUTElOS1xcbiAzNjc6XFx0XFx0dHJpc3RhdGUgJ0Nvbm5lY3Rpb24gdHJhY2tpbmcgbmV0bGluayBpbnRlcmZhY2UnXFxuIDM2ODpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gMzY5OlxcdFxcdGRlZmF1bHQgbSBpZiBORVRGSUxURVJfQURWQU5DRUQ9blxcbiAzNzA6XFx0XFx0aGVscFxcbiAzNzE6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIGEgbmV0bGluay1iYXNlZCB1c2Vyc3BhY2UgaW50ZXJmYWNlXFxuIDM3MjpcXHRcXG4gMzczOlxcdGNvbmZpZyBORl9DVF9ORVRMSU5LX1RJTUVPVVRcXG4gMzc0OlxcdFxcdHRyaXN0YXRlICAnQ29ubmVjdGlvbiB0cmFja2luZyB0aW1lb3V0IHR1bmluZyB2aWEgTmV0bGluaydcXG4gMzc1OlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbiAzNzY6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcXG4gMzc3OlxcdFxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLX1RJTUVPVVRcXG4gMzc4OlxcdFxcdGhlbHBcXG4gMzc5OlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBjb25uZWN0aW9uIHRyYWNraW5nIHRpbWVvdXRcXG4gMzgwOlxcdFxcdCAgZmluZS1ncmFpbiB0dW5pbmcuIFRoaXMgYWxsb3dzIHlvdSB0byBhdHRhY2ggc3BlY2lmaWMgdGltZW91dFxcbiAzODE6XFx0XFx0ICBwb2xpY2llcyB0byBmbG93cywgaW5zdGVhZCBvZiB1c2luZyB0aGUgZ2xvYmFsIHRpbWVvdXQgcG9saWN5LlxcbiAzODI6XFx0XFxuIDM4MzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IGBOJy5cXG4gMzg0OlxcdFxcbiAzODU6XFx0Y29uZmlnIE5GX0NUX05FVExJTktfSEVMUEVSXFxuIDM4NjpcXHRcXHR0cmlzdGF0ZSAnQ29ubmVjdGlvbiB0cmFja2luZyBoZWxwZXJzIGluIHVzZXItc3BhY2UgdmlhIE5ldGxpbmsnXFxuIDM4NzpcXHRcXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4gMzg4OlxcdFxcdGRlcGVuZHMgb24gTkZfQ1RfTkVUTElOS1xcbiAzODk6XFx0XFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfTkVUTElOS19RVUVVRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjozNy4wNzI1MzQzMTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjYzNjk2OTQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jaWVzIG9mIE5GXFxfQ1RcXF9ORVRMSU5LKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBgTkZfQ1RfTkVUTElOS2AgaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsgcmVsaWVzIHVwb24uIE15IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgS2NvbmZpZ2AgZmlsZSwgc2luY2UgdGhhdCdzIHdoZXJlIGRlcGVuZGVuY2llcyBhcmUgdXN1YWxseSBkZWZpbmVkLiBJIGtub3cgaXQncyBsb2NhdGVkIGluIGBuZXQvbmV0ZmlsdGVyL2AsIHNvIEknbGwgc3RhcnQgYnkgbG9va2luZyBhdCB0aGF0LiBOb3csIEkgdmFndWVseSByZWNhbGwgdGhhdCB0aGUgZGVwZW5kZW5jaWVzIGFyZSB0eXBpY2FsbHkgbGlzdGVkIG5lYXIgdGhlIHJlbGV2YW50IG9wdGlvbidzIGRlZmluaXRpb24sIGFuZCB0aGF0IGlzIHVzdWFsbHkgd2VsbCBhYm92ZSB0aGUgbGluZSB3aGVyZSBpdCBpcyBkZWZpbmVkLiBTbywgbGV0J3Mgc3RhcnQgYXJvdW5kIGxpbmUgMzY1LCBhcyB0aGUgcHJvbXB0IHN1Z2dlc3RlZCwgYW5kIHdvcmsgb3VyIHdheSB1cHdhcmRzIHVudGlsIEkgZmluZCB0aGUgaW5mb3JtYXRpb24gSSBuZWVkLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMgb3Igc2ltaWxhciBjb25maWcgb3B0aW9ucyB0aGF0IHBvaW50IHRvIHdoYXQgYE5GX0NUX05FVExJTktgIHJlcXVpcmVzIHRvIGJlIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5ODksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDAxOjM2OjM5LjcwOTUwNzEyMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDIzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRtZW51IFxcXCJDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uXFxcIlxcbiAgIDM6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUlxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgTkVURklMVEVSX0lOR1JFU1NcXG4gICA2OlxcdFxcdGJvb2wgXFxcIk5ldGZpbHRlciBpbmdyZXNzIHN1cHBvcnRcXFwiXFxuICAgNzpcXHRcXHRkZWZhdWx0IHlcXG4gICA4OlxcdFxcdHNlbGVjdCBORVRfSU5HUkVTU1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBUaGlzIGFsbG93cyB5b3UgdG8gY2xhc3NpZnkgcGFja2V0cyBmcm9tIGluZ3Jlc3MgdXNpbmcgdGhlIE5ldGZpbHRlclxcbiAgMTE6XFx0XFx0ICBpbmZyYXN0cnVjdHVyZS5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0Y29uZmlnIE5FVEZJTFRFUl9FR1JFU1NcXG4gIDE0OlxcdFxcdGJvb2wgXFxcIk5ldGZpbHRlciBlZ3Jlc3Mgc3VwcG9ydFxcXCJcXG4gIDE1OlxcdFxcdGRlZmF1bHQgeVxcbiAgMTY6XFx0XFx0c2VsZWN0IE5FVF9FR1JFU1NcXG4gIDE3OlxcdFxcdGhlbHBcXG4gIDE4OlxcdFxcdCAgVGhpcyBhbGxvd3MgeW91IHRvIGNsYXNzaWZ5IHBhY2tldHMgYmVmb3JlIHRyYW5zbWlzc2lvbiB1c2luZyB0aGVcXG4gIDE5OlxcdFxcdCAgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLlxcbiAgMjA6XFx0XFxuICAyMTpcXHRjb25maWcgTkVURklMVEVSX1NLSVBfRUdSRVNTXFxuICAyMjpcXHRcXHRkZWZfYm9vbCBORVRGSUxURVJfRUdSRVNTIFxcdTAwMjZcXHUwMDI2IChORVRfQ0xTX0FDVCB8fCBJRkIpXFxuICAyMzpcXHRcXG4gIDI0OlxcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS1xcbiAgMjU6XFx0XFx0Ym9vbFxcbiAgMjY6XFx0XFxuICAyNzpcXHRjb25maWcgTkVURklMVEVSX0ZBTUlMWV9CUklER0VcXG4gIDI4OlxcdFxcdGJvb2xcXG4gIDI5OlxcdFxcbiAgMzA6XFx0Y29uZmlnIE5FVEZJTFRFUl9GQU1JTFlfQVJQXFxuICAzMTpcXHRcXHRib29sXFxuICAzMjpcXHRcXG4gIDMzOlxcdGNvbmZpZyBORVRGSUxURVJfQlBGX0xJTktcXG4gIDM0OlxcdFxcdGRlZl9ib29sIEJQRl9TWVNDQUxMXFxuICAzNTpcXHRcXG4gIDM2OlxcdGNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXFxuICAzNzpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGJhc2UgaG9vayBkdW1wIHN1cHBvcnRcXFwiXFxuICAzODpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbiAgMzk6XFx0XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcXG4gIDQwOlxcdFxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjozOS43MDk2NTE4NjFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjI3NjkxNTI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgdGhlIENvbm5lY3Rpb24gVHJhY2tpbmcgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGUgbmV0d29yayBmaWx0ZXJpbmcgY29uZmlndXJhdGlvbiB0byBzZWUgaWYgYE5GX0NPTk5UUkFDS2AgaXMgZGVmaW5lZC4gU3BlY2lmaWNhbGx5LCBJJ20gaGVhZGluZyBvdmVyIHRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIHRvIGNvbmZpcm0gaXRzIHN0YXR1cy4gS25vd2luZyBpZiBjb25uZWN0aW9uIHRyYWNraW5nIGlzIGVuYWJsZWQgYXQgdGhlIGtlcm5lbCBsZXZlbCBpcyB0aGUgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIHN5c3RlbSBtYW5hZ2VzIHN0YXRlZnVsIHBhY2tldCBpbnNwZWN0aW9uIGFuZCBpdHMgcmVsYXRpb25zaGlwIHdpdGggb3RoZXIgTmV0ZmlsdGVyIG1vZHVsZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IGlmIHRoaXMgZmVhdHVyZSBpcyBiZWluZyB1c2VkLiBUaGlzIGNvdWxkIGhhdmUgYSBiaWcgaW1wYWN0IG9uIG92ZXJhbGwgbmV0d29yayBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjkzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjo0MS45ODY1Njk5NjVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwODYzMDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlmIE5GX0NPTk5UUkFDS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9OTg9Y29uZmlnIE5GX0xPR19TWVNMT0dcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0xMDktXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjExMDppZiBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctMTExLWNvbmZpZyBORVRGSUxURVJfQ09OTkNPVU5UXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDAxOjM2OjQyLjAzNzQ0MjUzNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMjU0MzU1MTYyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBOZXRmaWx0ZXIgQ29ubnRyYWNrIE5ldGxpbmsgUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHRoYXQgYE5GX0NUX05FVExJTktgIGlzIGNvbnRpbmdlbnQgb24gYE5GX0NPTk5UUkFDS2AsIGFuZCBib3RoIGFyZSB1bmRlciBgSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSYCwgc28gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgTkVURklMVEVSYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfQ1RfTkVUTElOS2AuXG5cbk5vdywgbGV0J3MgZ2V0IGludG8gdGhlIGNvZGUuIFRoZSBtb2RpZmllZCBmdW5jdGlvbiBpcyBgZXhwZWN0X2l0ZXJfbmFtZWAsIHdoaWNoIGlzIGRlY2xhcmVkIGBzdGF0aWNgIHdpdGhpbiBgbmZfY29ubnRyYWNrX25ldGxpbmsuY2AuIEluaXRpYWxseSwgSSB3YXMgYSBiaXQgY29uY2VybmVkIGFib3V0IHN0YXRpYyBmdW5jdGlvbnMsIGFzIHRoZXkgY2FuIHNvbWV0aW1lcyBiZSBpbmxpbmVkLCBhbmQgdGhvc2UgYXJlIGRpZmZpY3VsdCB0byB0YXJnZXQgZGlyZWN0bHkgd2l0aCBzeW1ib2wgY292ZXJhZ2UuIEhvd2V2ZXIsIHRoZSBkb2N1bWVudGF0aW9uIGNsYXJpZmllcyB0aGF0IHdlIHNob3VsZCBsb29rIGZvciBub24tc3RhdGljIGNhbGxlcnMgaWYgdGhlIGNvZGUgdXNlcyBzdGF0aWMgaW5saW5lcyBpbiAuaCBmaWxlcy5cblxuQnV0LCBgZXhwZWN0X2l0ZXJfbmFtZWAgaXMgaW4gYSBgLmNgIGZpbGUsIG5vdCBhIGAuaGAgaGVhZGVyLCBzbyBpcyBpdCBpbmxpbmVkPyBMZXQncyB2ZXJpZnkuIExpbmUgMzQ1OCBzaG93cyBpdHMgYWRkcmVzcyBpcyB0YWtlbiBhcyBhIGZ1bmN0aW9uIHBvaW50ZXIgYXJndW1lbnQsIHNvIHRoZSBjb21waWxlciBjYW5ub3QgaW5saW5lIGl0LiBUaHVzLCBgZXhwZWN0X2l0ZXJfbmFtZWAgaXMgYSBkaXN0aW5jdCBzeW1ib2wuIFRoZSBkaXJlY3QgQVBJIGVudHJ5cG9pbnQgaW4gdGhpcyBjYXNlIGlzIGBjdG5ldGxpbmtfZGVsX2V4cGVjdGAsIHdoaWNoIGNhbGxzIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgLCBhbmQgdGhhdCBpbiB0dXJuIGNhbGxzIGBleHBlY3RfaXRlcl9uYW1lYCwgc28gdGhleSBib3RoIGFyZSB2YWxpZCBmb2N1cyBzeW1ib2xzLiBDaGVja2luZyBmb3Igb3RoZXIgY2FsbGVycyBvZiBgZXhwZWN0X2l0ZXJfbmFtZWAgY29uZmlybXMgdGhhdCBgY3RuZXRsaW5rX2RlbF9leHBlY3RgIGlzIHRoZSBzb2xlIGNhbGxlci5cblxuTG9va2luZyBhdCB0aGUgZ2l0IGRpZmYsIHRoZSBjaGFuZ2UgaW52b2x2ZXMgdXNpbmcgYHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWRgIHdpdGggYSBgbG9ja2RlcF9pc19oZWxkYCBhc3NlcnRpb24uIFRoaXMgYXNzZXJ0aW9uIGNoZWNrIG1lYW5zIHRoYXQgYFdvcnRoRnV6emluZ2Agc2hvdWxkIGJlIGB0cnVlYCBiZWNhdXNlIGl0IGludHJvZHVjZXMgYSBydW50aW1lIGFzc2VydGlvbiBpbiByZWFjaGFibGUgY29kZS4gTmV0ZmlsdGVyIG5ldGxpbmsgaXMgZWFzaWx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgc28gdGhpcyBjb2RlIGlzIGluZGVlZCByZWFjaGFibGUuIEFsc28gU3l6a2FsbGVyIGFjdGl2ZWx5IHRlc3RzIHRoZXNlIG5ldGxpbmsgc29ja2V0cywgc3BlY2lmaWNhbGx5IGBuZm5ldGxpbmtgIGFuZCBgY3RuZXRsaW5rYCwgbWFraW5nIHRoaXMgZXZlbiBtb3JlIHJlbGV2YW50IHRvIGZ1enppbmcuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgZm9jdXMgc3ltYm9sczogYGV4cGVjdF9pdGVyX25hbWVgIGFuZCBgY3RuZXRsaW5rX2RlbF9leHBlY3RgIGFyZSB0aGUgbW9zdCBzcGVjaWZpYyBhbmQgdXNlZnVsIHRhcmdldHMgaGVyZS5cblxuRmluYWxseSwgd2UgbmVlZCB0byBsaXN0IHRoZSBlbmFibGUgY29uZmlndXJhdGlvbnMsIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0IHRoZSBjb25maWdzIHJlcXVpcmVkIGZvciB0aGUgY29kZSBhcmUgYE5GX0NUX05FVExJTktgLCBgTkZfQ09OTlRSQUNLYCwgYW5kIGBORVRGSUxURVJgLlxuXG5TbywgdGhlIGZ1enppbmcgdmVyZGljdCBpcyBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuIFRoZSBgUmVhc29uaW5nYCBzaG91bGQgYmU6IFwiVGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9ja2RlcCBhc3NlcnRpb24gKGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkYCkgaW4gcmVhY2hhYmxlIE5ldGZpbHRlciBuZXRsaW5rIGNvZGUuIFRoZXJlZm9yZSwgdGhpcyBjaGFuZ2Ugd2FycmFudHMgZnV6emluZy5cIlxuXG5UaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGBbXCJleHBlY3RfaXRlcl9uYW1lXCIsIFwiY3RuZXRsaW5rX2RlbF9leHBlY3RcIl1gLCBhbmQgdGhlIGBFbmFibGVDb25maWdzYCBhcmUgYFtcIk5GX0NUX05FVExJTktcIiwgXCJORl9DT05OVFJBQ0tcIiwgXCJORVRGSUxURVJcIl1gLiBFdmVyeXRoaW5nIGlzIGFjY291bnRlZCBmb3IsIGFuZCBpdCBpcyBhIHNvbGlkIHBsYW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTcxLCJPdXRwdXRUb2tlbnMiOjE2MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6MzY6NTQuNTgxMDAwNTU2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIwMzM4ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0NUX05FVExJTktcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkVURklMVEVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXhwZWN0X2l0ZXJfbmFtZVwiLFxuICAgIFwiY3RuZXRsaW5rX2RlbF9leHBlY3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleHBlY3RfaXRlcl9uYW1lKCkgaW4gbmV0ZmlsdGVyJ3MgY3RuZXRsaW5rIGltcGxlbWVudGF0aW9uLCByZXBsYWNpbmcgcmN1X2RlcmVmZXJlbmNlKCkgd2l0aCByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKCkgYW5kIGVuZm9yY2luZyBhIGxvY2tkZXAgYXNzZXJ0aW9uIGNoZWNraW5nIG5mX2Nvbm50cmFja19leHBlY3RfbG9jay4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgc29ja2V0cyAoQ1RBX0VYUEVDVF9IRUxQX05BTUUgaW4gY3RuZXRsaW5rX2RlbF9leHBlY3QpIGFuZCB3YXJyYW50cyBmdXp6aW5nIHRvIHRlc3QgdGhlIG5ldyBsb2NraW5nIGFzc2VydGlvbiBhbmQgcHJldmVudCByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9DVF9ORVRMSU5LXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5FVEZJTFRFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4cGVjdF9pdGVyX25hbWVcIixcbiAgICBcImN0bmV0bGlua19kZWxfZXhwZWN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXhwZWN0X2l0ZXJfbmFtZSgpIGluIG5ldGZpbHRlcidzIGN0bmV0bGluayBpbXBsZW1lbnRhdGlvbiwgcmVwbGFjaW5nIHJjdV9kZXJlZmVyZW5jZSgpIHdpdGggcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZCgpIGFuZCBlbmZvcmNpbmcgYSBsb2NrZGVwIGFzc2VydGlvbiBjaGVja2luZyBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2suIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIHNvY2tldHMgKENUQV9FWFBFQ1RfSEVMUF9OQU1FIGluIGN0bmV0bGlua19kZWxfZXhwZWN0KSBhbmQgd2FycmFudHMgZnV6emluZyB0byB0ZXN0IHRoZSBuZXcgbG9ja2luZyBhc3NlcnRpb24gYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDAxOjM2OjU0LjY2MzA0MzE3NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk0ODQzNTU4MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNjo1NC42NjM1MTMxNDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxOTQ4Mzg4MDYwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYHJjdV9kZXJlZmVyZW5jZShleHAtXFx1MDAzZWhlbHBlcilgIHdpdGggYHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZXhwLVxcdTAwM2VoZWxwZXIsIGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSlgIGluIGBleHBlY3RfaXRlcl9uYW1lKClgLlxcblxcbmBleHBlY3RfaXRlcl9uYW1lKClgIGlzIGludm9rZWQgYXMgYW4gaXRlcmF0b3IgY2FsbGJhY2sgZnJvbSBgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KClgLCB3aGljaCBhY3F1aXJlcyBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYCB2aWEgYHNwaW5fbG9ja19iaCgpYC4gVXNpbmcgYHJjdV9kZXJlZmVyZW5jZSgpYCB3aXRob3V0IGFuIFJDVSByZWFkLXNpZGUgbG9jayBjYXVzZXMgbG9ja2RlcC9SQ1UgZGVidWdnaW5nIHdhcm5pbmdzIHdoZW4gYENPTkZJR19QUk9WRV9SQ1VgIGlzIGVuYWJsZWQuIFRoZSBjaGFuZ2UgdXBkYXRlcyB0aGUgUkNVIGRlcmVmZXJlbmNlIG1hY3JvIHRvIGluZGljYXRlIHRoYXQgdGhlIGFjY2VzcyBpcyBwcm90ZWN0ZWQgYnkgYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFuIFJDVS9sb2NrZGVwIGFubm90YXRpb24uIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSwgY2hhbmdlIGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBhbHRlciBidWZmZXIgYm91bmRzIG9yIG1lbW9yeSBjb3B5aW5nLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJlNjZmNGNkZjkyOGUwODk1ZjgwYTJiNDBhNjI0MDlmZDhhMDg0MGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAwMTozNjowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuaW5kZXggNTc5YWRhMDYzYjFiYi4uNGU1ZDdjNzAxNDM2OCAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXG5AQCAtMzM5Miw3ICszMzkyLDggQEAgc3RhdGljIGJvb2wgZXhwZWN0X2l0ZXJfbmFtZShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLCB2b2lkICpkYXRhKVxuIFx0c3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlcjtcbiBcdGNvbnN0IGNoYXIgKm5hbWUgPSBkYXRhO1xuIFxuLVx0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlKGV4cC1cdTAwM2VoZWxwZXIpO1xuK1x0aGVscGVyID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChleHAtXHUwMDNlaGVscGVyLFxuK1x0XHRcdFx0XHQgICBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSk7XG4gXHRpZiAoIWhlbHBlcilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6MzY6NTQuNjYzNTE0MDI1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU1NjkzMjQ5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ29ubnRyYWNrIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwcm92aWRlZCBwYXRjaCB0YXJnZXRzIGBuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmNgLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggbmV0ZmlsdGVyIGNvbm5lY3Rpb24gdHJhY2tpbmcgYW5kIGludGVyYWN0aW9ucyB3aXRoIHRoZSBuZXRsaW5rIGludGVyZmFjZS4gVGhlIGNoYW5nZSBpcyBzdWJ0bGUgYnV0IHBvdGVudGlhbGx5IGNyaXRpY2FsLiBUaGV5J3ZlIHVwZGF0ZWQgdGhlIGBleHBlY3RfaXRlcl9uYW1lYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBob3cgdGhlIGBoZWxwZXJgIG1lbWJlciBvZiBgbmZfY29ubnRyYWNrX2V4cGVjdGAgaXMgYWNjZXNzZWQuXG5cbkJlZm9yZSB0aGUgcGF0Y2gsIHdlIGhhZCBhIHNpbXBsZSBgcmN1X2RlcmVmZXJlbmNlYC4gTm93LCBpdCdzIGByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkYCB3aXRoIGEgbG9jayBkZXBlbmRlbmN5IGNoZWNrIHVzaW5nIGBsb2NrZGVwX2lzX2hlbGRgIG9uIGBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2tgLiBUaGF0J3MgYSByZWQgZmxhZyDigJMgYSBnb29kIG9uZS4gSXQgaW5kaWNhdGVzIGEgcG90ZW50aWFsIGRhdGEgcmFjZSBvciBzeW5jaHJvbml6YXRpb24gaXNzdWUgd2FzIGlkZW50aWZpZWQsIGFuZCB0aGlzIHBhdGNoIGFpbXMgdG8gcHJvdmlkZSBhIG1vcmUgcm9idXN0IG1lbW9yeSBiYXJyaWVyLiBUaGlzIGhpbnRzIGF0IHRoZSBwb3NzaWJpbGl0eSBvZiBhIHVzZS1hZnRlci1mcmVlIG9yIGRhdGEgY29ycnVwdGlvbiBzY2VuYXJpbyBpZiB0aGUgYGhlbHBlcmAgcG9pbnRlciBpcyBhY2Nlc3NlZCBjb25jdXJyZW50bHkgd2l0aCBtb2RpZmljYXRpb25zIHRvIHRoZSBgbmZfY29ubnRyYWNrX2V4cGVjdGAgc3RydWN0dXJlLiBUaGUgbG9jayBpbXBsaWVzIHdlIGFyZSBwcm9iYWJseSBtb3ZpbmcgZnJvbSBhIFJDVS1vbmx5IHdvcmxkIHRvIGEgbW9yZSBjb21wbGV4IGxvY2tpbmcgc2NoZW1lLCBidXQgcGVyaGFwcyBvbmx5IGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC5cblxuVG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIGFuZCB0aGUgc2V2ZXJpdHkgb2YgdGhlIG9yaWdpbmFsIGZsYXcsIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGdyYWIgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgbGluZSAzMzkyLiBMZXQncyB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgYG5mX2Nvbm50cmFja19leHBlY3RgIHN0cnVjdHVyZSBpcyB1c2VkLCBob3cgdGhlIGhlbHBlciBpcyBhc3NpZ25lZCwgYW5kIHdoYXQgb3RoZXIgdGhyZWFkcyBtaWdodCBiZSBpbnZvbHZlZCBpbiB0aGUgYWNjZXNzIGFuZCBtb2RpZmljYXRpb24gb2YgdGhlIGBoZWxwZXJgIHBvaW50ZXIuIEtub3dpbmcgd2hhdCBvdGhlciBkYXRhIGlzIGJlaW5nIHJlYWQgYW5kIG1vZGlmaWVkIG9uIHRoZSBzYW1lIHN0cnVjdHVyZXMgd2lsbCBoaWdobGlnaHQgd2hlcmUgdGhlIHJhY2UgY29uZGl0aW9uIG9jY3Vycy4gSSBzaG91bGQgYWxzbyBpbnZlc3RpZ2F0ZSBob3cgYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AgaXMgYWNxdWlyZWQgYW5kIHJlbGVhc2VkLlxuXG5JdCdzIGEgZ29vZCBwYXRjaCBzbyBmYXIgYmVjYXVzZSBpdCBsb29rcyBsaWtlIHdlJ3JlIG1vdmluZyB0b3dhcmRzIG1vcmUgZGlzY2lwbGluZWQgbWVtb3J5IGFjY2Vzcy4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgYnJvYWRlciBjb2RlIGNvbnRleHQgYmVmb3JlIEkgY2FuIGZ1bGx5IGFzc2VzcyB0aGUgaW1wYWN0IGFuZCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjExNywiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDAxOjM3OjAwLjIzMjg0MzM2N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzg2NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzODAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMzODA6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jayk7XFxuMzM4MTpcXHRcXG4zMzgyOlxcdFxcdGlmIChlcnIgXFx1MDAzYz0gMCkge1xcbjMzODM6XFx0XFx0XFx0a2ZyZWVfc2tiKHNrYjIpO1xcbjMzODQ6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMzM4NTpcXHRcXHR9XFxuMzM4NjpcXHRcXG4zMzg3OlxcdFxcdHJldHVybiBuZm5ldGxpbmtfdW5pY2FzdChza2IyLCBpbmZvLVxcdTAwM2VuZXQsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQpO1xcbjMzODg6XFx0fVxcbjMzODk6XFx0XFxuMzM5MDpcXHRzdGF0aWMgYm9vbCBleHBlY3RfaXRlcl9uYW1lKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHZvaWQgKmRhdGEpXFxuMzM5MTpcXHR7XFxuMzM5MjpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyO1xcbjMzOTM6XFx0XFx0Y29uc3QgY2hhciAqbmFtZSA9IGRhdGE7XFxuMzM5NDpcXHRcXG4zMzk1OlxcdFxcdGhlbHBlciA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZXhwLVxcdTAwM2VoZWxwZXIsXFxuMzM5NjpcXHRcXHRcXHRcXHRcXHRcXHQgICBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jaykpO1xcbjMzOTc6XFx0XFx0aWYgKCFoZWxwZXIpXFxuMzM5ODpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMzM5OTpcXHRcXG4zNDAwOlxcdFxcdHJldHVybiBzdHJjbXAoaGVscGVyLVxcdTAwM2VuYW1lLCBuYW1lKSA9PSAwO1xcbjM0MDE6XFx0fVxcbjM0MDI6XFx0XFxuMzQwMzpcXHRzdGF0aWMgYm9vbCBleHBlY3RfaXRlcl9hbGwoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCwgdm9pZCAqZGF0YSlcXG4zNDA0OlxcdHtcXG4zNDA1OlxcdFxcdHJldHVybiB0cnVlO1xcbjM0MDY6XFx0fVxcbjM0MDc6XFx0XFxuMzQwODpcXHRzdGF0aWMgaW50IGN0bmV0bGlua19kZWxfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuMzQwOTpcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbjM0MTA6XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKVxcbjM0MTE6XFx0e1xcbjM0MTI6XFx0XFx0dV9pbnQ4X3QgdTMgPSBpbmZvLVxcdTAwM2VuZm1zZy1cXHUwMDNlbmZnZW5fZmFtaWx5O1xcbjM0MTM6XFx0XFx0c3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cDtcXG4zNDE0OlxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7XFxuMzQxNTpcXHRcXHRzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUgem9uZTtcXG4zNDE2OlxcdFxcdGludCBlcnI7XFxuMzQxNzpcXHRcXG4zNDE4OlxcdFxcdGlmIChjZGFbQ1RBX0VYUEVDVF9UVVBMRV0pIHtcXG4zNDE5OlxcdFxcdFxcdC8qIGRlbGV0ZSBhIHNpbmdsZSBleHBlY3QgYnkgdHVwbGUgKi9cXG4zNDIwOlxcdFxcdFxcdGVyciA9IGN0bmV0bGlua19wYXJzZV96b25lKGNkYVtDVEFfRVhQRUNUX1pPTkVdLCBcXHUwMDI2em9uZSk7XFxuMzQyMTpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4zNDIyOlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzQyMzpcXHRcXG4zNDI0OlxcdFxcdFxcdGVyciA9IGN0bmV0bGlua19wYXJzZV90dXBsZShjZGEsIFxcdTAwMjZ0dXBsZSwgQ1RBX0VYUEVDVF9UVVBMRSxcXG4zNDI1OlxcdFxcdFxcdFxcdFxcdFxcdCAgICB1MywgTlVMTCk7XFxuMzQyNjpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4zNDI3OlxcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuMzQyODpcXHRcXG4zNDI5OlxcdFxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6Mzc6MDAuMjMzMTI2NTI3WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2MzY5Mzc5MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipUcmFjaW5nIHRoZSBVc2FnZSBvZiBgZXhwZWN0X2l0ZXJfbmFtZWAqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIGBleHBlY3RfaXRlcl9uYW1lYC4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQsIGFzIGFsd2F5cywgaXMgdG8gZm9sbG93IHRoZSBicmVhZGNydW1icyBvZiBpdHMgdXNhZ2UuIExldCdzIGZpbmQgb3V0IHdoZXJlIHRoaXMgdGhpbmcgaXMgYWN0dWFsbHkgY2FsbGVkLiBJJ20gZ29pbmcgdG8gcnVuIGEgcXVpY2sgc2VhcmNoIGZvciBhbGwgdGhlIGNhbGxlcnMgb2YgYGV4cGVjdF9pdGVyX25hbWVgIHdpdGhpbiB0aGUgY29kZWJhc2UuIEtub3dpbmcgdGhlIGNvbnRleHRzIHdoZXJlIGl0J3MgdXNlZCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiBhbnkgY2hhbmdlcy4gSSdsbCBuZWVkIHRvIGV4YW1pbmUgZWFjaCBjYWxsIHNpdGUgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb24gaG93IGl0J3MgYmVpbmcgZW1wbG95ZWQgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MzU1NSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6Mzc6MDEuODcwMDY3NzYyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjEwNzIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHBlY3RfaXRlcl9uYW1lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM9MzMxMT1zdGF0aWMgaW50IGN0bmV0bGlua19nZXRfZXhwZWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzM4OS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmM6MzM5MDpzdGF0aWMgYm9vbCBleHBlY3RfaXRlcl9uYW1lKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsIHZvaWQgKmRhdGEpXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTMzOTEte1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jPTM0MDg9c3RhdGljIGludCBjdG5ldGxpbmtfZGVsX2V4cGVjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0NTctXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jOjM0NTg6XFx0XFx0bmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KGluZm8tXFx1MDAzZW5ldCwgZXhwZWN0X2l0ZXJfbmFtZSwgbmFtZSxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzQ1OS1cXHRcXHRcXHRcXHRcXHQgTkVUTElOS19DQihza2IpLnBvcnRpZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6Mzc6MDEuOTI2MTgxOTQxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIwMzQ2NTMxNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldGAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0YCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBpdGVyYXRvciBmdW5jdGlvbnMgd2l0aGluIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGZyYW1ld29yaywgcGFydGljdWxhcmx5IGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXRsaW5rIGludGVyZmFjZSBhbmQgdGhlIHVuZGVybHlpbmcgZXhwZWN0YXRpb24gdGFibGUuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBudWFuY2VzOiB0aGUgaGFuZGxpbmcgb2YgY29uY3VycmVudCBhY2Nlc3MsIHBvdGVudGlhbCBsb2NraW5nIG1lY2hhbmlzbXMgdXNlZCB0byBtYWludGFpbiBjb25zaXN0ZW5jeSwgYW5kIGhvdyBpdCBkZWFscyB3aXRoIGl0ZXJhdGluZyB0aHJvdWdoIGEgcG90ZW50aWFsbHkgbGFyZ2UgbnVtYmVyIG9mIGV4cGVjdGF0aW9ucyB3aXRob3V0IGNhdXNpbmcgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEknbSBrZWVuIHRvIHNlZSBpZiBpdCBlZmZpY2llbnRseSBoYW5kbGVzIG5lc3RlZCBleHBlY3RhdGlvbnMgYW5kIGlmIHRoZXJlJ3MgYW55IGNsZXZlciB1c2Ugb2YgZGF0YSBzdHJ1Y3R1cmVzIHRvIHNwZWVkIHVwIHRoZSBpdGVyYXRpb24gcHJvY2Vzcy4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgaGludHMgYWJvdXQgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgb3IgYXJlYXMgd2hlcmUgaXQgbWlnaHQgYmUgdnVsbmVyYWJsZSB0byBkZW5pYWwtb2Ytc2VydmljZSBhdHRhY2tzLiBJJ20gYWxzbyBjdXJpb3VzIHRvIHNlZSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRoZSBjb25udHJhY2sgaGVscGVycyBhbmQgd2hldGhlciBpdCBwcm92aWRlcyBhbnkgZmlsdGVyaW5nIGNhcGFiaWxpdGllcyB0byBsaW1pdCB0aGUgc2NvcGUgb2YgdGhlIGl0ZXJhdGlvbi4gQmFzaWNhbGx5LCBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgY29kZSBpcyBjbGVhbiwgZWZmaWNpZW50LCBhbmQgcm9idXN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDU3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6Mzc6MDMuOTYwODM4MDk5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgxMDk1ODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oPTE0Nj12b2lkIG5mX2N0X2V4cGVjdF9pdGVyYXRlX2Rlc3Ryb3koYm9vbCAoKml0ZXIpKHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICplLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaDoxNDc6dm9pZCBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXQoc3RydWN0IG5ldCAqbmV0LFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgtMTQ4LVxcdFxcdFxcdCAgICAgIGJvb2wgKCppdGVyKShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZSwgdm9pZCAqZGF0YSksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYz02MTI9RVhQT1JUX1NZTUJPTF9HUEwobmZfY3RfZXhwZWN0X2l0ZXJhdGVfZGVzdHJveSk7XFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtNjEzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jOjYxNDp2b2lkIG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMtNjE1LVxcdFxcdFxcdCAgICAgIGJvb2wgKCppdGVyKShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZSwgdm9pZCAqZGF0YSksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuYy02MzktfVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jOjY0MDpFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jLTY0MS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYz0zNDA4PXN0YXRpYyBpbnQgY3RuZXRsaW5rX2RlbF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYy0zNDU3LVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNDU4OlxcdFxcdG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldChpbmZvLVxcdTAwM2VuZXQsIGV4cGVjdF9pdGVyX25hbWUsIG5hbWUsXFxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jLTM0NTktXFx0XFx0XFx0XFx0XFx0IE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzQ2Mi1cXHRcXHQvKiBUaGlzIGJhc2ljYWxseSBtZWFucyB3ZSBoYXZlIHRvIGZsdXNoIGV2ZXJ5dGhpbmcqL1xcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYzozNDYzOlxcdFxcdG5mX2N0X2V4cGVjdF9pdGVyYXRlX25ldChpbmZvLVxcdTAwM2VuZXQsIGV4cGVjdF9pdGVyX2FsbCwgTlVMTCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMtMzQ2NC1cXHRcXHRcXHRcXHRcXHQgTkVUTElOS19DQihza2IpLnBvcnRpZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6Mzc6MDUuNzQxOTQyMzMxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5MzkyMTM2MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIENvbm50cmFjayBFeHBlY3RhdGlvbnMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXRgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0J3MgY3J1Y2lhbCBmb3IgaXRlcmF0aW5nIHRocm91Z2ggY29ubnRyYWNrIGV4cGVjdGF0aW9ucywgYW5kIGl0J3MgbG9jYXRlZCByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgYG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jYC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQgdHJhdmVyc2VzIHRoZSBleHBlY3RhdGlvbiB0YWJsZSBhbmQgd2hhdCBraW5kIG9mIGRhdGEgaXQncyBleHRyYWN0aW5nIGR1cmluZyB0aGUgcHJvY2Vzcy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb25zIGluIGNvbm50cmFjayB3aXRoIG11bHRpcGxlIG5ldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NTEsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQwMTozNzowNy42ODExNjU4OVoiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjE0LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjE0OlxcdHZvaWQgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KHN0cnVjdCBuZXQgKm5ldCxcXG4gNjE1OlxcdFxcdFxcdFxcdCAgICAgIGJvb2wgKCppdGVyKShzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZSwgdm9pZCAqZGF0YSksXFxuIDYxNjpcXHRcXHRcXHRcXHQgICAgICB2b2lkICpkYXRhLFxcbiA2MTc6XFx0XFx0XFx0XFx0ICAgICAgdTMyIHBvcnRpZCwgaW50IHJlcG9ydClcXG4gNjE4OlxcdHtcXG4gNjE5OlxcdFxcdHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7XFxuIDYyMDpcXHRcXHRjb25zdCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbmV4dDtcXG4gNjIxOlxcdFxcdHVuc2lnbmVkIGludCBpO1xcbiA2MjI6XFx0XFxuIDYyMzpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jayk7XFxuIDYyNDpcXHRcXG4gNjI1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuZl9jdF9leHBlY3RfaHNpemU7IGkrKykge1xcbiA2MjY6XFx0XFx0XFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShleHAsIG5leHQsXFxuIDYyNzpcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZuZl9jdF9leHBlY3RfaGFzaFtpXSxcXG4gNjI4OlxcdFxcdFxcdFxcdFxcdFxcdCAgaG5vZGUpIHtcXG4gNjI5OlxcdFxcbiA2MzA6XFx0XFx0XFx0XFx0aWYgKCFuZXRfZXEobmZfY3RfZXhwX25ldChleHApLCBuZXQpKVxcbiA2MzE6XFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDYzMjpcXHRcXG4gNjMzOlxcdFxcdFxcdFxcdGlmIChpdGVyKGV4cCwgZGF0YSkpXFxuIDYzNDpcXHRcXHRcXHRcXHRcXHRuZl9jdF91bmxpbmtfZXhwZWN0X3JlcG9ydChleHAsIHBvcnRpZCwgcmVwb3J0KTtcXG4gNjM1OlxcdFxcdFxcdH1cXG4gNjM2OlxcdFxcdH1cXG4gNjM3OlxcdFxcbiA2Mzg6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jayk7XFxuIDYzOTpcXHR9XFxuIDY0MDpcXHRFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXQpO1xcbiA2NDE6XFx0XFxuIDY0MjpcXHQjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19QUk9DRlNcXG4gNjQzOlxcdHN0cnVjdCBjdF9leHBlY3RfaXRlcl9zdGF0ZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDAxOjM3OjA3LjY4MTI2OTM1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjY0NjYxMDEwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGFuIFJDVSBhbmQgTG9ja2RlcCBJbnRlcmFjdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBmcm9tIHdoYXQgSSBjYW4gdGVsbCwgaXQncyBhIHJlbGF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkIGNoYW5nZSByZWxhdGVkIHRvIGhvdyBSQ1UgYW5kIGxvY2tkZXAgaW50ZXJhY3Qgd2l0aGluIHRoZSBgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0YCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZSBvcmlnaW5hbCBjb2RlLCB3aGVuIGNhbGxpbmcgYGl0ZXIoZXhwLCBkYXRhKWAgd2hpbGUgaG9sZGluZyBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYCwgd2FzIHVzaW5nIGByY3VfZGVyZWZlcmVuY2UoZXhwLVx1MDAzZWhlbHBlcilgIHdpdGhpbiBgZXhwZWN0X2l0ZXJfbmFtZWAuIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2l0aCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBsb2NrZGVwIGFuZCBSQ1UgZW5hYmxlZCwgdGhpcyBjYW4gdHJpZ2dlciBhIFwic3VzcGljaW91cyByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSB1c2FnZSFcIiB3YXJuaW5nLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGF0IGByY3VfZGVyZWZlcmVuY2VgIGRvZXNuJ3QgZXhwbGljaXRseSBzdGF0ZSB0aGF0IHRoZSBSQ1UgcmVhZCBsb2NrIGlzIGJlaW5nIGhlbGQsIGV2ZW4gdGhvdWdoIGBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2tgIHByb3ZpZGVzIHRoZSBzYW1lIGxldmVsIG9mIHByb3RlY3Rpb24uXG5cblRoZSBmaXgsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaW52b2x2ZXMgcmVwbGFjaW5nIHRoZSBwb3RlbnRpYWxseSBtaXNsZWFkaW5nIGByY3VfZGVyZWZlcmVuY2VgIHdpdGggYHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZXhwLVx1MDAzZWhlbHBlciwgbG9ja2RlcF9pc19oZWxkKFx1MDAyNm5mX2Nvbm50cmFja19leHBlY3RfbG9jaykpYC4gVGhpcyBuZXcgY29uc3RydWN0aW9uIGV4cGxpY2l0bHkgYXNzZXJ0cyB0aGF0IGBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2tgIGlzIGhlbGQgd2hlbiBhY2Nlc3NpbmcgYGV4cC1cdTAwM2VoZWxwZXJgLCB0aGVyZWJ5IHNpbGVuY2luZyB0aGUgbG9ja2RlcCBmYWxzZSBwb3NpdGl2ZSBvciB2YWxpZGF0aW5nIHRoYXQgaXQncyBiZWluZyBoZWxkIGFzIGludGVuZGVkLlxuXG5Ob3csIG15IHJlYWwgY29uY2VybiBoZXJlIGlzIGFsd2F5cyBhcm91bmQgcG90ZW50aWFsIG1lbW9yeSBpc3N1ZXMuIERvZXMgdGhpcyBzZWVtaW5nbHkgYmVuaWduIGNoYW5nZSAqaW50cm9kdWNlKiBvciBzb21laG93ICpleHBvc2UqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBObywgaXQgZG9lc24ndC4gVGhpcyBpc24ndCB0b3VjaGluZyBtZW1vcnkgYWxsb2NhdGlvbi4gSXQncyBub3QgY3JlYXRpbmcgbmV3IHZhcmlhYmxlcywgY29weWluZyBkYXRhIHRvIHVzZXJzcGFjZSwgbWVzc2luZyB3aXRoIGJ1ZmZlciBsZW5ndGhzLCBvciBjaGFuZ2luZyB0aGUgY29udHJvbCBmbG93IChiZXlvbmQgdGhlIFJDVSBsb2NrZGVwIGNoZWNrKS4gSXQncyBwdXJlbHkgYW4gUkNVIGFubm90YXRpb24gb3IgbG9ja2RlcCB2ZXJpZmljYXRpb24gY2hhbmdlLCB3aGljaCBzaG91bGQgYmUgZmluZS5cblxuTGV0IG1lIHF1aWNrbHkgcmV2aWV3IHRoZSBndWlkZWxpbmVzIGZvciBzZXR0aW5nIGBOZWVkc0tNU0FOYC4gSSBuZWVkIHRvIHNldCB0aGF0IGZsYWcgaWYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMga2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2UsIGRlcGVuZHMgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGludm9sdmVzIGFsbG9jYXRpbmcgb3IgaW5pdGlhbGl6aW5nIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIsIG9yIGRvZXMgYW55dGhpbmcgdGhhdCBtaWdodCBjcmVhdGUgYSB2dWxuZXJhYmlsaXR5IHdpdGggYm91bmRzIGNoZWNrcy5cblxuSG93ZXZlciwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIHBhdGNoLCBgTmVlZHNLTVNBTmAgaXMgKmNsZWFybHkqIGBmYWxzZWAuIEl0J3Mgb25seSByZXBsYWNpbmcgYW4gUkNVIGRlcmVmZXJlbmNlIHdpdGggYSBwcm90ZWN0ZWQgdmVyc2lvbiwgYmVjYXVzZSB0aGUgY2FsbGluZyBjb250ZXh0ICphbHJlYWR5KiBndWFyYW50ZWVzIHByb3RlY3Rpb24gdmlhIHRoZSBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYC4gVGhlIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgbGVhayByaXNrIGlzIHplcm8gaGVyZS4gSXQncyBlc3NlbnRpYWxseSBhbiBleHBsaWNpdCBzdGF0ZW1lbnQgYWJvdXQgdGhlIGV4aXN0aW5nIGxvY2tpbmcgYW5kIFJDVSBndWFyYW50ZWVzLlxuXG5BbHJpZ2h0LCB3aXRoIHRoYXQgYXNzZXNzbWVudCBjb21wbGV0ZSwgSSB0aGluayBJJ20gcmVhZHkgdG8gZm9ybXVsYXRlIG15IHJlc3BvbnNlIGFuZCBzZXQgdGhlIHJlc3VsdHMgYWNjb3JkaW5nbHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MzksIk91dHB1dFRva2VucyI6MjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMDE6Mzc6MTQuMTQ3MzcyNjQ4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXBsYWNlcyBgcmN1X2RlcmVmZXJlbmNlKGV4cC1cXHUwMDNlaGVscGVyKWAgd2l0aCBgcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChleHAtXFx1MDAzZWhlbHBlciwgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZuZl9jb25udHJhY2tfZXhwZWN0X2xvY2spKWAgaW4gYGV4cGVjdF9pdGVyX25hbWUoKWAuXFxuXFxuYGV4cGVjdF9pdGVyX25hbWUoKWAgaXMgaW52b2tlZCBhcyBhbiBpdGVyYXRvciBjYWxsYmFjayBmcm9tIGBuZl9jdF9leHBlY3RfaXRlcmF0ZV9uZXQoKWAsIHdoaWNoIGFjcXVpcmVzIGBuZl9jb25udHJhY2tfZXhwZWN0X2xvY2tgIHZpYSBgc3Bpbl9sb2NrX2JoKClgLiBVc2luZyBgcmN1X2RlcmVmZXJlbmNlKClgIHdpdGhvdXQgYW4gUkNVIHJlYWQtc2lkZSBsb2NrIGNhdXNlcyBsb2NrZGVwL1JDVSBkZWJ1Z2dpbmcgd2FybmluZ3Mgd2hlbiBgQ09ORklHX1BST1ZFX1JDVWAgaXMgZW5hYmxlZC4gVGhlIGNoYW5nZSB1cGRhdGVzIHRoZSBSQ1UgZGVyZWZlcmVuY2UgbWFjcm8gdG8gaW5kaWNhdGUgdGhhdCB0aGUgYWNjZXNzIGlzIHByb3RlY3RlZCBieSBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYC5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgYW4gUkNVL2xvY2tkZXAgYW5ub3RhdGlvbi4gSXQgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBjaGFuZ2UgZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24sIGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgbWVtb3J5IGNvcHlpbmcsIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVwbGFjZXMgYHJjdV9kZXJlZmVyZW5jZShleHAtXFx1MDAzZWhlbHBlcilgIHdpdGggYHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZXhwLVxcdTAwM2VoZWxwZXIsIGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2bmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrKSlgIGluIGBleHBlY3RfaXRlcl9uYW1lKClgLlxcblxcbmBleHBlY3RfaXRlcl9uYW1lKClgIGlzIGludm9rZWQgYXMgYW4gaXRlcmF0b3IgY2FsbGJhY2sgZnJvbSBgbmZfY3RfZXhwZWN0X2l0ZXJhdGVfbmV0KClgLCB3aGljaCBhY3F1aXJlcyBgbmZfY29ubnRyYWNrX2V4cGVjdF9sb2NrYCB2aWEgYHNwaW5fbG9ja19iaCgpYC4gVXNpbmcgYHJjdV9kZXJlZmVyZW5jZSgpYCB3aXRob3V0IGFuIFJDVSByZWFkLXNpZGUgbG9jayBjYXVzZXMgbG9ja2RlcC9SQ1UgZGVidWdnaW5nIHdhcm5pbmdzIHdoZW4gYENPTkZJR19QUk9WRV9SQ1VgIGlzIGVuYWJsZWQuIFRoZSBjaGFuZ2UgdXBkYXRlcyB0aGUgUkNVIGRlcmVmZXJlbmNlIG1hY3JvIHRvIGluZGljYXRlIHRoYXQgdGhlIGFjY2VzcyBpcyBwcm90ZWN0ZWQgYnkgYG5mX2Nvbm50cmFja19leHBlY3RfbG9ja2AuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGFuIFJDVS9sb2NrZGVwIGFubm90YXRpb24uIEl0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSwgY2hhbmdlIGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uLCBhbHRlciBidWZmZXIgYm91bmRzIG9yIG1lbW9yeSBjb3B5aW5nLCBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvktk8[1] Phase: Succeeded StartedAt: 2026-09-12 01:37:26 +0000 UTC FinishedAt: 2026-09-12 01:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-12 01:37:26 +0000 UTC FinishedAt: 2026-09-12 01:37:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[2] Phase: Succeeded StartedAt: 2026-09-12 01:37:26 +0000 UTC FinishedAt: 2026-09-12 05:18:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 01:37:26 +0000 UTC FinishedAt: 2026-09-12 05:18:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 01:37:26 +0000 UTC FinishedAt: 2026-09-12 01:37:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 01:37:26 +0000 UTC FinishedAt: 2026-09-12 01:37:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"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-workflowvktk8/series-workflowvktk8-convert-artifact-546636952/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 01:37:36 +0000 UTC FinishedAt: 2026-09-12 01:53:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 01:37:36 +0000 UTC FinishedAt: 2026-09-12 01:53:49 +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:*01f77b38-36dd-4eac-a772-e5d94d80ae33,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-workflowvktk8/series-workflowvktk8-convert-artifact-546636952/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": "e921fb9e-1034-46fc-bee5-4d347a181c16", "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-workflowvktk8/series-workflowvktk8-build-action-2126791118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 01:37:36 +0000 UTC FinishedAt: 2026-09-12 01:53:39 +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:*01f77b38-36dd-4eac-a772-e5d94d80ae33,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-workflowvktk8/series-workflowvktk8-convert-artifact-546636952/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": "e921fb9e-1034-46fc-bee5-4d347a181c16", "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-workflowvktk8/series-workflowvktk8-build-action-2126791118/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 01:53:49 +0000 UTC FinishedAt: 2026-09-12 01:53:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 01:53:49 +0000 UTC FinishedAt: 2026-09-12 01:53:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 01:53:49 +0000 UTC FinishedAt: 2026-09-12 01:53:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 01:53:49 +0000 UTC FinishedAt: 2026-09-12 01:53:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-workflowvktk8/series-workflowvktk8-convert-artifact-2985773311/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 01:53:59 +0000 UTC FinishedAt: 2026-09-12 01:56:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 01:53:59 +0000 UTC FinishedAt: 2026-09-12 01:55:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e921fb9e-1034-46fc-bee5-4d347a181c16,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-workflowvktk8/series-workflowvktk8-build-action-2126791118/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-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 01:56:06 +0000 UTC FinishedAt: 2026-09-12 01:56:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 01:56:06 +0000 UTC FinishedAt: 2026-09-12 01:56:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 01:56:06 +0000 UTC FinishedAt: 2026-09-12 02:12:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 01:56:06 +0000 UTC FinishedAt: 2026-09-12 02:12:10 +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:*01f77b38-36dd-4eac-a772-e5d94d80ae33,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-workflowvktk8/series-workflowvktk8-convert-artifact-2985773311/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": "e43f9129-76a7-4c1f-8756-c3417ae0ae13", "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-workflowvktk8/series-workflowvktk8-build-action-235540243/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 01:56:06 +0000 UTC FinishedAt: 2026-09-12 02:12:00 +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:*01f77b38-36dd-4eac-a772-e5d94d80ae33,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-workflowvktk8/series-workflowvktk8-convert-artifact-2985773311/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": "e43f9129-76a7-4c1f-8756-c3417ae0ae13", "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-workflowvktk8/series-workflowvktk8-build-action-235540243/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 02:12:10 +0000 UTC FinishedAt: 2026-09-12 02:12:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 02:12:10 +0000 UTC FinishedAt: 2026-09-12 02:12:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 02:12:10 +0000 UTC FinishedAt: 2026-09-12 02:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 02:12:10 +0000 UTC FinishedAt: 2026-09-12 02:14:11 +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:*e43f9129-76a7-4c1f-8756-c3417ae0ae13,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-workflowvktk8/series-workflowvktk8-build-action-235540243/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-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 02:14:21 +0000 UTC FinishedAt: 2026-09-12 05:18:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 02:14:21 +0000 UTC FinishedAt: 2026-09-12 05:18:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"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:*e921fb9e-1034-46fc-bee5-4d347a181c16,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e43f9129-76a7-4c1f-8756-c3417ae0ae13,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-workflowvktk8/series-workflowvktk8-build-action-2126791118/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-workflowvktk8/series-workflowvktk8-build-action-235540243/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 02:14:21 +0000 UTC FinishedAt: 2026-09-12 02:14:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 02:14:21 +0000 UTC FinishedAt: 2026-09-12 02:14:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"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-workflowvktk8/series-workflowvktk8-convert-artifact-2143353752/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 02:14:21 +0000 UTC FinishedAt: 2026-09-12 02:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 02:14:21 +0000 UTC FinishedAt: 2026-09-12 02:14:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 02:14:22 +0000 UTC FinishedAt: 2026-09-12 02:14:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 02:14:32 +0000 UTC FinishedAt: 2026-09-12 05:18:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvktk8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["expect_iter_name","ctnetlink_del_expect"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_CT_NETLINK","NF_CONNTRACK","NETFILTER"],"series_id":"b036b43e-3c46-47cc-883d-97249dba4e5a","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-12 02:14:32 +0000 UTC FinishedAt: 2026-09-12 05:18:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*e921fb9e-1034-46fc-bee5-4d347a181c16,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e43f9129-76a7-4c1f-8756-c3417ae0ae13,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-workflowvktk8/series-workflowvktk8-build-action-2126791118/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-workflowvktk8/series-workflowvktk8-build-action-235540243/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-workflowvktk8/series-workflowvktk8-convert-artifact-2143353752/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,}