Name: series-workflowzvldk Phase: Succeeded StartedAt: 2026-09-08 13:52:30 +0000 UTC FinishedAt: 2026-09-08 17:34:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[0] Phase: Succeeded StartedAt: 2026-09-08 13:52:30 +0000 UTC FinishedAt: 2026-09-08 13:55:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 13:52:30 +0000 UTC FinishedAt: 2026-09-08 13:55:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MROUTE", "IPV6_MROUTE", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MROUTE", "IPV6_MROUTE", "MEMCG" ], "series_id": "39f1cb2a-0751-44c8-b940-37b6fbeb85bb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mr_table_alloc", "ip_mroute_setsockopt", "ip6_mroute_setsockopt", "ipmr_mfc_add", "ip6mr_mfc_add" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01ST1VURSYjMzQ7LAogICAgJiMzNDtJUFY2X01ST1VURSYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21yX3RhYmxlX2FsbG9jJiMzNDssCiAgICAmIzM0O2lwX21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwNl9tcm91dGVfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcG1yX21mY19hZGQmIzM0OywKICAgICYjMzQ7aXA2bXJfbWZjX2FkZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgZmxhZ3MgKFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UKSB0byB0aGUgSVB2NC9JUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIGFsbG9jYXRpb25zIGFuZCBzbGFiIGNhY2hlIGNyZWF0aW9uIChtcnRfY2FjaGVwKS4gVGhlIGFsbG9jYXRpb24gaW4gbXJfdGFibGVfYWxsb2Mgc3RpbGwgdXNlcyBremFsbG9jX29iaiB3aGljaCBlbnN1cmVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgbWVtb3J5LCBhbmQgU0xBQl9BQ0NPVU5UIHNvbGVseSBlbmFibGVzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBvbiBjYWNoZSBhbGxvY2F0aW9ucy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXItc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBTTEFCX0FDQ09VTlQgYW5kIEdGUF9LRVJORUxfQUNDT1VOVCBmbGFncyB0byBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIGFuZCBmb3J3YXJkaW5nIGNhY2hlIGFsbG9jYXRpb25zIChtZmNfY2FjaGUsIG1mYzZfY2FjaGUsIG1yX3RhYmxlKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSByZWFjaGFibGUgdmlhIHNldHNvY2tvcHQgYW5kIG5ldGxpbmsgbXVsdGljYXN0IHJvdXRpbmcgaW50ZXJmYWNlcywgd2FycmFudGluZyBmdXp6aW5nIHVuZGVyIG1lbW9yeS1hY2NvdW50aW5nIGNvbmZpZ3VyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmJhYThkMDU2MmZkOTYyOGE4MjE2NGVmOTQzODFjZjBlZjM1YzI0ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTM6NTQ6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jXG5pbmRleCBlNWYyYjFjNjE1MGQyLi5iOWM1NDRkNDhjNDUyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcG1yLmNcbkBAIC0zMzc2LDcgJiM0MzszMzc2LDggQEAgaW50IF9faW5pdCBpcF9tcl9pbml0KHZvaWQpXG4ge1xuIFx0aW50IGVycjtcbiBcbi1cdG1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mY19jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9QQU5JQyk7XG4mIzQzO1x0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLFxuJiM0MztcdFx0XHRcdFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpO1xuIFxuIFx0ZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZpcG1yX25ldF9vcHMpO1xuIFx0aWYgKGVycilcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yX2Jhc2UuYyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXG5pbmRleCA4NjdiMjRiZWRlZDExLi5hMGVjNmQxOWEyMzdmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtcl9iYXNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXG5AQCAtNTIsNyAmIzQzOzUyLDcgQEAgbXJfdGFibGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsXG4gXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcbiBcdGludCBlcnI7XG4gXG4tXHRtcnQgPSBremFsbG9jX29iaigqbXJ0KTtcbiYjNDM7XHRtcnQgPSBremFsbG9jX29iaigqbXJ0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFtcnQpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFx0bXJ0LVx1MDAzZWlkID0gaWQ7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmNcbmluZGV4IDNmMmVkOWI3N2RlYjUuLjlkODExNmI1ZWRiMTcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZtci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZtci5jXG5AQCAtMTQyNyw3ICYjNDM7MTQyNyw3IEBAIGludCBfX2luaXQgaXA2X21yX2luaXQodm9pZClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOKTtcbiYjNDM7XHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmM2X2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX0FDQ09VTlQpO1xuIFx0aWYgKCFtcnRfY2FjaGVwKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9NUk9VVEUmIzM0OywKICAgICYjMzQ7SVBWNl9NUk9VVEUmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcl90YWJsZV9hbGxvYyYjMzQ7LAogICAgJiMzNDtpcF9tcm91dGVfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcDZfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXBtcl9tZmNfYWRkJiMzNDssCiAgICAmIzM0O2lwNm1yX21mY19hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBTTEFCX0FDQ09VTlQgYW5kIEdGUF9LRVJORUxfQUNDT1VOVCBmbGFncyB0byBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIGFuZCBmb3J3YXJkaW5nIGNhY2hlIGFsbG9jYXRpb25zIChtZmNfY2FjaGUsIG1mYzZfY2FjaGUsIG1yX3RhYmxlKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSByZWFjaGFibGUgdmlhIHNldHNvY2tvcHQgYW5kIG5ldGxpbmsgbXVsdGljYXN0IHJvdXRpbmcgaW50ZXJmYWNlcywgd2FycmFudGluZyBmdXp6aW5nIHVuZGVyIG1lbW9yeS1hY2NvdW50aW5nIGNvbmZpZ3VyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmJhYThkMDU2MmZkOTYyOGE4MjE2NGVmOTQzODFjZjBlZjM1YzI0ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTM6NTQ6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yLmMgYi9uZXQvaXB2NC9pcG1yLmMKaW5kZXggZTVmMmIxYzYxNTBkMi4uYjljNTQ0ZDQ4YzQ1MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBtci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwbXIuYwpAQCAtMzM3Niw3ICYjNDM7MzM3Niw4IEBAIGludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKQogewogCWludCBlcnI7CiAKLQltcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMpOwomIzQzOwltcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsCiYjNDM7CQkJCVNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpOwogCiAJZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmYW1wO2lwbXJfbmV0X29wcyk7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXJfYmFzZS5jIGIvbmV0L2lwdjQvaXBtcl9iYXNlLmMKaW5kZXggODY3YjI0YmVkZWQxMS4uYTBlYzZkMTlhMjM3ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBtcl9iYXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBtcl9iYXNlLmMKQEAgLTUyLDcgJiM0Mzs1Miw3IEBAIG1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLAogCXN0cnVjdCBtcl90YWJsZSAqbXJ0OwogCWludCBlcnI7CiAKLQltcnQgPSBremFsbG9jX29iaigqbXJ0KTsKJiM0MzsJbXJ0ID0ga3phbGxvY19vYmooKm1ydCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIW1ydCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJbXJ0LSZndDtpZCA9IGlkOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmMKaW5kZXggM2YyZWQ5Yjc3ZGViNS4uOWQ4MTE2YjVlZGIxNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2bXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZtci5jCkBAIC0xNDI3LDcgJiM0MzsxNDI3LDcgQEAgaW50IF9faW5pdCBpcDZfbXJfaW5pdCh2b2lkKQogewogCWludCBlcnI7CiAKLQltcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmM2X2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04pOwomIzQzOwltcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmM2X2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX0FDQ09VTlQpOwogCWlmICghbXJ0X2NhY2hlcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIHRoaXMgSVAgTXVsdGljYXN0IFBhdGNoKioKCkFscmlnaHQsIHNvIHRoZSBmb2N1cyBoZXJlIGlzIG1lbW9yeSBhY2NvdW50aW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBJUCBtdWx0aWNhc3Qgcm91dGluZyBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIHBlcmhhcHMgcHJldmVudGluZyBwb3RlbnRpYWwgZGVuaWFsLW9mLXNlcnZpY2UgdnVsbmVyYWJpbGl0aWVzLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgaXBtci5jYCwgYGlwbXJfYmFzZS5jYCwgYW5kIGBpcDZtci5jYCwgd2hpY2ggYXJlIGFsbCBjb3JlIG11bHRpY2FzdCByb3V0aW5nIGNvbXBvbmVudHMgZm9yIGJvdGggSVB2NCBhbmQgSVB2Ni4KClRoZSBmaXJzdCBjaGFuZ2UgaW4gYGlwbXIuY2AsIHdpdGhpbiB0aGUgYGlwX21yX2luaXRgIGZ1bmN0aW9uLCBhZGRzIGBTTEFCX0FDQ09VTlRgIHRvIHRoZSBgbWZjX2NhY2hlYCBLTUVNIGNhY2hlLiBUaGlzIHRlbGxzIHRoZSBrZXJuZWwmIzM5O3Mgc2xhYiBhbGxvY2F0b3IgdG8gYWNjb3VudCBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIGZyb20gdGhpcyBjYWNoZS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc2lnbmFsIG9mIG1lbW9yeSB0cmFja2luZy4gVGhlIHNhbWUgdGhpbmcgaXMgaGFwcGVuaW5nIHdpdGggdGhlIGBtZmM2X2NhY2hlYCBpbiBgaXA2bXIuY2AsIHdpdGggdGhlIGFkZGl0aW9uIG9mIGBTTEFCX0FDQ09VTlRgLiBTbyB0aGF0JiMzOTtzIGNvbnNpc3RlbnQuCgpUaGVuLCBvdmVyIGluIGBpcG1yX2Jhc2UuY2AsIGluc2lkZSB0aGUgYG1yX3RhYmxlX2FsbG9jYCBmdW5jdGlvbiwgdGhlIGBremFsbG9jX29iaigpYCBjYWxsIGlzIGdldHRpbmcgdGhlIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGZsYWcuIFRoaXMgaXMgdGhlIGV4cGxpY2l0IGtlcm5lbC1sZXZlbCBhbGxvY2F0aW9uIGZsYWcgdGhhdCYjMzk7cyBnb2luZyB0byB0cmFjayB0aGUgYWxsb2NhdGVkIG1lbW9yeSBmb3IgdGhpcyBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZS4gVGhpcyBpcyBhbm90aGVyIGNsZWFyIGluZGljYXRvciB0aGF0IHRoZXJlIGlzIGFuIGludGVudCB0byBrZWVwIHRyYWNrIG9mIHRoaXMgbWVtb3J5LgoKU28sIHRoZSBjb21tb24gdGhyZWFkIGlzIG1lbW9yeSBhY2NvdW50aW5nIGluIG11bHRpY2FzdCByb3V0aW5nLiBMb29rcyBsaWtlIHRoZSBpbnRlbnRpb24gaXMgZGVmaW5pdGVseSB0byB0cmFjayB0aGVzZSBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIHBvdGVudGlhbGx5IHNldCBsaW1pdHMsIG9yIGF0IGxlYXN0IGhhdmUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgbWVtb3J5IHVzYWdlIGluIG11bHRpY2FzdCByb3V0aW5nLiBOb3csIEkgd2FudCB0byBjb25maXJtIHdoaWNoIEtjb25maWcgb3B0aW9ucyBhcmUgaW52b2x2ZWQgc28gSSYjMzk7bGwgcmVhY2ggZm9yIGdyZXBwZXIgdG8gZ2V0IGEgZ29vZCBpZGVhIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gYW5kIHdoZXJlIHRoaXMgaXMgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9NUk9VVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MjA3PWNvbmZpZyBORVRfSVBHUkVfQlJPQURDQVNUXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0yMTUtXG5uZXQvaXB2NC9LY29uZmlnOjIxNjpjb25maWcgSVBfTVJPVVRFX0NPTU1PTlxubmV0L2lwdjQvS2NvbmZpZy0yMTctXHRib29sXG5uZXQvaXB2NC9LY29uZmlnOjIxODpcdGRlcGVuZHMgb24gSVBfTVJPVVRFIHx8IElQVjZfTVJPVVRFXG5uZXQvaXB2NC9LY29uZmlnLTIxOS1cbm5ldC9pcHY0L0tjb25maWc6MjIwOmNvbmZpZyBJUF9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjIxLVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbm5ldC9pcHY0L0tjb25maWctMjIyLVx0ZGVwZW5kcyBvbiBJUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L0tjb25maWc6MjIzOlx0c2VsZWN0IElQX01ST1VURV9DT01NT05cbm5ldC9pcHY0L0tjb25maWctMjI0LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWctMjMxLVxubmV0L2lwdjQvS2NvbmZpZzoyMzI6Y29uZmlnIElQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY0L0tjb25maWctMjMzLVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG5uZXQvaXB2NC9LY29uZmlnOjIzNDpcdGRlcGVuZHMgb24gSVBfTVJPVVRFIFx1MDAyNlx1MDAyNiBJUF9BRFZBTkNFRF9ST1VURVJcbm5ldC9pcHY0L0tjb25maWctMjM1LVx0c2VsZWN0IEZJQl9SVUxFU1xuLS1cbm5ldC9pcHY0L0tjb25maWc9MjQ2PWNvbmZpZyBJUF9QSU1TTV9WMVxubmV0L2lwdjQvS2NvbmZpZy0yNDctXHRib29sIFwmIzM0O0lQOiBQSU0tU00gdmVyc2lvbiAxIHN1cHBvcnRcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MjQ4Olx0ZGVwZW5kcyBvbiBJUF9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjQ5LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MjU5PWNvbmZpZyBJUF9QSU1TTV9WMlxubmV0L2lwdjQvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O0lQOiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MjYxOlx0ZGVwZW5kcyBvbiBJUF9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjYyLVx0aGVscFxuLS1cbm5ldC9pcHY0L01ha2VmaWxlPTIyPW9iai0kKENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMpICYjNDM7PSBmaWJfcnVsZXMub1xubmV0L2lwdjQvTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX0lQX01ST1VURSkgJiM0Mzs9IGlwbXIub1xubmV0L2lwdjQvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX0lQX01ST1VURV9DT01NT04pICYjNDM7PSBpcG1yX2Jhc2Uub1xubmV0L2lwdjQvTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX05FVF9JUElQKSAmIzQzOz0gaXBpcC5vXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTExNi0jaW5jbHVkZSBcdTAwM2NuZXQvc2VjdXJlX3NlcS5oXHUwMDNlXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTE3OiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21yb3V0ZS5oXHUwMDNlXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTE4ODI9c3RhdGljIGludCBfX2luaXQgaW5ldF9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTE5ODgtXHQgKi9cbm5ldC9pcHY0L2FmX2luZXQuYzoxOTg5OiNpZiBkZWZpbmVkKENPTkZJR19JUF9NUk9VVEUpXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTk5MC1cdGlmIChpcF9tcl9pbml0KCkpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTEwMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXJfaXB2NC5oXHUwMDNlXG5uZXQvaXB2NC9pZ21wLmM6MTAyOiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXG5uZXQvaXB2NC9pZ21wLmMtMTAzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21yb3V0ZS5oXHUwMDNlXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MzY3PWludCBpcF9tY19vdXRwdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMzgzLVx0XHRpZiAoc2tfbWNfbG9vcChzaylcbm5ldC9pcHY0L2lwX291dHB1dC5jOjM4NDojaWZkZWYgQ09ORklHX0lQX01ST1VURVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMzg1LVx0XHQvKiBTbWFsbCBvcHRpbWl6YXRpb246IGRvIG5vdCBsb29wYmFjayBub3QgbG9jYWwgZnJhbWVzLFxuLS1cbm5ldC9pcHY0L2lwbXIuYz0xMTg9c3RhdGljIHZvaWQgaXBtcl9leHBpcmVfcHJvY2VzcyhzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG5uZXQvaXB2NC9pcG1yLmMtMTE5LVxubmV0L2lwdjQvaXBtci5jOjEyMDojaWZkZWYgQ09ORklHX0lQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY0L2lwbXIuYy0xMjEtI2RlZmluZSBpcG1yX2Zvcl9lYWNoX3RhYmxlKG1ydCwgbmV0KVx0XHRcdFx0XHRcXFxuLS1cbm5ldC9pcHY0L2lwbXIuYz00MDg9c3RhdGljIHZvaWQgaXBtcl9uZXdfdGFibGVfc2V0KHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuLS1cbm5ldC9pcHY0L2lwbXIuYy00MTAte1xubmV0L2lwdjQvaXBtci5jOjQxMTojaWZkZWYgQ09ORklHX0lQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY0L2lwbXIuYy00MTItXHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZtcnQtXHUwMDNlbGlzdCwgXHUwMDI2bmV0LVx1MDAzZWlwdjQubXJfdGFibGVzKTtcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MTQxMD1pbnQgaXBfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTU3OC1cdGNhc2UgTVJUX1RBQkxFOlxubmV0L2lwdjQvaXBtci5jOjE1Nzk6XHRcdGlmICghSVNfQlVJTFRJTihDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUykpIHtcbm5ldC9pcHY0L2lwbXIuYy0xNTgwLVx0XHRcdHJldCA9IC1FTk9QUk9UT09QVDtcbi0tXG5uZXQvaXB2NC9yYXcuYz04ODk9c3RhdGljIGludCByYXdfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXG4tLVxubmV0L2lwdjQvcmF3LmMtOTA5LVx0ZGVmYXVsdDpcbm5ldC9pcHY0L3Jhdy5jOjkxMDojaWZkZWYgQ09ORklHX0lQX01ST1VURVxubmV0L2lwdjQvcmF3LmMtOTExLVx0XHRyZXR1cm4gaXBtcl9pb2N0bChzaywgY21kLCBrYXJnKTtcbi0tXG5uZXQvaXB2NC9yYXcuYz05MTk9c3RhdGljIGludCBjb21wYXRfcmF3X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxubmV0L2lwdjQvcmF3LmMtOTI1LVx0ZGVmYXVsdDpcbm5ldC9pcHY0L3Jhdy5jOjkyNjojaWZkZWYgQ09ORklHX0lQX01ST1VURVxubmV0L2lwdjQvcmF3LmMtOTI3LVx0XHRyZXR1cm4gaXBtcl9jb21wYXRfaW9jdGwoc2ssIGNtZCwgY29tcGF0X3B0cihhcmcpKTtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTE3NzE9aXBfcm91dGVfaW5wdXRfbWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0xODAxLVxubmV0L2lwdjQvcm91dGUuYzoxODAyOiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXG5uZXQvaXB2NC9yb3V0ZS5jLTE4MDMtXHRpZiAoIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGRhZGRyKSBcdTAwMjZcdTAwMjYgSU5fREVWX01GT1JXQVJEKGluX2RldikpXG4tLVxubmV0L2lwdjQvcm91dGUuYz0yNTIzPWlwX3JvdXRlX2lucHV0X3JjdShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkcixcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTI1NTktXHRcdGlmIChvdXJcbm5ldC9pcHY0L3JvdXRlLmM6MjU2MDojaWZkZWYgQ09ORklHX0lQX01ST1VURVxubmV0L2lwdjQvcm91dGUuYy0yNTYxLVx0XHRcdHx8XG4tLVxubmV0L2lwdjQvcm91dGUuYz0yNTkxPXN0YXRpYyBzdHJ1Y3QgcnRhYmxlICpfX21rcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0yNjk4LVx0XHR9XG5uZXQvaXB2NC9yb3V0ZS5jOjI2OTk6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVcbm5ldC9pcHY0L3JvdXRlLmMtMjcwMC1cdFx0aWYgKHR5cGUgPT0gUlROX01VTFRJQ0FTVCkge1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9Mjk3OD1zdGF0aWMgaW50IHJ0X2ZpbGxfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIF9fYmUzMiBkc3QsIF9fYmUzMiBzcmMsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0zMDgwLVx0XHRpZiAocnRfaXNfaW5wdXRfcm91dGUocnQpKSB7XG5uZXQvaXB2NC9yb3V0ZS5jOjMwODE6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVcbm5ldC9pcHY0L3JvdXRlLmMtMzA4Mi1cdFx0XHRpZiAoaXB2NF9pc19tdWx0aWNhc3QoZHN0KSBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTI1Nz1jb25maWcgSVBWNl9NUk9VVEVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI1OS1cdGRlcGVuZHMgb24gSVBWNlxubmV0L2lwdjYvS2NvbmZpZzoyNjA6XHRzZWxlY3QgSVBfTVJPVVRFX0NPTU1PTlxubmV0L2lwdjYvS2NvbmZpZy0yNjEtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAyMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGNoYW5nZXMuCgoqKkRpdmluZyBEZWVwIGludG8gdGhlIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgdGltZSB0byBnZXQgZ3JhbnVsYXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcywgYW5kIGEgc3VyZmFjZS1sZXZlbCBvdmVydmlldyBqdXN0IHdvbiYjMzk7dCBjdXQgaXQuIExldCYjMzk7cyBzdGFydCBieSBkaXNzZWN0aW5nIHRoZW0gdGhvcm91Z2hseS4gSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBteSBwcmVmZXJyZWQgdG9vbHMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUg4oCTIHByb2JhYmx5IGEgY29tYmluYXRpb24gb2YgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZXh0IG9mIHRob3NlIGZpbGVzIGluIHRoZWlyIGVudGlyZXR5LCBhbmQgYGdyZXBwZXJgIHRvIHF1aWNrbHkgcGlucG9pbnQgYW5kIGV4dHJhY3QgdGhlIHJlbGV2YW50IGNvZGUgc25pcHBldHMgdGhhdCBhcmUgaW1wYWN0ZWQgYnkgdGhpcyBwYXRjaC4gSSYjMzk7bGwgbmVlZCB0byBzZWUgcHJlY2lzZWx5ICpob3cqIHRoZSBzdXJyb3VuZGluZyBjb2RlIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIG1vZGlmaWVkIHBvcnRpb25zLiBObyBzaG9ydGN1dHMgaGVyZTsgZ290dGEgZ2V0IGEgc29saWQgZ3Jhc3Agb24gdGhlIGJlZm9yZS1hbmQtYWZ0ZXIgc2NlbmFyaW9zIHRvIHRydWx5IGFzc2VzcyB0aGUgaW1wYWN0IGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuZm9yZXNlZW4gY29uc2VxdWVuY2VzIG9yIHJlZ3Jlc3Npb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzcwOlx0XHR7LnByb3RvY29sID0gUlROTF9GQU1JTFlfSVBNUiwgLm1zZ3R5cGUgPSBSVE1fR0VUUk9VVEUsXG4zMzcxOlx0XHQgLmRvaXQgPSBpcG1yX3J0bV9nZXRyb3V0ZSwgLmR1bXBpdCA9IGlwbXJfcnRtX2R1bXByb3V0ZSxcbjMzNzI6XHRcdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRCB8IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcbjMzNzM6XHR9O1xuMzM3NDpcdFxuMzM3NTpcdGludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKVxuMzM3NjpcdHtcbjMzNzc6XHRcdGludCBlcnI7XG4zMzc4Olx0XG4zMzc5Olx0XHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsXG4zMzgwOlx0XHRcdFx0XHRTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDIHwgU0xBQl9BQ0NPVU5UKTtcbjMzODE6XHRcbjMzODI6XHRcdGVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2aXBtcl9uZXRfb3BzKTtcbjMzODM6XHRcdGlmIChlcnIpXG4zMzg0Olx0XHRcdGdvdG8gcmVnX3Blcm5ldF9mYWlsO1xuMzM4NTpcdFxuMzM4NjpcdFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNmlwX21yX25vdGlmaWVyKTtcbjMzODc6XHRcdGlmIChlcnIpXG4zMzg4Olx0XHRcdGdvdG8gcmVnX25vdGlmX2ZhaWw7XG4zMzg5Olx0I2lmZGVmIENPTkZJR19JUF9QSU1TTV9WMlxuMzM5MDpcdFx0aWYgKGluZXRfYWRkX3Byb3RvY29sKFx1MDAyNnBpbV9wcm90b2NvbCwgSVBQUk9UT19QSU0pIFx1MDAzYyAwKSB7XG4zMzkxOlx0XHRcdHByX2VycihcJiMzNDslczogY2FuJiMzOTt0IGFkZCBQSU0gcHJvdG9jb2xcXG5cJiMzNDssIF9fZnVuY19fKTtcbjMzOTI6XHRcdFx0ZXJyID0gLUVBR0FJTjtcbjMzOTM6XHRcdFx0Z290byBhZGRfcHJvdG9fZmFpbDtcbjMzOTQ6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Njk1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgSVAgTXVsdGljYXN0IFJvdXRpbmcgQ29kZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtdWx0aWNhc3Qgcm91dGluZywgYW5kIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGtlcm5lbCBjb2RlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgbmV0L2lwdjQvaXBtcl9iYXNlLmNgIGZpbGUuIFRoaXMgaXMgd2hlcmUgYSBsb3Qgb2YgdGhlIGNvcmUgbXVsdGljYXN0IHJvdXRpbmcgbG9naWMgbGl2ZXMgaW4gdGhlIElQdjQgc3RhY2suIEkgZmlndXJlLCBpZiB3ZSYjMzk7cmUgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yIG9yIHBvdGVudGlhbGx5IGRlYnVnIHNvbWV0aGluZywgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgZm91bmRhdGlvbiBpcyBrZXkuIEkmIzM5O20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDUyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBzZWN0aW9uIGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtcl9iYXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0dm9pZCBtcl90YWJsZV9mcmVlKHN0cnVjdCBtcl90YWJsZSAqbXJ0KVxuICA0MTpcdHtcbiAgNDI6XHRcdHF1ZXVlX3JjdV93b3JrKHN5c3RlbV9kZmxfd3EsIFx1MDAyNm1ydC1cdTAwM2V3b3JrKTtcbiAgNDM6XHR9XG4gIDQ0Olx0XG4gIDQ1Olx0c3RydWN0IG1yX3RhYmxlICpcbiAgNDY6XHRtcl90YWJsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCxcbiAgNDc6XHRcdCAgICAgICBzdHJ1Y3QgbXJfdGFibGVfb3BzICpvcHMsXG4gIDQ4Olx0XHQgICAgICAgdm9pZCAoKmV4cGlyZV9mdW5jKShzdHJ1Y3QgdGltZXJfbGlzdCAqdCksXG4gIDQ5Olx0XHQgICAgICAgdm9pZCAoKnRhYmxlX3NldCkoc3RydWN0IG1yX3RhYmxlICptcnQsXG4gIDUwOlx0XHRcdFx0XHQgc3RydWN0IG5ldCAqbmV0KSlcbiAgNTE6XHR7XG4gIDUyOlx0XHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcbiAgNTM6XHRcdGludCBlcnI7XG4gIDU0Olx0XG4gIDU1Olx0XHRtcnQgPSBremFsbG9jX29iaigqbXJ0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuICA1NjpcdFx0aWYgKCFtcnQpXG4gIDU3Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuICA1ODpcdFx0bXJ0LVx1MDAzZWlkID0gaWQ7XG4gIDU5Olx0XHR3cml0ZV9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQsIG5ldCk7XG4gIDYwOlx0XG4gIDYxOlx0XHRtcnQtXHUwMDNlb3BzID0gKm9wcztcbiAgNjI6XHRcdGVyciA9IHJobHRhYmxlX2luaXQoXHUwMDI2bXJ0LVx1MDAzZW1mY19oYXNoLCBtcnQtXHUwMDNlb3BzLnJodF9wYXJhbXMpO1xuICA2MzpcdFx0aWYgKGVycikge1xuICA2NDpcdFx0XHRrZnJlZShtcnQpO1xuICA2NTpcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuICA2NjpcdFx0fVxuICA2NzpcdFxuICA2ODpcdFx0SU5JVF9SQ1VfV09SSyhcdTAwMjZtcnQtXHUwMDNld29yaywgX19tcl9mcmVlX3RhYmxlKTtcbiAgNjk6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNm1ydC1cdTAwM2VtZmNfY2FjaGVfbGlzdCk7XG4gIDcwOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZtcnQtXHUwMDNlbWZjX3VucmVzX3F1ZXVlKTtcbiAgNzE6XHRcbiAgNzI6XHRcdHRpbWVyX3NldHVwKFx1MDAyNm1ydC1cdTAwM2VpcG1yX2V4cGlyZV90aW1lciwgZXhwaXJlX2Z1bmMsIDApO1xuICA3MzpcdFxuICA3NDpcdFx0bXJ0LVx1MDAzZW1yb3V0ZV9yZWdfdmlmX251bSA9IC0xO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MzcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBpcDZtci5jYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBrZXJuZWwmIzM5O3MgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBjb2RlLCBzcGVjaWZpY2FsbHkgYG5ldC9pcHY2L2lwNm1yLmNgLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZSBJJiMzOTttIHRyb3VibGVzaG9vdGluZywgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMTQyNy4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIG9mdGVuIGNlcnRhaW4gY29yZSBmdW5jdGlvbmFsaXRpZXMgb3IgcG90ZW50aWFsIHByb2JsZW0gYXJlYXMgdGVuZCB0byBiZSBsb2NhbGl6ZWQgYXJvdW5kIHNpbWlsYXIgc2VjdGlvbnMsIGJ5IGNvbnZlbnRpb24sIG9yIGZyb20gcGFzdCBleHBlcmllbmNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBzZWN0aW9uIG9mIHRoZSBjb2RlIHJldmVhbHMuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIGNsdWVzIHJlbGF0ZWQgdG8gW0ltcGxpZWQgUHJvYmxlbSBBcmVhIC0gaW5zZXJ0IGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBwcm9ibGVtXS4gSSYjMzk7bGwgYmUgZm9jdXNlZCBvbiBob3cgdGhlIGNvZGUgaGFuZGxlcyBbU3BlY2lmaWMgQXJlYSBvZiBpbnRlcmVzdCAtIGFsc28gaW1wbGllZCBmcm9tIG9yaWdpbmFsIHByb2JsZW1dLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55IG9idmlvdXMgbG9naWMgZXJyb3JzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNm1yLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MjA6XHRcdHsub3duZXIgPSBUSElTX01PRFVMRSwgLnByb3RvY29sID0gUlROTF9GQU1JTFlfSVA2TVIsXG4xNDIxOlx0XHQgLm1zZ3R5cGUgPSBSVE1fR0VUUk9VVEUsXG4xNDIyOlx0XHQgLmRvaXQgPSBpcDZtcl9ydG1fZ2V0cm91dGUsIC5kdW1waXQgPSBpcDZtcl9ydG1fZHVtcHJvdXRlLFxuMTQyMzpcdFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEIHwgUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxuMTQyNDpcdH07XG4xNDI1Olx0XG4xNDI2Olx0aW50IF9faW5pdCBpcDZfbXJfaW5pdCh2b2lkKVxuMTQyNzpcdHtcbjE0Mjg6XHRcdGludCBlcnI7XG4xNDI5Olx0XG4xNDMwOlx0XHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmM2X2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX0FDQ09VTlQpO1xuMTQzMTpcdFx0aWYgKCFtcnRfY2FjaGVwKVxuMTQzMjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE0MzM6XHRcbjE0MzQ6XHRcdGVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2aXA2bXJfbmV0X29wcyk7XG4xNDM1Olx0XHRpZiAoZXJyKVxuMTQzNjpcdFx0XHRnb3RvIHJlZ19wZXJuZXRfZmFpbDtcbjE0Mzc6XHRcbjE0Mzg6XHRcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZpcDZfbXJfbm90aWZpZXIpO1xuMTQzOTpcdFx0aWYgKGVycilcbjE0NDA6XHRcdFx0Z290byByZWdfbm90aWZfZmFpbDtcbjE0NDE6XHQjaWZkZWYgQ09ORklHX0lQVjZfUElNU01fVjJcbjE0NDI6XHRcdGlmIChpbmV0Nl9hZGRfcHJvdG9jb2woXHUwMDI2cGltNl9wcm90b2NvbCwgSVBQUk9UT19QSU0pIFx1MDAzYyAwKSB7XG4xNDQzOlx0XHRcdHByX2VycihcJiMzNDslczogY2FuJiMzOTt0IGFkZCBQSU0gcHJvdG9jb2xcXG5cJiMzNDssIF9fZnVuY19fKTtcbjE0NDQ6XHRcdFx0ZXJyID0gLUVBR0FJTjtcbjE0NDU6XHRcdFx0Z290byBhZGRfcHJvdG9fZmFpbDtcbjE0NDY6XHRcdH1cbjE0NDc6XHQjZW5kaWZcbjE0NDg6XHRcdGVyciA9IHJ0bmxfcmVnaXN0ZXJfbWFueShpcDZtcl9ydG5sX21zZ19oYW5kbGVycyk7XG4xNDQ5Olx0XHRpZiAoIWVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIyMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9dHJ1ZTogTXVsdGljYXN0IFJvdXRpbmcgTWVtb3J5IEFjY291bnRpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBhZGRlZCBgU0xBQl9BQ0NPVU5UYCB0byBgbXJ0X2NhY2hlcGAgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9mIGJvdGggSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZywgYW5kIGl0IGFkZGVkIGBHRlBfS0VSTkVMX0FDQ09VTlRgIHdoZW4gYWxsb2NhdGluZyBgbXJfdGFibGVgIG9iamVjdHMuIFRoZSBpbnRlbnQsIEkgc2VlLCBpcyB0byBpbnRlZ3JhdGUgbWVtY2cgKGNncm91cCBtZW1vcnkgYWNjb3VudGluZykgaW50byB0aGVzZSBtdWx0aWNhc3Qgcm91dGluZyBzdHJ1Y3R1cmVzLiBTaW5jZSBgbWZjX2NhY2hlYCwgYG1mYzZfY2FjaGVgLCBhbmQgYG1yX3RhYmxlYCBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgaW4gcmVzcG9uc2UgdG8gdXNlci1zcGFjZSByZXF1ZXN0cyBvciBmcm9tIG5ldHdvcmsgcm91dGluZyB0YWJsZXMgY3JlYXRlZCBieSB1c2VyLXNwYWNlIHByb2Nlc3NlcywgdGhpcyBhY2NvdW50aW5nIHByZXZlbnRzIHVzZXIgcHJvY2Vzc2VzIHdpdGhpbiBtZW1jZ3MgZnJvbSBleGNlZWRpbmcgdGhlaXIgbWVtb3J5IGxpbWl0cyB1bm5vdGljZWQgYW5kIGV4aGF1c3RpbmcgdGhlIHN5c3RlbS4KCk5vdywgaXMgdGhpcyBjb2RlIHJlYWNoYWJsZT8gQWJzb2x1dGVseSEgV2UmIzM5O3JlIHRhbGtpbmcgY29yZSBuZXR3b3JraW5nIOKAkyBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nLiBUaGlzIGFsaWducyB3aXRoIHRoZSAmIzM0O2NvcmUgc3Vic3lzdGVtcyYjMzQ7IHBvc2l0aXZlIGNyaXRlcmlvbiBvdXRsaW5lZDogJiMzNDtBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbi4uLiBjb3JlIG5ldHdvcmtpbmcuJiMzNDsgVGhlIGNoYW5nZXMgbW9kaWZ5IGhvdyB0aGUga2VybmVsICphY2NvdW50cyogZm9yIG1lbW9yeSB1c2VkIGJ5IGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgcG9zaXRpdmUuIFRoaXMgaXNuJiMzOTt0IHNvbWUgb2JzY3VyZSBkcml2ZXIgb3IgYW4gdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGguCgpHaXZlbiB0aGUgY3JpdGVyaWEgZm9yIGRldGVybWluaW5nIGBXb3J0aEZ1enppbmdgLCBJIGNhbiBjb25maWRlbnRseSBjb25jbHVkZSB0aGF0IHRoaXMgcGF0Y2ggd2FycmFudHMgZnV6emluZywgc28gYFdvcnRoRnV6emluZ2AgaXMgYHRydWVgLgoKSSBzaG91bGQgcHJvYmFibHkgYWxzbyB2ZXJpZnkgdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWd1cmF0aW9ucyBieSBjaGVja2luZyBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9LY29uZmlnYCB0byBjb25maXJtIGBJUF9NUk9VVEVgIGFuZCBgSVBWNl9NUk9VVEVgIGFyZSBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNl9NUk9VVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz0yNDM9Y29uZmlnIElQVjZfU1VCVFJFRVNcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxODMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGluIGBuZXQvaXB2Ni9LY29uZmlnYDoKCioqRGl2aW5nIGludG8gdGhlIElQdjYgS2NvbmZpZyBmb3IgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gdGhhdCBJUHY2IEtjb25maWcgZmlsZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdGV4dCBtZW50aW9uZWQgdGhvc2UgbGluZXMsIDI1NS0yNzUsIHNvIEkmIzM5O2xsIGp1bXAgcmlnaHQgdGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGV5IGxpa2VseSBkZWFsaW5nIHdpdGggaW4gdGhhdCBzcGVjaWZpYyByYW5nZT8gVGhpcyB1c3VhbGx5IGNvdmVycyBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGZlYXR1cmVzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQsIHBvc3NpYmx5IGRlcGVuZGVudCBvbiBkZXBlbmRlbmNpZXMgd2l0aCBvdGhlciBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJwbGF5IG9mIHRob3NlIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBob3cgdGhlc2Ugc2V0dGluZ3MgYWZmZWN0IHRoZSBvdmVyYWxsIElQdjYgc3RhY2sgYmVoYXZpb3IsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc3BlY2lmaWMgSVB2NiBmZWF0dXJlcyBsaWtlIGV4dGVuc2lvbiBoZWFkZXJzLCBmcmFnbWVudGF0aW9uLCBvciByb3V0aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhlc2Ugb3B0aW9ucyBhbmQgaG93IHRoZXkgdGllIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBJUHY2IG5ldHdvcmsgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIGNvbmZpZ3VyYXRpb25zIHRob3NlIGxpbmVzIGhvbGQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjU1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjU2Olx0XG4gMjU3Olx0Y29uZmlnIElQVjZfTVJPVVRFXG4gMjU4Olx0XHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4gMjU5Olx0XHRkZXBlbmRzIG9uIElQVjZcbiAyNjA6XHRcdHNlbGVjdCBJUF9NUk9VVEVfQ09NTU9OXG4gMjYxOlx0XHRoZWxwXG4gMjYyOlx0XHQgIFN1cHBvcnQgZm9yIElQdjYgbXVsdGljYXN0IGZvcndhcmRpbmcuXG4gMjYzOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjY0Olx0XG4gMjY1Olx0Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xuIDI2NjpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcJiMzNDtcbiAyNjc6XHRcdGRlcGVuZHMgb24gSVBWNl9NUk9VVEVcbiAyNjg6XHRcdHNlbGVjdCBGSUJfUlVMRVNcbiAyNjk6XHRcdGhlbHBcbiAyNzA6XHRcdCAgTm9ybWFsbHksIGEgbXVsdGljYXN0IHJvdXRlciBydW5zIGEgdXNlcnNwYWNlIGRhZW1vbiBhbmQgZGVjaWRlc1xuIDI3MTpcdFx0ICB3aGF0IHRvIGRvIHdpdGggYSBtdWx0aWNhc3QgcGFja2V0IGJhc2VkIG9uIHRoZSBzb3VyY2UgYW5kXG4gMjcyOlx0XHQgIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gSWYgeW91IHNheSBZIGhlcmUsIHRoZSBtdWx0aWNhc3Qgcm91dGVyXG4gMjczOlx0XHQgIHdpbGwgYWxzbyBiZSBhYmxlIHRvIHRha2UgaW50ZXJmYWNlcyBhbmQgcGFja2V0IG1hcmtzIGludG9cbiAyNzQ6XHRcdCAgYWNjb3VudCBhbmQgcnVuIG11bHRpcGxlIGluc3RhbmNlcyBvZiB1c2Vyc3BhY2UgZGFlbW9uc1xuIDI3NTpcdFx0ICBzaW11bHRhbmVvdXNseSwgZWFjaCBvbmUgaGFuZGxpbmcgYSBzaW5nbGUgdGFibGUuXG4gMjc2Olx0XG4gMjc3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjc4Olx0XG4gMjc5Olx0Y29uZmlnIElQVjZfUElNU01fVjJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgxOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gSVB2NCBDb25maWd1cmF0aW9uKioKCk9rYXksIEkgbmVlZCB0byBnZXQgaW50byB0aGUgaGVhcnQgb2YgdGhlIElQdjQgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgbmV0L2lwdjQvS2NvbmZpZ2AuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIHRoZSBrZXkgcGFyYW1ldGVycyBhbmQgZGVwZW5kZW5jaWVzLiBJJiMzOTttIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgbGluZXMgMjE1IHRvIDI0MCwgYXMgdGhlIGNvbnRleHQgb2YgbXkgaW52ZXN0aWdhdGlvbiBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZSBpbmZvcm1hdGlvbiBJIHJlcXVpcmUgd2lsbCBiZSBjb250YWluZWQgd2l0aGluIHRoaXMgYmxvY2suIEl0JiMzOTtzIGxpa2VseSB0aGF0IGNyaXRpY2FsIGZsYWdzLCBidWlsZCBvcHRpb25zLCBvciBkZWZhdWx0IHNldHRpbmdzIHJlbGF0ZWQgdG8gdGhlIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSB3b3JraW5nIHdpdGggYXJlIGRlZmluZWQgdGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxNTpcdFxuIDIxNjpcdGNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXG4gMjE3Olx0XHRib29sXG4gMjE4Olx0XHRkZXBlbmRzIG9uIElQX01ST1VURSB8fCBJUFY2X01ST1VURVxuIDIxOTpcdFxuIDIyMDpcdGNvbmZpZyBJUF9NUk9VVEVcbiAyMjE6XHRcdGJvb2wgXCYjMzQ7SVA6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4gMjIyOlx0XHRkZXBlbmRzIG9uIElQX01VTFRJQ0FTVFxuIDIyMzpcdFx0c2VsZWN0IElQX01ST1VURV9DT01NT05cbiAyMjQ6XHRcdGhlbHBcbiAyMjU6XHRcdCAgVGhpcyBpcyB1c2VkIGlmIHlvdSB3YW50IHlvdXIgbWFjaGluZSB0byBhY3QgYXMgYSByb3V0ZXIgZm9yIElQXG4gMjI2Olx0XHQgIHBhY2tldHMgdGhhdCBoYXZlIHNldmVyYWwgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBJdCBpcyBuZWVkZWQgb24gdGhlXG4gMjI3Olx0XHQgIE1CT05FLCBhIGhpZ2ggYmFuZHdpZHRoIG5ldHdvcmsgb24gdG9wIG9mIHRoZSBJbnRlcm5ldCB3aGljaCBjYXJyaWVzXG4gMjI4Olx0XHQgIGF1ZGlvIGFuZCB2aWRlbyBicm9hZGNhc3RzLiBJbiBvcmRlciB0byBkbyB0aGF0LCB5b3Ugd291bGQgbW9zdFxuIDIyOTpcdFx0ICBsaWtlbHkgcnVuIHRoZSBwcm9ncmFtIG1yb3V0ZWQuIElmIHlvdSBoYXZlbiYjMzk7dCBoZWFyZCBhYm91dCBpdCwgeW91XG4gMjMwOlx0XHQgIGRvbiYjMzk7dCBuZWVkIGl0LlxuIDIzMTpcdFxuIDIzMjpcdGNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG4gMjMzOlx0XHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcJiMzNDtcbiAyMzQ6XHRcdGRlcGVuZHMgb24gSVBfTVJPVVRFIFx1MDAyNlx1MDAyNiBJUF9BRFZBTkNFRF9ST1VURVJcbiAyMzU6XHRcdHNlbGVjdCBGSUJfUlVMRVNcbiAyMzY6XHRcdGhlbHBcbiAyMzc6XHRcdCAgTm9ybWFsbHksIGEgbXVsdGljYXN0IHJvdXRlciBydW5zIGEgdXNlcnNwYWNlIGRhZW1vbiBhbmQgZGVjaWRlc1xuIDIzODpcdFx0ICB3aGF0IHRvIGRvIHdpdGggYSBtdWx0aWNhc3QgcGFja2V0IGJhc2VkIG9uIHRoZSBzb3VyY2UgYW5kXG4gMjM5Olx0XHQgIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gSWYgeW91IHNheSBZIGhlcmUsIHRoZSBtdWx0aWNhc3Qgcm91dGVyXG4gMjQwOlx0XHQgIHdpbGwgYWxzbyBiZSBhYmxlIHRvIHRha2UgaW50ZXJmYWNlcyBhbmQgcGFja2V0IG1hcmtzIGludG9cbiAyNDE6XHRcdCAgYWNjb3VudCBhbmQgcnVuIG11bHRpcGxlIGluc3RhbmNlcyBvZiB1c2Vyc3BhY2UgZGFlbW9uc1xuIDI0MjpcdFx0ICBzaW11bHRhbmVvdXNseSwgZWFjaCBvbmUgaGFuZGxpbmcgYSBzaW5nbGUgdGFibGUuXG4gMjQzOlx0XG4gMjQ0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDk0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb3JlIFJvdXRpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBzb21ldGhpbmcgcmVsYXRlZCB0byBtdWx0aWNhc3Qgcm91dGluZywgbGlrZWx5IGEga2VybmVsIG1vZHVsZS4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBtZW1jZy9TTEFCIGFjY291bnRpbmcsIGp1c3QgYSBzdGFuZGFyZCBjaGVjayB0byBzZWUgaWYgdGhhdCYjMzk7cyBpbmZsdWVuY2luZyBhbnl0aGluZy4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwLCBidXQgaXQmIzM5O3MgcHJvYmFibHkgbm90IHRoZSBjb3JlIGlzc3VlLiBOb3csIEkmIzM5O20gem9uaW5nIGluIG9uIHRoZSBhY3R1YWwgbWVhdCBvZiB0aGUgY29uZmlndXJhdGlvbjogYElQX01ST1VURWAgYW5kIGBJUFY2X01ST1VURWAuIFRob3NlIGFyZSAqZGVmaW5pdGVseSogdGhlIHJlbGV2YW50IGZsYWdzIGZvciBidWlsZGluZyB0aGUgYGlwbXIuY2AsIGBpcG1yX2Jhc2UuY2AsIGFuZCBgaXA2bXIuY2AgbW9kdWxlcy4gVGhhdCB0ZWxscyBtZSB0aGVzZSBhcmUgY2VudHJhbCB0byB0aGUgbXVsdGljYXN0IHJvdXRpbmcgZnVuY3Rpb25hbGl0eS4gVGltZSB0byBnbyByaWdodCB0byB0aGUgc291cmNlIGFuZCBleGFtaW5lIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgIGFuZCBgbmV0L2lwdjYvTWFrZWZpbGVgIGJ1aWxkIGZpbGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhvc2UgZmxhZ3MgYXJlIHVzZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZS4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBpbmZlciB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgYmVoYXZpb3IsIG9yIGF0IGxlYXN0IGhhdmUgYSBmcmFtZXdvcmsgdG8gaW52ZXN0aWdhdGUgaXQgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2bXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDg5NSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubmV0L2lwdjYvTWFrZWZpbGU9MTU9aXB2Ni0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzeXNjdGxfbmV0X2lwdjYub1xubmV0L2lwdjYvTWFrZWZpbGU6MTY6aXB2Ni0kKENPTkZJR19JUFY2X01ST1VURSkgJiM0Mzs9IGlwNm1yLm9cbm5ldC9pcHY2L01ha2VmaWxlLTE3LVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNTItXG5uZXQvaXB2Ni9pcDZtci5jOjUzOnN0cnVjdCBpcDZtcl9ydWxlIHtcbm5ldC9pcHY2L2lwNm1yLmMtNTQtXHRzdHJ1Y3QgZmliX3J1bGVcdFx0Y29tbW9uO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNTYtXG5uZXQvaXB2Ni9pcDZtci5jOjU3OnN0cnVjdCBpcDZtcl9yZXN1bHQge1xubmV0L2lwdjYvaXA2bXIuYy01OC1cdHN0cnVjdCBtcl90YWJsZVx0Km1ydDtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTg1PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbXJ0X2NhY2hlcCBfX3JlYWRfbW9zdGx5O1xubmV0L2lwdjYvaXA2bXIuYy04Ni1cbm5ldC9pcHY2L2lwNm1yLmM6ODc6c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfbmV3X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKTtcbm5ldC9pcHY2L2lwNm1yLmM6ODg6c3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbm5ldC9pcHY2L2lwNm1yLmMtODktXHRcdFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfa2lsbF9saXN0KTtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTkxPXN0YXRpYyB2b2lkIGlwNl9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjYvaXA2bXIuYy05My1cdFx0XHQgICBzdHJ1Y3QgbWZjNl9jYWNoZSAqY2FjaGUpO1xubmV0L2lwdjYvaXA2bXIuYzo5NDpzdGF0aWMgaW50IGlwNm1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IHNrX2J1ZmYgKnBrdCxcbm5ldC9pcHY2L2lwNm1yLmMtOTUtXHRcdFx0ICAgICAgbWlmaV90IG1pZmksIGludCBhc3NlcnQpO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmM9OTg9c3RhdGljIHZvaWQgbXJ0Nm1zZ19uZXRsaW5rX2V2ZW50KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqcGt0KTtcbm5ldC9pcHY2L2lwNm1yLmM6OTk6c3RhdGljIGludCBpcDZtcl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvaXB2Ni9pcDZtci5jLTEwMC1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xubmV0L2lwdjYvaXA2bXIuYzoxMDE6c3RhdGljIGludCBpcDZtcl9ydG1fZHVtcHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9pcDZtci5jLTEwMi1cdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTEwNT1zdGF0aWMgdm9pZCBpcG1yX2V4cGlyZV9wcm9jZXNzKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTEwNy0jaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvaXA2bXIuYzoxMDg6I2RlZmluZSBpcDZtcl9mb3JfZWFjaF90YWJsZShtcnQsIG5ldCkgXFxcbm5ldC9pcHY2L2lwNm1yLmMtMTA5LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobXJ0LCBcdTAwMjZuZXQtXHUwMDNlaXB2Ni5tcjZfdGFibGVzLCBsaXN0LCBcXFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTEyLVxubmV0L2lwdjYvaXA2bXIuYzoxMTM6c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfbXJfdGFibGVfaXRlcihzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvaXB2Ni9pcDZtci5jLTExNC1cdFx0XHRcdFx0ICAgIHN0cnVjdCBtcl90YWJsZSAqbXJ0KVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTI5LVxubmV0L2lwdjYvaXA2bXIuYzoxMzA6c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqX19pcDZtcl9nZXRfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXG5uZXQvaXB2Ni9pcDZtci5jLTEzMS17XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMzMtXG5uZXQvaXB2Ni9pcDZtci5jOjEzNDpcdGlwNm1yX2Zvcl9lYWNoX3RhYmxlKG1ydCwgbmV0KSB7XG5uZXQvaXB2Ni9pcDZtci5jLTEzNS1cdFx0aWYgKG1ydC1cdTAwM2VpZCA9PSBpZClcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTE0MC1cbm5ldC9pcHY2L2lwNm1yLmM6MTQxOnN0YXRpYyBpbnQgaXA2bXJfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTYgKmZscDYsXG5uZXQvaXB2Ni9pcDZtci5jLTE0Mi1cdFx0XHQgICAgc3RydWN0IG1yX3RhYmxlICoqbXJ0KVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTQ0LVx0aW50IGVycjtcbm5ldC9pcHY2L2lwNm1yLmM6MTQ1Olx0c3RydWN0IGlwNm1yX3Jlc3VsdCByZXM7XG5uZXQvaXB2Ni9pcDZtci5jLTE0Ni1cdHN0cnVjdCBmaWJfbG9va3VwX2FyZyBhcmcgPSB7XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xNjEtXG5uZXQvaXB2Ni9pcDZtci5jOjE2MjpzdGF0aWMgaW50IGlwNm1yX3J1bGVfYWN0aW9uKHN0cnVjdCBmaWJfcnVsZSAqcnVsZSwgc3RydWN0IGZsb3dpICpmbHAsXG5uZXQvaXB2Ni9pcDZtci5jLTE2My1cdFx0XHQgICAgIGludCBmbGFncywgc3RydWN0IGZpYl9sb29rdXBfYXJnICphcmcpXG5uZXQvaXB2Ni9pcDZtci5jLTE2NC17XG5uZXQvaXB2Ni9pcDZtci5jOjE2NTpcdHN0cnVjdCBpcDZtcl9yZXN1bHQgKnJlcyA9IGFyZy1cdTAwM2VyZXN1bHQ7XG5uZXQvaXB2Ni9pcDZtci5jLTE2Ni1cdHN0cnVjdCBtcl90YWJsZSAqbXJ0O1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTgxLVxubmV0L2lwdjYvaXA2bXIuYzoxODI6XHRtcnQgPSBfX2lwNm1yX2dldF90YWJsZShydWxlLVx1MDAzZWZyX25ldCwgYXJnLVx1MDAzZXRhYmxlKTtcbm5ldC9pcHY2L2lwNm1yLmMtMTgzLVx0aWYgKCFtcnQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xODgtXG5uZXQvaXB2Ni9pcDZtci5jOjE4OTpzdGF0aWMgaW50IGlwNm1yX3J1bGVfbWF0Y2goc3RydWN0IGZpYl9ydWxlICpydWxlLCBzdHJ1Y3QgZmxvd2kgKmZscCwgaW50IGZsYWdzKVxubmV0L2lwdjYvaXA2bXIuYy0xOTAte1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTkzLVxubmV0L2lwdjYvaXA2bXIuYzoxOTQ6c3RhdGljIGludCBpcDZtcl9ydWxlX2NvbmZpZ3VyZShzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9pcDZtci5jLTE5NS1cdFx0XHRcdHN0cnVjdCBmaWJfcnVsZV9oZHIgKmZyaCwgc3RydWN0IG5sYXR0ciAqKnRiLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMjAwLVxubmV0L2lwdjYvaXA2bXIuYzoyMDE6c3RhdGljIGludCBpcDZtcl9ydWxlX2NvbXBhcmUoc3RydWN0IGZpYl9ydWxlICpydWxlLCBzdHJ1Y3QgZmliX3J1bGVfaGRyICpmcmgsXG5uZXQvaXB2Ni9pcDZtci5jLTIwMi1cdFx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICoqdGIpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0yMDYtXG5uZXQvaXB2Ni9pcDZtci5jOjIwNzpzdGF0aWMgaW50IGlwNm1yX3J1bGVfZmlsbChzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9pcDZtci5jLTIwOC1cdFx0XHQgICBzdHJ1Y3QgZmliX3J1bGVfaGRyICpmcmgpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0yMTUtXG5uZXQvaXB2Ni9pcDZtci5jOjIxNjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9ydWxlc19vcHMgX19uZXRfaW5pdGNvbnN0IGlwNm1yX3J1bGVzX29wc190ZW1wbGF0ZSA9IHtcbm5ldC9pcHY2L2lwNm1yLmMtMjE3LVx0LmZhbWlseVx0XHQ9IFJUTkxfRkFNSUxZX0lQNk1SLFxubmV0L2lwdjYvaXA2bXIuYzoyMTg6XHQucnVsZV9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgaXA2bXJfcnVsZSksXG5uZXQvaXB2Ni9pcDZtci5jLTIxOS1cdC5hZGRyX3NpemVcdD0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkciksXG5uZXQvaXB2Ni9pcDZtci5jOjIyMDpcdC5hY3Rpb25cdFx0PSBpcDZtcl9ydWxlX2FjdGlvbixcbm5ldC9pcHY2L2lwNm1yLmM6MjIxOlx0Lm1hdGNoXHRcdD0gaXA2bXJfcnVsZV9tYXRjaCxcbm5ldC9pcHY2L2lwNm1yLmM6MjIyOlx0LmNvbmZpZ3VyZVx0PSBpcDZtcl9ydWxlX2NvbmZpZ3VyZSxcbm5ldC9pcHY2L2lwNm1yLmM6MjIzOlx0LmNvbXBhcmVcdD0gaXA2bXJfcnVsZV9jb21wYXJlLFxubmV0L2lwdjYvaXA2bXIuYzoyMjQ6XHQuZmlsbFx0XHQ9IGlwNm1yX3J1bGVfZmlsbCxcbm5ldC9pcHY2L2lwNm1yLmMtMjI1LVx0Lm5sZ3JvdXBcdD0gUlROTEdSUF9JUFY2X1JVTEUsXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0yMjgtXG5uZXQvaXB2Ni9pcDZtci5jOjIyOTpzdGF0aWMgaW50IF9fbmV0X2luaXQgaXA2bXJfcnVsZXNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvaXB2Ni9pcDZtci5jLTIzMC17XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0yMzUtXG5uZXQvaXB2Ni9pcDZtci5jOjIzNjpcdG9wcyA9IGZpYl9ydWxlc19yZWdpc3RlcihcdTAwMjZpcDZtcl9ydWxlc19vcHNfdGVtcGxhdGUsIG5ldCk7XG5uZXQvaXB2Ni9pcDZtci5jLTIzNy1cdGlmIChJU19FUlIob3BzKSlcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTI0MS1cbm5ldC9pcHY2L2lwNm1yLmM6MjQyOlx0bXJ0ID0gaXA2bXJfbmV3X3RhYmxlKG5ldCwgUlQ2X1RBQkxFX0RGTFQpO1xubmV0L2lwdjYvaXA2bXIuYy0yNDMtXHRpZiAoSVNfRVJSKG1ydCkpIHtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTI1NS1lcnIyOlxubmV0L2lwdjYvaXA2bXIuYzoyNTY6XHRpcDZtcl9mcmVlX3RhYmxlKG1ydCwgXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG5uZXQvaXB2Ni9pcDZtci5jLTI1Ny1lcnIxOlxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMjYxLVxubmV0L2lwdjYvaXA2bXIuYzoyNjI6c3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZtcl9ydWxlc19leGl0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9pcHY2L2lwNm1yLmMtMjYzLXtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTI2Ni1cbm5ldC9pcHY2L2lwNm1yLmM6MjY3OnN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2bXJfcnVsZXNfZXhpdF9ydG5sKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9pcHY2L2lwNm1yLmMtMjY4LVx0XHRcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRldl9raWxsX2xpc3QpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0yNzMtXHRcdGxpc3RfZGVsX3JjdShcdTAwMjZtcnQtXHUwMDNlbGlzdCk7XG5uZXQvaXB2Ni9pcDZtci5jOjI3NDpcdFx0aXA2bXJfZnJlZV90YWJsZShtcnQsIGRldl9raWxsX2xpc3QpO1xubmV0L2lwdjYvaXA2bXIuYy0yNzUtXHR9XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0yNzctXG5uZXQvaXB2Ni9pcDZtci5jOjI3ODpzdGF0aWMgaW50IGlwNm1yX3J1bGVzX2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxubmV0L2lwdjYvaXA2bXIuYy0yNzktXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTI4My1cbm5ldC9pcHY2L2lwNm1yLmM6Mjg0OnN0YXRpYyB1bnNpZ25lZCBpbnQgaXA2bXJfcnVsZXNfc2VxX3JlYWQoY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxubmV0L2lwdjYvaXA2bXIuYy0yODUte1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMjg4LVxubmV0L2lwdjYvaXA2bXIuYzoyODk6Ym9vbCBpcDZtcl9ydWxlX2RlZmF1bHQoY29uc3Qgc3RydWN0IGZpYl9ydWxlICpydWxlKVxubmV0L2lwdjYvaXA2bXIuYy0yOTAte1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMjkzLX1cbm5ldC9pcHY2L2lwNm1yLmM6Mjk0OkVYUE9SVF9TWU1CT0woaXA2bXJfcnVsZV9kZWZhdWx0KTtcbm5ldC9pcHY2L2lwNm1yLmMtMjk1LSNlbHNlXG5uZXQvaXB2Ni9pcDZtci5jOjI5NjpzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9tcl90YWJsZV9pdGVyKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9pcHY2L2lwNm1yLmMtMjk3LVx0XHRcdFx0XHQgICAgc3RydWN0IG1yX3RhYmxlICptcnQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0zMDMtXG5uZXQvaXB2Ni9pcDZtci5jOjMwNDpzdGF0aWMgc3RydWN0IG1yX3RhYmxlICpfX2lwNm1yX2dldF90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZClcbm5ldC9pcHY2L2lwNm1yLmMtMzA1LXtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTMxMC1cbm5ldC9pcHY2L2lwNm1yLmM6MzExOiNkZWZpbmUgaXA2bXJfZm9yX2VhY2hfdGFibGUobXJ0LCBuZXQpXHRcdFx0XHRcXFxubmV0L2lwdjYvaXA2bXIuYzozMTI6XHRmb3IgKG1ydCA9IF9faXA2bXJfZ2V0X3RhYmxlKG5ldCwgMCk7IG1ydDsgbXJ0ID0gTlVMTClcbm5ldC9pcHY2L2lwNm1yLmMtMzEzLVxubmV0L2lwdjYvaXA2bXIuYzozMTQ6c3RhdGljIGludCBpcDZtcl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNiAqZmxwNixcbm5ldC9pcHY2L2lwNm1yLmMtMzE1LVx0XHRcdCAgICBzdHJ1Y3QgbXJfdGFibGUgKiptcnQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0zMjItXG5uZXQvaXB2Ni9pcDZtci5jOjMyMzpzdGF0aWMgaW50IF9fbmV0X2luaXQgaXA2bXJfcnVsZXNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvaXB2Ni9pcDZtci5jLTMyNC17XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0zMjYtXG5uZXQvaXB2Ni9pcDZtci5jOjMyNzpcdG1ydCA9IGlwNm1yX25ld190YWJsZShuZXQsIFJUNl9UQUJMRV9ERkxUKTtcbm5ldC9pcHY2L2lwNm1yLmMtMzI4LVx0aWYgKElTX0VSUihtcnQpKVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMzM0LVxubmV0L2lwdjYvaXA2bXIuYzozMzU6c3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZtcl9ydWxlc19leGl0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9pcHY2L2lwNm1yLmMtMzM2LXtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTMzOC1cbm5ldC9pcHY2L2lwNm1yLmM6MzM5OnN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2bXJfcnVsZXNfZXhpdF9ydG5sKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9pcHY2L2lwNm1yLmMtMzQwLVx0XHRcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRldl9raWxsX2xpc3QpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0zNDQtXHRSQ1VfSU5JVF9QT0lOVEVSKG5ldC1cdTAwM2VpcHY2Lm1ydDYsIE5VTEwpO1xubmV0L2lwdjYvaXA2bXIuYzozNDU6XHRpcDZtcl9mcmVlX3RhYmxlKG1ydCwgZGV2X2tpbGxfbGlzdCk7XG5uZXQvaXB2Ni9pcDZtci5jLTM0Ni19XG5uZXQvaXB2Ni9pcDZtci5jLTM0Ny1cbm5ldC9pcHY2L2lwNm1yLmM6MzQ4OnN0YXRpYyBpbnQgaXA2bXJfcnVsZXNfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG5uZXQvaXB2Ni9pcDZtci5jLTM0OS1cdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMzUzLVxubmV0L2lwdjYvaXA2bXIuYzozNTQ6c3RhdGljIHVuc2lnbmVkIGludCBpcDZtcl9ydWxlc19zZXFfcmVhZChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvaXB2Ni9pcDZtci5jLTM1NS17XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0zNTktXG5uZXQvaXB2Ni9pcDZtci5jOjM2MDpzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9nZXRfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXG5uZXQvaXB2Ni9pcDZtci5jLTM2MS17XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0zNjQtXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2Ni9pcDZtci5jOjM2NTpcdG1ydCA9IF9faXA2bXJfZ2V0X3RhYmxlKG5ldCwgaWQpO1xubmV0L2lwdjYvaXA2bXIuYy0zNjYtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTM3MC1cbm5ldC9pcHY2L2lwNm1yLmM6MzcxOnN0YXRpYyBpbnQgaXA2bXJfaGFzaF9jbXAoc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKmFyZyxcbm5ldC9pcHY2L2lwNm1yLmMtMzcyLVx0XHRcdCAgY29uc3Qgdm9pZCAqcHRyKVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMzgwLVxubmV0L2lwdjYvaXA2bXIuYzozODE6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBpcDZtcl9yaHRfcGFyYW1zID0ge1xubmV0L2lwdjYvaXA2bXIuYy0zODItXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbXJfbWZjLCBtbm9kZSksXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0zODUtXHQubmVsZW1faGludCA9IDMsXG5uZXQvaXB2Ni9pcDZtci5jOjM4NjpcdC5vYmpfY21wZm4gPSBpcDZtcl9oYXNoX2NtcCxcbm5ldC9pcHY2L2lwNm1yLmMtMzg3LVx0LmF1dG9tYXRpY19zaHJpbmtpbmcgPSB0cnVlLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMzg5LVxubmV0L2lwdjYvaXA2bXIuYzozOTA6c3RhdGljIHZvaWQgaXA2bXJfbmV3X3RhYmxlX3NldChzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbm5ldC9pcHY2L2lwNm1yLmMtMzkxLVx0XHRcdFx0c3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMzk3LVxubmV0L2lwdjYvaXA2bXIuYzozOTg6c3RhdGljIHN0cnVjdCBtZmM2X2NhY2hlX2NtcF9hcmcgaXA2bXJfbXJfdGFibGVfb3BzX2NtcGFyZ19hbnkgPSB7XG5uZXQvaXB2Ni9pcDZtci5jLTM5OS1cdC5tZjZjX29yaWdpbiA9IElONkFERFJfQU5ZX0lOSVQsXG4tLVxubmV0L2lwdjYvaXA2bXIuYy00MDItXG5uZXQvaXB2Ni9pcDZtci5jOjQwMzpzdGF0aWMgc3RydWN0IG1yX3RhYmxlX29wcyBpcDZtcl9tcl90YWJsZV9vcHMgPSB7XG5uZXQvaXB2Ni9pcDZtci5jOjQwNDpcdC5yaHRfcGFyYW1zID0gXHUwMDI2aXA2bXJfcmh0X3BhcmFtcyxcbm5ldC9pcHY2L2lwNm1yLmM6NDA1Olx0LmNtcGFyZ19hbnkgPSBcdTAwMjZpcDZtcl9tcl90YWJsZV9vcHNfY21wYXJnX2FueSxcbm5ldC9pcHY2L2lwNm1yLmMtNDA2LX07XG5uZXQvaXB2Ni9pcDZtci5jLTQwNy1cbm5ldC9pcHY2L2lwNm1yLmM6NDA4OnN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwNm1yX25ld190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZClcbm5ldC9pcHY2L2lwNm1yLmMtNDA5LXtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTQxMS1cbm5ldC9pcHY2L2lwNm1yLmM6NDEyOlx0bXJ0ID0gX19pcDZtcl9nZXRfdGFibGUobmV0LCBpZCk7XG5uZXQvaXB2Ni9pcDZtci5jLTQxMy1cdGlmIChtcnQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy00MTUtXG5uZXQvaXB2Ni9pcDZtci5jOjQxNjpcdHJldHVybiBtcl90YWJsZV9hbGxvYyhuZXQsIGlkLCBcdTAwMjZpcDZtcl9tcl90YWJsZV9vcHMsXG5uZXQvaXB2Ni9pcDZtci5jOjQxNzpcdFx0XHQgICAgICBpcG1yX2V4cGlyZV9wcm9jZXNzLCBpcDZtcl9uZXdfdGFibGVfc2V0KTtcbm5ldC9pcHY2L2lwNm1yLmMtNDE4LX1cbm5ldC9pcHY2L2lwNm1yLmMtNDE5LVxubmV0L2lwdjYvaXA2bXIuYzo0MjA6c3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbm5ldC9pcHY2L2lwNm1yLmMtNDIxLVx0XHRcdCAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGV2X2tpbGxfbGlzdClcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTQyMy1cdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZtcnQtXHUwMDNlbmV0KTtcbm5ldC9pcHY2L2lwNm1yLmM6NDI0Olx0TElTVF9IRUFEKGlwNm1yX2Rldl9raWxsX2xpc3QpO1xubmV0L2lwdjYvaXA2bXIuYy00MjUtXG4tLVxubmV0L2lwdjYvaXA2bXIuYy00MzAtXHRcdFx0ICAgIE1SVDZfRkxVU0hfTUZDIHwgTVJUNl9GTFVTSF9NRkNfU1RBVElDLFxubmV0L2lwdjYvaXA2bXIuYzo0MzE6XHRcdFx0ICAgIFx1MDAyNmlwNm1yX2Rldl9raWxsX2xpc3QpO1xubmV0L2lwdjYvaXA2bXIuYy00MzItXG4tLVxubmV0L2lwdjYvaXA2bXIuYy00MzQtXG5uZXQvaXB2Ni9pcDZtci5jOjQzNTpcdFdBUk5fT05fT05DRSghbmV0X2luaXRpYWxpemVkKG5ldCkgXHUwMDI2XHUwMDI2ICFsaXN0X2VtcHR5KFx1MDAyNmlwNm1yX2Rldl9raWxsX2xpc3QpKTtcbm5ldC9pcHY2L2lwNm1yLmM6NDM2Olx0bGlzdF9zcGxpY2UoXHUwMDI2aXA2bXJfZGV2X2tpbGxfbGlzdCwgZGV2X2tpbGxfbGlzdCk7XG5uZXQvaXB2Ni9pcDZtci5jLTQzNy19XG4tLVxubmV0L2lwdjYvaXA2bXIuYy00NDMtXG5uZXQvaXB2Ni9pcDZtci5jOjQ0NDpzdGF0aWMgdm9pZCAqaXA2bXJfdmlmX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXG5uZXQvaXB2Ni9pcDZtci5jLTQ0NS1cdF9fYWNxdWlyZXMoUkNVKVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNDUxLVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2lwdjYvaXA2bXIuYzo0NTI6XHRtcnQgPSBfX2lwNm1yX2dldF90YWJsZShuZXQsIFJUNl9UQUJMRV9ERkxUKTtcbm5ldC9pcHY2L2lwNm1yLmMtNDUzLVx0aWYgKCFtcnQpIHtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTQ2Mi1cbm5ldC9pcHY2L2lwNm1yLmM6NDYzOnN0YXRpYyB2b2lkIGlwNm1yX3ZpZl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbm5ldC9pcHY2L2lwNm1yLmMtNDY0LVx0X19yZWxlYXNlcyhSQ1UpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy00NjgtXG5uZXQvaXB2Ni9pcDZtci5jOjQ2OTpzdGF0aWMgaW50IGlwNm1yX3ZpZl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbm5ldC9pcHY2L2lwNm1yLmMtNDcwLXtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTQ5NC1cbm5ldC9pcHY2L2lwNm1yLmM6NDk1OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaXA2bXJfdmlmX3NlcV9vcHMgPSB7XG5uZXQvaXB2Ni9pcDZtci5jOjQ5NjpcdC5zdGFydCA9IGlwNm1yX3ZpZl9zZXFfc3RhcnQsXG5uZXQvaXB2Ni9pcDZtci5jLTQ5Ny1cdC5uZXh0ICA9IG1yX3ZpZl9zZXFfbmV4dCxcbm5ldC9pcHY2L2lwNm1yLmM6NDk4Olx0LnN0b3AgID0gaXA2bXJfdmlmX3NlcV9zdG9wLFxubmV0L2lwdjYvaXA2bXIuYzo0OTk6XHQuc2hvdyAgPSBpcDZtcl92aWZfc2VxX3Nob3csXG5uZXQvaXB2Ni9pcDZtci5jLTUwMC19O1xuLS1cbm5ldC9pcHY2L2lwNm1yLmM9NTAyPXN0YXRpYyB2b2lkICppcG1yX21mY19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNTA2LVxubmV0L2lwdjYvaXA2bXIuYzo1MDc6XHRtcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCBSVDZfVEFCTEVfREZMVCk7XG5uZXQvaXB2Ni9pcDZtci5jLTUwOC1cdGlmICghbXJ0KVxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9NTY2PXN0YXRpYyBpbnQgcGltNl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTU5OS1cbm5ldC9pcHY2L2lwNm1yLmM6NjAwOlx0aWYgKGlwNm1yX2ZpYl9sb29rdXAobmV0LCBcdTAwMjZmbDYsIFx1MDAyNm1ydCkgXHUwMDNjIDApXG5uZXQvaXB2Ni9pcDZtci5jLTYwMS1cdFx0Z290byBkcm9wO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmM9NjMzPXN0YXRpYyBuZXRkZXZfdHhfdCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTY0OC1cbm5ldC9pcHY2L2lwNm1yLmM6NjQ5Olx0aWYgKGlwNm1yX2ZpYl9sb29rdXAobmV0LCBcdTAwMjZmbDYsIFx1MDAyNm1ydCkgXHUwMDNjIDApXG5uZXQvaXB2Ni9pcDZtci5jLTY1MC1cdFx0Z290byB0eF9sb29rdXBfZXJyO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNjU0LVxubmV0L2lwdjYvaXA2bXIuYzo2NTU6XHRpcDZtcl9jYWNoZV9yZXBvcnQobXJ0LCBza2IsIFJFQURfT05DRShtcnQtXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtKSxcbm5ldC9pcHY2L2lwNm1yLmMtNjU2LVx0XHRcdCAgIE1SVDZNU0dfV0hPTEVQS1QpO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmM9Njc5PXN0YXRpYyB2b2lkIHJlZ192aWZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTY4OC1cbm5ldC9pcHY2L2lwNm1yLmM6Njg5OnN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXA2bXJfcmVnX3ZpZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0KVxubmV0L2lwdjYvaXA2bXIuYy02OTAte1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNzIxLVxubmV0L2lwdjYvaXA2bXIuYzo3MjI6c3RhdGljIGludCBjYWxsX2lwNm1yX3ZpZl9lbnRyeV9ub3RpZmllcnMoc3RydWN0IG5ldCAqbmV0LFxubmV0L2lwdjYvaXA2bXIuYy03MjMtXHRcdFx0XHRcdCAgZW51bSBmaWJfZXZlbnRfdHlwZSBldmVudF90eXBlLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNzMyLVxubmV0L2lwdjYvaXA2bXIuYzo3MzM6c3RhdGljIGludCBjYWxsX2lwNm1yX21mY19lbnRyeV9ub3RpZmllcnMoc3RydWN0IG5ldCAqbmV0LFxubmV0L2lwdjYvaXA2bXIuYy03MzQtXHRcdFx0XHRcdCAgZW51bSBmaWJfZXZlbnRfdHlwZSBldmVudF90eXBlLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9NzQyPXN0YXRpYyBpbnQgbWlmNl9kZWxldGUoc3RydWN0IG1yX3RhYmxlICptcnQsIGludCB2aWZpLCBpbnQgbm90aWZ5LFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNzU3LVxubmV0L2lwdjYvaXA2bXIuYzo3NTg6XHRjYWxsX2lwNm1yX3ZpZl9lbnRyeV9ub3RpZmllcnMocmVhZF9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQpLFxubmV0L2lwdjYvaXA2bXIuYy03NTktXHRcdFx0XHQgICAgICAgRklCX0VWRU5UX1ZJRl9ERUwsIHYsIGRldixcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTc2NS1cdGlmICh2aWZpID09IG1ydC1cdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pIHtcbm5ldC9pcHY2L2lwNm1yLmM6NzY2Olx0XHQvKiBQYWlycyB3aXRoIFJFQURfT05DRSgpIGluIGlwNm1yX2NhY2hlX3JlcG9ydCgpIGFuZCByZWdfdmlmX3htaXQoKSAqL1xubmV0L2lwdjYvaXA2bXIuYy03NjctXHRcdFdSSVRFX09OQ0UobXJ0LVx1MDAzZW1yb3V0ZV9yZWdfdmlmX251bSwgLTEpO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNzk4LVxubmV0L2lwdjYvaXA2bXIuYzo3OTk6c3RhdGljIGlubGluZSB2b2lkIGlwNm1yX2NhY2hlX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbm5ldC9pcHY2L2lwNm1yLmMtODAwLXtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTgwNS1cbm5ldC9pcHY2L2lwNm1yLmM6ODA2OnN0YXRpYyBpbmxpbmUgdm9pZCBpcDZtcl9jYWNoZV9mcmVlKHN0cnVjdCBtZmM2X2NhY2hlICpjKVxubmV0L2lwdjYvaXA2bXIuYy04MDcte1xubmV0L2lwdjYvaXA2bXIuYzo4MDg6XHRjYWxsX3JjdShcdTAwMjZjLVx1MDAzZV9jLnJjdSwgaXA2bXJfY2FjaGVfZnJlZV9yY3UpO1xubmV0L2lwdjYvaXA2bXIuYy04MDktfVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtODE0LVxubmV0L2lwdjYvaXA2bXIuYzo4MTU6c3RhdGljIHZvaWQgaXA2bXJfZGVzdHJveV91bnJlcyhzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IG1mYzZfY2FjaGUgKmMpXG5uZXQvaXB2Ni9pcDZtci5jLTgxNi17XG4tLVxubmV0L2lwdjYvaXA2bXIuYy04MzUtXG5uZXQvaXB2Ni9pcDZtci5jOjgzNjpcdGlwNm1yX2NhY2hlX2ZyZWUoYyk7XG5uZXQvaXB2Ni9pcDZtci5jLTgzNy19XG4tLVxubmV0L2lwdjYvaXA2bXIuYz04NDI9c3RhdGljIHZvaWQgaXBtcl9kb19leHBpcmVfcHJvY2VzcyhzdHJ1Y3QgbXJfdGFibGUgKm1ydClcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTg1OC1cdFx0bXI2X25ldGxpbmtfZXZlbnQobXJ0LCAoc3RydWN0IG1mYzZfY2FjaGUgKiljLCBSVE1fREVMUk9VVEUpO1xubmV0L2lwdjYvaXA2bXIuYzo4NTk6XHRcdGlwNm1yX2Rlc3Ryb3lfdW5yZXMobXJ0LCAoc3RydWN0IG1mYzZfY2FjaGUgKiljKTtcbm5ldC9pcHY2L2lwNm1yLmMtODYwLVx0fVxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9ODY2PXN0YXRpYyB2b2lkIGlwbXJfZXhwaXJlX3Byb2Nlc3Moc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy04ODItXG5uZXQvaXB2Ni9pcDZtci5jOjg4MzpzdGF0aWMgdm9pZCBpcDZtcl91cGRhdGVfdGhyZXNob2xkcyhzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbm5ldC9pcHY2L2lwNm1yLmMtODg0LVx0XHRcdFx0ICAgIHN0cnVjdCBtcl9tZmMgKmNhY2hlLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9OTA2PXN0YXRpYyBpbnQgbWlmNl9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTkyNy1cdFx0XHRyZXR1cm4gLUVBRERSSU5VU0U7XG5uZXQvaXB2Ni9pcDZtci5jOjkyODpcdFx0ZGV2ID0gaXA2bXJfcmVnX3ZpZihuZXQsIG1ydCk7XG5uZXQvaXB2Ni9pcDZtci5jLTkyOS1cdFx0aWYgKCFkZXYpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy05NzYtXHRzcGluX3VubG9jayhcdTAwMjZtcnRfbG9jayk7XG5uZXQvaXB2Ni9pcDZtci5jOjk3NzpcdGNhbGxfaXA2bXJfdmlmX2VudHJ5X25vdGlmaWVycyhuZXQsIEZJQl9FVkVOVF9WSUZfQURELFxubmV0L2lwdjYvaXA2bXIuYy05NzgtXHRcdFx0XHQgICAgICAgdiwgZGV2LCB2aWZpLCBtcnQtXHUwMDNlaWQpO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtOTgxLVxubmV0L2lwdjYvaXA2bXIuYzo5ODI6c3RhdGljIHN0cnVjdCBtZmM2X2NhY2hlICppcDZtcl9jYWNoZV9maW5kKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxubmV0L2lwdjYvaXA2bXIuYy05ODMtXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqb3JpZ2luLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtOTk0LS8qIExvb2sgZm9yIGEgKCosRykgZW50cnkgKi9cbm5ldC9pcHY2L2lwNm1yLmM6OTk1OnN0YXRpYyBzdHJ1Y3QgbWZjNl9jYWNoZSAqaXA2bXJfY2FjaGVfZmluZF9hbnkoc3RydWN0IG1yX3RhYmxlICptcnQsXG5uZXQvaXB2Ni9pcDZtci5jLTk5Ni1cdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBpbjZfYWRkciAqbWNhc3RncnAsXG4tLVxubmV0L2lwdjYvaXA2bXIuYz0xMDEwPXN0YXRpYyBzdHJ1Y3QgbWZjNl9jYWNoZSAqXG5uZXQvaXB2Ni9pcDZtci5jOjEwMTE6aXA2bXJfY2FjaGVfZmluZF9wYXJlbnQoc3RydWN0IG1yX3RhYmxlICptcnQsXG5uZXQvaXB2Ni9pcDZtci5jLTEwMTItXHRcdFx0Y29uc3Qgc3RydWN0IGluNl9hZGRyICpvcmlnaW4sXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMDI0LS8qIEFsbG9jYXRlIGEgbXVsdGljYXN0IGNhY2hlIGVudHJ5ICovXG5uZXQvaXB2Ni9pcDZtci5jOjEwMjU6c3RhdGljIHN0cnVjdCBtZmM2X2NhY2hlICppcDZtcl9jYWNoZV9hbGxvYyh2b2lkKVxubmV0L2lwdjYvaXA2bXIuYy0xMDI2LXtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTEwMzEtXHRjLVx1MDAzZV9jLm1mY191bi5yZXMubWludmlmID0gTUFYTUlGUztcbm5ldC9pcHY2L2lwNm1yLmM6MTAzMjpcdGMtXHUwMDNlX2MuZnJlZSA9IGlwNm1yX2NhY2hlX2ZyZWVfcmN1O1xubmV0L2lwdjYvaXA2bXIuYy0xMDMzLVx0cmVmY291bnRfc2V0KFx1MDAyNmMtXHUwMDNlX2MubWZjX3VuLnJlcy5yZWZjb3VudCwgMSk7XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMDM2LVxubmV0L2lwdjYvaXA2bXIuYzoxMDM3OnN0YXRpYyBzdHJ1Y3QgbWZjNl9jYWNoZSAqaXA2bXJfY2FjaGVfYWxsb2NfdW5yZXModm9pZClcbm5ldC9pcHY2L2lwNm1yLmMtMTAzOC17XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMDUwLVxubmV0L2lwdjYvaXA2bXIuYzoxMDUxOnN0YXRpYyB2b2lkIGlwNm1yX2NhY2hlX3Jlc29sdmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbm5ldC9pcHY2L2lwNm1yLmMtMTA1Mi1cdFx0XHRcdHN0cnVjdCBtZmM2X2NhY2hlICp1Yywgc3RydWN0IG1mYzZfY2FjaGUgKmMpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMDg4LVxubmV0L2lwdjYvaXA2bXIuYzoxMDg5OnN0YXRpYyBpbnQgaXA2bXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LFxubmV0L2lwdjYvaXA2bXIuYy0xMDkwLVx0XHRcdCAgICAgIG1pZmlfdCBtaWZpLCBpbnQgYXNzZXJ0KVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTE4Mi0vKiBRdWV1ZSBhIHBhY2tldCBmb3IgcmVzb2x1dGlvbi4gSXQgZ2V0cyBsb2NrZWQgY2FjaGUgZW50cnkhICovXG5uZXQvaXB2Ni9pcDZtci5jOjExODM6c3RhdGljIGludCBpcDZtcl9jYWNoZV91bnJlc29sdmVkKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBtaWZpX3QgbWlmaSxcbm5ldC9pcHY2L2lwNm1yLmMtMTE4NC1cdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTEyMTAtXG5uZXQvaXB2Ni9pcDZtci5jOjEyMTE6XHRcdGMgPSBpcDZtcl9jYWNoZV9hbGxvY191bnJlcygpO1xubmV0L2lwdjYvaXA2bXIuYy0xMjEyLVx0XHRpZiAoIWMpIHtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTEyMjQtXHRcdCAqL1xubmV0L2lwdjYvaXA2bXIuYzoxMjI1Olx0XHRlcnIgPSBpcDZtcl9jYWNoZV9yZXBvcnQobXJ0LCBza2IsIG1pZmksIE1SVDZNU0dfTk9DQUNIRSk7XG5uZXQvaXB2Ni9pcDZtci5jLTEyMjYtXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMjU3LVx0aWYgKGMpXG5uZXQvaXB2Ni9pcDZtci5jOjEyNTg6XHRcdGlwNm1yX2NhY2hlX2ZyZWUoYyk7XG5uZXQvaXB2Ni9pcDZtci5jLTEyNTktXHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTEyNjYtXG5uZXQvaXB2Ni9pcDZtci5jOjEyNjc6c3RhdGljIGludCBpcDZtcl9tZmNfZGVsZXRlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3QgbWY2Y2N0bCAqbWZjLFxubmV0L2lwdjYvaXA2bXIuYy0xMjY4LVx0XHRcdCAgICBpbnQgcGFyZW50KVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTI3Mi1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9pcHY2L2lwNm1yLmM6MTI3MzpcdGMgPSBpcDZtcl9jYWNoZV9maW5kX3BhcmVudChtcnQsIFx1MDAyNm1mYy1cdTAwM2VtZjZjY19vcmlnaW4uc2luNl9hZGRyLFxubmV0L2lwdjYvaXA2bXIuYy0xMjc0LVx0XHRcdFx0ICAgIFx1MDAyNm1mYy1cdTAwM2VtZjZjY19tY2FzdGdycC5zaW42X2FkZHIsIHBhcmVudCk7XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMjc3LVx0XHRyZXR1cm4gLUVOT0VOVDtcbm5ldC9pcHY2L2lwNm1yLmM6MTI3ODpcdHJobHRhYmxlX3JlbW92ZShcdTAwMjZtcnQtXHUwMDNlbWZjX2hhc2gsIFx1MDAyNmMtXHUwMDNlX2MubW5vZGUsIGlwNm1yX3JodF9wYXJhbXMpO1xubmV0L2lwdjYvaXA2bXIuYy0xMjc5LVx0bGlzdF9kZWxfcmN1KFx1MDAyNmMtXHUwMDNlX2MubGlzdCk7XG5uZXQvaXB2Ni9pcDZtci5jLTEyODAtXG5uZXQvaXB2Ni9pcDZtci5jOjEyODE6XHRjYWxsX2lwNm1yX21mY19lbnRyeV9ub3RpZmllcnMocmVhZF9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQpLFxubmV0L2lwdjYvaXA2bXIuYy0xMjgyLVx0XHRcdFx0ICAgICAgIEZJQl9FVkVOVF9FTlRSWV9ERUwsIGMsIG1ydC1cdTAwM2VpZCk7XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMjg3LVxubmV0L2lwdjYvaXA2bXIuYzoxMjg4OnN0YXRpYyBpbnQgaXA2bXJfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcbm5ldC9pcHY2L2lwNm1yLmMtMTI4OS1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMjk5LVxubmV0L2lwdjYvaXA2bXIuYzoxMzAwOlx0aXA2bXJfZm9yX2VhY2hfdGFibGUobXJ0LCBuZXQpIHtcbm5ldC9pcHY2L2lwNm1yLmMtMTMwMS1cdFx0diA9IFx1MDAyNm1ydC1cdTAwM2V2aWZfdGFibGVbMF07XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMzEwLVxubmV0L2lwdjYvaXA2bXIuYzoxMzExOnN0YXRpYyB1bnNpZ25lZCBpbnQgaXA2bXJfc2VxX3JlYWQoY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxubmV0L2lwdjYvaXA2bXIuYy0xMzEyLXtcbm5ldC9pcHY2L2lwNm1yLmM6MTMxMzpcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5pcG1yX3NlcSkgJiM0MzsgaXA2bXJfcnVsZXNfc2VxX3JlYWQobmV0KTtcbm5ldC9pcHY2L2lwNm1yLmMtMTMxNC19XG5uZXQvaXB2Ni9pcDZtci5jLTEzMTUtXG5uZXQvaXB2Ni9pcDZtci5jOjEzMTY6c3RhdGljIGludCBpcDZtcl9kdW1wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbm5ldC9pcHY2L2lwNm1yLmMtMTMxNy1cdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxubmV0L2lwdjYvaXA2bXIuYy0xMzE4LXtcbm5ldC9pcHY2L2lwNm1yLmM6MTMxOTpcdHJldHVybiBtcl9kdW1wKG5ldCwgbmIsIFJUTkxfRkFNSUxZX0lQNk1SLCBpcDZtcl9ydWxlc19kdW1wLFxubmV0L2lwdjYvaXA2bXIuYzoxMzIwOlx0XHQgICAgICAgaXA2bXJfbXJfdGFibGVfaXRlciwgZXh0YWNrKTtcbm5ldC9pcHY2L2lwNm1yLmMtMTMyMS19XG4tLVxubmV0L2lwdjYvaXA2bXIuYz0xMzIzPXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaXA2X21yX25vdGlmaWVyID0ge1xubmV0L2lwdjYvaXA2bXIuYzoxMzI0Olx0Lm5vdGlmaWVyX2NhbGwgPSBpcDZtcl9kZXZpY2VfZXZlbnRcbm5ldC9pcHY2L2lwNm1yLmMtMTMyNS19O1xubmV0L2lwdjYvaXA2bXIuYy0xMzI2LVxubmV0L2lwdjYvaXA2bXIuYzoxMzI3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX25vdGlmaWVyX29wcyBpcDZtcl9ub3RpZmllcl9vcHNfdGVtcGxhdGUgPSB7XG5uZXQvaXB2Ni9pcDZtci5jLTEzMjgtXHQuZmFtaWx5XHRcdD0gUlROTF9GQU1JTFlfSVA2TVIsXG5uZXQvaXB2Ni9pcDZtci5jOjEzMjk6XHQuZmliX3NlcV9yZWFkXHQ9IGlwNm1yX3NlcV9yZWFkLFxubmV0L2lwdjYvaXA2bXIuYzoxMzMwOlx0LmZpYl9kdW1wXHQ9IGlwNm1yX2R1bXAsXG5uZXQvaXB2Ni9pcDZtci5jLTEzMzEtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTEzMzMtXG5uZXQvaXB2Ni9pcDZtci5jOjEzMzQ6c3RhdGljIGludCBfX25ldF9pbml0IGlwNm1yX25vdGlmaWVyX2luaXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L2lwdjYvaXA2bXIuYy0xMzM1LXtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTEzMzktXG5uZXQvaXB2Ni9pcDZtci5jOjEzNDA6XHRvcHMgPSBmaWJfbm90aWZpZXJfb3BzX3JlZ2lzdGVyKFx1MDAyNmlwNm1yX25vdGlmaWVyX29wc190ZW1wbGF0ZSwgbmV0KTtcbm5ldC9pcHY2L2lwNm1yLmMtMTM0MS1cdGlmIChJU19FUlIob3BzKSlcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTEzNDMtXG5uZXQvaXB2Ni9pcDZtci5jOjEzNDQ6XHRuZXQtXHUwMDNlaXB2Ni5pcDZtcl9ub3RpZmllcl9vcHMgPSBvcHM7XG5uZXQvaXB2Ni9pcDZtci5jLTEzNDUtXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMzQ4LVxubmV0L2lwdjYvaXA2bXIuYzoxMzQ5OnN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2bXJfbm90aWZpZXJfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvaXB2Ni9pcDZtci5jLTEzNTAte1xubmV0L2lwdjYvaXA2bXIuYzoxMzUxOlx0ZmliX25vdGlmaWVyX29wc191bnJlZ2lzdGVyKG5ldC1cdTAwM2VpcHY2LmlwNm1yX25vdGlmaWVyX29wcyk7XG5uZXQvaXB2Ni9pcDZtci5jOjEzNTI6XHRuZXQtXHUwMDNlaXB2Ni5pcDZtcl9ub3RpZmllcl9vcHMgPSBOVUxMO1xubmV0L2lwdjYvaXA2bXIuYy0xMzUzLX1cbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTEzNTUtLyogU2V0dXAgZm9yIElQIG11bHRpY2FzdCByb3V0aW5nICovXG5uZXQvaXB2Ni9pcDZtci5jOjEzNTY6c3RhdGljIGludCBfX25ldF9pbml0IGlwNm1yX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9pcHY2L2lwNm1yLmMtMTM1Ny17XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMzY0LVxubmV0L2lwdjYvaXA2bXIuYzoxMzY1Olx0ZXJyID0gaXA2bXJfbm90aWZpZXJfaW5pdChuZXQpO1xubmV0L2lwdjYvaXA2bXIuYy0xMzY2LVx0aWYgKGVycilcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTEzNjgtXG5uZXQvaXB2Ni9pcDZtci5jOjEzNjk6XHRlcnIgPSBpcDZtcl9ydWxlc19pbml0KG5ldCk7XG5uZXQvaXB2Ni9pcDZtci5jLTEzNzAtXHRpZiAoZXJyIFx1MDAzYyAwKVxubmV0L2lwdjYvaXA2bXIuYzoxMzcxOlx0XHRnb3RvIGlwNm1yX3J1bGVzX2ZhaWw7XG5uZXQvaXB2Ni9pcDZtci5jLTEzNzItXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMzc0LVx0ZXJyID0gLUVOT01FTTtcbm5ldC9pcHY2L2lwNm1yLmM6MTM3NTpcdGlmICghcHJvY19jcmVhdGVfbmV0KFwmIzM0O2lwNl9tcl92aWZcJiMzNDssIDAsIG5ldC1cdTAwM2Vwcm9jX25ldCwgXHUwMDI2aXA2bXJfdmlmX3NlcV9vcHMsXG5uZXQvaXB2Ni9pcDZtci5jLTEzNzYtXHRcdFx0c2l6ZW9mKHN0cnVjdCBtcl92aWZfaXRlcikpKVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTM4OC1wcm9jX3ZpZl9mYWlsOlxubmV0L2lwdjYvaXA2bXIuYzoxMzg5Olx0aXA2bXJfcnVsZXNfZXhpdF9ydG5sKG5ldCwgXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG5uZXQvaXB2Ni9pcDZtci5jOjEzOTA6XHRpcDZtcl9ydWxlc19leGl0KG5ldCk7XG5uZXQvaXB2Ni9pcDZtci5jLTEzOTEtI2VuZGlmXG5uZXQvaXB2Ni9pcDZtci5jOjEzOTI6aXA2bXJfcnVsZXNfZmFpbDpcbm5ldC9pcHY2L2lwNm1yLmM6MTM5MzpcdGlwNm1yX25vdGlmaWVyX2V4aXQobmV0KTtcbm5ldC9pcHY2L2lwNm1yLmMtMTM5NC1cdHJldHVybiBlcnI7XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMzk2LVxubmV0L2lwdjYvaXA2bXIuYzoxMzk3OnN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2bXJfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L2lwdjYvaXA2bXIuYy0xMzk4LXtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTE0MDItI2VuZGlmXG5uZXQvaXB2Ni9pcDZtci5jOjE0MDM6XHRpcDZtcl9ydWxlc19leGl0KG5ldCk7XG5uZXQvaXB2Ni9pcDZtci5jOjE0MDQ6XHRpcDZtcl9ub3RpZmllcl9leGl0KG5ldCk7XG5uZXQvaXB2Ni9pcDZtci5jLTE0MDUtfVxubmV0L2lwdjYvaXA2bXIuYy0xNDA2LVxubmV0L2lwdjYvaXA2bXIuYzoxNDA3OnN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2bXJfbmV0X2V4aXRfcnRubChzdHJ1Y3QgbmV0ICpuZXQsXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3MDkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gaW4gUm91dGluZyBUYWJsZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwYXR0ZXJucyBhc3NvY2lhdGVkIHdpdGggcm91dGluZyB0YWJsZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhleSB1dGlsaXplIGBtcnRfY2FjaGVwYCBvciBjYWxsIGBtcl90YWJsZV9hbGxvY2AuIE15IGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCwgd2hhdCB0aGUgY29udGV4dCBpcywgYW5kIHBvdGVudGlhbGx5IGlkZW50aWZ5IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgaXNzdWVzLgoKVG8gc3RhcnQsIEkmIzM5O2xsIHVzZSBhIGBncmVwYCB0byBxdWlja2x5IHNjYW4gdGhlIHJlbGV2YW50IGNvZGViYXNlcy4gSSYjMzk7bGwgZm9jdXMgb24gYG5ldC9pcHY0YCBhbmQgYG5ldC9pcHY2YCBkaXJlY3RvcmllcywgYXMgdGhvc2UgYXJlIHRoZSBjb3JlIGFyZWFzIHdoZXJlIHJvdXRpbmcgYW5kIGZvcndhcmRpbmcgYXJlIGltcGxlbWVudGVkLiBUaGlzIHRhcmdldGVkIHNlYXJjaCBmb3IgYG1ydF9jYWNoZXBgIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBpdHMgdXNhZ2UgYWNyb3NzIGRpZmZlcmVudCBJUHY0IGFuZCBJUHY2IHJvdXRpbmcgb3BlcmF0aW9ucywgYW5kIGhvcGVmdWxseSBsZWFkIG1lIHRvIGNhbGxzIHRvIHRoZSBgbXJfdGFibGVfYWxsb2NgIGZ1bmN0aW9uLiBJIGFudGljaXBhdGUgZmluZGluZyBzZXZlcmFsIGtleSBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHdoaWNoIHVzZSB0aGVzZSBhbGxvY2F0aW9uIG1ldGhvZHMsIGFuZCB0aGF0IHdpbGwgYmUgbXkganVtcGluZyBvZmYgcG9pbnQgZm9yIG1vcmUgZGV0YWlsZWQgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21ydF9jYWNoZXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz05Mj1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1mY191bnJlc19sb2NrKTtcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTAxLVxubmV0L2lwdjQvaXBtci5jOjEwMjpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1ydF9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xubmV0L2lwdjQvaXBtci5jLTEwMy1cbi0tXG5uZXQvaXB2NC9pcG1yLmM9NzQzPXN0YXRpYyB2b2lkIGlwbXJfY2FjaGVfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbm5ldC9pcHY0L2lwbXIuYy03NDYtXG5uZXQvaXB2NC9pcG1yLmM6NzQ3Olx0a21lbV9jYWNoZV9mcmVlKG1ydF9jYWNoZXAsIChzdHJ1Y3QgbWZjX2NhY2hlICopYyk7XG5uZXQvaXB2NC9pcG1yLmMtNzQ4LX1cbi0tXG5uZXQvaXB2NC9pcG1yLmM9OTk0PXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jKHZvaWQpXG5uZXQvaXB2NC9pcG1yLmMtOTk1LXtcbm5ldC9pcHY0L2lwbXIuYzo5OTY6XHRzdHJ1Y3QgbWZjX2NhY2hlICpjID0ga21lbV9jYWNoZV96YWxsb2MobXJ0X2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG5uZXQvaXB2NC9pcG1yLmMtOTk3LVxuLS1cbm5ldC9pcHY0L2lwbXIuYz0xMDA3PXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jX3VucmVzKHZvaWQpXG5uZXQvaXB2NC9pcG1yLmMtMTAwOC17XG5uZXQvaXB2NC9pcG1yLmM6MTAwOTpcdHN0cnVjdCBtZmNfY2FjaGUgKmMgPSBrbWVtX2NhY2hlX3phbGxvYyhtcnRfY2FjaGVwLCBHRlBfQVRPTUlDKTtcbm5ldC9pcHY0L2lwbXIuYy0xMDEwLVxuLS1cbm5ldC9pcHY0L2lwbXIuYz0zMzc1PWludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY0L2lwbXIuYy0zMzc4LVxubmV0L2lwdjQvaXBtci5jOjMzNzk6XHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsXG5uZXQvaXB2NC9pcG1yLmMtMzM4MC1cdFx0XHRcdFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpO1xuLS1cbm5ldC9pcHY0L2lwbXIuYy0zNDA2LXJlZ19wZXJuZXRfZmFpbDpcbm5ldC9pcHY0L2lwbXIuYzozNDA3Olx0a21lbV9jYWNoZV9kZXN0cm95KG1ydF9jYWNoZXApO1xubmV0L2lwdjQvaXBtci5jLTM0MDgtXHRyZXR1cm4gZXJyO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmM9NzU9c3RhdGljIERFRklORV9TUElOTE9DSyhtZmNfdW5yZXNfbG9jayk7XG4tLVxubmV0L2lwdjYvaXA2bXIuYy04NC1cbm5ldC9pcHY2L2lwNm1yLmM6ODU6c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptcnRfY2FjaGVwIF9fcmVhZF9tb3N0bHk7XG5uZXQvaXB2Ni9pcDZtci5jLTg2LVxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9Nzk5PXN0YXRpYyBpbmxpbmUgdm9pZCBpcDZtcl9jYWNoZV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy04MDItXG5uZXQvaXB2Ni9pcDZtci5jOjgwMzpcdGttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCAoc3RydWN0IG1mYzZfY2FjaGUgKiljKTtcbm5ldC9pcHY2L2lwNm1yLmMtODA0LX1cbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTEwMjU9c3RhdGljIHN0cnVjdCBtZmM2X2NhY2hlICppcDZtcl9jYWNoZV9hbGxvYyh2b2lkKVxubmV0L2lwdjYvaXA2bXIuYy0xMDI2LXtcbm5ldC9pcHY2L2lwNm1yLmM6MTAyNzpcdHN0cnVjdCBtZmM2X2NhY2hlICpjID0ga21lbV9jYWNoZV96YWxsb2MobXJ0X2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG5uZXQvaXB2Ni9pcDZtci5jLTEwMjgtXHRpZiAoIWMpXG4tLVxubmV0L2lwdjYvaXA2bXIuYz0xMDM3PXN0YXRpYyBzdHJ1Y3QgbWZjNl9jYWNoZSAqaXA2bXJfY2FjaGVfYWxsb2NfdW5yZXModm9pZClcbm5ldC9pcHY2L2lwNm1yLmMtMTAzOC17XG5uZXQvaXB2Ni9pcDZtci5jOjEwMzk6XHRzdHJ1Y3QgbWZjNl9jYWNoZSAqYyA9IGttZW1fY2FjaGVfemFsbG9jKG1ydF9jYWNoZXAsIEdGUF9BVE9NSUMpO1xubmV0L2lwdjYvaXA2bXIuYy0xMDQwLVx0aWYgKCFjKVxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9MTQyNj1pbnQgX19pbml0IGlwNl9tcl9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xNDI5LVxubmV0L2lwdjYvaXA2bXIuYzoxNDMwOlx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9BQ0NPVU5UKTtcbm5ldC9pcHY2L2lwNm1yLmM6MTQzMTpcdGlmICghbXJ0X2NhY2hlcClcbm5ldC9pcHY2L2lwNm1yLmMtMTQzMi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xNDU5LXJlZ19wZXJuZXRfZmFpbDpcbm5ldC9pcHY2L2lwNm1yLmM6MTQ2MDpcdGttZW1fY2FjaGVfZGVzdHJveShtcnRfY2FjaGVwKTtcbm5ldC9pcHY2L2lwNm1yLmMtMTQ2MS1cdHJldHVybiBlcnI7XG4tLVxubmV0L2lwdjYvaXA2bXIuYz0xNDY0PXZvaWQgX19pbml0IGlwNl9tcl9jbGVhbnVwKHZvaWQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xNDcxLVx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmlwNm1yX25ldF9vcHMpO1xubmV0L2lwdjYvaXA2bXIuYzoxNDcyOlx0a21lbV9jYWNoZV9kZXN0cm95KG1ydF9jYWNoZXApO1xubmV0L2lwdjYvaXA2bXIuYy0xNDczLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0MjIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYG1yX3RhYmxlX2FsbG9jYCBDYWxsZXJzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byB0aGlzIGBtcl90YWJsZV9hbGxvY2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGNvZGViYXNlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1c2UgYGdyZXBgLiBJIHdhbnQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyB3aGVyZSBgbXJfdGFibGVfYWxsb2NgIGlzIGNhbGxlZC4gSXQmIzM5O3MgdGhlIG1vc3QgZGlyZWN0IGFuZCBlZmZpY2llbnQgd2F5IHRvIGdldCBhIGJpcmQmIzM5O3MtZXllIHZpZXcgb2YgaG93IHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gVGhpcyBzaG91bGQgcXVpY2tseSBnaXZlIG1lIGEgbGlzdCBvZiBhbGwgcG90ZW50aWFsIGNhbGwgc2l0ZXMsIHdoaWNoIEkgY2FuIHRoZW4gYW5hbHl6ZSBpbiBtb3JlIGRldGFpbC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgdW5jb3ZlcnMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXJfdGFibGVfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz00MjY9c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXBtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXG4tLVxubmV0L2lwdjQvaXBtci5jLTQzNy1cbm5ldC9pcHY0L2lwbXIuYzo0Mzg6XHRyZXR1cm4gbXJfdGFibGVfYWxsb2MobmV0LCBpZCwgXHUwMDI2aXBtcl9tcl90YWJsZV9vcHMsXG5uZXQvaXB2NC9pcG1yLmMtNDM5LVx0XHRcdCAgICAgIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIGlwbXJfbmV3X3RhYmxlX3NldCk7XG4tLVxubmV0L2lwdjQvaXBtcl9iYXNlLmM9NDU9c3RydWN0IG1yX3RhYmxlICpcbm5ldC9pcHY0L2lwbXJfYmFzZS5jOjQ2Om1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxubmV0L2lwdjQvaXBtcl9iYXNlLmMtNDctXHQgICAgICAgc3RydWN0IG1yX3RhYmxlX29wcyAqb3BzLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9NDA4PXN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwNm1yX25ld190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZClcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTQxNS1cbm5ldC9pcHY2L2lwNm1yLmM6NDE2Olx0cmV0dXJuIG1yX3RhYmxlX2FsbG9jKG5ldCwgaWQsIFx1MDAyNmlwNm1yX21yX3RhYmxlX29wcyxcbm5ldC9pcHY2L2lwNm1yLmMtNDE3LVx0XHRcdCAgICAgIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIGlwNm1yX25ld190YWJsZV9zZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk2NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTXVsdGljYXN0IFJvdXRpbmcgVGFibGUgYW5kIENhY2hlIEFsbG9jYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGlzIG11bHRpY2FzdCByb3V0aW5nIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIGBtcl90YWJsZWAgYW5kIGBtZmNfY2FjaGVgL2BtZmM2X2NhY2hlYCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBoYW5kbGVkLCBzbyBJJiMzOTtsbCBzdGFydCBieSBsaXN0aW5nIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLiBXZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgZW50cnkgcG9pbnRzIGFuZCB0aGUgYWxsb2NhdGlvbi91c2FnZSBwYXR0ZXJuczoKCiogICBgaXBtcl9uZXdfdGFibGVgIGFuZCBgaXA2bXJfbmV3X3RhYmxlYCBhcmUgdGhlIHRhYmxlIGluaXRpYWxpemVyczsgSSYjMzk7bGwgd2FudCB0byBjaGVjayBob3cgdGhleSBzZXQgdGhpbmdzIHVwLgoqICAgYG1yX3RhYmxlX2FsbG9jYCBsaWtlbHkgaGFuZGxlcyB0aGUgdW5kZXJseWluZyBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgdGhlIHJvdXRpbmcgdGFibGUgaXRzZWxmLgoqICAgVGhlbiB3ZSBoYXZlIGBpcG1yX21mY19hZGRgIGFuZCBgaXA2bXJfbWZjX2FkZGAgZm9yIGFkZGluZyBtdWx0aWNhc3QgZm9yd2FyZGluZyBjYWNoZSAoTUZDKSBlbnRyaWVzIC0gdGhlc2UgYXJlIGNyaXRpY2FsLgoqICAgRm9yIHRoZSBjYWNoZSBhbGxvY2F0aW9uLCB3ZSYjMzk7dmUgZ290IGBpcG1yX2NhY2hlX2FsbG9jYCwgYGlwbXJfY2FjaGVfYWxsb2NfdW5yZXNgLCBgaXA2bXJfY2FjaGVfYWxsb2NgLCBhbmQgYGlwNm1yX2NhY2hlX2FsbG9jX3VucmVzYC4gVGhlc2UgZGVzZXJ2ZSBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IHRoZSAmIzM0O3VucmVzJiMzNDsgdmFyaWFudHMuCiogICBGaW5hbGx5LCB0aGUgc2V0c29ja29wdCBjYWxscywgYGlwX21yb3V0ZV9zZXRzb2Nrb3B0YCBhbmQgYGlwNl9tcm91dGVfc2V0c29ja29wdGAsIG5lZWQgdG8gYmUgY2hlY2tlZDsgdGhleSYjMzk7cmUgdGhlIHVzZXItbGV2ZWwgaW50ZXJmYWNlLgoKUmlnaHQsIHdpdGggdGhhdCBsaXN0IGluIG1pbmQsIEkgbmVlZCB0byBtYWtlIGEgcXVpY2sgdmVyaWZpY2F0aW9uIG9mIHRoZSBhY3R1YWwgZnVuY3Rpb24gbmFtZXMgZm9yIGBpcG1yX21mY19hZGRgIGFuZCBgaXA2bXJfbWZjX2FkZGAuIEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgbWlnaHQgYmUgYSBzdWJ0bGUgbnVhbmNlIGluIHRoZWlyIG5hbWluZyBvciBpbXBsZW1lbnRhdGlvbiB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGNsdWUgb2YgdGhlaXIgcm9sZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGV5IGFyZSBleGFjdGx5IHdoYXQgSSBleHBlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwLiptci4qbWZjX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jPTEyMjE9c3RhdGljIGludCBpcG1yX21mY19kZWxldGUoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBtZmNjdGwgKm1mYywgaW50IHBhcmVudClcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTI0MC1cbm5ldC9pcHY0L2lwbXIuYzoxMjQxOnN0YXRpYyBpbnQgaXBtcl9tZmNfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG5uZXQvaXB2NC9pcG1yLmMtMTI0Mi1cdFx0XHRzdHJ1Y3QgbWZjY3RsICptZmMsIGludCBtcnRzb2NrLCBpbnQgcGFyZW50KVxuLS1cbm5ldC9pcHY0L2lwbXIuYz0xNDEwPWludCBpcF9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuLS1cbm5ldC9pcHY0L2lwbXIuYy0xNTIxLVx0XHRlbHNlXG5uZXQvaXB2NC9pcG1yLmM6MTUyMjpcdFx0XHRyZXQgPSBpcG1yX21mY19hZGQobmV0LCBtcnQsIFx1MDAyNm1mYyxcbm5ldC9pcHY0L2lwbXIuYy0xNTIzLVx0XHRcdFx0XHQgICBzayA9PSBydG5sX2RlcmVmZXJlbmNlKG1ydC1cdTAwM2Vtcm91dGVfc2spLFxuLS1cbm5ldC9pcHY0L2lwbXIuYz0yOTQzPXN0YXRpYyBpbnQgaXBtcl9ydG1fcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2lwdjQvaXBtci5jLTI5NTktXHRpZiAobmxoLVx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV1JPVVRFKVxubmV0L2lwdjQvaXBtci5jOjI5NjA6XHRcdHJldCA9IGlwbXJfbWZjX2FkZChuZXQsIHRibCwgXHUwMDI2bWZjYywgbXJ0c29jaywgcGFyZW50KTtcbm5ldC9pcHY0L2lwbXIuYy0yOTYxLVx0ZWxzZVxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9MTQ2ND12b2lkIF9faW5pdCBpcDZfbXJfY2xlYW51cCh2b2lkKVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTQ3NC1cbm5ldC9pcHY2L2lwNm1yLmM6MTQ3NTpzdGF0aWMgaW50IGlwNm1yX21mY19hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbm5ldC9pcHY2L2lwNm1yLmMtMTQ3Ni1cdFx0XHQgc3RydWN0IG1mNmNjdGwgKm1mYywgaW50IG1ydHNvY2ssIGludCBwYXJlbnQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYz0xNzEyPWludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTE3OTAtXHRcdGVsc2Vcbm5ldC9pcHY2L2lwNm1yLmM6MTc5MTpcdFx0XHRyZXQgPSBpcDZtcl9tZmNfYWRkKG5ldCwgbXJ0LCBcdTAwMjZtZmMsXG5uZXQvaXB2Ni9pcDZtci5jLTE3OTItXHRcdFx0XHRcdCAgICBzayA9PVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTIzMgoJCQkJCQkJb3V0cHV0OiAxNzIKCQkJCQkJCXRob3VnaHRzOiA3NjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIHRvdWNoZWQgYnkgdGhpcyBwYXRjaC4gSSBzZWUgdGhhdCBgaXBfbXJfaW5pdGAsIGBtcl90YWJsZV9hbGxvY2AsIGFuZCBgaXA2X21yX2luaXRgIGFyZSBkaXJlY3RseSBtb2RpZmllZCwgYW5kIGBtcl90YWJsZV9hbGxvY2AgYWxvbmcgd2l0aCBzZXZlcmFsIGNhY2hlIGFsbG9jYXRpb24gZnVuY3Rpb25zIChgaXBtcl9jYWNoZV9hbGxvY2AsIGBpcG1yX2NhY2hlX2FsbG9jX3VucmVzYCwgYGlwNm1yX2NhY2hlX2FsbG9jYCwgYGlwNm1yX2NhY2hlX2FsbG9jX3VucmVzYCkgYW5kIG1mYyBvcGVyYXRpb25zIChgaXBtcl9tZmNfYWRkYCwgYGlwNm1yX21mY19hZGRgKSBhcmUgdXNlcnMgb2YgdGhlIGFmZmVjdGVkIG9iamVjdHMuIEFkZGl0aW9uYWxseSwgdGhlIHNldHNvY2tvcHQgY2FsbHMsIGBpcF9tcm91dGVfc2V0c29ja29wdGAgYW5kIGBpcDZfbXJvdXRlX3NldHNvY2tvcHRgLCBhcmUgcmVsZXZhbnQgYmVjYXVzZSB0aGV5IHByb3ZpZGUgdXNlcnNwYWNlIGFjY2VzcyB0byB0aGlzIGZ1bmN0aW9uYWxpdHkuCgpOZXh0LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBJUF9NUk9VVEVgLCBgSVBWNl9NUk9VVEVgLCBhbmQgYE1FTUNHYCAoZm9yIFNMQUJfQUNDT1VOVCBhY2NvdW50aW5nKSBhcmUgbmVjZXNzYXJ5LiBJJiMzOTt2ZSBhbHNvIGRvdWJsZS1jaGVja2VkIHRoZSBkZXBlbmRlbmNpZXM6IGBJUF9NUk9VVEVgIGRlcGVuZHMgb24gYElQX01VTFRJQ0FTVGAgYW5kIHNlbGVjdHMgYElQX01ST1VURV9DT01NT05gLCBhbmQgYElQVjZfTVJPVVRFYCBkZXBlbmRzIG9uIGBJUFY2YCBhbmQgYWxzbyBzZWxlY3RzIGBJUF9NUk9VVEVfQ09NTU9OYC4KCk5vdywgdGhlIGNydWNpYWwgc3RlcDogaWRlbnRpZnlpbmcgdGhlIGBGb2N1c1N5bWJvbHNgLiBCYXNlZCBvbiB0aGUgZ3VpZGVsaW5lcywgSSBuZWVkIHRvIGF2b2lkIHViaXF1aXRvdXMgZnVuY3Rpb25zIGFuZCB0YXJnZXQgc3BlY2lmaWMgbG9naWMgb3IgZW50cnkgcG9pbnRzLiBBZnRlciBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIEkmIzM5O3ZlIGRlY2lkZWQgdG8gaW5jbHVkZSBgbXJfdGFibGVfYWxsb2NgLCBgaXBtcl9tZmNfYWRkYCwgYGlwNm1yX21mY19hZGRgLCBgaXBfbXJvdXRlX3NldHNvY2tvcHRgLCBhbmQgYGlwNl9tcm91dGVfc2V0c29ja29wdGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGFuZCBhbGxvY2F0aW9uIHBvaW50cyByZWxhdGVkIHRvIHRoZSBtdWx0aWNhc3Qgcm91dGluZyBmdW5jdGlvbmFsaXR5LgoKUmVhc29uaW5nOiBUaGlzIHBhdGNoIGlzIGVuYWJsaW5nIG1lbWNnIHNsYWIgYWNjb3VudGluZyBmb3IgSVB2NC9JUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlcyAoYG1yX3RhYmxlYCkgYW5kIG11bHRpY2FzdCBmb3J3YXJkaW5nIGNhY2hlIGVudHJpZXMgKGBtZmNfY2FjaGVgIGFuZCBgbWZjNl9jYWNoZWApLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgdGhlc2UgYWxsb2NhdGlvbnMgYXJlIHRyaWdnZXJlZCBhbmQgbWFuYWdlZCBieSB1c2Vyc3BhY2UgdGhyb3VnaCBzZXRzb2Nrb3B0IGNvbW1hbmRzIGxpa2UgYE1SVF9BRERfTUZDYCAod2hpY2gsIG9mIGNvdXJzZSwgcmVsaWVzIG9uIHRoZSBpbmNsdWRlZCBlbnRyeXBvaW50cykgYW5kIHBvdGVudGlhbGx5IG5ldGxpbmsgcm91dGUgY29uZmlndXJhdGlvbi4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGZ1enppbmcgdGFyZ2V0cyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2Ugd2l0aGluIGNvcmUgbmV0d29ya2luZyBjb2RlLCBhbmQgdGhlIFNMQUJfQUNDT1VOVCBtb2RpZmljYXRpb25zIGp1c3RpZnkgZnV6emluZyB1bmRlciBjb25zdHJhaW5lZCBtZW1vcnkgZW52aXJvbm1lbnRzIChpLmUuIHVuZGVyIG1lbW9yeS1jb25zdHJhaW5lZCBjZ3JvdXBzKS4KCkZpbmFsbHksIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgdHJ1ZWAuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBbJiMzNDtJUF9NUk9VVEUmIzM0OywgJiMzNDtJUFY2X01ST1VURSYjMzQ7LCAmIzM0O01FTUNHJiMzNDtdYCwgYW5kIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgYFsmIzM0O21yX3RhYmxlX2FsbG9jJiMzNDssICYjMzQ7aXBfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywgJiMzNDtpcDZfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywgJiMzNDtpcG1yX21mY19hZGQmIzM0OywgJiMzNDtpcDZtcl9tZmNfYWRkJiMzNDtdYC4gRXZlcnl0aGluZyBpcyBsb29raW5nIGNvcnJlY3Qgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfTVJPVVRFJiMzNDssCiAgICAmIzM0O0lQVjZfTVJPVVRFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXJfdGFibGVfYWxsb2MmIzM0OywKICAgICYjMzQ7aXBfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXA2X21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwbXJfbWZjX2FkZCYjMzQ7LAogICAgJiMzNDtpcDZtcl9tZmNfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgU0xBQl9BQ0NPVU5UIGFuZCBHRlBfS0VSTkVMX0FDQ09VTlQgZmxhZ3MgdG8gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZSBhbmQgZm9yd2FyZGluZyBjYWNoZSBhbGxvY2F0aW9ucyAobWZjX2NhY2hlLCBtZmM2X2NhY2hlLCBtcl90YWJsZSkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgcmVhY2hhYmxlIHZpYSBzZXRzb2Nrb3B0IGFuZCBuZXRsaW5rIG11bHRpY2FzdCByb3V0aW5nIGludGVyZmFjZXMsIHdhcnJhbnRpbmcgZnV6emluZyB1bmRlciBtZW1vcnktYWNjb3VudGluZyBjb25maWd1cmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfTVJPVVRFJiMzNDssCiAgICAmIzM0O0lQVjZfTVJPVVRFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXJfdGFibGVfYWxsb2MmIzM0OywKICAgICYjMzQ7aXBfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXA2X21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwbXJfbWZjX2FkZCYjMzQ7LAogICAgJiMzNDtpcDZtcl9tZmNfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgU0xBQl9BQ0NPVU5UIGFuZCBHRlBfS0VSTkVMX0FDQ09VTlQgZmxhZ3MgdG8gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZSBhbmQgZm9yd2FyZGluZyBjYWNoZSBhbGxvY2F0aW9ucyAobWZjX2NhY2hlLCBtZmM2X2NhY2hlLCBtcl90YWJsZSkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgcmVhY2hhYmxlIHZpYSBzZXRzb2Nrb3B0IGFuZCBuZXRsaW5rIG11bHRpY2FzdCByb3V0aW5nIGludGVyZmFjZXMsIHdhcnJhbnRpbmcgZnV6emluZyB1bmRlciBtZW1vcnktYWNjb3VudGluZyBjb25maWd1cmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgZmxhZ3MgKFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UKSB0byB0aGUgSVB2NC9JUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIGFsbG9jYXRpb25zIGFuZCBzbGFiIGNhY2hlIGNyZWF0aW9uIChtcnRfY2FjaGVwKS4gVGhlIGFsbG9jYXRpb24gaW4gbXJfdGFibGVfYWxsb2Mgc3RpbGwgdXNlcyBremFsbG9jX29iaiB3aGljaCBlbnN1cmVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgbWVtb3J5LCBhbmQgU0xBQl9BQ0NPVU5UIHNvbGVseSBlbmFibGVzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBvbiBjYWNoZSBhbGxvY2F0aW9ucy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXItc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJiYWE4ZDA1NjJmZDk2MjhhODIxNjRlZjk0MzgxY2YwZWYzNWMyNGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDEzOjU0OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IGU1ZjJiMWM2MTUwZDIuLmI5YzU0NGQ0OGM0NTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTMzNzYsNyAmIzQzOzMzNzYsOCBAQCBpbnQgX19pbml0IGlwX21yX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JbXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDKTsKJiM0MzsJbXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLAomIzQzOwkJCQlTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDIHwgU0xBQl9BQ0NPVU5UKTsKIAogCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmFtcDtpcG1yX25ldF9vcHMpOwogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yX2Jhc2UuYyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jCmluZGV4IDg2N2IyNGJlZGVkMTEuLmEwZWM2ZDE5YTIzN2YgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXJfYmFzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jCkBAIC01Miw3ICYjNDM7NTIsNyBAQCBtcl90YWJsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCwKIAlzdHJ1Y3QgbXJfdGFibGUgKm1ydDsKIAlpbnQgZXJyOwogCi0JbXJ0ID0ga3phbGxvY19vYmooKm1ydCk7CiYjNDM7CW1ydCA9IGt6YWxsb2Nfb2JqKCptcnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFtcnQpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCW1ydC0mZ3Q7aWQgPSBpZDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jCmluZGV4IDNmMmVkOWI3N2RlYjUuLjlkODExNmI1ZWRiMTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNm1yLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2bXIuYwpAQCAtMTQyNyw3ICYjNDM7MTQyNyw3IEBAIGludCBfX2luaXQgaXA2X21yX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JbXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOKTsKJiM0MzsJbXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9BQ0NPVU5UKTsKIAlpZiAoIW1ydF9jYWNoZXApCiAJCXJldHVybiAtRU5PTUVNOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IEFjY291bnRpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgcGF0Y2ggZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgYXJlIHN0cmFpZ2h0Zm9yd2FyZCBtZW1jZyBhY2NvdW50aW5nIGFkZGl0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgYWRkaW5nIGBTTEFCX0FDQ09VTlRgIHRvIHRoZSBzbGFiIGNhY2hlcyAoYG1ydF9jYWNoZXBgKSB1c2VkIGJ5IGJvdGggSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBjb21wb25lbnRzIChgbmV0L2lwdjQvaXBtci5jYCBhbmQgYG5ldC9pcHY2L2lwNm1yLmNgKS4gV2UmIzM5O3JlIGFsc28gc2VlaW5nIHRoZSBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCBmbGFnIGJlaW5nIGFkZGVkIHRvIGBremFsbG9jX29iamAgY2FsbHMsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1yX3RhYmxlX2FsbG9jYCBpbiBgbmV0L2lwdjQvaXBtcl9iYXNlLmNgLiBDbGFzc2ljIG1vdmUgdG8gdHJhY2sgbWVtb3J5IHVzYWdlIHdpdGhpbiBtZW1vcnkgY29udHJvbCBncm91cHMsIG5vdGhpbmcgdG9vIGV4Y2l0aW5nIHNvIGZhci4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBhcmVuJiMzOTt0IGludHJvZHVjaW5nIGFueSBzdWJ0bGUgaXNzdWVzLiBUaGFua2Z1bGx5LCBga3phbGxvY2AgaXMgc3RpbGwgdXNlZCwgc28gemVybyBpbml0aWFsaXphdGlvbiBpcyBoYW5kbGVkLiBXZSYjMzk7cmUgb25seSBkZWFsaW5nIHdpdGggYWNjb3VudGluZyBmbGFncyBoZXJlLCBzbyB0aGVyZSBzaG91bGRuJiMzOTt0IGJlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGUgYFNMQUJfQUNDT1VOVGAgZmxhZyBpbiB0aGUgYG1ydF9jYWNoZXBgIGFsbG9jYXRpb25zIGlzIGp1c3QgZm9yIGFjY291bnRpbmcg4oCTIGl0IGRvZXNuJiMzOTt0IG1lc3Mgd2l0aCB0aGUgYWxsb2NhdGlvbiBpdHNlbGYuIEl0IGxvb2tzIGxpa2Ugbm8gbmV3IGFsbG9jYXRpb24gbG9naWMsIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNrcywgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBiZWluZyBpbnRyb2R1Y2VkIGFzIGEgcmVzdWx0IG9mIHRoZXNlIGNoYW5nZXMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgc291cmNlIGZvciBga3phbGxvY19vYmpgIGluIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2Agb3IgdXNlIGEgcXVpY2sgZ3JlcHBlciwganVzdCB0byBjb25maXJtIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBhY2N1cmF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3phbGxvY19vYmomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yX2Jhc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yX2Jhc2UuYz00Nj1tcl90YWJsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCxcbi0tXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYy01NC1cbm5ldC9pcHY0L2lwbXJfYmFzZS5jOjU1Olx0bXJ0ID0ga3phbGxvY19vYmooKm1ydCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbm5ldC9pcHY0L2lwbXJfYmFzZS5jLTU2LVx0aWYgKCFtcnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNTEKCQkJCQkJCW91dHB1dDogMTQ4CgkJCQkJCQl0aG91Z2h0czogMzAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE11bHRpY2FzdCBSb3V0aW5nIFRhYmxlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBvdmVyIHRoaXMgcGF0Y2guIEl0JiMzOTtzIHByZXR0eSBjbGVhci1jdXQuIFRoZXkmIzM5O3ZlIG1hZGUgc29tZSBjaGFuZ2VzIGludm9sdmluZyBtZW1vcnkgYWNjb3VudGluZywgYnV0IHRoZSBjb3JlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2Nlc3MgaGFzbiYjMzk7dCBjaGFuZ2VkIGluIGFueSB3YXkgdGhhdCB3b3VsZCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGV5JiMzOTtyZSB1c2luZyBga3phbGxvY19vYmpgIHRvIGFsbG9jYXRlIGFuZCB6ZXJvIHRoZSBtZW1vcnkgZm9yIHRoZSBgbXJ0YCBvYmplY3RzLCBhbmQgdGhleSYjMzk7dmUgYWRkZWQgYFNMQUJfQUNDT1VOVGAgdG8gdGhlIGttZW1fY2FjaGUgY3JlYXRpb24gaW4gYGlwbXIuY2AgYW5kIGBpcDZtci5jYC4gVGhhdCYjMzk7cyBpdC4KCk15IGltbWVkaWF0ZSBjb25jZXJuIHdhcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGV4cG9zZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBCdXQgYGt6YWxsb2Nfb2JqYCAqc3RpbGwqIHplcm9lcyB0aGUgbWVtb3J5OyB0aGUgYWRkaXRpb24gb2YgYFNMQUJfQUNDT1VOVGAgaXMgKm9ubHkqIGFib3V0IG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBmb3IgdGhvc2Ugc2xhYiBhbGxvY2F0aW9ucy4gSSBjYW4gc2VlIG5vIHBhdGggd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgZXZlbiBicmFuY2hlZCBvbi4gVGhlcmUmIzM5O3Mgbm90aGluZyBoZXJlIHRoYXQgbG9va3Mgcmlza3kgZnJvbSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBwZXJzcGVjdGl2ZS4KClRoZXJlZm9yZSwgdGhpcyBkb2VzbiYjMzk7dCB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB3aXRoIEtNU0FOLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLgoKSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2Agb24gdGhpcy4gSSYjMzk7bSBjb25maWRlbnQgdGhlcmUgYXJlIG5vIEtNU0FOIGNvbmNlcm5zLiBUaGUgcGF0Y2ggaXMgc2ltcGx5IGFkZGluZyBhY2NvdW50aW5nIGZsYWdzLCBhbmQgdGhlIG1lbW9yeSBpbml0aWFsaXphdGlvbiByZW1haW5zIGludGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBmbGFncyAoU0xBQl9BQ0NPVU5UIGFuZCBHRlBfS0VSTkVMX0FDQ09VTlQpIHRvIHRoZSBJUHY0L0lQdjYgbXVsdGljYXN0IHJvdXRpbmcgdGFibGUgYWxsb2NhdGlvbnMgYW5kIHNsYWIgY2FjaGUgY3JlYXRpb24gKG1ydF9jYWNoZXApLiBUaGUgYWxsb2NhdGlvbiBpbiBtcl90YWJsZV9hbGxvYyBzdGlsbCB1c2VzIGt6YWxsb2Nfb2JqIHdoaWNoIGVuc3VyZXMgemVyby1pbml0aWFsaXphdGlvbiBvZiBtZW1vcnksIGFuZCBTTEFCX0FDQ09VTlQgc29sZWx5IGVuYWJsZXMgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIG9uIGNhY2hlIGFsbG9jYXRpb25zLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlci1zcGFjZSwgb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBmbGFncyAoU0xBQl9BQ0NPVU5UIGFuZCBHRlBfS0VSTkVMX0FDQ09VTlQpIHRvIHRoZSBJUHY0L0lQdjYgbXVsdGljYXN0IHJvdXRpbmcgdGFibGUgYWxsb2NhdGlvbnMgYW5kIHNsYWIgY2FjaGUgY3JlYXRpb24gKG1ydF9jYWNoZXApLiBUaGUgYWxsb2NhdGlvbiBpbiBtcl90YWJsZV9hbGxvYyBzdGlsbCB1c2VzIGt6YWxsb2Nfb2JqIHdoaWNoIGVuc3VyZXMgemVyby1pbml0aWFsaXphdGlvbiBvZiBtZW1vcnksIGFuZCBTTEFCX0FDQ09VTlQgc29sZWx5IGVuYWJsZXMgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIG9uIGNhY2hlIGFsbG9jYXRpb25zLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlci1zcGFjZSwgb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzo1NDoyNC42NjUzMzMzMTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODgyMjY2NjM5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9NUk9VVEVcIixcbiAgICBcIklQVjZfTVJPVVRFXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1yX3RhYmxlX2FsbG9jXCIsXG4gICAgXCJpcF9tcm91dGVfc2V0c29ja29wdFwiLFxuICAgIFwiaXA2X21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcG1yX21mY19hZGRcIixcbiAgICBcImlwNm1yX21mY19hZGRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgZmxhZ3MgKFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UKSB0byB0aGUgSVB2NC9JUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIGFsbG9jYXRpb25zIGFuZCBzbGFiIGNhY2hlIGNyZWF0aW9uIChtcnRfY2FjaGVwKS4gVGhlIGFsbG9jYXRpb24gaW4gbXJfdGFibGVfYWxsb2Mgc3RpbGwgdXNlcyBremFsbG9jX29iaiB3aGljaCBlbnN1cmVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgbWVtb3J5LCBhbmQgU0xBQl9BQ0NPVU5UIHNvbGVseSBlbmFibGVzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBvbiBjYWNoZSBhbGxvY2F0aW9ucy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXItc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UIGZsYWdzIHRvIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHJvdXRpbmcgdGFibGUgYW5kIGZvcndhcmRpbmcgY2FjaGUgYWxsb2NhdGlvbnMgKG1mY19jYWNoZSwgbWZjNl9jYWNoZSwgbXJfdGFibGUpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHJlYWNoYWJsZSB2aWEgc2V0c29ja29wdCBhbmQgbmV0bGluayBtdWx0aWNhc3Qgcm91dGluZyBpbnRlcmZhY2VzLCB3YXJyYW50aW5nIGZ1enppbmcgdW5kZXIgbWVtb3J5LWFjY291bnRpbmcgY29uZmlndXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjI0LjY2NTMzOTYwNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4NTQ0OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmJhYThkMDU2MmZkOTYyOGE4MjE2NGVmOTQzODFjZjBlZjM1YzI0ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDEzOjU0OjIzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuY1xcbmluZGV4IGU1ZjJiMWM2MTUwZDIuLmI5YzU0NGQ0OGM0NTIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBtci5jXFxuKysrIGIvbmV0L2lwdjQvaXBtci5jXFxuQEAgLTMzNzYsNyArMzM3Niw4IEBAIGludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKVxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMpO1xcbitcXHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsXFxuK1xcdFxcdFxcdFxcdFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpO1xcbiBcXG4gXFx0ZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2aXBtcl9uZXRfb3BzKTtcXG4gXFx0aWYgKGVycilcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtcl9iYXNlLmMgYi9uZXQvaXB2NC9pcG1yX2Jhc2UuY1xcbmluZGV4IDg2N2IyNGJlZGVkMTEuLmEwZWM2ZDE5YTIzN2YgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBtcl9iYXNlLmNcXG4rKysgYi9uZXQvaXB2NC9pcG1yX2Jhc2UuY1xcbkBAIC01Miw3ICs1Miw3IEBAIG1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxcbiBcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdG1ydCA9IGt6YWxsb2Nfb2JqKCptcnQpO1xcbitcXHRtcnQgPSBremFsbG9jX29iaigqbXJ0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIW1ydClcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcdG1ydC1cXHUwMDNlaWQgPSBpZDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmNcXG5pbmRleCAzZjJlZDliNzdkZWI1Li45ZDgxMTZiNWVkYjE3IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNm1yLmNcXG4rKysgYi9uZXQvaXB2Ni9pcDZtci5jXFxuQEAgLTE0MjcsNyArMTQyNyw3IEBAIGludCBfX2luaXQgaXA2X21yX2luaXQodm9pZClcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOKTtcXG4rXFx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFtcnRfY2FjaGVwKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjI1LjEyNDY1MzE2N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTIyOTAwNzQ3MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVJPVVRFXCIsXG4gICAgXCJJUFY2X01ST1VURVwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcl90YWJsZV9hbGxvY1wiLFxuICAgIFwiaXBfbXJvdXRlX3NldHNvY2tvcHRcIixcbiAgICBcImlwNl9tcm91dGVfc2V0c29ja29wdFwiLFxuICAgIFwiaXBtcl9tZmNfYWRkXCIsXG4gICAgXCJpcDZtcl9tZmNfYWRkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBTTEFCX0FDQ09VTlQgYW5kIEdGUF9LRVJORUxfQUNDT1VOVCBmbGFncyB0byBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIGFuZCBmb3J3YXJkaW5nIGNhY2hlIGFsbG9jYXRpb25zIChtZmNfY2FjaGUsIG1mYzZfY2FjaGUsIG1yX3RhYmxlKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSByZWFjaGFibGUgdmlhIHNldHNvY2tvcHQgYW5kIG5ldGxpbmsgbXVsdGljYXN0IHJvdXRpbmcgaW50ZXJmYWNlcywgd2FycmFudGluZyBmdXp6aW5nIHVuZGVyIG1lbW9yeS1hY2NvdW50aW5nIGNvbmZpZ3VyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJiYWE4ZDA1NjJmZDk2MjhhODIxNjRlZjk0MzgxY2YwZWYzNWMyNGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDEzOjU0OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jXG5pbmRleCBlNWYyYjFjNjE1MGQyLi5iOWM1NDRkNDhjNDUyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtci5jXG4rKysgYi9uZXQvaXB2NC9pcG1yLmNcbkBAIC0zMzc2LDcgKzMzNzYsOCBAQCBpbnQgX19pbml0IGlwX21yX2luaXQodm9pZClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDKTtcbitcdG1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mY19jYWNoZSxcbitcdFx0XHRcdFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpO1xuIFxuIFx0ZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZpcG1yX25ldF9vcHMpO1xuIFx0aWYgKGVycilcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yX2Jhc2UuYyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXG5pbmRleCA4NjdiMjRiZWRlZDExLi5hMGVjNmQxOWEyMzdmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtcl9iYXNlLmNcbisrKyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXG5AQCAtNTIsNyArNTIsNyBAQCBtcl90YWJsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCxcbiBcdHN0cnVjdCBtcl90YWJsZSAqbXJ0O1xuIFx0aW50IGVycjtcbiBcbi1cdG1ydCA9IGt6YWxsb2Nfb2JqKCptcnQpO1xuK1x0bXJ0ID0ga3phbGxvY19vYmooKm1ydCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbXJ0KVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcdG1ydC1cdTAwM2VpZCA9IGlkO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jXG5pbmRleCAzZjJlZDliNzdkZWI1Li45ZDgxMTZiNWVkYjE3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2bXIuY1xuKysrIGIvbmV0L2lwdjYvaXA2bXIuY1xuQEAgLTE0MjcsNyArMTQyNyw3IEBAIGludCBfX2luaXQgaXA2X21yX2luaXQodm9pZClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOKTtcbitcdG1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mYzZfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfQUNDT1VOVCk7XG4gXHRpZiAoIW1ydF9jYWNoZXApXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6NTQ6MjUuMTI0NjU0NjE2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk2NDYxNDQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGlzIElQIE11bHRpY2FzdCBQYXRjaCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmb2N1cyBoZXJlIGlzIG1lbW9yeSBhY2NvdW50aW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBJUCBtdWx0aWNhc3Qgcm91dGluZyBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIHBlcmhhcHMgcHJldmVudGluZyBwb3RlbnRpYWwgZGVuaWFsLW9mLXNlcnZpY2UgdnVsbmVyYWJpbGl0aWVzLiBMZXQncyBzZWUuLi4gdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBpcG1yLmNgLCBgaXBtcl9iYXNlLmNgLCBhbmQgYGlwNm1yLmNgLCB3aGljaCBhcmUgYWxsIGNvcmUgbXVsdGljYXN0IHJvdXRpbmcgY29tcG9uZW50cyBmb3IgYm90aCBJUHY0IGFuZCBJUHY2LlxuXG5UaGUgZmlyc3QgY2hhbmdlIGluIGBpcG1yLmNgLCB3aXRoaW4gdGhlIGBpcF9tcl9pbml0YCBmdW5jdGlvbiwgYWRkcyBgU0xBQl9BQ0NPVU5UYCB0byB0aGUgYG1mY19jYWNoZWAgS01FTSBjYWNoZS4gVGhpcyB0ZWxscyB0aGUga2VybmVsJ3Mgc2xhYiBhbGxvY2F0b3IgdG8gYWNjb3VudCBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIGZyb20gdGhpcyBjYWNoZS4gVGhhdCdzIGEgY2xhc3NpYyBzaWduYWwgb2YgbWVtb3J5IHRyYWNraW5nLiBUaGUgc2FtZSB0aGluZyBpcyBoYXBwZW5pbmcgd2l0aCB0aGUgYG1mYzZfY2FjaGVgIGluIGBpcDZtci5jYCwgd2l0aCB0aGUgYWRkaXRpb24gb2YgYFNMQUJfQUNDT1VOVGAuIFNvIHRoYXQncyBjb25zaXN0ZW50LlxuXG5UaGVuLCBvdmVyIGluIGBpcG1yX2Jhc2UuY2AsIGluc2lkZSB0aGUgYG1yX3RhYmxlX2FsbG9jYCBmdW5jdGlvbiwgdGhlIGBremFsbG9jX29iaigpYCBjYWxsIGlzIGdldHRpbmcgdGhlIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGZsYWcuIFRoaXMgaXMgdGhlIGV4cGxpY2l0IGtlcm5lbC1sZXZlbCBhbGxvY2F0aW9uIGZsYWcgdGhhdCdzIGdvaW5nIHRvIHRyYWNrIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciB0aGlzIG11bHRpY2FzdCByb3V0aW5nIHRhYmxlLiBUaGlzIGlzIGFub3RoZXIgY2xlYXIgaW5kaWNhdG9yIHRoYXQgdGhlcmUgaXMgYW4gaW50ZW50IHRvIGtlZXAgdHJhY2sgb2YgdGhpcyBtZW1vcnkuXG5cblNvLCB0aGUgY29tbW9uIHRocmVhZCBpcyBtZW1vcnkgYWNjb3VudGluZyBpbiBtdWx0aWNhc3Qgcm91dGluZy4gTG9va3MgbGlrZSB0aGUgaW50ZW50aW9uIGlzIGRlZmluaXRlbHkgdG8gdHJhY2sgdGhlc2UgbWVtb3J5IGFsbG9jYXRpb25zIGFuZCBwb3RlbnRpYWxseSBzZXQgbGltaXRzLCBvciBhdCBsZWFzdCBoYXZlIGEgY2xlYXJlciBwaWN0dXJlIG9mIG1lbW9yeSB1c2FnZSBpbiBtdWx0aWNhc3Qgcm91dGluZy4gTm93LCBJIHdhbnQgdG8gY29uZmlybSB3aGljaCBLY29uZmlnIG9wdGlvbnMgYXJlIGludm9sdmVkIHNvIEknbGwgcmVhY2ggZm9yIGdyZXBwZXIgdG8gZ2V0IGEgZ29vZCBpZGVhIG9mIHdoYXQncyBnb2luZyBvbiBhbmQgd2hlcmUgdGhpcyBpcyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzA0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6NTQ6MzQuMDg5MjcxMDEzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NjIwMjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX01ST1VURVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MjA3PWNvbmZpZyBORVRfSVBHUkVfQlJPQURDQVNUXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTIxNS1cXG5uZXQvaXB2NC9LY29uZmlnOjIxNjpjb25maWcgSVBfTVJPVVRFX0NPTU1PTlxcbm5ldC9pcHY0L0tjb25maWctMjE3LVxcdGJvb2xcXG5uZXQvaXB2NC9LY29uZmlnOjIxODpcXHRkZXBlbmRzIG9uIElQX01ST1VURSB8fCBJUFY2X01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjE5LVxcbm5ldC9pcHY0L0tjb25maWc6MjIwOmNvbmZpZyBJUF9NUk9VVEVcXG5uZXQvaXB2NC9LY29uZmlnLTIyMS1cXHRib29sIFxcXCJJUDogbXVsdGljYXN0IHJvdXRpbmdcXFwiXFxubmV0L2lwdjQvS2NvbmZpZy0yMjItXFx0ZGVwZW5kcyBvbiBJUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9LY29uZmlnOjIyMzpcXHRzZWxlY3QgSVBfTVJPVVRFX0NPTU1PTlxcbm5ldC9pcHY0L0tjb25maWctMjI0LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjMxLVxcbm5ldC9pcHY0L0tjb25maWc6MjMyOmNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjQvS2NvbmZpZy0yMzMtXFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjIzNDpcXHRkZXBlbmRzIG9uIElQX01ST1VURSBcXHUwMDI2XFx1MDAyNiBJUF9BRFZBTkNFRF9ST1VURVJcXG5uZXQvaXB2NC9LY29uZmlnLTIzNS1cXHRzZWxlY3QgRklCX1JVTEVTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTI0Nj1jb25maWcgSVBfUElNU01fVjFcXG5uZXQvaXB2NC9LY29uZmlnLTI0Ny1cXHRib29sIFxcXCJJUDogUElNLVNNIHZlcnNpb24gMSBzdXBwb3J0XFxcIlxcbm5ldC9pcHY0L0tjb25maWc6MjQ4OlxcdGRlcGVuZHMgb24gSVBfTVJPVVRFXFxubmV0L2lwdjQvS2NvbmZpZy0yNDktXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0yNTk9Y29uZmlnIElQX1BJTVNNX1YyXFxubmV0L2lwdjQvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiSVA6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFxcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjI2MTpcXHRkZXBlbmRzIG9uIElQX01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjYyLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlPTIyPW9iai0kKENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMpICs9IGZpYl9ydWxlcy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX0lQX01ST1VURSkgKz0gaXBtci5vXFxubmV0L2lwdjQvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX0lQX01ST1VURV9DT01NT04pICs9IGlwbXJfYmFzZS5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX05FVF9JUElQKSArPSBpcGlwLm9cXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xMTYtI2luY2x1ZGUgXFx1MDAzY25ldC9zZWN1cmVfc2VxLmhcXHUwMDNlXFxubmV0L2lwdjQvYWZfaW5ldC5jOjExNzojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xMTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21yb3V0ZS5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTE4ODI9c3RhdGljIGludCBfX2luaXQgaW5ldF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTk4OC1cXHQgKi9cXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTk4OTojaWYgZGVmaW5lZChDT05GSUdfSVBfTVJPVVRFKVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xOTkwLVxcdGlmIChpcF9tcl9pbml0KCkpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTAxLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXJfaXB2NC5oXFx1MDAzZVxcbm5ldC9pcHY0L2lnbXAuYzoxMDI6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVcXG5uZXQvaXB2NC9pZ21wLmMtMTAzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tcm91dGUuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jPTM2Nz1pbnQgaXBfbWNfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMzgzLVxcdFxcdGlmIChza19tY19sb29wKHNrKVxcbm5ldC9pcHY0L2lwX291dHB1dC5jOjM4NDojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTM4NS1cXHRcXHQvKiBTbWFsbCBvcHRpbWl6YXRpb246IGRvIG5vdCBsb29wYmFjayBub3QgbG9jYWwgZnJhbWVzLFxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTExOD1zdGF0aWMgdm9pZCBpcG1yX2V4cGlyZV9wcm9jZXNzKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG5uZXQvaXB2NC9pcG1yLmMtMTE5LVxcbm5ldC9pcHY0L2lwbXIuYzoxMjA6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjQvaXBtci5jLTEyMS0jZGVmaW5lIGlwbXJfZm9yX2VhY2hfdGFibGUobXJ0LCBuZXQpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTQwOD1zdGF0aWMgdm9pZCBpcG1yX25ld190YWJsZV9zZXQoc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtNDEwLXtcXG5uZXQvaXB2NC9pcG1yLmM6NDExOiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY0L2lwbXIuYy00MTItXFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNm1ydC1cXHUwMDNlbGlzdCwgXFx1MDAyNm5ldC1cXHUwMDNlaXB2NC5tcl90YWJsZXMpO1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTE0MTA9aW50IGlwX21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTU3OC1cXHRjYXNlIE1SVF9UQUJMRTpcXG5uZXQvaXB2NC9pcG1yLmM6MTU3OTpcXHRcXHRpZiAoIUlTX0JVSUxUSU4oQ09ORklHX0lQX01ST1VURV9NVUxUSVBMRV9UQUJMRVMpKSB7XFxubmV0L2lwdjQvaXBtci5jLTE1ODAtXFx0XFx0XFx0cmV0ID0gLUVOT1BST1RPT1BUO1xcbi0tXFxubmV0L2lwdjQvcmF3LmM9ODg5PXN0YXRpYyBpbnQgcmF3X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxcbi0tXFxubmV0L2lwdjQvcmF3LmMtOTA5LVxcdGRlZmF1bHQ6XFxubmV0L2lwdjQvcmF3LmM6OTEwOiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXFxubmV0L2lwdjQvcmF3LmMtOTExLVxcdFxcdHJldHVybiBpcG1yX2lvY3RsKHNrLCBjbWQsIGthcmcpO1xcbi0tXFxubmV0L2lwdjQvcmF3LmM9OTE5PXN0YXRpYyBpbnQgY29tcGF0X3Jhd19pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxubmV0L2lwdjQvcmF3LmMtOTI1LVxcdGRlZmF1bHQ6XFxubmV0L2lwdjQvcmF3LmM6OTI2OiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXFxubmV0L2lwdjQvcmF3LmMtOTI3LVxcdFxcdHJldHVybiBpcG1yX2NvbXBhdF9pb2N0bChzaywgY21kLCBjb21wYXRfcHRyKGFyZykpO1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0xNzcxPWlwX3JvdXRlX2lucHV0X21jKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0xODAxLVxcbm5ldC9pcHY0L3JvdXRlLmM6MTgwMjojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbm5ldC9pcHY0L3JvdXRlLmMtMTgwMy1cXHRpZiAoIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGRhZGRyKSBcXHUwMDI2XFx1MDAyNiBJTl9ERVZfTUZPUldBUkQoaW5fZGV2KSlcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MjUyMz1pcF9yb3V0ZV9pbnB1dF9yY3Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTI1NTktXFx0XFx0aWYgKG91clxcbm5ldC9pcHY0L3JvdXRlLmM6MjU2MDojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbm5ldC9pcHY0L3JvdXRlLmMtMjU2MS1cXHRcXHRcXHR8fFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0yNTkxPXN0YXRpYyBzdHJ1Y3QgcnRhYmxlICpfX21rcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTI2OTgtXFx0XFx0fVxcbm5ldC9pcHY0L3JvdXRlLmM6MjY5OTojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbm5ldC9pcHY0L3JvdXRlLmMtMjcwMC1cXHRcXHRpZiAodHlwZSA9PSBSVE5fTVVMVElDQVNUKSB7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTI5Nzg9c3RhdGljIGludCBydF9maWxsX2luZm8oc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgZHN0LCBfX2JlMzIgc3JjLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0zMDgwLVxcdFxcdGlmIChydF9pc19pbnB1dF9yb3V0ZShydCkpIHtcXG5uZXQvaXB2NC9yb3V0ZS5jOjMwODE6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVcXG5uZXQvaXB2NC9yb3V0ZS5jLTMwODItXFx0XFx0XFx0aWYgKGlwdjRfaXNfbXVsdGljYXN0KGRzdCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MjU3PWNvbmZpZyBJUFY2X01ST1VURVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNTktXFx0ZGVwZW5kcyBvbiBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZzoyNjA6XFx0c2VsZWN0IElQX01ST1VURV9DT01NT05cXG5uZXQvaXB2Ni9LY29uZmlnLTI2MS1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjM0LjE2Njg5NjI2N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzUwNTYzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBjaGFuZ2VzLlxuXG4qKkRpdmluZyBEZWVwIGludG8gdGhlIE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBncmFudWxhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLCBhbmQgYSBzdXJmYWNlLWxldmVsIG92ZXJ2aWV3IGp1c3Qgd29uJ3QgY3V0IGl0LiBMZXQncyBzdGFydCBieSBkaXNzZWN0aW5nIHRoZW0gdGhvcm91Z2hseS4gSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IHByZWZlcnJlZCB0b29scyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSDigJMgcHJvYmFibHkgYSBjb21iaW5hdGlvbiBvZiBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRleHQgb2YgdGhvc2UgZmlsZXMgaW4gdGhlaXIgZW50aXJldHksIGFuZCBgZ3JlcHBlcmAgdG8gcXVpY2tseSBwaW5wb2ludCBhbmQgZXh0cmFjdCB0aGUgcmVsZXZhbnQgY29kZSBzbmlwcGV0cyB0aGF0IGFyZSBpbXBhY3RlZCBieSB0aGlzIHBhdGNoLiBJJ2xsIG5lZWQgdG8gc2VlIHByZWNpc2VseSAqaG93KiB0aGUgc3Vycm91bmRpbmcgY29kZSBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBtb2RpZmllZCBwb3J0aW9ucy4gTm8gc2hvcnRjdXRzIGhlcmU7IGdvdHRhIGdldCBhIHNvbGlkIGdyYXNwIG9uIHRoZSBiZWZvcmUtYW5kLWFmdGVyIHNjZW5hcmlvcyB0byB0cnVseSBhc3Nlc3MgdGhlIGltcGFjdCBhbmQgZW5zdXJlIHRoZXJlIGFyZSBubyB1bmZvcmVzZWVuIGNvbnNlcXVlbmNlcyBvciByZWdyZXNzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAyMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjM2LjIwMTk1NTkzOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcG1yLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM3MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM3MDpcXHRcXHR7LnByb3RvY29sID0gUlROTF9GQU1JTFlfSVBNUiwgLm1zZ3R5cGUgPSBSVE1fR0VUUk9VVEUsXFxuMzM3MTpcXHRcXHQgLmRvaXQgPSBpcG1yX3J0bV9nZXRyb3V0ZSwgLmR1bXBpdCA9IGlwbXJfcnRtX2R1bXByb3V0ZSxcXG4zMzcyOlxcdFxcdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRCB8IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcXG4zMzczOlxcdH07XFxuMzM3NDpcXHRcXG4zMzc1OlxcdGludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKVxcbjMzNzY6XFx0e1xcbjMzNzc6XFx0XFx0aW50IGVycjtcXG4zMzc4OlxcdFxcbjMzNzk6XFx0XFx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLFxcbjMzODA6XFx0XFx0XFx0XFx0XFx0U0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9QQU5JQyB8IFNMQUJfQUNDT1VOVCk7XFxuMzM4MTpcXHRcXG4zMzgyOlxcdFxcdGVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXFx1MDAyNmlwbXJfbmV0X29wcyk7XFxuMzM4MzpcXHRcXHRpZiAoZXJyKVxcbjMzODQ6XFx0XFx0XFx0Z290byByZWdfcGVybmV0X2ZhaWw7XFxuMzM4NTpcXHRcXG4zMzg2OlxcdFxcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2aXBfbXJfbm90aWZpZXIpO1xcbjMzODc6XFx0XFx0aWYgKGVycilcXG4zMzg4OlxcdFxcdFxcdGdvdG8gcmVnX25vdGlmX2ZhaWw7XFxuMzM4OTpcXHQjaWZkZWYgQ09ORklHX0lQX1BJTVNNX1YyXFxuMzM5MDpcXHRcXHRpZiAoaW5ldF9hZGRfcHJvdG9jb2woXFx1MDAyNnBpbV9wcm90b2NvbCwgSVBQUk9UT19QSU0pIFxcdTAwM2MgMCkge1xcbjMzOTE6XFx0XFx0XFx0cHJfZXJyKFxcXCIlczogY2FuJ3QgYWRkIFBJTSBwcm90b2NvbFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbjMzOTI6XFx0XFx0XFx0ZXJyID0gLUVBR0FJTjtcXG4zMzkzOlxcdFxcdFxcdGdvdG8gYWRkX3Byb3RvX2ZhaWw7XFxuMzM5NDpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjM2LjIwMjEzOTA0OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNDU4MzcwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIElQIE11bHRpY2FzdCBSb3V0aW5nIENvZGUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IG11bHRpY2FzdCByb3V0aW5nLCBhbmQgSSdtIHRoaW5raW5nLCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIGtlcm5lbCBjb2RlLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSBhIGxvdCBvZiB0aGUgY29yZSBtdWx0aWNhc3Qgcm91dGluZyBsb2dpYyBsaXZlcyBpbiB0aGUgSVB2NCBzdGFjay4gSSBmaWd1cmUsIGlmIHdlJ3JlIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBvciBwb3RlbnRpYWxseSBkZWJ1ZyBzb21ldGhpbmcsIGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGZvdW5kYXRpb24gaXMga2V5LiBJJ20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDUyLiBMZXQncyBzZWUgd2hhdCB0aGF0IHNlY3Rpb24gaXMgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2OTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjM4LjI0Nzk3OTEzOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwbXJfYmFzZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdHZvaWQgbXJfdGFibGVfZnJlZShzdHJ1Y3QgbXJfdGFibGUgKm1ydClcXG4gIDQxOlxcdHtcXG4gIDQyOlxcdFxcdHF1ZXVlX3JjdV93b3JrKHN5c3RlbV9kZmxfd3EsIFxcdTAwMjZtcnQtXFx1MDAzZXdvcmspO1xcbiAgNDM6XFx0fVxcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdHJ1Y3QgbXJfdGFibGUgKlxcbiAgNDY6XFx0bXJfdGFibGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsXFxuICA0NzpcXHRcXHQgICAgICAgc3RydWN0IG1yX3RhYmxlX29wcyAqb3BzLFxcbiAgNDg6XFx0XFx0ICAgICAgIHZvaWQgKCpleHBpcmVfZnVuYykoc3RydWN0IHRpbWVyX2xpc3QgKnQpLFxcbiAgNDk6XFx0XFx0ICAgICAgIHZvaWQgKCp0YWJsZV9zZXQpKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbiAgNTA6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXQgKm5ldCkpXFxuICA1MTpcXHR7XFxuICA1MjpcXHRcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcXG4gIDUzOlxcdFxcdGludCBlcnI7XFxuICA1NDpcXHRcXG4gIDU1OlxcdFxcdG1ydCA9IGt6YWxsb2Nfb2JqKCptcnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuICA1NjpcXHRcXHRpZiAoIW1ydClcXG4gIDU3OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiAgNTg6XFx0XFx0bXJ0LVxcdTAwM2VpZCA9IGlkO1xcbiAgNTk6XFx0XFx0d3JpdGVfcG5ldChcXHUwMDI2bXJ0LVxcdTAwM2VuZXQsIG5ldCk7XFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdG1ydC1cXHUwMDNlb3BzID0gKm9wcztcXG4gIDYyOlxcdFxcdGVyciA9IHJobHRhYmxlX2luaXQoXFx1MDAyNm1ydC1cXHUwMDNlbWZjX2hhc2gsIG1ydC1cXHUwMDNlb3BzLnJodF9wYXJhbXMpO1xcbiAgNjM6XFx0XFx0aWYgKGVycikge1xcbiAgNjQ6XFx0XFx0XFx0a2ZyZWUobXJ0KTtcXG4gIDY1OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuICA2NjpcXHRcXHR9XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdElOSVRfUkNVX1dPUksoXFx1MDAyNm1ydC1cXHUwMDNld29yaywgX19tcl9mcmVlX3RhYmxlKTtcXG4gIDY5OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZtcnQtXFx1MDAzZW1mY19jYWNoZV9saXN0KTtcXG4gIDcwOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZtcnQtXFx1MDAzZW1mY191bnJlc19xdWV1ZSk7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdHRpbWVyX3NldHVwKFxcdTAwMjZtcnQtXFx1MDAzZWlwbXJfZXhwaXJlX3RpbWVyLCBleHBpcmVfZnVuYywgMCk7XFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdG1ydC1cXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtID0gLTE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjM4LjI0ODA1MjIyOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NTAxNjIxNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGlwNm1yLmNgKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUga2VybmVsJ3MgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBjb2RlLCBzcGVjaWZpY2FsbHkgYG5ldC9pcHY2L2lwNm1yLmNgLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZSBJJ20gdHJvdWJsZXNob290aW5nLCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDE0MjcuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhcyBvZnRlbiBjZXJ0YWluIGNvcmUgZnVuY3Rpb25hbGl0aWVzIG9yIHBvdGVudGlhbCBwcm9ibGVtIGFyZWFzIHRlbmQgdG8gYmUgbG9jYWxpemVkIGFyb3VuZCBzaW1pbGFyIHNlY3Rpb25zLCBieSBjb252ZW50aW9uLCBvciBmcm9tIHBhc3QgZXhwZXJpZW5jZS4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBzZWN0aW9uIG9mIHRoZSBjb2RlIHJldmVhbHMuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIGNsdWVzIHJlbGF0ZWQgdG8gW0ltcGxpZWQgUHJvYmxlbSBBcmVhIC0gaW5zZXJ0IGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBwcm9ibGVtXS4gSSdsbCBiZSBmb2N1c2VkIG9uIGhvdyB0aGUgY29kZSBoYW5kbGVzIFtTcGVjaWZpYyBBcmVhIG9mIGludGVyZXN0IC0gYWxzbyBpbXBsaWVkIGZyb20gb3JpZ2luYWwgcHJvYmxlbV0sIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgb2J2aW91cyBsb2dpYyBlcnJvcnMsIHJhY2UgY29uZGl0aW9ucywgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MzcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjQwLjY5ODIxNzI4N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXA2bXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDIwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDIwOlxcdFxcdHsub3duZXIgPSBUSElTX01PRFVMRSwgLnByb3RvY29sID0gUlROTF9GQU1JTFlfSVA2TVIsXFxuMTQyMTpcXHRcXHQgLm1zZ3R5cGUgPSBSVE1fR0VUUk9VVEUsXFxuMTQyMjpcXHRcXHQgLmRvaXQgPSBpcDZtcl9ydG1fZ2V0cm91dGUsIC5kdW1waXQgPSBpcDZtcl9ydG1fZHVtcHJvdXRlLFxcbjE0MjM6XFx0XFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEIHwgUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxcbjE0MjQ6XFx0fTtcXG4xNDI1OlxcdFxcbjE0MjY6XFx0aW50IF9faW5pdCBpcDZfbXJfaW5pdCh2b2lkKVxcbjE0Mjc6XFx0e1xcbjE0Mjg6XFx0XFx0aW50IGVycjtcXG4xNDI5OlxcdFxcbjE0MzA6XFx0XFx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9BQ0NPVU5UKTtcXG4xNDMxOlxcdFxcdGlmICghbXJ0X2NhY2hlcClcXG4xNDMyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE0MzM6XFx0XFxuMTQzNDpcXHRcXHRlcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZpcDZtcl9uZXRfb3BzKTtcXG4xNDM1OlxcdFxcdGlmIChlcnIpXFxuMTQzNjpcXHRcXHRcXHRnb3RvIHJlZ19wZXJuZXRfZmFpbDtcXG4xNDM3OlxcdFxcbjE0Mzg6XFx0XFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZpcDZfbXJfbm90aWZpZXIpO1xcbjE0Mzk6XFx0XFx0aWYgKGVycilcXG4xNDQwOlxcdFxcdFxcdGdvdG8gcmVnX25vdGlmX2ZhaWw7XFxuMTQ0MTpcXHQjaWZkZWYgQ09ORklHX0lQVjZfUElNU01fVjJcXG4xNDQyOlxcdFxcdGlmIChpbmV0Nl9hZGRfcHJvdG9jb2woXFx1MDAyNnBpbTZfcHJvdG9jb2wsIElQUFJPVE9fUElNKSBcXHUwMDNjIDApIHtcXG4xNDQzOlxcdFxcdFxcdHByX2VycihcXFwiJXM6IGNhbid0IGFkZCBQSU0gcHJvdG9jb2xcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4xNDQ0OlxcdFxcdFxcdGVyciA9IC1FQUdBSU47XFxuMTQ0NTpcXHRcXHRcXHRnb3RvIGFkZF9wcm90b19mYWlsO1xcbjE0NDY6XFx0XFx0fVxcbjE0NDc6XFx0I2VuZGlmXFxuMTQ0ODpcXHRcXHRlcnIgPSBydG5sX3JlZ2lzdGVyX21hbnkoaXA2bXJfcnRubF9tc2dfaGFuZGxlcnMpO1xcbjE0NDk6XFx0XFx0aWYgKCFlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjQwLjY5ODM0MTk0N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDI4MzkzMjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz10cnVlOiBNdWx0aWNhc3QgUm91dGluZyBNZW1vcnkgQWNjb3VudGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBhZGRlZCBgU0xBQl9BQ0NPVU5UYCB0byBgbXJ0X2NhY2hlcGAgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9mIGJvdGggSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZywgYW5kIGl0IGFkZGVkIGBHRlBfS0VSTkVMX0FDQ09VTlRgIHdoZW4gYWxsb2NhdGluZyBgbXJfdGFibGVgIG9iamVjdHMuIFRoZSBpbnRlbnQsIEkgc2VlLCBpcyB0byBpbnRlZ3JhdGUgbWVtY2cgKGNncm91cCBtZW1vcnkgYWNjb3VudGluZykgaW50byB0aGVzZSBtdWx0aWNhc3Qgcm91dGluZyBzdHJ1Y3R1cmVzLiBTaW5jZSBgbWZjX2NhY2hlYCwgYG1mYzZfY2FjaGVgLCBhbmQgYG1yX3RhYmxlYCBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgaW4gcmVzcG9uc2UgdG8gdXNlci1zcGFjZSByZXF1ZXN0cyBvciBmcm9tIG5ldHdvcmsgcm91dGluZyB0YWJsZXMgY3JlYXRlZCBieSB1c2VyLXNwYWNlIHByb2Nlc3NlcywgdGhpcyBhY2NvdW50aW5nIHByZXZlbnRzIHVzZXIgcHJvY2Vzc2VzIHdpdGhpbiBtZW1jZ3MgZnJvbSBleGNlZWRpbmcgdGhlaXIgbWVtb3J5IGxpbWl0cyB1bm5vdGljZWQgYW5kIGV4aGF1c3RpbmcgdGhlIHN5c3RlbS5cblxuTm93LCBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlPyBBYnNvbHV0ZWx5ISBXZSdyZSB0YWxraW5nIGNvcmUgbmV0d29ya2luZyDigJMgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZy4gVGhpcyBhbGlnbnMgd2l0aCB0aGUgXCJjb3JlIHN1YnN5c3RlbXNcIiBwb3NpdGl2ZSBjcml0ZXJpb24gb3V0bGluZWQ6IFwiQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4uLi4gY29yZSBuZXR3b3JraW5nLlwiIFRoZSBjaGFuZ2VzIG1vZGlmeSBob3cgdGhlIGtlcm5lbCAqYWNjb3VudHMqIGZvciBtZW1vcnkgdXNlZCBieSBhIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbi4gVGhhdCdzIGEgZGVmaW5pdGUgcG9zaXRpdmUuIFRoaXMgaXNuJ3Qgc29tZSBvYnNjdXJlIGRyaXZlciBvciBhbiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aC5cblxuR2l2ZW4gdGhlIGNyaXRlcmlhIGZvciBkZXRlcm1pbmluZyBgV29ydGhGdXp6aW5nYCwgSSBjYW4gY29uZmlkZW50bHkgY29uY2x1ZGUgdGhhdCB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcsIHNvIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC5cblxuSSBzaG91bGQgcHJvYmFibHkgYWxzbyB2ZXJpZnkgdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWd1cmF0aW9ucyBieSBjaGVja2luZyBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9LY29uZmlnYCB0byBjb25maXJtIGBJUF9NUk9VVEVgIGFuZCBgSVBWNl9NUk9VVEVgIGFyZSBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjIxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6NTQ6NDUuMTI2NzM2OTgyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDc3ODQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNl9NUk9VVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9MjQzPWNvbmZpZyBJUFY2X1NVQlRSRUVTXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjY0LVxcbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjQ1LjE4MTUxODkyNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzQ5NTg5MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBpbiBgbmV0L2lwdjYvS2NvbmZpZ2A6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjYgS2NvbmZpZyBmb3IgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gemVybyBpbiBvbiB0aGF0IElQdjYgS2NvbmZpZyBmaWxlLiBMZXQncyBzZWUuLi4gdGhlIHRleHQgbWVudGlvbmVkIHRob3NlIGxpbmVzLCAyNTUtMjc1LCBzbyBJJ2xsIGp1bXAgcmlnaHQgdGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGV5IGxpa2VseSBkZWFsaW5nIHdpdGggaW4gdGhhdCBzcGVjaWZpYyByYW5nZT8gVGhpcyB1c3VhbGx5IGNvdmVycyBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIGV4cGVjdGluZyB0byBzZWUgZmVhdHVyZXMgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZCwgcG9zc2libHkgZGVwZW5kZW50IG9uIGRlcGVuZGVuY2llcyB3aXRoIG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSdtIGludGVyZXN0ZWQgaW4gdGhlIGludGVycGxheSBvZiB0aG9zZSBvcHRpb25zIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBob3cgdGhlc2Ugc2V0dGluZ3MgYWZmZWN0IHRoZSBvdmVyYWxsIElQdjYgc3RhY2sgYmVoYXZpb3IsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc3BlY2lmaWMgSVB2NiBmZWF0dXJlcyBsaWtlIGV4dGVuc2lvbiBoZWFkZXJzLCBmcmFnbWVudGF0aW9uLCBvciByb3V0aW5nLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiB0aGVzZSBvcHRpb25zIGFuZCBob3cgdGhleSB0aWUgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIElQdjYgbmV0d29yayBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyBjb25maWd1cmF0aW9ucyB0aG9zZSBsaW5lcyBob2xkIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTgzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6NTQ6NDcuOTMxMTExMzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNTY6XFx0XFxuIDI1NzpcXHRjb25maWcgSVBWNl9NUk9VVEVcXG4gMjU4OlxcdFxcdGJvb2wgXFxcIklQdjY6IG11bHRpY2FzdCByb3V0aW5nXFxcIlxcbiAyNTk6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2XFxuIDI2MDpcXHRcXHRzZWxlY3QgSVBfTVJPVVRFX0NPTU1PTlxcbiAyNjE6XFx0XFx0aGVscFxcbiAyNjI6XFx0XFx0ICBTdXBwb3J0IGZvciBJUHY2IG11bHRpY2FzdCBmb3J3YXJkaW5nLlxcbiAyNjM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNjQ6XFx0XFxuIDI2NTpcXHRjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxuIDI2NjpcXHRcXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuIDI2NzpcXHRcXHRkZXBlbmRzIG9uIElQVjZfTVJPVVRFXFxuIDI2ODpcXHRcXHRzZWxlY3QgRklCX1JVTEVTXFxuIDI2OTpcXHRcXHRoZWxwXFxuIDI3MDpcXHRcXHQgIE5vcm1hbGx5LCBhIG11bHRpY2FzdCByb3V0ZXIgcnVucyBhIHVzZXJzcGFjZSBkYWVtb24gYW5kIGRlY2lkZXNcXG4gMjcxOlxcdFxcdCAgd2hhdCB0byBkbyB3aXRoIGEgbXVsdGljYXN0IHBhY2tldCBiYXNlZCBvbiB0aGUgc291cmNlIGFuZFxcbiAyNzI6XFx0XFx0ICBkZXN0aW5hdGlvbiBhZGRyZXNzZXMuIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUgbXVsdGljYXN0IHJvdXRlclxcbiAyNzM6XFx0XFx0ICB3aWxsIGFsc28gYmUgYWJsZSB0byB0YWtlIGludGVyZmFjZXMgYW5kIHBhY2tldCBtYXJrcyBpbnRvXFxuIDI3NDpcXHRcXHQgIGFjY291bnQgYW5kIHJ1biBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdXNlcnNwYWNlIGRhZW1vbnNcXG4gMjc1OlxcdFxcdCAgc2ltdWx0YW5lb3VzbHksIGVhY2ggb25lIGhhbmRsaW5nIGEgc2luZ2xlIHRhYmxlLlxcbiAyNzY6XFx0XFxuIDI3NzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI3ODpcXHRcXG4gMjc5OlxcdGNvbmZpZyBJUFY2X1BJTVNNX1YyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjQ3LjkzMTE4MjA2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3NTI5NTQ5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSVB2NCBDb25maWd1cmF0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgSVB2NCBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBuZXQvaXB2NC9LY29uZmlnYC4gSXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGZvciB0aGUga2V5IHBhcmFtZXRlcnMgYW5kIGRlcGVuZGVuY2llcy4gSSdtIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgbGluZXMgMjE1IHRvIDI0MCwgYXMgdGhlIGNvbnRleHQgb2YgbXkgaW52ZXN0aWdhdGlvbiBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZSBpbmZvcm1hdGlvbiBJIHJlcXVpcmUgd2lsbCBiZSBjb250YWluZWQgd2l0aGluIHRoaXMgYmxvY2suIEl0J3MgbGlrZWx5IHRoYXQgY3JpdGljYWwgZmxhZ3MsIGJ1aWxkIG9wdGlvbnMsIG9yIGRlZmF1bHQgc2V0dGluZ3MgcmVsYXRlZCB0byB0aGUgZnVuY3Rpb25hbGl0eSBJJ20gd29ya2luZyB3aXRoIGFyZSBkZWZpbmVkIHRoZXJlLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODE4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzo1NDo1MS42ODQxMzk3MDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTU6XFx0XFxuIDIxNjpcXHRjb25maWcgSVBfTVJPVVRFX0NPTU1PTlxcbiAyMTc6XFx0XFx0Ym9vbFxcbiAyMTg6XFx0XFx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgfHwgSVBWNl9NUk9VVEVcXG4gMjE5OlxcdFxcbiAyMjA6XFx0Y29uZmlnIElQX01ST1VURVxcbiAyMjE6XFx0XFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdCByb3V0aW5nXFxcIlxcbiAyMjI6XFx0XFx0ZGVwZW5kcyBvbiBJUF9NVUxUSUNBU1RcXG4gMjIzOlxcdFxcdHNlbGVjdCBJUF9NUk9VVEVfQ09NTU9OXFxuIDIyNDpcXHRcXHRoZWxwXFxuIDIyNTpcXHRcXHQgIFRoaXMgaXMgdXNlZCBpZiB5b3Ugd2FudCB5b3VyIG1hY2hpbmUgdG8gYWN0IGFzIGEgcm91dGVyIGZvciBJUFxcbiAyMjY6XFx0XFx0ICBwYWNrZXRzIHRoYXQgaGF2ZSBzZXZlcmFsIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gSXQgaXMgbmVlZGVkIG9uIHRoZVxcbiAyMjc6XFx0XFx0ICBNQk9ORSwgYSBoaWdoIGJhbmR3aWR0aCBuZXR3b3JrIG9uIHRvcCBvZiB0aGUgSW50ZXJuZXQgd2hpY2ggY2Fycmllc1xcbiAyMjg6XFx0XFx0ICBhdWRpbyBhbmQgdmlkZW8gYnJvYWRjYXN0cy4gSW4gb3JkZXIgdG8gZG8gdGhhdCwgeW91IHdvdWxkIG1vc3RcXG4gMjI5OlxcdFxcdCAgbGlrZWx5IHJ1biB0aGUgcHJvZ3JhbSBtcm91dGVkLiBJZiB5b3UgaGF2ZW4ndCBoZWFyZCBhYm91dCBpdCwgeW91XFxuIDIzMDpcXHRcXHQgIGRvbid0IG5lZWQgaXQuXFxuIDIzMTpcXHRcXG4gMjMyOlxcdGNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxuIDIzMzpcXHRcXHRib29sIFxcXCJJUDogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXFxcIlxcbiAyMzQ6XFx0XFx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgXFx1MDAyNlxcdTAwMjYgSVBfQURWQU5DRURfUk9VVEVSXFxuIDIzNTpcXHRcXHRzZWxlY3QgRklCX1JVTEVTXFxuIDIzNjpcXHRcXHRoZWxwXFxuIDIzNzpcXHRcXHQgIE5vcm1hbGx5LCBhIG11bHRpY2FzdCByb3V0ZXIgcnVucyBhIHVzZXJzcGFjZSBkYWVtb24gYW5kIGRlY2lkZXNcXG4gMjM4OlxcdFxcdCAgd2hhdCB0byBkbyB3aXRoIGEgbXVsdGljYXN0IHBhY2tldCBiYXNlZCBvbiB0aGUgc291cmNlIGFuZFxcbiAyMzk6XFx0XFx0ICBkZXN0aW5hdGlvbiBhZGRyZXNzZXMuIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUgbXVsdGljYXN0IHJvdXRlclxcbiAyNDA6XFx0XFx0ICB3aWxsIGFsc28gYmUgYWJsZSB0byB0YWtlIGludGVyZmFjZXMgYW5kIHBhY2tldCBtYXJrcyBpbnRvXFxuIDI0MTpcXHRcXHQgIGFjY291bnQgYW5kIHJ1biBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdXNlcnNwYWNlIGRhZW1vbnNcXG4gMjQyOlxcdFxcdCAgc2ltdWx0YW5lb3VzbHksIGVhY2ggb25lIGhhbmRsaW5nIGEgc2luZ2xlIHRhYmxlLlxcbiAyNDM6XFx0XFxuIDI0NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjUxLjY4NDIzODQ1N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjU3NjAxNjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvcmUgUm91dGluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBzb21ldGhpbmcgcmVsYXRlZCB0byBtdWx0aWNhc3Qgcm91dGluZywgbGlrZWx5IGEga2VybmVsIG1vZHVsZS4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBtZW1jZy9TTEFCIGFjY291bnRpbmcsIGp1c3QgYSBzdGFuZGFyZCBjaGVjayB0byBzZWUgaWYgdGhhdCdzIGluZmx1ZW5jaW5nIGFueXRoaW5nLiBUaGF0J3MgdXN1YWxseSB0aGUgZmlyc3Qgc3RlcCwgYnV0IGl0J3MgcHJvYmFibHkgbm90IHRoZSBjb3JlIGlzc3VlLiBOb3csIEknbSB6b25pbmcgaW4gb24gdGhlIGFjdHVhbCBtZWF0IG9mIHRoZSBjb25maWd1cmF0aW9uOiBgSVBfTVJPVVRFYCBhbmQgYElQVjZfTVJPVVRFYC4gVGhvc2UgYXJlICpkZWZpbml0ZWx5KiB0aGUgcmVsZXZhbnQgZmxhZ3MgZm9yIGJ1aWxkaW5nIHRoZSBgaXBtci5jYCwgYGlwbXJfYmFzZS5jYCwgYW5kIGBpcDZtci5jYCBtb2R1bGVzLiBUaGF0IHRlbGxzIG1lIHRoZXNlIGFyZSBjZW50cmFsIHRvIHRoZSBtdWx0aWNhc3Qgcm91dGluZyBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIGdvIHJpZ2h0IHRvIHRoZSBzb3VyY2UgYW5kIGV4YW1pbmUgdGhlIGBuZXQvaXB2NC9NYWtlZmlsZWAgYW5kIGBuZXQvaXB2Ni9NYWtlZmlsZWAgYnVpbGQgZmlsZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aG9zZSBmbGFncyBhcmUgdXNlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gaW5mZXIgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGJlaGF2aW9yLCBvciBhdCBsZWFzdCBoYXZlIGEgZnJhbWV3b3JrIHRvIGludmVzdGlnYXRlIGl0IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDk0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzo1NDo1Ni4zNDE4NDI2NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAzNzg4NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNm1yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDg5NSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubmV0L2lwdjYvTWFrZWZpbGU9MTU9aXB2Ni0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bF9uZXRfaXB2Ni5vXFxubmV0L2lwdjYvTWFrZWZpbGU6MTY6aXB2Ni0kKENPTkZJR19JUFY2X01ST1VURSkgKz0gaXA2bXIub1xcbm5ldC9pcHY2L01ha2VmaWxlLTE3LVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy01Mi1cXG5uZXQvaXB2Ni9pcDZtci5jOjUzOnN0cnVjdCBpcDZtcl9ydWxlIHtcXG5uZXQvaXB2Ni9pcDZtci5jLTU0LVxcdHN0cnVjdCBmaWJfcnVsZVxcdFxcdGNvbW1vbjtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNTYtXFxubmV0L2lwdjYvaXA2bXIuYzo1NzpzdHJ1Y3QgaXA2bXJfcmVzdWx0IHtcXG5uZXQvaXB2Ni9pcDZtci5jLTU4LVxcdHN0cnVjdCBtcl90YWJsZVxcdCptcnQ7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTg1PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbXJ0X2NhY2hlcCBfX3JlYWRfbW9zdGx5O1xcbm5ldC9pcHY2L2lwNm1yLmMtODYtXFxubmV0L2lwdjYvaXA2bXIuYzo4NzpzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpO1xcbm5ldC9pcHY2L2lwNm1yLmM6ODg6c3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG5uZXQvaXB2Ni9pcDZtci5jLTg5LVxcdFxcdFxcdCAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGV2X2tpbGxfbGlzdCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTkxPXN0YXRpYyB2b2lkIGlwNl9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTkzLVxcdFxcdFxcdCAgIHN0cnVjdCBtZmM2X2NhY2hlICpjYWNoZSk7XFxubmV0L2lwdjYvaXA2bXIuYzo5NDpzdGF0aWMgaW50IGlwNm1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IHNrX2J1ZmYgKnBrdCxcXG5uZXQvaXB2Ni9pcDZtci5jLTk1LVxcdFxcdFxcdCAgICAgIG1pZmlfdCBtaWZpLCBpbnQgYXNzZXJ0KTtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9OTg9c3RhdGljIHZvaWQgbXJ0Nm1zZ19uZXRsaW5rX2V2ZW50KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqcGt0KTtcXG5uZXQvaXB2Ni9pcDZtci5jOjk5OnN0YXRpYyBpbnQgaXA2bXJfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC9pcHY2L2lwNm1yLmMtMTAwLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxubmV0L2lwdjYvaXA2bXIuYzoxMDE6c3RhdGljIGludCBpcDZtcl9ydG1fZHVtcHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvaXA2bXIuYy0xMDItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTEwNT1zdGF0aWMgdm9pZCBpcG1yX2V4cGlyZV9wcm9jZXNzKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTA3LSNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvaXA2bXIuYzoxMDg6I2RlZmluZSBpcDZtcl9mb3JfZWFjaF90YWJsZShtcnQsIG5ldCkgXFxcXFxcbm5ldC9pcHY2L2lwNm1yLmMtMTA5LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG1ydCwgXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5tcjZfdGFibGVzLCBsaXN0LCBcXFxcXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTExMi1cXG5uZXQvaXB2Ni9pcDZtci5jOjExMzpzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9tcl90YWJsZV9pdGVyKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvaXB2Ni9pcDZtci5jLTExNC1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG1yX3RhYmxlICptcnQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTEyOS1cXG5uZXQvaXB2Ni9pcDZtci5jOjEzMDpzdGF0aWMgc3RydWN0IG1yX3RhYmxlICpfX2lwNm1yX2dldF90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZClcXG5uZXQvaXB2Ni9pcDZtci5jLTEzMS17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTEzMy1cXG5uZXQvaXB2Ni9pcDZtci5jOjEzNDpcXHRpcDZtcl9mb3JfZWFjaF90YWJsZShtcnQsIG5ldCkge1xcbm5ldC9pcHY2L2lwNm1yLmMtMTM1LVxcdFxcdGlmIChtcnQtXFx1MDAzZWlkID09IGlkKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xNDAtXFxubmV0L2lwdjYvaXA2bXIuYzoxNDE6c3RhdGljIGludCBpcDZtcl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNiAqZmxwNixcXG5uZXQvaXB2Ni9pcDZtci5jLTE0Mi1cXHRcXHRcXHQgICAgc3RydWN0IG1yX3RhYmxlICoqbXJ0KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xNDQtXFx0aW50IGVycjtcXG5uZXQvaXB2Ni9pcDZtci5jOjE0NTpcXHRzdHJ1Y3QgaXA2bXJfcmVzdWx0IHJlcztcXG5uZXQvaXB2Ni9pcDZtci5jLTE0Ni1cXHRzdHJ1Y3QgZmliX2xvb2t1cF9hcmcgYXJnID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xNjEtXFxubmV0L2lwdjYvaXA2bXIuYzoxNjI6c3RhdGljIGludCBpcDZtcl9ydWxlX2FjdGlvbihzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsIHN0cnVjdCBmbG93aSAqZmxwLFxcbm5ldC9pcHY2L2lwNm1yLmMtMTYzLVxcdFxcdFxcdCAgICAgaW50IGZsYWdzLCBzdHJ1Y3QgZmliX2xvb2t1cF9hcmcgKmFyZylcXG5uZXQvaXB2Ni9pcDZtci5jLTE2NC17XFxubmV0L2lwdjYvaXA2bXIuYzoxNjU6XFx0c3RydWN0IGlwNm1yX3Jlc3VsdCAqcmVzID0gYXJnLVxcdTAwM2VyZXN1bHQ7XFxubmV0L2lwdjYvaXA2bXIuYy0xNjYtXFx0c3RydWN0IG1yX3RhYmxlICptcnQ7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTE4MS1cXG5uZXQvaXB2Ni9pcDZtci5jOjE4MjpcXHRtcnQgPSBfX2lwNm1yX2dldF90YWJsZShydWxlLVxcdTAwM2Vmcl9uZXQsIGFyZy1cXHUwMDNldGFibGUpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTgzLVxcdGlmICghbXJ0KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xODgtXFxubmV0L2lwdjYvaXA2bXIuYzoxODk6c3RhdGljIGludCBpcDZtcl9ydWxlX21hdGNoKHN0cnVjdCBmaWJfcnVsZSAqcnVsZSwgc3RydWN0IGZsb3dpICpmbHAsIGludCBmbGFncylcXG5uZXQvaXB2Ni9pcDZtci5jLTE5MC17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTE5My1cXG5uZXQvaXB2Ni9pcDZtci5jOjE5NDpzdGF0aWMgaW50IGlwNm1yX3J1bGVfY29uZmlndXJlKHN0cnVjdCBmaWJfcnVsZSAqcnVsZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9pcDZtci5jLTE5NS1cXHRcXHRcXHRcXHRzdHJ1Y3QgZmliX3J1bGVfaGRyICpmcmgsIHN0cnVjdCBubGF0dHIgKip0YixcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMjAwLVxcbm5ldC9pcHY2L2lwNm1yLmM6MjAxOnN0YXRpYyBpbnQgaXA2bXJfcnVsZV9jb21wYXJlKHN0cnVjdCBmaWJfcnVsZSAqcnVsZSwgc3RydWN0IGZpYl9ydWxlX2hkciAqZnJoLFxcbm5ldC9pcHY2L2lwNm1yLmMtMjAyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBubGF0dHIgKip0YilcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMjA2LVxcbm5ldC9pcHY2L2lwNm1yLmM6MjA3OnN0YXRpYyBpbnQgaXA2bXJfcnVsZV9maWxsKHN0cnVjdCBmaWJfcnVsZSAqcnVsZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9pcDZtci5jLTIwOC1cXHRcXHRcXHQgICBzdHJ1Y3QgZmliX3J1bGVfaGRyICpmcmgpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTIxNS1cXG5uZXQvaXB2Ni9pcDZtci5jOjIxNjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9ydWxlc19vcHMgX19uZXRfaW5pdGNvbnN0IGlwNm1yX3J1bGVzX29wc190ZW1wbGF0ZSA9IHtcXG5uZXQvaXB2Ni9pcDZtci5jLTIxNy1cXHQuZmFtaWx5XFx0XFx0PSBSVE5MX0ZBTUlMWV9JUDZNUixcXG5uZXQvaXB2Ni9pcDZtci5jOjIxODpcXHQucnVsZV9zaXplXFx0PSBzaXplb2Yoc3RydWN0IGlwNm1yX3J1bGUpLFxcbm5ldC9pcHY2L2lwNm1yLmMtMjE5LVxcdC5hZGRyX3NpemVcXHQ9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpLFxcbm5ldC9pcHY2L2lwNm1yLmM6MjIwOlxcdC5hY3Rpb25cXHRcXHQ9IGlwNm1yX3J1bGVfYWN0aW9uLFxcbm5ldC9pcHY2L2lwNm1yLmM6MjIxOlxcdC5tYXRjaFxcdFxcdD0gaXA2bXJfcnVsZV9tYXRjaCxcXG5uZXQvaXB2Ni9pcDZtci5jOjIyMjpcXHQuY29uZmlndXJlXFx0PSBpcDZtcl9ydWxlX2NvbmZpZ3VyZSxcXG5uZXQvaXB2Ni9pcDZtci5jOjIyMzpcXHQuY29tcGFyZVxcdD0gaXA2bXJfcnVsZV9jb21wYXJlLFxcbm5ldC9pcHY2L2lwNm1yLmM6MjI0OlxcdC5maWxsXFx0XFx0PSBpcDZtcl9ydWxlX2ZpbGwsXFxubmV0L2lwdjYvaXA2bXIuYy0yMjUtXFx0Lm5sZ3JvdXBcXHQ9IFJUTkxHUlBfSVBWNl9SVUxFLFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0yMjgtXFxubmV0L2lwdjYvaXA2bXIuYzoyMjk6c3RhdGljIGludCBfX25ldF9pbml0IGlwNm1yX3J1bGVzX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9pcHY2L2lwNm1yLmMtMjMwLXtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMjM1LVxcbm5ldC9pcHY2L2lwNm1yLmM6MjM2OlxcdG9wcyA9IGZpYl9ydWxlc19yZWdpc3RlcihcXHUwMDI2aXA2bXJfcnVsZXNfb3BzX3RlbXBsYXRlLCBuZXQpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMjM3LVxcdGlmIChJU19FUlIob3BzKSlcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMjQxLVxcbm5ldC9pcHY2L2lwNm1yLmM6MjQyOlxcdG1ydCA9IGlwNm1yX25ld190YWJsZShuZXQsIFJUNl9UQUJMRV9ERkxUKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTI0My1cXHRpZiAoSVNfRVJSKG1ydCkpIHtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMjU1LWVycjI6XFxubmV0L2lwdjYvaXA2bXIuYzoyNTY6XFx0aXA2bXJfZnJlZV90YWJsZShtcnQsIFxcdTAwMjZkZXZfa2lsbF9saXN0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTI1Ny1lcnIxOlxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0yNjEtXFxubmV0L2lwdjYvaXA2bXIuYzoyNjI6c3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZtcl9ydWxlc19leGl0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvaXB2Ni9pcDZtci5jLTI2My17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTI2Ni1cXG5uZXQvaXB2Ni9pcDZtci5jOjI2NzpzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNm1yX3J1bGVzX2V4aXRfcnRubChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2lwdjYvaXA2bXIuYy0yNjgtXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfa2lsbF9saXN0KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0yNzMtXFx0XFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZtcnQtXFx1MDAzZWxpc3QpO1xcbm5ldC9pcHY2L2lwNm1yLmM6Mjc0OlxcdFxcdGlwNm1yX2ZyZWVfdGFibGUobXJ0LCBkZXZfa2lsbF9saXN0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTI3NS1cXHR9XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTI3Ny1cXG5uZXQvaXB2Ni9pcDZtci5jOjI3ODpzdGF0aWMgaW50IGlwNm1yX3J1bGVzX2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbm5ldC9pcHY2L2lwNm1yLmMtMjc5LVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTI4My1cXG5uZXQvaXB2Ni9pcDZtci5jOjI4NDpzdGF0aWMgdW5zaWduZWQgaW50IGlwNm1yX3J1bGVzX3NlcV9yZWFkKGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvaXB2Ni9pcDZtci5jLTI4NS17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTI4OC1cXG5uZXQvaXB2Ni9pcDZtci5jOjI4OTpib29sIGlwNm1yX3J1bGVfZGVmYXVsdChjb25zdCBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUpXFxubmV0L2lwdjYvaXA2bXIuYy0yOTAte1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0yOTMtfVxcbm5ldC9pcHY2L2lwNm1yLmM6Mjk0OkVYUE9SVF9TWU1CT0woaXA2bXJfcnVsZV9kZWZhdWx0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTI5NS0jZWxzZVxcbm5ldC9pcHY2L2lwNm1yLmM6Mjk2OnN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwNm1yX21yX3RhYmxlX2l0ZXIoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9pcHY2L2lwNm1yLmMtMjk3LVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbXJfdGFibGUgKm1ydClcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMzAzLVxcbm5ldC9pcHY2L2lwNm1yLmM6MzA0OnN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKl9faXA2bXJfZ2V0X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxcbm5ldC9pcHY2L2lwNm1yLmMtMzA1LXtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMzEwLVxcbm5ldC9pcHY2L2lwNm1yLmM6MzExOiNkZWZpbmUgaXA2bXJfZm9yX2VhY2hfdGFibGUobXJ0LCBuZXQpXFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9pcHY2L2lwNm1yLmM6MzEyOlxcdGZvciAobXJ0ID0gX19pcDZtcl9nZXRfdGFibGUobmV0LCAwKTsgbXJ0OyBtcnQgPSBOVUxMKVxcbm5ldC9pcHY2L2lwNm1yLmMtMzEzLVxcbm5ldC9pcHY2L2lwNm1yLmM6MzE0OnN0YXRpYyBpbnQgaXA2bXJfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTYgKmZscDYsXFxubmV0L2lwdjYvaXA2bXIuYy0zMTUtXFx0XFx0XFx0ICAgIHN0cnVjdCBtcl90YWJsZSAqKm1ydClcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMzIyLVxcbm5ldC9pcHY2L2lwNm1yLmM6MzIzOnN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcDZtcl9ydWxlc19pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvaXB2Ni9pcDZtci5jLTMyNC17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTMyNi1cXG5uZXQvaXB2Ni9pcDZtci5jOjMyNzpcXHRtcnQgPSBpcDZtcl9uZXdfdGFibGUobmV0LCBSVDZfVEFCTEVfREZMVCk7XFxubmV0L2lwdjYvaXA2bXIuYy0zMjgtXFx0aWYgKElTX0VSUihtcnQpKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0zMzQtXFxubmV0L2lwdjYvaXA2bXIuYzozMzU6c3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZtcl9ydWxlc19leGl0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvaXB2Ni9pcDZtci5jLTMzNi17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTMzOC1cXG5uZXQvaXB2Ni9pcDZtci5jOjMzOTpzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNm1yX3J1bGVzX2V4aXRfcnRubChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2lwdjYvaXA2bXIuYy0zNDAtXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfa2lsbF9saXN0KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0zNDQtXFx0UkNVX0lOSVRfUE9JTlRFUihuZXQtXFx1MDAzZWlwdjYubXJ0NiwgTlVMTCk7XFxubmV0L2lwdjYvaXA2bXIuYzozNDU6XFx0aXA2bXJfZnJlZV90YWJsZShtcnQsIGRldl9raWxsX2xpc3QpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMzQ2LX1cXG5uZXQvaXB2Ni9pcDZtci5jLTM0Ny1cXG5uZXQvaXB2Ni9pcDZtci5jOjM0ODpzdGF0aWMgaW50IGlwNm1yX3J1bGVzX2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbm5ldC9pcHY2L2lwNm1yLmMtMzQ5LVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTM1My1cXG5uZXQvaXB2Ni9pcDZtci5jOjM1NDpzdGF0aWMgdW5zaWduZWQgaW50IGlwNm1yX3J1bGVzX3NlcV9yZWFkKGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvaXB2Ni9pcDZtci5jLTM1NS17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTM1OS1cXG5uZXQvaXB2Ni9pcDZtci5jOjM2MDpzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9nZXRfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXFxubmV0L2lwdjYvaXA2bXIuYy0zNjEte1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0zNjQtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9pcHY2L2lwNm1yLmM6MzY1OlxcdG1ydCA9IF9faXA2bXJfZ2V0X3RhYmxlKG5ldCwgaWQpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMzY2LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0zNzAtXFxubmV0L2lwdjYvaXA2bXIuYzozNzE6c3RhdGljIGludCBpcDZtcl9oYXNoX2NtcChzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqYXJnLFxcbm5ldC9pcHY2L2lwNm1yLmMtMzcyLVxcdFxcdFxcdCAgY29uc3Qgdm9pZCAqcHRyKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0zODAtXFxubmV0L2lwdjYvaXA2bXIuYzozODE6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBpcDZtcl9yaHRfcGFyYW1zID0ge1xcbm5ldC9pcHY2L2lwNm1yLmMtMzgyLVxcdC5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBtcl9tZmMsIG1ub2RlKSxcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMzg1LVxcdC5uZWxlbV9oaW50ID0gMyxcXG5uZXQvaXB2Ni9pcDZtci5jOjM4NjpcXHQub2JqX2NtcGZuID0gaXA2bXJfaGFzaF9jbXAsXFxubmV0L2lwdjYvaXA2bXIuYy0zODctXFx0LmF1dG9tYXRpY19zaHJpbmtpbmcgPSB0cnVlLFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0zODktXFxubmV0L2lwdjYvaXA2bXIuYzozOTA6c3RhdGljIHZvaWQgaXA2bXJfbmV3X3RhYmxlX3NldChzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG5uZXQvaXB2Ni9pcDZtci5jLTM5MS1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTM5Ny1cXG5uZXQvaXB2Ni9pcDZtci5jOjM5ODpzdGF0aWMgc3RydWN0IG1mYzZfY2FjaGVfY21wX2FyZyBpcDZtcl9tcl90YWJsZV9vcHNfY21wYXJnX2FueSA9IHtcXG5uZXQvaXB2Ni9pcDZtci5jLTM5OS1cXHQubWY2Y19vcmlnaW4gPSBJTjZBRERSX0FOWV9JTklULFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy00MDItXFxubmV0L2lwdjYvaXA2bXIuYzo0MDM6c3RhdGljIHN0cnVjdCBtcl90YWJsZV9vcHMgaXA2bXJfbXJfdGFibGVfb3BzID0ge1xcbm5ldC9pcHY2L2lwNm1yLmM6NDA0OlxcdC5yaHRfcGFyYW1zID0gXFx1MDAyNmlwNm1yX3JodF9wYXJhbXMsXFxubmV0L2lwdjYvaXA2bXIuYzo0MDU6XFx0LmNtcGFyZ19hbnkgPSBcXHUwMDI2aXA2bXJfbXJfdGFibGVfb3BzX2NtcGFyZ19hbnksXFxubmV0L2lwdjYvaXA2bXIuYy00MDYtfTtcXG5uZXQvaXB2Ni9pcDZtci5jLTQwNy1cXG5uZXQvaXB2Ni9pcDZtci5jOjQwODpzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXFxubmV0L2lwdjYvaXA2bXIuYy00MDkte1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy00MTEtXFxubmV0L2lwdjYvaXA2bXIuYzo0MTI6XFx0bXJ0ID0gX19pcDZtcl9nZXRfdGFibGUobmV0LCBpZCk7XFxubmV0L2lwdjYvaXA2bXIuYy00MTMtXFx0aWYgKG1ydClcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNDE1LVxcbm5ldC9pcHY2L2lwNm1yLmM6NDE2OlxcdHJldHVybiBtcl90YWJsZV9hbGxvYyhuZXQsIGlkLCBcXHUwMDI2aXA2bXJfbXJfdGFibGVfb3BzLFxcbm5ldC9pcHY2L2lwNm1yLmM6NDE3OlxcdFxcdFxcdCAgICAgIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIGlwNm1yX25ld190YWJsZV9zZXQpO1xcbm5ldC9pcHY2L2lwNm1yLmMtNDE4LX1cXG5uZXQvaXB2Ni9pcDZtci5jLTQxOS1cXG5uZXQvaXB2Ni9pcDZtci5jOjQyMDpzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY2L2lwNm1yLmMtNDIxLVxcdFxcdFxcdCAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGV2X2tpbGxfbGlzdClcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNDIzLVxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2bXJ0LVxcdTAwM2VuZXQpO1xcbm5ldC9pcHY2L2lwNm1yLmM6NDI0OlxcdExJU1RfSEVBRChpcDZtcl9kZXZfa2lsbF9saXN0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTQyNS1cXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNDMwLVxcdFxcdFxcdCAgICBNUlQ2X0ZMVVNIX01GQyB8IE1SVDZfRkxVU0hfTUZDX1NUQVRJQyxcXG5uZXQvaXB2Ni9pcDZtci5jOjQzMTpcXHRcXHRcXHQgICAgXFx1MDAyNmlwNm1yX2Rldl9raWxsX2xpc3QpO1xcbm5ldC9pcHY2L2lwNm1yLmMtNDMyLVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy00MzQtXFxubmV0L2lwdjYvaXA2bXIuYzo0MzU6XFx0V0FSTl9PTl9PTkNFKCFuZXRfaW5pdGlhbGl6ZWQobmV0KSBcXHUwMDI2XFx1MDAyNiAhbGlzdF9lbXB0eShcXHUwMDI2aXA2bXJfZGV2X2tpbGxfbGlzdCkpO1xcbm5ldC9pcHY2L2lwNm1yLmM6NDM2OlxcdGxpc3Rfc3BsaWNlKFxcdTAwMjZpcDZtcl9kZXZfa2lsbF9saXN0LCBkZXZfa2lsbF9saXN0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTQzNy19XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTQ0My1cXG5uZXQvaXB2Ni9pcDZtci5jOjQ0NDpzdGF0aWMgdm9pZCAqaXA2bXJfdmlmX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxubmV0L2lwdjYvaXA2bXIuYy00NDUtXFx0X19hY3F1aXJlcyhSQ1UpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTQ1MS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjYvaXA2bXIuYzo0NTI6XFx0bXJ0ID0gX19pcDZtcl9nZXRfdGFibGUobmV0LCBSVDZfVEFCTEVfREZMVCk7XFxubmV0L2lwdjYvaXA2bXIuYy00NTMtXFx0aWYgKCFtcnQpIHtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNDYyLVxcbm5ldC9pcHY2L2lwNm1yLmM6NDYzOnN0YXRpYyB2b2lkIGlwNm1yX3ZpZl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG5uZXQvaXB2Ni9pcDZtci5jLTQ2NC1cXHRfX3JlbGVhc2VzKFJDVSlcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNDY4LVxcbm5ldC9pcHY2L2lwNm1yLmM6NDY5OnN0YXRpYyBpbnQgaXA2bXJfdmlmX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbm5ldC9pcHY2L2lwNm1yLmMtNDcwLXtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNDk0LVxcbm5ldC9pcHY2L2lwNm1yLmM6NDk1OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaXA2bXJfdmlmX3NlcV9vcHMgPSB7XFxubmV0L2lwdjYvaXA2bXIuYzo0OTY6XFx0LnN0YXJ0ID0gaXA2bXJfdmlmX3NlcV9zdGFydCxcXG5uZXQvaXB2Ni9pcDZtci5jLTQ5Ny1cXHQubmV4dCAgPSBtcl92aWZfc2VxX25leHQsXFxubmV0L2lwdjYvaXA2bXIuYzo0OTg6XFx0LnN0b3AgID0gaXA2bXJfdmlmX3NlcV9zdG9wLFxcbm5ldC9pcHY2L2lwNm1yLmM6NDk5OlxcdC5zaG93ICA9IGlwNm1yX3ZpZl9zZXFfc2hvdyxcXG5uZXQvaXB2Ni9pcDZtci5jLTUwMC19O1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz01MDI9c3RhdGljIHZvaWQgKmlwbXJfbWZjX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTUwNi1cXG5uZXQvaXB2Ni9pcDZtci5jOjUwNzpcXHRtcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCBSVDZfVEFCTEVfREZMVCk7XFxubmV0L2lwdjYvaXA2bXIuYy01MDgtXFx0aWYgKCFtcnQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTU2Nj1zdGF0aWMgaW50IHBpbTZfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTU5OS1cXG5uZXQvaXB2Ni9pcDZtci5jOjYwMDpcXHRpZiAoaXA2bXJfZmliX2xvb2t1cChuZXQsIFxcdTAwMjZmbDYsIFxcdTAwMjZtcnQpIFxcdTAwM2MgMClcXG5uZXQvaXB2Ni9pcDZtci5jLTYwMS1cXHRcXHRnb3RvIGRyb3A7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTYzMz1zdGF0aWMgbmV0ZGV2X3R4X3QgcmVnX3ZpZl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTY0OC1cXG5uZXQvaXB2Ni9pcDZtci5jOjY0OTpcXHRpZiAoaXA2bXJfZmliX2xvb2t1cChuZXQsIFxcdTAwMjZmbDYsIFxcdTAwMjZtcnQpIFxcdTAwM2MgMClcXG5uZXQvaXB2Ni9pcDZtci5jLTY1MC1cXHRcXHRnb3RvIHR4X2xvb2t1cF9lcnI7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTY1NC1cXG5uZXQvaXB2Ni9pcDZtci5jOjY1NTpcXHRpcDZtcl9jYWNoZV9yZXBvcnQobXJ0LCBza2IsIFJFQURfT05DRShtcnQtXFx1MDAzZW1yb3V0ZV9yZWdfdmlmX251bSksXFxubmV0L2lwdjYvaXA2bXIuYy02NTYtXFx0XFx0XFx0ICAgTVJUNk1TR19XSE9MRVBLVCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTY3OT1zdGF0aWMgdm9pZCByZWdfdmlmX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTY4OC1cXG5uZXQvaXB2Ni9pcDZtci5jOjY4OTpzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmlwNm1yX3JlZ192aWYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydClcXG5uZXQvaXB2Ni9pcDZtci5jLTY5MC17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTcyMS1cXG5uZXQvaXB2Ni9pcDZtci5jOjcyMjpzdGF0aWMgaW50IGNhbGxfaXA2bXJfdmlmX2VudHJ5X25vdGlmaWVycyhzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2lwdjYvaXA2bXIuYy03MjMtXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGZpYl9ldmVudF90eXBlIGV2ZW50X3R5cGUsXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTczMi1cXG5uZXQvaXB2Ni9pcDZtci5jOjczMzpzdGF0aWMgaW50IGNhbGxfaXA2bXJfbWZjX2VudHJ5X25vdGlmaWVycyhzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2lwdjYvaXA2bXIuYy03MzQtXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGZpYl9ldmVudF90eXBlIGV2ZW50X3R5cGUsXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTc0Mj1zdGF0aWMgaW50IG1pZjZfZGVsZXRlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBpbnQgdmlmaSwgaW50IG5vdGlmeSxcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNzU3LVxcbm5ldC9pcHY2L2lwNm1yLmM6NzU4OlxcdGNhbGxfaXA2bXJfdmlmX2VudHJ5X25vdGlmaWVycyhyZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KSxcXG5uZXQvaXB2Ni9pcDZtci5jLTc1OS1cXHRcXHRcXHRcXHQgICAgICAgRklCX0VWRU5UX1ZJRl9ERUwsIHYsIGRldixcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNzY1LVxcdGlmICh2aWZpID09IG1ydC1cXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtKSB7XFxubmV0L2lwdjYvaXA2bXIuYzo3NjY6XFx0XFx0LyogUGFpcnMgd2l0aCBSRUFEX09OQ0UoKSBpbiBpcDZtcl9jYWNoZV9yZXBvcnQoKSBhbmQgcmVnX3ZpZl94bWl0KCkgKi9cXG5uZXQvaXB2Ni9pcDZtci5jLTc2Ny1cXHRcXHRXUklURV9PTkNFKG1ydC1cXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtLCAtMSk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTc5OC1cXG5uZXQvaXB2Ni9pcDZtci5jOjc5OTpzdGF0aWMgaW5saW5lIHZvaWQgaXA2bXJfY2FjaGVfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbm5ldC9pcHY2L2lwNm1yLmMtODAwLXtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtODA1LVxcbm5ldC9pcHY2L2lwNm1yLmM6ODA2OnN0YXRpYyBpbmxpbmUgdm9pZCBpcDZtcl9jYWNoZV9mcmVlKHN0cnVjdCBtZmM2X2NhY2hlICpjKVxcbm5ldC9pcHY2L2lwNm1yLmMtODA3LXtcXG5uZXQvaXB2Ni9pcDZtci5jOjgwODpcXHRjYWxsX3JjdShcXHUwMDI2Yy1cXHUwMDNlX2MucmN1LCBpcDZtcl9jYWNoZV9mcmVlX3JjdSk7XFxubmV0L2lwdjYvaXA2bXIuYy04MDktfVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy04MTQtXFxubmV0L2lwdjYvaXA2bXIuYzo4MTU6c3RhdGljIHZvaWQgaXA2bXJfZGVzdHJveV91bnJlcyhzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IG1mYzZfY2FjaGUgKmMpXFxubmV0L2lwdjYvaXA2bXIuYy04MTYte1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy04MzUtXFxubmV0L2lwdjYvaXA2bXIuYzo4MzY6XFx0aXA2bXJfY2FjaGVfZnJlZShjKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTgzNy19XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTg0Mj1zdGF0aWMgdm9pZCBpcG1yX2RvX2V4cGlyZV9wcm9jZXNzKHN0cnVjdCBtcl90YWJsZSAqbXJ0KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy04NTgtXFx0XFx0bXI2X25ldGxpbmtfZXZlbnQobXJ0LCAoc3RydWN0IG1mYzZfY2FjaGUgKiljLCBSVE1fREVMUk9VVEUpO1xcbm5ldC9pcHY2L2lwNm1yLmM6ODU5OlxcdFxcdGlwNm1yX2Rlc3Ryb3lfdW5yZXMobXJ0LCAoc3RydWN0IG1mYzZfY2FjaGUgKiljKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTg2MC1cXHR9XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTg2Nj1zdGF0aWMgdm9pZCBpcG1yX2V4cGlyZV9wcm9jZXNzKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy04ODItXFxubmV0L2lwdjYvaXA2bXIuYzo4ODM6c3RhdGljIHZvaWQgaXA2bXJfdXBkYXRlX3RocmVzaG9sZHMoc3RydWN0IG1yX3RhYmxlICptcnQsXFxubmV0L2lwdjYvaXA2bXIuYy04ODQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtcl9tZmMgKmNhY2hlLFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz05MDY9c3RhdGljIGludCBtaWY2X2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy05MjctXFx0XFx0XFx0cmV0dXJuIC1FQUREUklOVVNFO1xcbm5ldC9pcHY2L2lwNm1yLmM6OTI4OlxcdFxcdGRldiA9IGlwNm1yX3JlZ192aWYobmV0LCBtcnQpO1xcbm5ldC9pcHY2L2lwNm1yLmMtOTI5LVxcdFxcdGlmICghZGV2KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy05NzYtXFx0c3Bpbl91bmxvY2soXFx1MDAyNm1ydF9sb2NrKTtcXG5uZXQvaXB2Ni9pcDZtci5jOjk3NzpcXHRjYWxsX2lwNm1yX3ZpZl9lbnRyeV9ub3RpZmllcnMobmV0LCBGSUJfRVZFTlRfVklGX0FERCxcXG5uZXQvaXB2Ni9pcDZtci5jLTk3OC1cXHRcXHRcXHRcXHQgICAgICAgdiwgZGV2LCB2aWZpLCBtcnQtXFx1MDAzZWlkKTtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtOTgxLVxcbm5ldC9pcHY2L2lwNm1yLmM6OTgyOnN0YXRpYyBzdHJ1Y3QgbWZjNl9jYWNoZSAqaXA2bXJfY2FjaGVfZmluZChzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG5uZXQvaXB2Ni9pcDZtci5jLTk4My1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKm9yaWdpbixcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtOTk0LS8qIExvb2sgZm9yIGEgKCosRykgZW50cnkgKi9cXG5uZXQvaXB2Ni9pcDZtci5jOjk5NTpzdGF0aWMgc3RydWN0IG1mYzZfY2FjaGUgKmlwNm1yX2NhY2hlX2ZpbmRfYW55KHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY2L2lwNm1yLmMtOTk2LVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKm1jYXN0Z3JwLFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz0xMDEwPXN0YXRpYyBzdHJ1Y3QgbWZjNl9jYWNoZSAqXFxubmV0L2lwdjYvaXA2bXIuYzoxMDExOmlwNm1yX2NhY2hlX2ZpbmRfcGFyZW50KHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY2L2lwNm1yLmMtMTAxMi1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKm9yaWdpbixcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTAyNC0vKiBBbGxvY2F0ZSBhIG11bHRpY2FzdCBjYWNoZSBlbnRyeSAqL1xcbm5ldC9pcHY2L2lwNm1yLmM6MTAyNTpzdGF0aWMgc3RydWN0IG1mYzZfY2FjaGUgKmlwNm1yX2NhY2hlX2FsbG9jKHZvaWQpXFxubmV0L2lwdjYvaXA2bXIuYy0xMDI2LXtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTAzMS1cXHRjLVxcdTAwM2VfYy5tZmNfdW4ucmVzLm1pbnZpZiA9IE1BWE1JRlM7XFxubmV0L2lwdjYvaXA2bXIuYzoxMDMyOlxcdGMtXFx1MDAzZV9jLmZyZWUgPSBpcDZtcl9jYWNoZV9mcmVlX3JjdTtcXG5uZXQvaXB2Ni9pcDZtci5jLTEwMzMtXFx0cmVmY291bnRfc2V0KFxcdTAwMjZjLVxcdTAwM2VfYy5tZmNfdW4ucmVzLnJlZmNvdW50LCAxKTtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTAzNi1cXG5uZXQvaXB2Ni9pcDZtci5jOjEwMzc6c3RhdGljIHN0cnVjdCBtZmM2X2NhY2hlICppcDZtcl9jYWNoZV9hbGxvY191bnJlcyh2b2lkKVxcbm5ldC9pcHY2L2lwNm1yLmMtMTAzOC17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTEwNTAtXFxubmV0L2lwdjYvaXA2bXIuYzoxMDUxOnN0YXRpYyB2b2lkIGlwNm1yX2NhY2hlX3Jlc29sdmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG5uZXQvaXB2Ni9pcDZtci5jLTEwNTItXFx0XFx0XFx0XFx0c3RydWN0IG1mYzZfY2FjaGUgKnVjLCBzdHJ1Y3QgbWZjNl9jYWNoZSAqYylcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTA4OC1cXG5uZXQvaXB2Ni9pcDZtci5jOjEwODk6c3RhdGljIGludCBpcDZtcl9jYWNoZV9yZXBvcnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBza19idWZmICpwa3QsXFxubmV0L2lwdjYvaXA2bXIuYy0xMDkwLVxcdFxcdFxcdCAgICAgIG1pZmlfdCBtaWZpLCBpbnQgYXNzZXJ0KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xMTgyLS8qIFF1ZXVlIGEgcGFja2V0IGZvciByZXNvbHV0aW9uLiBJdCBnZXRzIGxvY2tlZCBjYWNoZSBlbnRyeSEgKi9cXG5uZXQvaXB2Ni9pcDZtci5jOjExODM6c3RhdGljIGludCBpcDZtcl9jYWNoZV91bnJlc29sdmVkKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBtaWZpX3QgbWlmaSxcXG5uZXQvaXB2Ni9pcDZtci5jLTExODQtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xMjEwLVxcbm5ldC9pcHY2L2lwNm1yLmM6MTIxMTpcXHRcXHRjID0gaXA2bXJfY2FjaGVfYWxsb2NfdW5yZXMoKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTEyMTItXFx0XFx0aWYgKCFjKSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTEyMjQtXFx0XFx0ICovXFxubmV0L2lwdjYvaXA2bXIuYzoxMjI1OlxcdFxcdGVyciA9IGlwNm1yX2NhY2hlX3JlcG9ydChtcnQsIHNrYiwgbWlmaSwgTVJUNk1TR19OT0NBQ0hFKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTEyMjYtXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTEyNTctXFx0aWYgKGMpXFxubmV0L2lwdjYvaXA2bXIuYzoxMjU4OlxcdFxcdGlwNm1yX2NhY2hlX2ZyZWUoYyk7XFxubmV0L2lwdjYvaXA2bXIuYy0xMjU5LVxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xMjY2LVxcbm5ldC9pcHY2L2lwNm1yLmM6MTI2NzpzdGF0aWMgaW50IGlwNm1yX21mY19kZWxldGUoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBtZjZjY3RsICptZmMsXFxubmV0L2lwdjYvaXA2bXIuYy0xMjY4LVxcdFxcdFxcdCAgICBpbnQgcGFyZW50KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xMjcyLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvaXB2Ni9pcDZtci5jOjEyNzM6XFx0YyA9IGlwNm1yX2NhY2hlX2ZpbmRfcGFyZW50KG1ydCwgXFx1MDAyNm1mYy1cXHUwMDNlbWY2Y2Nfb3JpZ2luLnNpbjZfYWRkcixcXG5uZXQvaXB2Ni9pcDZtci5jLTEyNzQtXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZtZmMtXFx1MDAzZW1mNmNjX21jYXN0Z3JwLnNpbjZfYWRkciwgcGFyZW50KTtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTI3Ny1cXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5uZXQvaXB2Ni9pcDZtci5jOjEyNzg6XFx0cmhsdGFibGVfcmVtb3ZlKFxcdTAwMjZtcnQtXFx1MDAzZW1mY19oYXNoLCBcXHUwMDI2Yy1cXHUwMDNlX2MubW5vZGUsIGlwNm1yX3JodF9wYXJhbXMpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTI3OS1cXHRsaXN0X2RlbF9yY3UoXFx1MDAyNmMtXFx1MDAzZV9jLmxpc3QpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTI4MC1cXG5uZXQvaXB2Ni9pcDZtci5jOjEyODE6XFx0Y2FsbF9pcDZtcl9tZmNfZW50cnlfbm90aWZpZXJzKHJlYWRfcG5ldChcXHUwMDI2bXJ0LVxcdTAwM2VuZXQpLFxcbm5ldC9pcHY2L2lwNm1yLmMtMTI4Mi1cXHRcXHRcXHRcXHQgICAgICAgRklCX0VWRU5UX0VOVFJZX0RFTCwgYywgbXJ0LVxcdTAwM2VpZCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTEyODctXFxubmV0L2lwdjYvaXA2bXIuYzoxMjg4OnN0YXRpYyBpbnQgaXA2bXJfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG5uZXQvaXB2Ni9pcDZtci5jLTEyODktXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xMjk5LVxcbm5ldC9pcHY2L2lwNm1yLmM6MTMwMDpcXHRpcDZtcl9mb3JfZWFjaF90YWJsZShtcnQsIG5ldCkge1xcbm5ldC9pcHY2L2lwNm1yLmMtMTMwMS1cXHRcXHR2ID0gXFx1MDAyNm1ydC1cXHUwMDNldmlmX3RhYmxlWzBdO1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xMzEwLVxcbm5ldC9pcHY2L2lwNm1yLmM6MTMxMTpzdGF0aWMgdW5zaWduZWQgaW50IGlwNm1yX3NlcV9yZWFkKGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvaXB2Ni9pcDZtci5jLTEzMTIte1xcbm5ldC9pcHY2L2lwNm1yLmM6MTMxMzpcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5pcG1yX3NlcSkgKyBpcDZtcl9ydWxlc19zZXFfcmVhZChuZXQpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTMxNC19XFxubmV0L2lwdjYvaXA2bXIuYy0xMzE1LVxcbm5ldC9pcHY2L2lwNm1yLmM6MTMxNjpzdGF0aWMgaW50IGlwNm1yX2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbm5ldC9pcHY2L2lwNm1yLmMtMTMxNy1cXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxubmV0L2lwdjYvaXA2bXIuYy0xMzE4LXtcXG5uZXQvaXB2Ni9pcDZtci5jOjEzMTk6XFx0cmV0dXJuIG1yX2R1bXAobmV0LCBuYiwgUlROTF9GQU1JTFlfSVA2TVIsIGlwNm1yX3J1bGVzX2R1bXAsXFxubmV0L2lwdjYvaXA2bXIuYzoxMzIwOlxcdFxcdCAgICAgICBpcDZtcl9tcl90YWJsZV9pdGVyLCBleHRhY2spO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTMyMS19XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTEzMjM9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBpcDZfbXJfbm90aWZpZXIgPSB7XFxubmV0L2lwdjYvaXA2bXIuYzoxMzI0OlxcdC5ub3RpZmllcl9jYWxsID0gaXA2bXJfZGV2aWNlX2V2ZW50XFxubmV0L2lwdjYvaXA2bXIuYy0xMzI1LX07XFxubmV0L2lwdjYvaXA2bXIuYy0xMzI2LVxcbm5ldC9pcHY2L2lwNm1yLmM6MTMyNzpzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9ub3RpZmllcl9vcHMgaXA2bXJfbm90aWZpZXJfb3BzX3RlbXBsYXRlID0ge1xcbm5ldC9pcHY2L2lwNm1yLmMtMTMyOC1cXHQuZmFtaWx5XFx0XFx0PSBSVE5MX0ZBTUlMWV9JUDZNUixcXG5uZXQvaXB2Ni9pcDZtci5jOjEzMjk6XFx0LmZpYl9zZXFfcmVhZFxcdD0gaXA2bXJfc2VxX3JlYWQsXFxubmV0L2lwdjYvaXA2bXIuYzoxMzMwOlxcdC5maWJfZHVtcFxcdD0gaXA2bXJfZHVtcCxcXG5uZXQvaXB2Ni9pcDZtci5jLTEzMzEtXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTMzMy1cXG5uZXQvaXB2Ni9pcDZtci5jOjEzMzQ6c3RhdGljIGludCBfX25ldF9pbml0IGlwNm1yX25vdGlmaWVyX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9pcHY2L2lwNm1yLmMtMTMzNS17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTEzMzktXFxubmV0L2lwdjYvaXA2bXIuYzoxMzQwOlxcdG9wcyA9IGZpYl9ub3RpZmllcl9vcHNfcmVnaXN0ZXIoXFx1MDAyNmlwNm1yX25vdGlmaWVyX29wc190ZW1wbGF0ZSwgbmV0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTEzNDEtXFx0aWYgKElTX0VSUihvcHMpKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xMzQzLVxcbm5ldC9pcHY2L2lwNm1yLmM6MTM0NDpcXHRuZXQtXFx1MDAzZWlwdjYuaXA2bXJfbm90aWZpZXJfb3BzID0gb3BzO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTM0NS1cXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTM0OC1cXG5uZXQvaXB2Ni9pcDZtci5jOjEzNDk6c3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZtcl9ub3RpZmllcl9leGl0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvaXB2Ni9pcDZtci5jLTEzNTAte1xcbm5ldC9pcHY2L2lwNm1yLmM6MTM1MTpcXHRmaWJfbm90aWZpZXJfb3BzX3VucmVnaXN0ZXIobmV0LVxcdTAwM2VpcHY2LmlwNm1yX25vdGlmaWVyX29wcyk7XFxubmV0L2lwdjYvaXA2bXIuYzoxMzUyOlxcdG5ldC1cXHUwMDNlaXB2Ni5pcDZtcl9ub3RpZmllcl9vcHMgPSBOVUxMO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTM1My19XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTEzNTUtLyogU2V0dXAgZm9yIElQIG11bHRpY2FzdCByb3V0aW5nICovXFxubmV0L2lwdjYvaXA2bXIuYzoxMzU2OnN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcDZtcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2lwdjYvaXA2bXIuYy0xMzU3LXtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTM2NC1cXG5uZXQvaXB2Ni9pcDZtci5jOjEzNjU6XFx0ZXJyID0gaXA2bXJfbm90aWZpZXJfaW5pdChuZXQpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTM2Ni1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xMzY4LVxcbm5ldC9pcHY2L2lwNm1yLmM6MTM2OTpcXHRlcnIgPSBpcDZtcl9ydWxlc19pbml0KG5ldCk7XFxubmV0L2lwdjYvaXA2bXIuYy0xMzcwLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbm5ldC9pcHY2L2lwNm1yLmM6MTM3MTpcXHRcXHRnb3RvIGlwNm1yX3J1bGVzX2ZhaWw7XFxubmV0L2lwdjYvaXA2bXIuYy0xMzcyLVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xMzc0LVxcdGVyciA9IC1FTk9NRU07XFxubmV0L2lwdjYvaXA2bXIuYzoxMzc1OlxcdGlmICghcHJvY19jcmVhdGVfbmV0KFxcXCJpcDZfbXJfdmlmXFxcIiwgMCwgbmV0LVxcdTAwM2Vwcm9jX25ldCwgXFx1MDAyNmlwNm1yX3ZpZl9zZXFfb3BzLFxcbm5ldC9pcHY2L2lwNm1yLmMtMTM3Ni1cXHRcXHRcXHRzaXplb2Yoc3RydWN0IG1yX3ZpZl9pdGVyKSkpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTEzODgtcHJvY192aWZfZmFpbDpcXG5uZXQvaXB2Ni9pcDZtci5jOjEzODk6XFx0aXA2bXJfcnVsZXNfZXhpdF9ydG5sKG5ldCwgXFx1MDAyNmRldl9raWxsX2xpc3QpO1xcbm5ldC9pcHY2L2lwNm1yLmM6MTM5MDpcXHRpcDZtcl9ydWxlc19leGl0KG5ldCk7XFxubmV0L2lwdjYvaXA2bXIuYy0xMzkxLSNlbmRpZlxcbm5ldC9pcHY2L2lwNm1yLmM6MTM5MjppcDZtcl9ydWxlc19mYWlsOlxcbm5ldC9pcHY2L2lwNm1yLmM6MTM5MzpcXHRpcDZtcl9ub3RpZmllcl9leGl0KG5ldCk7XFxubmV0L2lwdjYvaXA2bXIuYy0xMzk0LVxcdHJldHVybiBlcnI7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTEzOTYtXFxubmV0L2lwdjYvaXA2bXIuYzoxMzk3OnN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2bXJfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9pcHY2L2lwNm1yLmMtMTM5OC17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTE0MDItI2VuZGlmXFxubmV0L2lwdjYvaXA2bXIuYzoxNDAzOlxcdGlwNm1yX3J1bGVzX2V4aXQobmV0KTtcXG5uZXQvaXB2Ni9pcDZtci5jOjE0MDQ6XFx0aXA2bXJfbm90aWZpZXJfZXhpdChuZXQpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTQwNS19XFxubmV0L2lwdjYvaXA2bXIuYy0xNDA2LVxcbm5ldC9pcHY2L2lwNm1yLmM6MTQwNzpzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNm1yX25ldF9leGl0X3J0bmwoc3RydWN0IG5ldCAqbmV0LFxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzo1NDo1Ni42NDU2NDYzNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDQ3NjkyNDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiBSb3V0aW5nIFRhYmxlcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwYXR0ZXJucyBhc3NvY2lhdGVkIHdpdGggcm91dGluZyB0YWJsZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhleSB1dGlsaXplIGBtcnRfY2FjaGVwYCBvciBjYWxsIGBtcl90YWJsZV9hbGxvY2AuIE15IGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCwgd2hhdCB0aGUgY29udGV4dCBpcywgYW5kIHBvdGVudGlhbGx5IGlkZW50aWZ5IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgaXNzdWVzLlxuXG5UbyBzdGFydCwgSSdsbCB1c2UgYSBgZ3JlcGAgdG8gcXVpY2tseSBzY2FuIHRoZSByZWxldmFudCBjb2RlYmFzZXMuIEknbGwgZm9jdXMgb24gYG5ldC9pcHY0YCBhbmQgYG5ldC9pcHY2YCBkaXJlY3RvcmllcywgYXMgdGhvc2UgYXJlIHRoZSBjb3JlIGFyZWFzIHdoZXJlIHJvdXRpbmcgYW5kIGZvcndhcmRpbmcgYXJlIGltcGxlbWVudGVkLiBUaGlzIHRhcmdldGVkIHNlYXJjaCBmb3IgYG1ydF9jYWNoZXBgIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBpdHMgdXNhZ2UgYWNyb3NzIGRpZmZlcmVudCBJUHY0IGFuZCBJUHY2IHJvdXRpbmcgb3BlcmF0aW9ucywgYW5kIGhvcGVmdWxseSBsZWFkIG1lIHRvIGNhbGxzIHRvIHRoZSBgbXJfdGFibGVfYWxsb2NgIGZ1bmN0aW9uLiBJIGFudGljaXBhdGUgZmluZGluZyBzZXZlcmFsIGtleSBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHdoaWNoIHVzZSB0aGVzZSBhbGxvY2F0aW9uIG1ldGhvZHMsIGFuZCB0aGF0IHdpbGwgYmUgbXkganVtcGluZyBvZmYgcG9pbnQgZm9yIG1vcmUgZGV0YWlsZWQgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzA5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6NTU6MDAuMDkzMzQxMTYxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njg3NjI5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcnRfY2FjaGVwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBtci5jPTkyPXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWZjX3VucmVzX2xvY2spO1xcbi0tXFxubmV0L2lwdjQvaXBtci5jLTEwMS1cXG5uZXQvaXB2NC9pcG1yLmM6MTAyOnN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbXJ0X2NhY2hlcCBfX3JvX2FmdGVyX2luaXQ7XFxubmV0L2lwdjQvaXBtci5jLTEwMy1cXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz03NDM9c3RhdGljIHZvaWQgaXBtcl9jYWNoZV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtNzQ2LVxcbm5ldC9pcHY0L2lwbXIuYzo3NDc6XFx0a21lbV9jYWNoZV9mcmVlKG1ydF9jYWNoZXAsIChzdHJ1Y3QgbWZjX2NhY2hlICopYyk7XFxubmV0L2lwdjQvaXBtci5jLTc0OC19XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9OTk0PXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jKHZvaWQpXFxubmV0L2lwdjQvaXBtci5jLTk5NS17XFxubmV0L2lwdjQvaXBtci5jOjk5NjpcXHRzdHJ1Y3QgbWZjX2NhY2hlICpjID0ga21lbV9jYWNoZV96YWxsb2MobXJ0X2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxubmV0L2lwdjQvaXBtci5jLTk5Ny1cXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz0xMDA3PXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jX3VucmVzKHZvaWQpXFxubmV0L2lwdjQvaXBtci5jLTEwMDgte1xcbm5ldC9pcHY0L2lwbXIuYzoxMDA5OlxcdHN0cnVjdCBtZmNfY2FjaGUgKmMgPSBrbWVtX2NhY2hlX3phbGxvYyhtcnRfY2FjaGVwLCBHRlBfQVRPTUlDKTtcXG5uZXQvaXB2NC9pcG1yLmMtMTAxMC1cXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz0zMzc1PWludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTMzNzgtXFxubmV0L2lwdjQvaXBtci5jOjMzNzk6XFx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLFxcbm5ldC9pcHY0L2lwbXIuYy0zMzgwLVxcdFxcdFxcdFxcdFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpO1xcbi0tXFxubmV0L2lwdjQvaXBtci5jLTM0MDYtcmVnX3Blcm5ldF9mYWlsOlxcbm5ldC9pcHY0L2lwbXIuYzozNDA3OlxcdGttZW1fY2FjaGVfZGVzdHJveShtcnRfY2FjaGVwKTtcXG5uZXQvaXB2NC9pcG1yLmMtMzQwOC1cXHRyZXR1cm4gZXJyO1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz03NT1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1mY191bnJlc19sb2NrKTtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtODQtXFxubmV0L2lwdjYvaXA2bXIuYzo4NTpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1ydF9jYWNoZXAgX19yZWFkX21vc3RseTtcXG5uZXQvaXB2Ni9pcDZtci5jLTg2LVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz03OTk9c3RhdGljIGlubGluZSB2b2lkIGlwNm1yX2NhY2hlX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtODAyLVxcbm5ldC9pcHY2L2lwNm1yLmM6ODAzOlxcdGttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCAoc3RydWN0IG1mYzZfY2FjaGUgKiljKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTgwNC19XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTEwMjU9c3RhdGljIHN0cnVjdCBtZmM2X2NhY2hlICppcDZtcl9jYWNoZV9hbGxvYyh2b2lkKVxcbm5ldC9pcHY2L2lwNm1yLmMtMTAyNi17XFxubmV0L2lwdjYvaXA2bXIuYzoxMDI3OlxcdHN0cnVjdCBtZmM2X2NhY2hlICpjID0ga21lbV9jYWNoZV96YWxsb2MobXJ0X2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxubmV0L2lwdjYvaXA2bXIuYy0xMDI4LVxcdGlmICghYylcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9MTAzNz1zdGF0aWMgc3RydWN0IG1mYzZfY2FjaGUgKmlwNm1yX2NhY2hlX2FsbG9jX3VucmVzKHZvaWQpXFxubmV0L2lwdjYvaXA2bXIuYy0xMDM4LXtcXG5uZXQvaXB2Ni9pcDZtci5jOjEwMzk6XFx0c3RydWN0IG1mYzZfY2FjaGUgKmMgPSBrbWVtX2NhY2hlX3phbGxvYyhtcnRfY2FjaGVwLCBHRlBfQVRPTUlDKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTEwNDAtXFx0aWYgKCFjKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz0xNDI2PWludCBfX2luaXQgaXA2X21yX2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTQyOS1cXG5uZXQvaXB2Ni9pcDZtci5jOjE0MzA6XFx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9BQ0NPVU5UKTtcXG5uZXQvaXB2Ni9pcDZtci5jOjE0MzE6XFx0aWYgKCFtcnRfY2FjaGVwKVxcbm5ldC9pcHY2L2lwNm1yLmMtMTQzMi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTQ1OS1yZWdfcGVybmV0X2ZhaWw6XFxubmV0L2lwdjYvaXA2bXIuYzoxNDYwOlxcdGttZW1fY2FjaGVfZGVzdHJveShtcnRfY2FjaGVwKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTE0NjEtXFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9MTQ2ND12b2lkIF9faW5pdCBpcDZfbXJfY2xlYW51cCh2b2lkKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xNDcxLVxcdHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2aXA2bXJfbmV0X29wcyk7XFxubmV0L2lwdjYvaXA2bXIuYzoxNDcyOlxcdGttZW1fY2FjaGVfZGVzdHJveShtcnRfY2FjaGVwKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTE0NzMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzo1NTowMC4xNjAyMjI1NjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIwNTAzMDgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBtcl90YWJsZV9hbGxvY2AgQ2FsbGVycyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRpdmluZyBpbnRvIHRoaXMgYG1yX3RhYmxlX2FsbG9jYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHVzYWdlIHdpdGhpbiB0aGUgY29kZWJhc2UuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSBgZ3JlcGAuIEkgd2FudCB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgcGxhY2VzIHdoZXJlIGBtcl90YWJsZV9hbGxvY2AgaXMgY2FsbGVkLiBJdCdzIHRoZSBtb3N0IGRpcmVjdCBhbmQgZWZmaWNpZW50IHdheSB0byBnZXQgYSBiaXJkJ3MtZXllIHZpZXcgb2YgaG93IHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gVGhpcyBzaG91bGQgcXVpY2tseSBnaXZlIG1lIGEgbGlzdCBvZiBhbGwgcG90ZW50aWFsIGNhbGwgc2l0ZXMsIHdoaWNoIEkgY2FuIHRoZW4gYW5hbHl6ZSBpbiBtb3JlIGRldGFpbC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCB1bmNvdmVycy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQyMiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU1OjA0LjM2NTI1NTM5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc2NzMwMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXJfdGFibGVfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcG1yLmM9NDI2PXN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwbXJfbmV3X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTQzNy1cXG5uZXQvaXB2NC9pcG1yLmM6NDM4OlxcdHJldHVybiBtcl90YWJsZV9hbGxvYyhuZXQsIGlkLCBcXHUwMDI2aXBtcl9tcl90YWJsZV9vcHMsXFxubmV0L2lwdjQvaXBtci5jLTQzOS1cXHRcXHRcXHQgICAgICBpcG1yX2V4cGlyZV9wcm9jZXNzLCBpcG1yX25ld190YWJsZV9zZXQpO1xcbi0tXFxubmV0L2lwdjQvaXBtcl9iYXNlLmM9NDU9c3RydWN0IG1yX3RhYmxlICpcXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYzo0Njptcl90YWJsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCxcXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYy00Ny1cXHQgICAgICAgc3RydWN0IG1yX3RhYmxlX29wcyAqb3BzLFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz00MDg9c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfbmV3X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy00MTUtXFxubmV0L2lwdjYvaXA2bXIuYzo0MTY6XFx0cmV0dXJuIG1yX3RhYmxlX2FsbG9jKG5ldCwgaWQsIFxcdTAwMjZpcDZtcl9tcl90YWJsZV9vcHMsXFxubmV0L2lwdjYvaXA2bXIuYy00MTctXFx0XFx0XFx0ICAgICAgaXBtcl9leHBpcmVfcHJvY2VzcywgaXA2bXJfbmV3X3RhYmxlX3NldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU1OjA0LjQzMjkzNjI5NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjI5NTYwMjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNdWx0aWNhc3QgUm91dGluZyBUYWJsZSBhbmQgQ2FjaGUgQWxsb2NhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGlzIG11bHRpY2FzdCByb3V0aW5nIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIGBtcl90YWJsZWAgYW5kIGBtZmNfY2FjaGVgL2BtZmM2X2NhY2hlYCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBoYW5kbGVkLCBzbyBJJ2xsIHN0YXJ0IGJ5IGxpc3RpbmcgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQuIFdlJ3JlIGxvb2tpbmcgYXQgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGFsbG9jYXRpb24vdXNhZ2UgcGF0dGVybnM6XG5cbiogICBgaXBtcl9uZXdfdGFibGVgIGFuZCBgaXA2bXJfbmV3X3RhYmxlYCBhcmUgdGhlIHRhYmxlIGluaXRpYWxpemVyczsgSSdsbCB3YW50IHRvIGNoZWNrIGhvdyB0aGV5IHNldCB0aGluZ3MgdXAuXG4qICAgYG1yX3RhYmxlX2FsbG9jYCBsaWtlbHkgaGFuZGxlcyB0aGUgdW5kZXJseWluZyBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgdGhlIHJvdXRpbmcgdGFibGUgaXRzZWxmLlxuKiAgIFRoZW4gd2UgaGF2ZSBgaXBtcl9tZmNfYWRkYCBhbmQgYGlwNm1yX21mY19hZGRgIGZvciBhZGRpbmcgbXVsdGljYXN0IGZvcndhcmRpbmcgY2FjaGUgKE1GQykgZW50cmllcyAtIHRoZXNlIGFyZSBjcml0aWNhbC5cbiogICBGb3IgdGhlIGNhY2hlIGFsbG9jYXRpb24sIHdlJ3ZlIGdvdCBgaXBtcl9jYWNoZV9hbGxvY2AsIGBpcG1yX2NhY2hlX2FsbG9jX3VucmVzYCwgYGlwNm1yX2NhY2hlX2FsbG9jYCwgYW5kIGBpcDZtcl9jYWNoZV9hbGxvY191bnJlc2AuIFRoZXNlIGRlc2VydmUgYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSB0aGUgXCJ1bnJlc1wiIHZhcmlhbnRzLlxuKiAgIEZpbmFsbHksIHRoZSBzZXRzb2Nrb3B0IGNhbGxzLCBgaXBfbXJvdXRlX3NldHNvY2tvcHRgIGFuZCBgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0YCwgbmVlZCB0byBiZSBjaGVja2VkOyB0aGV5J3JlIHRoZSB1c2VyLWxldmVsIGludGVyZmFjZS5cblxuUmlnaHQsIHdpdGggdGhhdCBsaXN0IGluIG1pbmQsIEkgbmVlZCB0byBtYWtlIGEgcXVpY2sgdmVyaWZpY2F0aW9uIG9mIHRoZSBhY3R1YWwgZnVuY3Rpb24gbmFtZXMgZm9yIGBpcG1yX21mY19hZGRgIGFuZCBgaXA2bXJfbWZjX2FkZGAuIEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgbWlnaHQgYmUgYSBzdWJ0bGUgbnVhbmNlIGluIHRoZWlyIG5hbWluZyBvciBpbXBsZW1lbnRhdGlvbiB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGNsdWUgb2YgdGhlaXIgcm9sZS4gTGV0J3MgbWFrZSBzdXJlIHRoZXkgYXJlIGV4YWN0bHkgd2hhdCBJIGV4cGVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5NjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6NTU6MDcuNjYyNDk5NDAxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODExNDIyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcC4qbXIuKm1mY19hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcG1yLmM9MTIyMT1zdGF0aWMgaW50IGlwbXJfbWZjX2RlbGV0ZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IG1mY2N0bCAqbWZjLCBpbnQgcGFyZW50KVxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTEyNDAtXFxubmV0L2lwdjQvaXBtci5jOjEyNDE6c3RhdGljIGludCBpcG1yX21mY19hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG5uZXQvaXB2NC9pcG1yLmMtMTI0Mi1cXHRcXHRcXHRzdHJ1Y3QgbWZjY3RsICptZmMsIGludCBtcnRzb2NrLCBpbnQgcGFyZW50KVxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTE0MTA9aW50IGlwX21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTUyMS1cXHRcXHRlbHNlXFxubmV0L2lwdjQvaXBtci5jOjE1MjI6XFx0XFx0XFx0cmV0ID0gaXBtcl9tZmNfYWRkKG5ldCwgbXJ0LCBcXHUwMDI2bWZjLFxcbm5ldC9pcHY0L2lwbXIuYy0xNTIzLVxcdFxcdFxcdFxcdFxcdCAgIHNrID09IHJ0bmxfZGVyZWZlcmVuY2UobXJ0LVxcdTAwM2Vtcm91dGVfc2spLFxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTI5NDM9c3RhdGljIGludCBpcG1yX3J0bV9yb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yOTU5LVxcdGlmIChubGgtXFx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV1JPVVRFKVxcbm5ldC9pcHY0L2lwbXIuYzoyOTYwOlxcdFxcdHJldCA9IGlwbXJfbWZjX2FkZChuZXQsIHRibCwgXFx1MDAyNm1mY2MsIG1ydHNvY2ssIHBhcmVudCk7XFxubmV0L2lwdjQvaXBtci5jLTI5NjEtXFx0ZWxzZVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz0xNDY0PXZvaWQgX19pbml0IGlwNl9tcl9jbGVhbnVwKHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTE0NzQtXFxubmV0L2lwdjYvaXA2bXIuYzoxNDc1OnN0YXRpYyBpbnQgaXA2bXJfbWZjX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY2L2lwNm1yLmMtMTQ3Ni1cXHRcXHRcXHQgc3RydWN0IG1mNmNjdGwgKm1mYywgaW50IG1ydHNvY2ssIGludCBwYXJlbnQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTE3MTI9aW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xNzkwLVxcdFxcdGVsc2VcXG5uZXQvaXB2Ni9pcDZtci5jOjE3OTE6XFx0XFx0XFx0cmV0ID0gaXA2bXJfbWZjX2FkZChuZXQsIG1ydCwgXFx1MDAyNm1mYyxcXG5uZXQvaXB2Ni9pcDZtci5jLTE3OTItXFx0XFx0XFx0XFx0XFx0ICAgIHNrID09XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU1OjA3LjczMDYxODc1NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NjAxNzkwMDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgdG91Y2hlZCBieSB0aGlzIHBhdGNoLiBJIHNlZSB0aGF0IGBpcF9tcl9pbml0YCwgYG1yX3RhYmxlX2FsbG9jYCwgYW5kIGBpcDZfbXJfaW5pdGAgYXJlIGRpcmVjdGx5IG1vZGlmaWVkLCBhbmQgYG1yX3RhYmxlX2FsbG9jYCBhbG9uZyB3aXRoIHNldmVyYWwgY2FjaGUgYWxsb2NhdGlvbiBmdW5jdGlvbnMgKGBpcG1yX2NhY2hlX2FsbG9jYCwgYGlwbXJfY2FjaGVfYWxsb2NfdW5yZXNgLCBgaXA2bXJfY2FjaGVfYWxsb2NgLCBgaXA2bXJfY2FjaGVfYWxsb2NfdW5yZXNgKSBhbmQgbWZjIG9wZXJhdGlvbnMgKGBpcG1yX21mY19hZGRgLCBgaXA2bXJfbWZjX2FkZGApIGFyZSB1c2VycyBvZiB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4gQWRkaXRpb25hbGx5LCB0aGUgc2V0c29ja29wdCBjYWxscywgYGlwX21yb3V0ZV9zZXRzb2Nrb3B0YCBhbmQgYGlwNl9tcm91dGVfc2V0c29ja29wdGAsIGFyZSByZWxldmFudCBiZWNhdXNlIHRoZXkgcHJvdmlkZSB1c2Vyc3BhY2UgYWNjZXNzIHRvIHRoaXMgZnVuY3Rpb25hbGl0eS5cblxuTmV4dCwgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBJUF9NUk9VVEVgLCBgSVBWNl9NUk9VVEVgLCBhbmQgYE1FTUNHYCAoZm9yIFNMQUJfQUNDT1VOVCBhY2NvdW50aW5nKSBhcmUgbmVjZXNzYXJ5LiBJJ3ZlIGFsc28gZG91YmxlLWNoZWNrZWQgdGhlIGRlcGVuZGVuY2llczogYElQX01ST1VURWAgZGVwZW5kcyBvbiBgSVBfTVVMVElDQVNUYCBhbmQgc2VsZWN0cyBgSVBfTVJPVVRFX0NPTU1PTmAsIGFuZCBgSVBWNl9NUk9VVEVgIGRlcGVuZHMgb24gYElQVjZgIGFuZCBhbHNvIHNlbGVjdHMgYElQX01ST1VURV9DT01NT05gLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHN0ZXA6IGlkZW50aWZ5aW5nIHRoZSBgRm9jdXNTeW1ib2xzYC4gQmFzZWQgb24gdGhlIGd1aWRlbGluZXMsIEkgbmVlZCB0byBhdm9pZCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBhbmQgdGFyZ2V0IHNwZWNpZmljIGxvZ2ljIG9yIGVudHJ5IHBvaW50cy4gQWZ0ZXIgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLCBJJ3ZlIGRlY2lkZWQgdG8gaW5jbHVkZSBgbXJfdGFibGVfYWxsb2NgLCBgaXBtcl9tZmNfYWRkYCwgYGlwNm1yX21mY19hZGRgLCBgaXBfbXJvdXRlX3NldHNvY2tvcHRgLCBhbmQgYGlwNl9tcm91dGVfc2V0c29ja29wdGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGFuZCBhbGxvY2F0aW9uIHBvaW50cyByZWxhdGVkIHRvIHRoZSBtdWx0aWNhc3Qgcm91dGluZyBmdW5jdGlvbmFsaXR5LlxuXG5SZWFzb25pbmc6IFRoaXMgcGF0Y2ggaXMgZW5hYmxpbmcgbWVtY2cgc2xhYiBhY2NvdW50aW5nIGZvciBJUHY0L0lQdjYgbXVsdGljYXN0IHJvdXRpbmcgdGFibGVzIChgbXJfdGFibGVgKSBhbmQgbXVsdGljYXN0IGZvcndhcmRpbmcgY2FjaGUgZW50cmllcyAoYG1mY19jYWNoZWAgYW5kIGBtZmM2X2NhY2hlYCkuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSB0aGVzZSBhbGxvY2F0aW9ucyBhcmUgdHJpZ2dlcmVkIGFuZCBtYW5hZ2VkIGJ5IHVzZXJzcGFjZSB0aHJvdWdoIHNldHNvY2tvcHQgY29tbWFuZHMgbGlrZSBgTVJUX0FERF9NRkNgICh3aGljaCwgb2YgY291cnNlLCByZWxpZXMgb24gdGhlIGluY2x1ZGVkIGVudHJ5cG9pbnRzKSBhbmQgcG90ZW50aWFsbHkgbmV0bGluayByb3V0ZSBjb25maWd1cmF0aW9uLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgZnV6emluZyB0YXJnZXRzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB3aXRoaW4gY29yZSBuZXR3b3JraW5nIGNvZGUsIGFuZCB0aGUgU0xBQl9BQ0NPVU5UIG1vZGlmaWNhdGlvbnMganVzdGlmeSBmdXp6aW5nIHVuZGVyIGNvbnN0cmFpbmVkIG1lbW9yeSBlbnZpcm9ubWVudHMgKGkuZS4gdW5kZXIgbWVtb3J5LWNvbnN0cmFpbmVkIGNncm91cHMpLlxuXG5GaW5hbGx5LCBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgdHJ1ZWAuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBbXCJJUF9NUk9VVEVcIiwgXCJJUFY2X01ST1VURVwiLCBcIk1FTUNHXCJdYCwgYW5kIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgYFtcIm1yX3RhYmxlX2FsbG9jXCIsIFwiaXBfbXJvdXRlX3NldHNvY2tvcHRcIiwgXCJpcDZfbXJvdXRlX3NldHNvY2tvcHRcIiwgXCJpcG1yX21mY19hZGRcIiwgXCJpcDZtcl9tZmNfYWRkXCJdYC4gRXZlcnl0aGluZyBpcyBsb29raW5nIGNvcnJlY3Qgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTIzMiwiT3V0cHV0VG9rZW5zIjoxNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6NTU6MTcuMzMyNDEwOTQ0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIzMTM2MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX01ST1VURVwiLFxuICAgIFwiSVBWNl9NUk9VVEVcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXJfdGFibGVfYWxsb2NcIixcbiAgICBcImlwX21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcDZfbXJvdXRlX3NldHNvY2tvcHRcIixcbiAgICBcImlwbXJfbWZjX2FkZFwiLFxuICAgIFwiaXA2bXJfbWZjX2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgU0xBQl9BQ0NPVU5UIGFuZCBHRlBfS0VSTkVMX0FDQ09VTlQgZmxhZ3MgdG8gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZSBhbmQgZm9yd2FyZGluZyBjYWNoZSBhbGxvY2F0aW9ucyAobWZjX2NhY2hlLCBtZmM2X2NhY2hlLCBtcl90YWJsZSkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgcmVhY2hhYmxlIHZpYSBzZXRzb2Nrb3B0IGFuZCBuZXRsaW5rIG11bHRpY2FzdCByb3V0aW5nIGludGVyZmFjZXMsIHdhcnJhbnRpbmcgZnV6emluZyB1bmRlciBtZW1vcnktYWNjb3VudGluZyBjb25maWd1cmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9NUk9VVEVcIixcbiAgICBcIklQVjZfTVJPVVRFXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1yX3RhYmxlX2FsbG9jXCIsXG4gICAgXCJpcF9tcm91dGVfc2V0c29ja29wdFwiLFxuICAgIFwiaXA2X21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcG1yX21mY19hZGRcIixcbiAgICBcImlwNm1yX21mY19hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UIGZsYWdzIHRvIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHJvdXRpbmcgdGFibGUgYW5kIGZvcndhcmRpbmcgY2FjaGUgYWxsb2NhdGlvbnMgKG1mY19jYWNoZSwgbWZjNl9jYWNoZSwgbXJfdGFibGUpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHJlYWNoYWJsZSB2aWEgc2V0c29ja29wdCBhbmQgbmV0bGluayBtdWx0aWNhc3Qgcm91dGluZyBpbnRlcmZhY2VzLCB3YXJyYW50aW5nIGZ1enppbmcgdW5kZXIgbWVtb3J5LWFjY291bnRpbmcgY29uZmlndXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU1OjE3LjQxNDczMjMzMloiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwNzMyNTYxMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzo1NToxNy40MTUyNzU1MTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNjA3MjcwOTAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBmbGFncyAoU0xBQl9BQ0NPVU5UIGFuZCBHRlBfS0VSTkVMX0FDQ09VTlQpIHRvIHRoZSBJUHY0L0lQdjYgbXVsdGljYXN0IHJvdXRpbmcgdGFibGUgYWxsb2NhdGlvbnMgYW5kIHNsYWIgY2FjaGUgY3JlYXRpb24gKG1ydF9jYWNoZXApLiBUaGUgYWxsb2NhdGlvbiBpbiBtcl90YWJsZV9hbGxvYyBzdGlsbCB1c2VzIGt6YWxsb2Nfb2JqIHdoaWNoIGVuc3VyZXMgemVyby1pbml0aWFsaXphdGlvbiBvZiBtZW1vcnksIGFuZCBTTEFCX0FDQ09VTlQgc29sZWx5IGVuYWJsZXMgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIG9uIGNhY2hlIGFsbG9jYXRpb25zLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlci1zcGFjZSwgb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJiYWE4ZDA1NjJmZDk2MjhhODIxNjRlZjk0MzgxY2YwZWYzNWMyNGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDEzOjU0OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jXG5pbmRleCBlNWYyYjFjNjE1MGQyLi5iOWM1NDRkNDhjNDUyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtci5jXG4rKysgYi9uZXQvaXB2NC9pcG1yLmNcbkBAIC0zMzc2LDcgKzMzNzYsOCBAQCBpbnQgX19pbml0IGlwX21yX2luaXQodm9pZClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDKTtcbitcdG1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mY19jYWNoZSxcbitcdFx0XHRcdFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpO1xuIFxuIFx0ZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZpcG1yX25ldF9vcHMpO1xuIFx0aWYgKGVycilcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yX2Jhc2UuYyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXG5pbmRleCA4NjdiMjRiZWRlZDExLi5hMGVjNmQxOWEyMzdmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtcl9iYXNlLmNcbisrKyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXG5AQCAtNTIsNyArNTIsNyBAQCBtcl90YWJsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCxcbiBcdHN0cnVjdCBtcl90YWJsZSAqbXJ0O1xuIFx0aW50IGVycjtcbiBcbi1cdG1ydCA9IGt6YWxsb2Nfb2JqKCptcnQpO1xuK1x0bXJ0ID0ga3phbGxvY19vYmooKm1ydCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbXJ0KVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcdG1ydC1cdTAwM2VpZCA9IGlkO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jXG5pbmRleCAzZjJlZDliNzdkZWI1Li45ZDgxMTZiNWVkYjE3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2bXIuY1xuKysrIGIvbmV0L2lwdjYvaXA2bXIuY1xuQEAgLTE0MjcsNyArMTQyNyw3IEBAIGludCBfX2luaXQgaXA2X21yX2luaXQodm9pZClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOKTtcbitcdG1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mYzZfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfQUNDT1VOVCk7XG4gXHRpZiAoIW1ydF9jYWNoZXApXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6NTU6MTcuNDE1Mjc5MDYzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTg3NTQxNzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEFjY291bnRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIHBhdGNoIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIGFyZSBzdHJhaWdodGZvcndhcmQgbWVtY2cgYWNjb3VudGluZyBhZGRpdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UncmUgYWRkaW5nIGBTTEFCX0FDQ09VTlRgIHRvIHRoZSBzbGFiIGNhY2hlcyAoYG1ydF9jYWNoZXBgKSB1c2VkIGJ5IGJvdGggSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBjb21wb25lbnRzIChgbmV0L2lwdjQvaXBtci5jYCBhbmQgYG5ldC9pcHY2L2lwNm1yLmNgKS4gV2UncmUgYWxzbyBzZWVpbmcgdGhlIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGZsYWcgYmVpbmcgYWRkZWQgdG8gYGt6YWxsb2Nfb2JqYCBjYWxscywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbXJfdGFibGVfYWxsb2NgIGluIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AuIENsYXNzaWMgbW92ZSB0byB0cmFjayBtZW1vcnkgdXNhZ2Ugd2l0aGluIG1lbW9yeSBjb250cm9sIGdyb3Vwcywgbm90aGluZyB0b28gZXhjaXRpbmcgc28gZmFyLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSB3ZSBhcmVuJ3QgaW50cm9kdWNpbmcgYW55IHN1YnRsZSBpc3N1ZXMuIFRoYW5rZnVsbHksIGBremFsbG9jYCBpcyBzdGlsbCB1c2VkLCBzbyB6ZXJvIGluaXRpYWxpemF0aW9uIGlzIGhhbmRsZWQuIFdlJ3JlIG9ubHkgZGVhbGluZyB3aXRoIGFjY291bnRpbmcgZmxhZ3MgaGVyZSwgc28gdGhlcmUgc2hvdWxkbid0IGJlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGUgYFNMQUJfQUNDT1VOVGAgZmxhZyBpbiB0aGUgYG1ydF9jYWNoZXBgIGFsbG9jYXRpb25zIGlzIGp1c3QgZm9yIGFjY291bnRpbmcg4oCTIGl0IGRvZXNuJ3QgbWVzcyB3aXRoIHRoZSBhbGxvY2F0aW9uIGl0c2VsZi4gSXQgbG9va3MgbGlrZSBubyBuZXcgYWxsb2NhdGlvbiBsb2dpYywgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tzLCBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MgYXJlIGJlaW5nIGludHJvZHVjZWQgYXMgYSByZXN1bHQgb2YgdGhlc2UgY2hhbmdlcy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBjaGVjayB0aGUgc291cmNlIGZvciBga3phbGxvY19vYmpgIGluIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2Agb3IgdXNlIGEgcXVpY2sgZ3JlcHBlciwganVzdCB0byBjb25maXJtIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBhY2N1cmF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU1OjM5LjAwMjgyNTEwNloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNDU3MzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwbXJfYmFzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwbXJfYmFzZS5jPTQ2PW1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxcbi0tXFxubmV0L2lwdjQvaXBtcl9iYXNlLmMtNTQtXFxubmV0L2lwdjQvaXBtcl9iYXNlLmM6NTU6XFx0bXJ0ID0ga3phbGxvY19vYmooKm1ydCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYy01Ni1cXHRpZiAoIW1ydClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6NTU6MzkuMTg0Mjg2MTNaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMwMzY3NzUwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNdWx0aWNhc3QgUm91dGluZyBUYWJsZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gSXQncyBwcmV0dHkgY2xlYXItY3V0LiBUaGV5J3ZlIG1hZGUgc29tZSBjaGFuZ2VzIGludm9sdmluZyBtZW1vcnkgYWNjb3VudGluZywgYnV0IHRoZSBjb3JlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2Nlc3MgaGFzbid0IGNoYW5nZWQgaW4gYW55IHdheSB0aGF0IHdvdWxkIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIFRoZXkncmUgdXNpbmcgYGt6YWxsb2Nfb2JqYCB0byBhbGxvY2F0ZSBhbmQgemVybyB0aGUgbWVtb3J5IGZvciB0aGUgYG1ydGAgb2JqZWN0cywgYW5kIHRoZXkndmUgYWRkZWQgYFNMQUJfQUNDT1VOVGAgdG8gdGhlIGttZW1fY2FjaGUgY3JlYXRpb24gaW4gYGlwbXIuY2AgYW5kIGBpcDZtci5jYC4gVGhhdCdzIGl0LlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiB3YXMgd2hldGhlciB0aGlzIGNoYW5nZSBleHBvc2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0IGBremFsbG9jX29iamAgKnN0aWxsKiB6ZXJvZXMgdGhlIG1lbW9yeTsgdGhlIGFkZGl0aW9uIG9mIGBTTEFCX0FDQ09VTlRgIGlzICpvbmx5KiBhYm91dCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgZm9yIHRob3NlIHNsYWIgYWxsb2NhdGlvbnMuIEkgY2FuIHNlZSBubyBwYXRoIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGV2ZW4gYnJhbmNoZWQgb24uIFRoZXJlJ3Mgbm90aGluZyBoZXJlIHRoYXQgbG9va3Mgcmlza3kgZnJvbSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBwZXJzcGVjdGl2ZS5cblxuVGhlcmVmb3JlLCB0aGlzIGRvZXNuJ3Qgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24gd2l0aCBLTVNBTi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgb3IgY29waWVkIHRvIHVzZXJzcGFjZS5cblxuSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCBvbiB0aGlzLiBJJ20gY29uZmlkZW50IHRoZXJlIGFyZSBubyBLTVNBTiBjb25jZXJucy4gVGhlIHBhdGNoIGlzIHNpbXBseSBhZGRpbmcgYWNjb3VudGluZyBmbGFncywgYW5kIHRoZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcmVtYWlucyBpbnRhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNTEsIk91dHB1dFRva2VucyI6MTQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU1OjQzLjQ4Nzk2NjlaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgZmxhZ3MgKFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UKSB0byB0aGUgSVB2NC9JUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIGFsbG9jYXRpb25zIGFuZCBzbGFiIGNhY2hlIGNyZWF0aW9uIChtcnRfY2FjaGVwKS4gVGhlIGFsbG9jYXRpb24gaW4gbXJfdGFibGVfYWxsb2Mgc3RpbGwgdXNlcyBremFsbG9jX29iaiB3aGljaCBlbnN1cmVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgbWVtb3J5LCBhbmQgU0xBQl9BQ0NPVU5UIHNvbGVseSBlbmFibGVzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBvbiBjYWNoZSBhbGxvY2F0aW9ucy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXItc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIGZsYWdzIChTTEFCX0FDQ09VTlQgYW5kIEdGUF9LRVJORUxfQUNDT1VOVCkgdG8gdGhlIElQdjQvSVB2NiBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZSBhbGxvY2F0aW9ucyBhbmQgc2xhYiBjYWNoZSBjcmVhdGlvbiAobXJ0X2NhY2hlcCkuIFRoZSBhbGxvY2F0aW9uIGluIG1yX3RhYmxlX2FsbG9jIHN0aWxsIHVzZXMga3phbGxvY19vYmogd2hpY2ggZW5zdXJlcyB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIG1lbW9yeSwgYW5kIFNMQUJfQUNDT1VOVCBzb2xlbHkgZW5hYmxlcyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgb24gY2FjaGUgYWxsb2NhdGlvbnMuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBoYW5kbGluZywgc3RydWN0dXJlIGNvcGllcyB0byB1c2VyLXNwYWNlLCBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvldk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 13:52:30 +0000 UTC FinishedAt: 2026-09-08 13:55:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MROUTE", "IPV6_MROUTE", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "641d03105cc0d2437e32fdeec164f91a4ccef6c4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_MROUTE", "IPV6_MROUTE", "MEMCG" ], "series_id": "39f1cb2a-0751-44c8-b940-37b6fbeb85bb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mr_table_alloc", "ip_mroute_setsockopt", "ip6_mroute_setsockopt", "ipmr_mfc_add", "ip6mr_mfc_add" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX01ST1VURSYjMzQ7LAogICAgJiMzNDtJUFY2X01ST1VURSYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21yX3RhYmxlX2FsbG9jJiMzNDssCiAgICAmIzM0O2lwX21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwNl9tcm91dGVfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcG1yX21mY19hZGQmIzM0OywKICAgICYjMzQ7aXA2bXJfbWZjX2FkZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgZmxhZ3MgKFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UKSB0byB0aGUgSVB2NC9JUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIGFsbG9jYXRpb25zIGFuZCBzbGFiIGNhY2hlIGNyZWF0aW9uIChtcnRfY2FjaGVwKS4gVGhlIGFsbG9jYXRpb24gaW4gbXJfdGFibGVfYWxsb2Mgc3RpbGwgdXNlcyBremFsbG9jX29iaiB3aGljaCBlbnN1cmVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgbWVtb3J5LCBhbmQgU0xBQl9BQ0NPVU5UIHNvbGVseSBlbmFibGVzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBvbiBjYWNoZSBhbGxvY2F0aW9ucy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXItc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBTTEFCX0FDQ09VTlQgYW5kIEdGUF9LRVJORUxfQUNDT1VOVCBmbGFncyB0byBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIGFuZCBmb3J3YXJkaW5nIGNhY2hlIGFsbG9jYXRpb25zIChtZmNfY2FjaGUsIG1mYzZfY2FjaGUsIG1yX3RhYmxlKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSByZWFjaGFibGUgdmlhIHNldHNvY2tvcHQgYW5kIG5ldGxpbmsgbXVsdGljYXN0IHJvdXRpbmcgaW50ZXJmYWNlcywgd2FycmFudGluZyBmdXp6aW5nIHVuZGVyIG1lbW9yeS1hY2NvdW50aW5nIGNvbmZpZ3VyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmJhYThkMDU2MmZkOTYyOGE4MjE2NGVmOTQzODFjZjBlZjM1YzI0ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTM6NTQ6MjMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jXG5pbmRleCBlNWYyYjFjNjE1MGQyLi5iOWM1NDRkNDhjNDUyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcG1yLmNcbkBAIC0zMzc2LDcgJiM0MzszMzc2LDggQEAgaW50IF9faW5pdCBpcF9tcl9pbml0KHZvaWQpXG4ge1xuIFx0aW50IGVycjtcbiBcbi1cdG1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mY19jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9QQU5JQyk7XG4mIzQzO1x0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLFxuJiM0MztcdFx0XHRcdFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpO1xuIFxuIFx0ZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZpcG1yX25ldF9vcHMpO1xuIFx0aWYgKGVycilcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yX2Jhc2UuYyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXG5pbmRleCA4NjdiMjRiZWRlZDExLi5hMGVjNmQxOWEyMzdmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtcl9iYXNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXG5AQCAtNTIsNyAmIzQzOzUyLDcgQEAgbXJfdGFibGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsXG4gXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcbiBcdGludCBlcnI7XG4gXG4tXHRtcnQgPSBremFsbG9jX29iaigqbXJ0KTtcbiYjNDM7XHRtcnQgPSBremFsbG9jX29iaigqbXJ0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuIFx0aWYgKCFtcnQpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFx0bXJ0LVx1MDAzZWlkID0gaWQ7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmNcbmluZGV4IDNmMmVkOWI3N2RlYjUuLjlkODExNmI1ZWRiMTcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZtci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZtci5jXG5AQCAtMTQyNyw3ICYjNDM7MTQyNyw3IEBAIGludCBfX2luaXQgaXA2X21yX2luaXQodm9pZClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOKTtcbiYjNDM7XHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmM2X2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX0FDQ09VTlQpO1xuIFx0aWYgKCFtcnRfY2FjaGVwKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9NUk9VVEUmIzM0OywKICAgICYjMzQ7SVBWNl9NUk9VVEUmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttcl90YWJsZV9hbGxvYyYjMzQ7LAogICAgJiMzNDtpcF9tcm91dGVfc2V0c29ja29wdCYjMzQ7LAogICAgJiMzNDtpcDZfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXBtcl9tZmNfYWRkJiMzNDssCiAgICAmIzM0O2lwNm1yX21mY19hZGQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBTTEFCX0FDQ09VTlQgYW5kIEdGUF9LRVJORUxfQUNDT1VOVCBmbGFncyB0byBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIGFuZCBmb3J3YXJkaW5nIGNhY2hlIGFsbG9jYXRpb25zIChtZmNfY2FjaGUsIG1mYzZfY2FjaGUsIG1yX3RhYmxlKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSByZWFjaGFibGUgdmlhIHNldHNvY2tvcHQgYW5kIG5ldGxpbmsgbXVsdGljYXN0IHJvdXRpbmcgaW50ZXJmYWNlcywgd2FycmFudGluZyBmdXp6aW5nIHVuZGVyIG1lbW9yeS1hY2NvdW50aW5nIGNvbmZpZ3VyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmJhYThkMDU2MmZkOTYyOGE4MjE2NGVmOTQzODFjZjBlZjM1YzI0ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTM6NTQ6MjMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yLmMgYi9uZXQvaXB2NC9pcG1yLmMKaW5kZXggZTVmMmIxYzYxNTBkMi4uYjljNTQ0ZDQ4YzQ1MiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBtci5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwbXIuYwpAQCAtMzM3Niw3ICYjNDM7MzM3Niw4IEBAIGludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKQogewogCWludCBlcnI7CiAKLQltcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMpOwomIzQzOwltcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsCiYjNDM7CQkJCVNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpOwogCiAJZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmYW1wO2lwbXJfbmV0X29wcyk7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXJfYmFzZS5jIGIvbmV0L2lwdjQvaXBtcl9iYXNlLmMKaW5kZXggODY3YjI0YmVkZWQxMS4uYTBlYzZkMTlhMjM3ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBtcl9iYXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBtcl9iYXNlLmMKQEAgLTUyLDcgJiM0Mzs1Miw3IEBAIG1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLAogCXN0cnVjdCBtcl90YWJsZSAqbXJ0OwogCWludCBlcnI7CiAKLQltcnQgPSBremFsbG9jX29iaigqbXJ0KTsKJiM0MzsJbXJ0ID0ga3phbGxvY19vYmooKm1ydCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKIAlpZiAoIW1ydCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJbXJ0LSZndDtpZCA9IGlkOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmMKaW5kZXggM2YyZWQ5Yjc3ZGViNS4uOWQ4MTE2YjVlZGIxNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2bXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZtci5jCkBAIC0xNDI3LDcgJiM0MzsxNDI3LDcgQEAgaW50IF9faW5pdCBpcDZfbXJfaW5pdCh2b2lkKQogewogCWludCBlcnI7CiAKLQltcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmM2X2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04pOwomIzQzOwltcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmM2X2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX0FDQ09VTlQpOwogCWlmICghbXJ0X2NhY2hlcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwNAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDIwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqQW5hbHl6aW5nIHRoaXMgSVAgTXVsdGljYXN0IFBhdGNoKioKCkFscmlnaHQsIHNvIHRoZSBmb2N1cyBoZXJlIGlzIG1lbW9yeSBhY2NvdW50aW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBJUCBtdWx0aWNhc3Qgcm91dGluZyBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIHBlcmhhcHMgcHJldmVudGluZyBwb3RlbnRpYWwgZGVuaWFsLW9mLXNlcnZpY2UgdnVsbmVyYWJpbGl0aWVzLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgaXBtci5jYCwgYGlwbXJfYmFzZS5jYCwgYW5kIGBpcDZtci5jYCwgd2hpY2ggYXJlIGFsbCBjb3JlIG11bHRpY2FzdCByb3V0aW5nIGNvbXBvbmVudHMgZm9yIGJvdGggSVB2NCBhbmQgSVB2Ni4KClRoZSBmaXJzdCBjaGFuZ2UgaW4gYGlwbXIuY2AsIHdpdGhpbiB0aGUgYGlwX21yX2luaXRgIGZ1bmN0aW9uLCBhZGRzIGBTTEFCX0FDQ09VTlRgIHRvIHRoZSBgbWZjX2NhY2hlYCBLTUVNIGNhY2hlLiBUaGlzIHRlbGxzIHRoZSBrZXJuZWwmIzM5O3Mgc2xhYiBhbGxvY2F0b3IgdG8gYWNjb3VudCBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIGZyb20gdGhpcyBjYWNoZS4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgc2lnbmFsIG9mIG1lbW9yeSB0cmFja2luZy4gVGhlIHNhbWUgdGhpbmcgaXMgaGFwcGVuaW5nIHdpdGggdGhlIGBtZmM2X2NhY2hlYCBpbiBgaXA2bXIuY2AsIHdpdGggdGhlIGFkZGl0aW9uIG9mIGBTTEFCX0FDQ09VTlRgLiBTbyB0aGF0JiMzOTtzIGNvbnNpc3RlbnQuCgpUaGVuLCBvdmVyIGluIGBpcG1yX2Jhc2UuY2AsIGluc2lkZSB0aGUgYG1yX3RhYmxlX2FsbG9jYCBmdW5jdGlvbiwgdGhlIGBremFsbG9jX29iaigpYCBjYWxsIGlzIGdldHRpbmcgdGhlIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGZsYWcuIFRoaXMgaXMgdGhlIGV4cGxpY2l0IGtlcm5lbC1sZXZlbCBhbGxvY2F0aW9uIGZsYWcgdGhhdCYjMzk7cyBnb2luZyB0byB0cmFjayB0aGUgYWxsb2NhdGVkIG1lbW9yeSBmb3IgdGhpcyBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZS4gVGhpcyBpcyBhbm90aGVyIGNsZWFyIGluZGljYXRvciB0aGF0IHRoZXJlIGlzIGFuIGludGVudCB0byBrZWVwIHRyYWNrIG9mIHRoaXMgbWVtb3J5LgoKU28sIHRoZSBjb21tb24gdGhyZWFkIGlzIG1lbW9yeSBhY2NvdW50aW5nIGluIG11bHRpY2FzdCByb3V0aW5nLiBMb29rcyBsaWtlIHRoZSBpbnRlbnRpb24gaXMgZGVmaW5pdGVseSB0byB0cmFjayB0aGVzZSBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIHBvdGVudGlhbGx5IHNldCBsaW1pdHMsIG9yIGF0IGxlYXN0IGhhdmUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgbWVtb3J5IHVzYWdlIGluIG11bHRpY2FzdCByb3V0aW5nLiBOb3csIEkgd2FudCB0byBjb25maXJtIHdoaWNoIEtjb25maWcgb3B0aW9ucyBhcmUgaW52b2x2ZWQgc28gSSYjMzk7bGwgcmVhY2ggZm9yIGdyZXBwZXIgdG8gZ2V0IGEgZ29vZCBpZGVhIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24gYW5kIHdoZXJlIHRoaXMgaXMgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUF9NUk9VVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MjA3PWNvbmZpZyBORVRfSVBHUkVfQlJPQURDQVNUXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0yMTUtXG5uZXQvaXB2NC9LY29uZmlnOjIxNjpjb25maWcgSVBfTVJPVVRFX0NPTU1PTlxubmV0L2lwdjQvS2NvbmZpZy0yMTctXHRib29sXG5uZXQvaXB2NC9LY29uZmlnOjIxODpcdGRlcGVuZHMgb24gSVBfTVJPVVRFIHx8IElQVjZfTVJPVVRFXG5uZXQvaXB2NC9LY29uZmlnLTIxOS1cbm5ldC9pcHY0L0tjb25maWc6MjIwOmNvbmZpZyBJUF9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjIxLVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHJvdXRpbmdcJiMzNDtcbm5ldC9pcHY0L0tjb25maWctMjIyLVx0ZGVwZW5kcyBvbiBJUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L0tjb25maWc6MjIzOlx0c2VsZWN0IElQX01ST1VURV9DT01NT05cbm5ldC9pcHY0L0tjb25maWctMjI0LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWctMjMxLVxubmV0L2lwdjQvS2NvbmZpZzoyMzI6Y29uZmlnIElQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY0L0tjb25maWctMjMzLVx0Ym9vbCBcJiMzNDtJUDogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG5uZXQvaXB2NC9LY29uZmlnOjIzNDpcdGRlcGVuZHMgb24gSVBfTVJPVVRFIFx1MDAyNlx1MDAyNiBJUF9BRFZBTkNFRF9ST1VURVJcbm5ldC9pcHY0L0tjb25maWctMjM1LVx0c2VsZWN0IEZJQl9SVUxFU1xuLS1cbm5ldC9pcHY0L0tjb25maWc9MjQ2PWNvbmZpZyBJUF9QSU1TTV9WMVxubmV0L2lwdjQvS2NvbmZpZy0yNDctXHRib29sIFwmIzM0O0lQOiBQSU0tU00gdmVyc2lvbiAxIHN1cHBvcnRcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MjQ4Olx0ZGVwZW5kcyBvbiBJUF9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjQ5LVx0aGVscFxuLS1cbm5ldC9pcHY0L0tjb25maWc9MjU5PWNvbmZpZyBJUF9QSU1TTV9WMlxubmV0L2lwdjQvS2NvbmZpZy0yNjAtXHRib29sIFwmIzM0O0lQOiBQSU0tU00gdmVyc2lvbiAyIHN1cHBvcnRcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MjYxOlx0ZGVwZW5kcyBvbiBJUF9NUk9VVEVcbm5ldC9pcHY0L0tjb25maWctMjYyLVx0aGVscFxuLS1cbm5ldC9pcHY0L01ha2VmaWxlPTIyPW9iai0kKENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMpICYjNDM7PSBmaWJfcnVsZXMub1xubmV0L2lwdjQvTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX0lQX01ST1VURSkgJiM0Mzs9IGlwbXIub1xubmV0L2lwdjQvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX0lQX01ST1VURV9DT01NT04pICYjNDM7PSBpcG1yX2Jhc2Uub1xubmV0L2lwdjQvTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX05FVF9JUElQKSAmIzQzOz0gaXBpcC5vXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTExNi0jaW5jbHVkZSBcdTAwM2NuZXQvc2VjdXJlX3NlcS5oXHUwMDNlXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTE3OiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTE4LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21yb3V0ZS5oXHUwMDNlXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jPTE4ODI9c3RhdGljIGludCBfX2luaXQgaW5ldF9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjQvYWZfaW5ldC5jLTE5ODgtXHQgKi9cbm5ldC9pcHY0L2FmX2luZXQuYzoxOTg5OiNpZiBkZWZpbmVkKENPTkZJR19JUF9NUk9VVEUpXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTk5MC1cdGlmIChpcF9tcl9pbml0KCkpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTEwMS0jaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRmaWx0ZXJfaXB2NC5oXHUwMDNlXG5uZXQvaXB2NC9pZ21wLmM6MTAyOiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXG5uZXQvaXB2NC9pZ21wLmMtMTAzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21yb3V0ZS5oXHUwMDNlXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmM9MzY3PWludCBpcF9tY19vdXRwdXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMzgzLVx0XHRpZiAoc2tfbWNfbG9vcChzaylcbm5ldC9pcHY0L2lwX291dHB1dC5jOjM4NDojaWZkZWYgQ09ORklHX0lQX01ST1VURVxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMzg1LVx0XHQvKiBTbWFsbCBvcHRpbWl6YXRpb246IGRvIG5vdCBsb29wYmFjayBub3QgbG9jYWwgZnJhbWVzLFxuLS1cbm5ldC9pcHY0L2lwbXIuYz0xMTg9c3RhdGljIHZvaWQgaXBtcl9leHBpcmVfcHJvY2VzcyhzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XG5uZXQvaXB2NC9pcG1yLmMtMTE5LVxubmV0L2lwdjQvaXBtci5jOjEyMDojaWZkZWYgQ09ORklHX0lQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY0L2lwbXIuYy0xMjEtI2RlZmluZSBpcG1yX2Zvcl9lYWNoX3RhYmxlKG1ydCwgbmV0KVx0XHRcdFx0XHRcXFxuLS1cbm5ldC9pcHY0L2lwbXIuYz00MDg9c3RhdGljIHZvaWQgaXBtcl9uZXdfdGFibGVfc2V0KHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxuLS1cbm5ldC9pcHY0L2lwbXIuYy00MTAte1xubmV0L2lwdjQvaXBtci5jOjQxMTojaWZkZWYgQ09ORklHX0lQX01ST1VURV9NVUxUSVBMRV9UQUJMRVNcbm5ldC9pcHY0L2lwbXIuYy00MTItXHRsaXN0X2FkZF90YWlsX3JjdShcdTAwMjZtcnQtXHUwMDNlbGlzdCwgXHUwMDI2bmV0LVx1MDAzZWlwdjQubXJfdGFibGVzKTtcbi0tXG5uZXQvaXB2NC9pcG1yLmM9MTQxMD1pbnQgaXBfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTU3OC1cdGNhc2UgTVJUX1RBQkxFOlxubmV0L2lwdjQvaXBtci5jOjE1Nzk6XHRcdGlmICghSVNfQlVJTFRJTihDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFUykpIHtcbm5ldC9pcHY0L2lwbXIuYy0xNTgwLVx0XHRcdHJldCA9IC1FTk9QUk9UT09QVDtcbi0tXG5uZXQvaXB2NC9yYXcuYz04ODk9c3RhdGljIGludCByYXdfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCBpbnQgKmthcmcpXG4tLVxubmV0L2lwdjQvcmF3LmMtOTA5LVx0ZGVmYXVsdDpcbm5ldC9pcHY0L3Jhdy5jOjkxMDojaWZkZWYgQ09ORklHX0lQX01ST1VURVxubmV0L2lwdjQvcmF3LmMtOTExLVx0XHRyZXR1cm4gaXBtcl9pb2N0bChzaywgY21kLCBrYXJnKTtcbi0tXG5uZXQvaXB2NC9yYXcuYz05MTk9c3RhdGljIGludCBjb21wYXRfcmF3X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxubmV0L2lwdjQvcmF3LmMtOTI1LVx0ZGVmYXVsdDpcbm5ldC9pcHY0L3Jhdy5jOjkyNjojaWZkZWYgQ09ORklHX0lQX01ST1VURVxubmV0L2lwdjQvcmF3LmMtOTI3LVx0XHRyZXR1cm4gaXBtcl9jb21wYXRfaW9jdGwoc2ssIGNtZCwgY29tcGF0X3B0cihhcmcpKTtcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jPTE3NzE9aXBfcm91dGVfaW5wdXRfbWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0xODAxLVxubmV0L2lwdjQvcm91dGUuYzoxODAyOiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXG5uZXQvaXB2NC9yb3V0ZS5jLTE4MDMtXHRpZiAoIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGRhZGRyKSBcdTAwMjZcdTAwMjYgSU5fREVWX01GT1JXQVJEKGluX2RldikpXG4tLVxubmV0L2lwdjQvcm91dGUuYz0yNTIzPWlwX3JvdXRlX2lucHV0X3JjdShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkcixcbi0tXG5uZXQvaXB2NC9yb3V0ZS5jLTI1NTktXHRcdGlmIChvdXJcbm5ldC9pcHY0L3JvdXRlLmM6MjU2MDojaWZkZWYgQ09ORklHX0lQX01ST1VURVxubmV0L2lwdjQvcm91dGUuYy0yNTYxLVx0XHRcdHx8XG4tLVxubmV0L2lwdjQvcm91dGUuYz0yNTkxPXN0YXRpYyBzdHJ1Y3QgcnRhYmxlICpfX21rcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0yNjk4LVx0XHR9XG5uZXQvaXB2NC9yb3V0ZS5jOjI2OTk6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVcbm5ldC9pcHY0L3JvdXRlLmMtMjcwMC1cdFx0aWYgKHR5cGUgPT0gUlROX01VTFRJQ0FTVCkge1xuLS1cbm5ldC9pcHY0L3JvdXRlLmM9Mjk3OD1zdGF0aWMgaW50IHJ0X2ZpbGxfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIF9fYmUzMiBkc3QsIF9fYmUzMiBzcmMsXG4tLVxubmV0L2lwdjQvcm91dGUuYy0zMDgwLVx0XHRpZiAocnRfaXNfaW5wdXRfcm91dGUocnQpKSB7XG5uZXQvaXB2NC9yb3V0ZS5jOjMwODE6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVcbm5ldC9pcHY0L3JvdXRlLmMtMzA4Mi1cdFx0XHRpZiAoaXB2NF9pc19tdWx0aWNhc3QoZHN0KSBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTI1Nz1jb25maWcgSVBWNl9NUk9VVEVcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI1OS1cdGRlcGVuZHMgb24gSVBWNlxubmV0L2lwdjYvS2NvbmZpZzoyNjA6XHRzZWxlY3QgSVBfTVJPVVRFX0NPTU1PTlxubmV0L2lwdjYvS2NvbmZpZy0yNjEtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAyMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIGNoYW5nZXMuCgoqKkRpdmluZyBEZWVwIGludG8gdGhlIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgdGltZSB0byBnZXQgZ3JhbnVsYXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcywgYW5kIGEgc3VyZmFjZS1sZXZlbCBvdmVydmlldyBqdXN0IHdvbiYjMzk7dCBjdXQgaXQuIExldCYjMzk7cyBzdGFydCBieSBkaXNzZWN0aW5nIHRoZW0gdGhvcm91Z2hseS4gSSYjMzk7bSBnb2luZyB0byBsZXZlcmFnZSBteSBwcmVmZXJyZWQgdG9vbHMgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUg4oCTIHByb2JhYmx5IGEgY29tYmluYXRpb24gb2YgYHJlYWQtZmlsZWAgdG8gZ2V0IHRoZSBjb250ZXh0IG9mIHRob3NlIGZpbGVzIGluIHRoZWlyIGVudGlyZXR5LCBhbmQgYGdyZXBwZXJgIHRvIHF1aWNrbHkgcGlucG9pbnQgYW5kIGV4dHJhY3QgdGhlIHJlbGV2YW50IGNvZGUgc25pcHBldHMgdGhhdCBhcmUgaW1wYWN0ZWQgYnkgdGhpcyBwYXRjaC4gSSYjMzk7bGwgbmVlZCB0byBzZWUgcHJlY2lzZWx5ICpob3cqIHRoZSBzdXJyb3VuZGluZyBjb2RlIGlzIGludGVyYWN0aW5nIHdpdGggdGhlIG1vZGlmaWVkIHBvcnRpb25zLiBObyBzaG9ydGN1dHMgaGVyZTsgZ290dGEgZ2V0IGEgc29saWQgZ3Jhc3Agb24gdGhlIGJlZm9yZS1hbmQtYWZ0ZXIgc2NlbmFyaW9zIHRvIHRydWx5IGFzc2VzcyB0aGUgaW1wYWN0IGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIHVuZm9yZXNlZW4gY29uc2VxdWVuY2VzIG9yIHJlZ3Jlc3Npb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzM3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMzcwOlx0XHR7LnByb3RvY29sID0gUlROTF9GQU1JTFlfSVBNUiwgLm1zZ3R5cGUgPSBSVE1fR0VUUk9VVEUsXG4zMzcxOlx0XHQgLmRvaXQgPSBpcG1yX3J0bV9nZXRyb3V0ZSwgLmR1bXBpdCA9IGlwbXJfcnRtX2R1bXByb3V0ZSxcbjMzNzI6XHRcdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRCB8IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcbjMzNzM6XHR9O1xuMzM3NDpcdFxuMzM3NTpcdGludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKVxuMzM3NjpcdHtcbjMzNzc6XHRcdGludCBlcnI7XG4zMzc4Olx0XG4zMzc5Olx0XHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsXG4zMzgwOlx0XHRcdFx0XHRTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDIHwgU0xBQl9BQ0NPVU5UKTtcbjMzODE6XHRcbjMzODI6XHRcdGVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2aXBtcl9uZXRfb3BzKTtcbjMzODM6XHRcdGlmIChlcnIpXG4zMzg0Olx0XHRcdGdvdG8gcmVnX3Blcm5ldF9mYWlsO1xuMzM4NTpcdFxuMzM4NjpcdFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNmlwX21yX25vdGlmaWVyKTtcbjMzODc6XHRcdGlmIChlcnIpXG4zMzg4Olx0XHRcdGdvdG8gcmVnX25vdGlmX2ZhaWw7XG4zMzg5Olx0I2lmZGVmIENPTkZJR19JUF9QSU1TTV9WMlxuMzM5MDpcdFx0aWYgKGluZXRfYWRkX3Byb3RvY29sKFx1MDAyNnBpbV9wcm90b2NvbCwgSVBQUk9UT19QSU0pIFx1MDAzYyAwKSB7XG4zMzkxOlx0XHRcdHByX2VycihcJiMzNDslczogY2FuJiMzOTt0IGFkZCBQSU0gcHJvdG9jb2xcXG5cJiMzNDssIF9fZnVuY19fKTtcbjMzOTI6XHRcdFx0ZXJyID0gLUVBR0FJTjtcbjMzOTM6XHRcdFx0Z290byBhZGRfcHJvdG9fZmFpbDtcbjMzOTQ6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Njk1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgSVAgTXVsdGljYXN0IFJvdXRpbmcgQ29kZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtdWx0aWNhc3Qgcm91dGluZywgYW5kIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIGtlcm5lbCBjb2RlLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBgbmV0L2lwdjQvaXBtcl9iYXNlLmNgIGZpbGUuIFRoaXMgaXMgd2hlcmUgYSBsb3Qgb2YgdGhlIGNvcmUgbXVsdGljYXN0IHJvdXRpbmcgbG9naWMgbGl2ZXMgaW4gdGhlIElQdjQgc3RhY2suIEkgZmlndXJlLCBpZiB3ZSYjMzk7cmUgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIGJlaGF2aW9yIG9yIHBvdGVudGlhbGx5IGRlYnVnIHNvbWV0aGluZywgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgZm91bmRhdGlvbiBpcyBrZXkuIEkmIzM5O20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDUyLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBzZWN0aW9uIGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtcl9iYXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0dm9pZCBtcl90YWJsZV9mcmVlKHN0cnVjdCBtcl90YWJsZSAqbXJ0KVxuICA0MTpcdHtcbiAgNDI6XHRcdHF1ZXVlX3JjdV93b3JrKHN5c3RlbV9kZmxfd3EsIFx1MDAyNm1ydC1cdTAwM2V3b3JrKTtcbiAgNDM6XHR9XG4gIDQ0Olx0XG4gIDQ1Olx0c3RydWN0IG1yX3RhYmxlICpcbiAgNDY6XHRtcl90YWJsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCxcbiAgNDc6XHRcdCAgICAgICBzdHJ1Y3QgbXJfdGFibGVfb3BzICpvcHMsXG4gIDQ4Olx0XHQgICAgICAgdm9pZCAoKmV4cGlyZV9mdW5jKShzdHJ1Y3QgdGltZXJfbGlzdCAqdCksXG4gIDQ5Olx0XHQgICAgICAgdm9pZCAoKnRhYmxlX3NldCkoc3RydWN0IG1yX3RhYmxlICptcnQsXG4gIDUwOlx0XHRcdFx0XHQgc3RydWN0IG5ldCAqbmV0KSlcbiAgNTE6XHR7XG4gIDUyOlx0XHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcbiAgNTM6XHRcdGludCBlcnI7XG4gIDU0Olx0XG4gIDU1Olx0XHRtcnQgPSBremFsbG9jX29iaigqbXJ0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuICA1NjpcdFx0aWYgKCFtcnQpXG4gIDU3Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuICA1ODpcdFx0bXJ0LVx1MDAzZWlkID0gaWQ7XG4gIDU5Olx0XHR3cml0ZV9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQsIG5ldCk7XG4gIDYwOlx0XG4gIDYxOlx0XHRtcnQtXHUwMDNlb3BzID0gKm9wcztcbiAgNjI6XHRcdGVyciA9IHJobHRhYmxlX2luaXQoXHUwMDI2bXJ0LVx1MDAzZW1mY19oYXNoLCBtcnQtXHUwMDNlb3BzLnJodF9wYXJhbXMpO1xuICA2MzpcdFx0aWYgKGVycikge1xuICA2NDpcdFx0XHRrZnJlZShtcnQpO1xuICA2NTpcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuICA2NjpcdFx0fVxuICA2NzpcdFxuICA2ODpcdFx0SU5JVF9SQ1VfV09SSyhcdTAwMjZtcnQtXHUwMDNld29yaywgX19tcl9mcmVlX3RhYmxlKTtcbiAgNjk6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNm1ydC1cdTAwM2VtZmNfY2FjaGVfbGlzdCk7XG4gIDcwOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZtcnQtXHUwMDNlbWZjX3VucmVzX3F1ZXVlKTtcbiAgNzE6XHRcbiAgNzI6XHRcdHRpbWVyX3NldHVwKFx1MDAyNm1ydC1cdTAwM2VpcG1yX2V4cGlyZV90aW1lciwgZXhwaXJlX2Z1bmMsIDApO1xuICA3MzpcdFxuICA3NDpcdFx0bXJ0LVx1MDAzZW1yb3V0ZV9yZWdfdmlmX251bSA9IC0xO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MzcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBpcDZtci5jYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBrZXJuZWwmIzM5O3MgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBjb2RlLCBzcGVjaWZpY2FsbHkgYG5ldC9pcHY2L2lwNm1yLmNgLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZSBJJiMzOTttIHRyb3VibGVzaG9vdGluZywgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBleGFtaW5pbmcgdGhlIGNvZGUgYXJvdW5kIGxpbmUgMTQyNy4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFzIG9mdGVuIGNlcnRhaW4gY29yZSBmdW5jdGlvbmFsaXRpZXMgb3IgcG90ZW50aWFsIHByb2JsZW0gYXJlYXMgdGVuZCB0byBiZSBsb2NhbGl6ZWQgYXJvdW5kIHNpbWlsYXIgc2VjdGlvbnMsIGJ5IGNvbnZlbnRpb24sIG9yIGZyb20gcGFzdCBleHBlcmllbmNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCBzZWN0aW9uIG9mIHRoZSBjb2RlIHJldmVhbHMuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIGNsdWVzIHJlbGF0ZWQgdG8gW0ltcGxpZWQgUHJvYmxlbSBBcmVhIC0gaW5zZXJ0IGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBwcm9ibGVtXS4gSSYjMzk7bGwgYmUgZm9jdXNlZCBvbiBob3cgdGhlIGNvZGUgaGFuZGxlcyBbU3BlY2lmaWMgQXJlYSBvZiBpbnRlcmVzdCAtIGFsc28gaW1wbGllZCBmcm9tIG9yaWdpbmFsIHByb2JsZW1dLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3IgYW55IG9idmlvdXMgbG9naWMgZXJyb3JzLCByYWNlIGNvbmRpdGlvbnMsIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNm1yLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MjA6XHRcdHsub3duZXIgPSBUSElTX01PRFVMRSwgLnByb3RvY29sID0gUlROTF9GQU1JTFlfSVA2TVIsXG4xNDIxOlx0XHQgLm1zZ3R5cGUgPSBSVE1fR0VUUk9VVEUsXG4xNDIyOlx0XHQgLmRvaXQgPSBpcDZtcl9ydG1fZ2V0cm91dGUsIC5kdW1waXQgPSBpcDZtcl9ydG1fZHVtcHJvdXRlLFxuMTQyMzpcdFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEIHwgUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxuMTQyNDpcdH07XG4xNDI1Olx0XG4xNDI2Olx0aW50IF9faW5pdCBpcDZfbXJfaW5pdCh2b2lkKVxuMTQyNzpcdHtcbjE0Mjg6XHRcdGludCBlcnI7XG4xNDI5Olx0XG4xNDMwOlx0XHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmM2X2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX0FDQ09VTlQpO1xuMTQzMTpcdFx0aWYgKCFtcnRfY2FjaGVwKVxuMTQzMjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE0MzM6XHRcbjE0MzQ6XHRcdGVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2aXA2bXJfbmV0X29wcyk7XG4xNDM1Olx0XHRpZiAoZXJyKVxuMTQzNjpcdFx0XHRnb3RvIHJlZ19wZXJuZXRfZmFpbDtcbjE0Mzc6XHRcbjE0Mzg6XHRcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZpcDZfbXJfbm90aWZpZXIpO1xuMTQzOTpcdFx0aWYgKGVycilcbjE0NDA6XHRcdFx0Z290byByZWdfbm90aWZfZmFpbDtcbjE0NDE6XHQjaWZkZWYgQ09ORklHX0lQVjZfUElNU01fVjJcbjE0NDI6XHRcdGlmIChpbmV0Nl9hZGRfcHJvdG9jb2woXHUwMDI2cGltNl9wcm90b2NvbCwgSVBQUk9UT19QSU0pIFx1MDAzYyAwKSB7XG4xNDQzOlx0XHRcdHByX2VycihcJiMzNDslczogY2FuJiMzOTt0IGFkZCBQSU0gcHJvdG9jb2xcXG5cJiMzNDssIF9fZnVuY19fKTtcbjE0NDQ6XHRcdFx0ZXJyID0gLUVBR0FJTjtcbjE0NDU6XHRcdFx0Z290byBhZGRfcHJvdG9fZmFpbDtcbjE0NDY6XHRcdH1cbjE0NDc6XHQjZW5kaWZcbjE0NDg6XHRcdGVyciA9IHJ0bmxfcmVnaXN0ZXJfbWFueShpcDZtcl9ydG5sX21zZ19oYW5kbGVycyk7XG4xNDQ5Olx0XHRpZiAoIWVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODIyMQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDQ1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXb3J0aEZ1enppbmc9dHJ1ZTogTXVsdGljYXN0IFJvdXRpbmcgTWVtb3J5IEFjY291bnRpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBhZGRlZCBgU0xBQl9BQ0NPVU5UYCB0byBgbXJ0X2NhY2hlcGAgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9mIGJvdGggSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZywgYW5kIGl0IGFkZGVkIGBHRlBfS0VSTkVMX0FDQ09VTlRgIHdoZW4gYWxsb2NhdGluZyBgbXJfdGFibGVgIG9iamVjdHMuIFRoZSBpbnRlbnQsIEkgc2VlLCBpcyB0byBpbnRlZ3JhdGUgbWVtY2cgKGNncm91cCBtZW1vcnkgYWNjb3VudGluZykgaW50byB0aGVzZSBtdWx0aWNhc3Qgcm91dGluZyBzdHJ1Y3R1cmVzLiBTaW5jZSBgbWZjX2NhY2hlYCwgYG1mYzZfY2FjaGVgLCBhbmQgYG1yX3RhYmxlYCBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgaW4gcmVzcG9uc2UgdG8gdXNlci1zcGFjZSByZXF1ZXN0cyBvciBmcm9tIG5ldHdvcmsgcm91dGluZyB0YWJsZXMgY3JlYXRlZCBieSB1c2VyLXNwYWNlIHByb2Nlc3NlcywgdGhpcyBhY2NvdW50aW5nIHByZXZlbnRzIHVzZXIgcHJvY2Vzc2VzIHdpdGhpbiBtZW1jZ3MgZnJvbSBleGNlZWRpbmcgdGhlaXIgbWVtb3J5IGxpbWl0cyB1bm5vdGljZWQgYW5kIGV4aGF1c3RpbmcgdGhlIHN5c3RlbS4KCk5vdywgaXMgdGhpcyBjb2RlIHJlYWNoYWJsZT8gQWJzb2x1dGVseSEgV2UmIzM5O3JlIHRhbGtpbmcgY29yZSBuZXR3b3JraW5nIOKAkyBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nLiBUaGlzIGFsaWducyB3aXRoIHRoZSAmIzM0O2NvcmUgc3Vic3lzdGVtcyYjMzQ7IHBvc2l0aXZlIGNyaXRlcmlvbiBvdXRsaW5lZDogJiMzNDtBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbi4uLiBjb3JlIG5ldHdvcmtpbmcuJiMzNDsgVGhlIGNoYW5nZXMgbW9kaWZ5IGhvdyB0aGUga2VybmVsICphY2NvdW50cyogZm9yIG1lbW9yeSB1c2VkIGJ5IGEgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgcG9zaXRpdmUuIFRoaXMgaXNuJiMzOTt0IHNvbWUgb2JzY3VyZSBkcml2ZXIgb3IgYW4gdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGguCgpHaXZlbiB0aGUgY3JpdGVyaWEgZm9yIGRldGVybWluaW5nIGBXb3J0aEZ1enppbmdgLCBJIGNhbiBjb25maWRlbnRseSBjb25jbHVkZSB0aGF0IHRoaXMgcGF0Y2ggd2FycmFudHMgZnV6emluZywgc28gYFdvcnRoRnV6emluZ2AgaXMgYHRydWVgLgoKSSBzaG91bGQgcHJvYmFibHkgYWxzbyB2ZXJpZnkgdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWd1cmF0aW9ucyBieSBjaGVja2luZyBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9LY29uZmlnYCB0byBjb25maXJtIGBJUF9NUk9VVEVgIGFuZCBgSVBWNl9NUk9VVEVgIGFyZSBlbmFibGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBWNl9NUk9VVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZz0yNDM9Y29uZmlnIElQVjZfU1VCVFJFRVNcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cbm5ldC9pcHY2L0tjb25maWc6MjU3OmNvbmZpZyBJUFY2X01ST1VURVxubmV0L2lwdjYvS2NvbmZpZy0yNTgtXHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4tLVxubmV0L2lwdjYvS2NvbmZpZy0yNjQtXG5uZXQvaXB2Ni9LY29uZmlnOjI2NTpjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cdGJvb2wgXCYjMzQ7SVB2NjogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxODMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGxpbmVzIGluIGBuZXQvaXB2Ni9LY29uZmlnYDoKCioqRGl2aW5nIGludG8gdGhlIElQdjYgS2NvbmZpZyBmb3IgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gdGhhdCBJUHY2IEtjb25maWcgZmlsZS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdGV4dCBtZW50aW9uZWQgdGhvc2UgbGluZXMsIDI1NS0yNzUsIHNvIEkmIzM5O2xsIGp1bXAgcmlnaHQgdGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGV5IGxpa2VseSBkZWFsaW5nIHdpdGggaW4gdGhhdCBzcGVjaWZpYyByYW5nZT8gVGhpcyB1c3VhbGx5IGNvdmVycyBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGZlYXR1cmVzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQsIHBvc3NpYmx5IGRlcGVuZGVudCBvbiBkZXBlbmRlbmNpZXMgd2l0aCBvdGhlciBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJwbGF5IG9mIHRob3NlIG9wdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBob3cgdGhlc2Ugc2V0dGluZ3MgYWZmZWN0IHRoZSBvdmVyYWxsIElQdjYgc3RhY2sgYmVoYXZpb3IsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc3BlY2lmaWMgSVB2NiBmZWF0dXJlcyBsaWtlIGV4dGVuc2lvbiBoZWFkZXJzLCBmcmFnbWVudGF0aW9uLCBvciByb3V0aW5nLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhlc2Ugb3B0aW9ucyBhbmQgaG93IHRoZXkgdGllIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBJUHY2IG5ldHdvcmsgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0JiMzOTtzIHNlZSB3aGF0IGludGVyZXN0aW5nIGNvbmZpZ3VyYXRpb25zIHRob3NlIGxpbmVzIGhvbGQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjYvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjU1Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjU2Olx0XG4gMjU3Olx0Y29uZmlnIElQVjZfTVJPVVRFXG4gMjU4Olx0XHRib29sIFwmIzM0O0lQdjY6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4gMjU5Olx0XHRkZXBlbmRzIG9uIElQVjZcbiAyNjA6XHRcdHNlbGVjdCBJUF9NUk9VVEVfQ09NTU9OXG4gMjYxOlx0XHRoZWxwXG4gMjYyOlx0XHQgIFN1cHBvcnQgZm9yIElQdjYgbXVsdGljYXN0IGZvcndhcmRpbmcuXG4gMjYzOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjY0Olx0XG4gMjY1Olx0Y29uZmlnIElQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xuIDI2NjpcdFx0Ym9vbCBcJiMzNDtJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcJiMzNDtcbiAyNjc6XHRcdGRlcGVuZHMgb24gSVBWNl9NUk9VVEVcbiAyNjg6XHRcdHNlbGVjdCBGSUJfUlVMRVNcbiAyNjk6XHRcdGhlbHBcbiAyNzA6XHRcdCAgTm9ybWFsbHksIGEgbXVsdGljYXN0IHJvdXRlciBydW5zIGEgdXNlcnNwYWNlIGRhZW1vbiBhbmQgZGVjaWRlc1xuIDI3MTpcdFx0ICB3aGF0IHRvIGRvIHdpdGggYSBtdWx0aWNhc3QgcGFja2V0IGJhc2VkIG9uIHRoZSBzb3VyY2UgYW5kXG4gMjcyOlx0XHQgIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gSWYgeW91IHNheSBZIGhlcmUsIHRoZSBtdWx0aWNhc3Qgcm91dGVyXG4gMjczOlx0XHQgIHdpbGwgYWxzbyBiZSBhYmxlIHRvIHRha2UgaW50ZXJmYWNlcyBhbmQgcGFja2V0IG1hcmtzIGludG9cbiAyNzQ6XHRcdCAgYWNjb3VudCBhbmQgcnVuIG11bHRpcGxlIGluc3RhbmNlcyBvZiB1c2Vyc3BhY2UgZGFlbW9uc1xuIDI3NTpcdFx0ICBzaW11bHRhbmVvdXNseSwgZWFjaCBvbmUgaGFuZGxpbmcgYSBzaW5nbGUgdGFibGUuXG4gMjc2Olx0XG4gMjc3Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjc4Olx0XG4gMjc5Olx0Y29uZmlnIElQVjZfUElNU01fVjJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgxOAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gSVB2NCBDb25maWd1cmF0aW9uKioKCk9rYXksIEkgbmVlZCB0byBnZXQgaW50byB0aGUgaGVhcnQgb2YgdGhlIElQdjQgY29uZmlndXJhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgbmV0L2lwdjQvS2NvbmZpZ2AuIEl0JiMzOTtzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIHRoZSBrZXkgcGFyYW1ldGVycyBhbmQgZGVwZW5kZW5jaWVzLiBJJiMzOTttIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgbGluZXMgMjE1IHRvIDI0MCwgYXMgdGhlIGNvbnRleHQgb2YgbXkgaW52ZXN0aWdhdGlvbiBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZSBpbmZvcm1hdGlvbiBJIHJlcXVpcmUgd2lsbCBiZSBjb250YWluZWQgd2l0aGluIHRoaXMgYmxvY2suIEl0JiMzOTtzIGxpa2VseSB0aGF0IGNyaXRpY2FsIGZsYWdzLCBidWlsZCBvcHRpb25zLCBvciBkZWZhdWx0IHNldHRpbmdzIHJlbGF0ZWQgdG8gdGhlIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSB3b3JraW5nIHdpdGggYXJlIGRlZmluZWQgdGhlcmUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxNTpcdFxuIDIxNjpcdGNvbmZpZyBJUF9NUk9VVEVfQ09NTU9OXG4gMjE3Olx0XHRib29sXG4gMjE4Olx0XHRkZXBlbmRzIG9uIElQX01ST1VURSB8fCBJUFY2X01ST1VURVxuIDIxOTpcdFxuIDIyMDpcdGNvbmZpZyBJUF9NUk9VVEVcbiAyMjE6XHRcdGJvb2wgXCYjMzQ7SVA6IG11bHRpY2FzdCByb3V0aW5nXCYjMzQ7XG4gMjIyOlx0XHRkZXBlbmRzIG9uIElQX01VTFRJQ0FTVFxuIDIyMzpcdFx0c2VsZWN0IElQX01ST1VURV9DT01NT05cbiAyMjQ6XHRcdGhlbHBcbiAyMjU6XHRcdCAgVGhpcyBpcyB1c2VkIGlmIHlvdSB3YW50IHlvdXIgbWFjaGluZSB0byBhY3QgYXMgYSByb3V0ZXIgZm9yIElQXG4gMjI2Olx0XHQgIHBhY2tldHMgdGhhdCBoYXZlIHNldmVyYWwgZGVzdGluYXRpb24gYWRkcmVzc2VzLiBJdCBpcyBuZWVkZWQgb24gdGhlXG4gMjI3Olx0XHQgIE1CT05FLCBhIGhpZ2ggYmFuZHdpZHRoIG5ldHdvcmsgb24gdG9wIG9mIHRoZSBJbnRlcm5ldCB3aGljaCBjYXJyaWVzXG4gMjI4Olx0XHQgIGF1ZGlvIGFuZCB2aWRlbyBicm9hZGNhc3RzLiBJbiBvcmRlciB0byBkbyB0aGF0LCB5b3Ugd291bGQgbW9zdFxuIDIyOTpcdFx0ICBsaWtlbHkgcnVuIHRoZSBwcm9ncmFtIG1yb3V0ZWQuIElmIHlvdSBoYXZlbiYjMzk7dCBoZWFyZCBhYm91dCBpdCwgeW91XG4gMjMwOlx0XHQgIGRvbiYjMzk7dCBuZWVkIGl0LlxuIDIzMTpcdFxuIDIzMjpcdGNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXG4gMjMzOlx0XHRib29sIFwmIzM0O0lQOiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcJiMzNDtcbiAyMzQ6XHRcdGRlcGVuZHMgb24gSVBfTVJPVVRFIFx1MDAyNlx1MDAyNiBJUF9BRFZBTkNFRF9ST1VURVJcbiAyMzU6XHRcdHNlbGVjdCBGSUJfUlVMRVNcbiAyMzY6XHRcdGhlbHBcbiAyMzc6XHRcdCAgTm9ybWFsbHksIGEgbXVsdGljYXN0IHJvdXRlciBydW5zIGEgdXNlcnNwYWNlIGRhZW1vbiBhbmQgZGVjaWRlc1xuIDIzODpcdFx0ICB3aGF0IHRvIGRvIHdpdGggYSBtdWx0aWNhc3QgcGFja2V0IGJhc2VkIG9uIHRoZSBzb3VyY2UgYW5kXG4gMjM5Olx0XHQgIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gSWYgeW91IHNheSBZIGhlcmUsIHRoZSBtdWx0aWNhc3Qgcm91dGVyXG4gMjQwOlx0XHQgIHdpbGwgYWxzbyBiZSBhYmxlIHRvIHRha2UgaW50ZXJmYWNlcyBhbmQgcGFja2V0IG1hcmtzIGludG9cbiAyNDE6XHRcdCAgYWNjb3VudCBhbmQgcnVuIG11bHRpcGxlIGluc3RhbmNlcyBvZiB1c2Vyc3BhY2UgZGFlbW9uc1xuIDI0MjpcdFx0ICBzaW11bHRhbmVvdXNseSwgZWFjaCBvbmUgaGFuZGxpbmcgYSBzaW5nbGUgdGFibGUuXG4gMjQzOlx0XG4gMjQ0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDk0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDb3JlIFJvdXRpbmcgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBzb21ldGhpbmcgcmVsYXRlZCB0byBtdWx0aWNhc3Qgcm91dGluZywgbGlrZWx5IGEga2VybmVsIG1vZHVsZS4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBtZW1jZy9TTEFCIGFjY291bnRpbmcsIGp1c3QgYSBzdGFuZGFyZCBjaGVjayB0byBzZWUgaWYgdGhhdCYjMzk7cyBpbmZsdWVuY2luZyBhbnl0aGluZy4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwLCBidXQgaXQmIzM5O3MgcHJvYmFibHkgbm90IHRoZSBjb3JlIGlzc3VlLiBOb3csIEkmIzM5O20gem9uaW5nIGluIG9uIHRoZSBhY3R1YWwgbWVhdCBvZiB0aGUgY29uZmlndXJhdGlvbjogYElQX01ST1VURWAgYW5kIGBJUFY2X01ST1VURWAuIFRob3NlIGFyZSAqZGVmaW5pdGVseSogdGhlIHJlbGV2YW50IGZsYWdzIGZvciBidWlsZGluZyB0aGUgYGlwbXIuY2AsIGBpcG1yX2Jhc2UuY2AsIGFuZCBgaXA2bXIuY2AgbW9kdWxlcy4gVGhhdCB0ZWxscyBtZSB0aGVzZSBhcmUgY2VudHJhbCB0byB0aGUgbXVsdGljYXN0IHJvdXRpbmcgZnVuY3Rpb25hbGl0eS4gVGltZSB0byBnbyByaWdodCB0byB0aGUgc291cmNlIGFuZCBleGFtaW5lIHRoZSBgbmV0L2lwdjQvTWFrZWZpbGVgIGFuZCBgbmV0L2lwdjYvTWFrZWZpbGVgIGJ1aWxkIGZpbGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhvc2UgZmxhZ3MgYXJlIHVzZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZS4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgYmUgYWJsZSB0byBpbmZlciB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgYmVoYXZpb3IsIG9yIGF0IGxlYXN0IGhhdmUgYSBmcmFtZXdvcmsgdG8gaW52ZXN0aWdhdGUgaXQgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2bXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDg5NSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubmV0L2lwdjYvTWFrZWZpbGU9MTU9aXB2Ni0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzeXNjdGxfbmV0X2lwdjYub1xubmV0L2lwdjYvTWFrZWZpbGU6MTY6aXB2Ni0kKENPTkZJR19JUFY2X01ST1VURSkgJiM0Mzs9IGlwNm1yLm9cbm5ldC9pcHY2L01ha2VmaWxlLTE3LVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNTItXG5uZXQvaXB2Ni9pcDZtci5jOjUzOnN0cnVjdCBpcDZtcl9ydWxlIHtcbm5ldC9pcHY2L2lwNm1yLmMtNTQtXHRzdHJ1Y3QgZmliX3J1bGVcdFx0Y29tbW9uO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNTYtXG5uZXQvaXB2Ni9pcDZtci5jOjU3OnN0cnVjdCBpcDZtcl9yZXN1bHQge1xubmV0L2lwdjYvaXA2bXIuYy01OC1cdHN0cnVjdCBtcl90YWJsZVx0Km1ydDtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTg1PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbXJ0X2NhY2hlcCBfX3JlYWRfbW9zdGx5O1xubmV0L2lwdjYvaXA2bXIuYy04Ni1cbm5ldC9pcHY2L2lwNm1yLmM6ODc6c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfbmV3X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKTtcbm5ldC9pcHY2L2lwNm1yLmM6ODg6c3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbm5ldC9pcHY2L2lwNm1yLmMtODktXHRcdFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfa2lsbF9saXN0KTtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTkxPXN0YXRpYyB2b2lkIGlwNl9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG4tLVxubmV0L2lwdjYvaXA2bXIuYy05My1cdFx0XHQgICBzdHJ1Y3QgbWZjNl9jYWNoZSAqY2FjaGUpO1xubmV0L2lwdjYvaXA2bXIuYzo5NDpzdGF0aWMgaW50IGlwNm1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IHNrX2J1ZmYgKnBrdCxcbm5ldC9pcHY2L2lwNm1yLmMtOTUtXHRcdFx0ICAgICAgbWlmaV90IG1pZmksIGludCBhc3NlcnQpO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmM9OTg9c3RhdGljIHZvaWQgbXJ0Nm1zZ19uZXRsaW5rX2V2ZW50KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqcGt0KTtcbm5ldC9pcHY2L2lwNm1yLmM6OTk6c3RhdGljIGludCBpcDZtcl9ydG1fZ2V0cm91dGUoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG5uZXQvaXB2Ni9pcDZtci5jLTEwMC1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xubmV0L2lwdjYvaXA2bXIuYzoxMDE6c3RhdGljIGludCBpcDZtcl9ydG1fZHVtcHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9pcDZtci5jLTEwMi1cdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTEwNT1zdGF0aWMgdm9pZCBpcG1yX2V4cGlyZV9wcm9jZXNzKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTEwNy0jaWZkZWYgQ09ORklHX0lQVjZfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xubmV0L2lwdjYvaXA2bXIuYzoxMDg6I2RlZmluZSBpcDZtcl9mb3JfZWFjaF90YWJsZShtcnQsIG5ldCkgXFxcbm5ldC9pcHY2L2lwNm1yLmMtMTA5LVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobXJ0LCBcdTAwMjZuZXQtXHUwMDNlaXB2Ni5tcjZfdGFibGVzLCBsaXN0LCBcXFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTEyLVxubmV0L2lwdjYvaXA2bXIuYzoxMTM6c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfbXJfdGFibGVfaXRlcihzdHJ1Y3QgbmV0ICpuZXQsXG5uZXQvaXB2Ni9pcDZtci5jLTExNC1cdFx0XHRcdFx0ICAgIHN0cnVjdCBtcl90YWJsZSAqbXJ0KVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTI5LVxubmV0L2lwdjYvaXA2bXIuYzoxMzA6c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqX19pcDZtcl9nZXRfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXG5uZXQvaXB2Ni9pcDZtci5jLTEzMS17XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMzMtXG5uZXQvaXB2Ni9pcDZtci5jOjEzNDpcdGlwNm1yX2Zvcl9lYWNoX3RhYmxlKG1ydCwgbmV0KSB7XG5uZXQvaXB2Ni9pcDZtci5jLTEzNS1cdFx0aWYgKG1ydC1cdTAwM2VpZCA9PSBpZClcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTE0MC1cbm5ldC9pcHY2L2lwNm1yLmM6MTQxOnN0YXRpYyBpbnQgaXA2bXJfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTYgKmZscDYsXG5uZXQvaXB2Ni9pcDZtci5jLTE0Mi1cdFx0XHQgICAgc3RydWN0IG1yX3RhYmxlICoqbXJ0KVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTQ0LVx0aW50IGVycjtcbm5ldC9pcHY2L2lwNm1yLmM6MTQ1Olx0c3RydWN0IGlwNm1yX3Jlc3VsdCByZXM7XG5uZXQvaXB2Ni9pcDZtci5jLTE0Ni1cdHN0cnVjdCBmaWJfbG9va3VwX2FyZyBhcmcgPSB7XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xNjEtXG5uZXQvaXB2Ni9pcDZtci5jOjE2MjpzdGF0aWMgaW50IGlwNm1yX3J1bGVfYWN0aW9uKHN0cnVjdCBmaWJfcnVsZSAqcnVsZSwgc3RydWN0IGZsb3dpICpmbHAsXG5uZXQvaXB2Ni9pcDZtci5jLTE2My1cdFx0XHQgICAgIGludCBmbGFncywgc3RydWN0IGZpYl9sb29rdXBfYXJnICphcmcpXG5uZXQvaXB2Ni9pcDZtci5jLTE2NC17XG5uZXQvaXB2Ni9pcDZtci5jOjE2NTpcdHN0cnVjdCBpcDZtcl9yZXN1bHQgKnJlcyA9IGFyZy1cdTAwM2VyZXN1bHQ7XG5uZXQvaXB2Ni9pcDZtci5jLTE2Ni1cdHN0cnVjdCBtcl90YWJsZSAqbXJ0O1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTgxLVxubmV0L2lwdjYvaXA2bXIuYzoxODI6XHRtcnQgPSBfX2lwNm1yX2dldF90YWJsZShydWxlLVx1MDAzZWZyX25ldCwgYXJnLVx1MDAzZXRhYmxlKTtcbm5ldC9pcHY2L2lwNm1yLmMtMTgzLVx0aWYgKCFtcnQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xODgtXG5uZXQvaXB2Ni9pcDZtci5jOjE4OTpzdGF0aWMgaW50IGlwNm1yX3J1bGVfbWF0Y2goc3RydWN0IGZpYl9ydWxlICpydWxlLCBzdHJ1Y3QgZmxvd2kgKmZscCwgaW50IGZsYWdzKVxubmV0L2lwdjYvaXA2bXIuYy0xOTAte1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTkzLVxubmV0L2lwdjYvaXA2bXIuYzoxOTQ6c3RhdGljIGludCBpcDZtcl9ydWxlX2NvbmZpZ3VyZShzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9pcDZtci5jLTE5NS1cdFx0XHRcdHN0cnVjdCBmaWJfcnVsZV9oZHIgKmZyaCwgc3RydWN0IG5sYXR0ciAqKnRiLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMjAwLVxubmV0L2lwdjYvaXA2bXIuYzoyMDE6c3RhdGljIGludCBpcDZtcl9ydWxlX2NvbXBhcmUoc3RydWN0IGZpYl9ydWxlICpydWxlLCBzdHJ1Y3QgZmliX3J1bGVfaGRyICpmcmgsXG5uZXQvaXB2Ni9pcDZtci5jLTIwMi1cdFx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICoqdGIpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0yMDYtXG5uZXQvaXB2Ni9pcDZtci5jOjIwNzpzdGF0aWMgaW50IGlwNm1yX3J1bGVfZmlsbChzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2Ni9pcDZtci5jLTIwOC1cdFx0XHQgICBzdHJ1Y3QgZmliX3J1bGVfaGRyICpmcmgpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0yMTUtXG5uZXQvaXB2Ni9pcDZtci5jOjIxNjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9ydWxlc19vcHMgX19uZXRfaW5pdGNvbnN0IGlwNm1yX3J1bGVzX29wc190ZW1wbGF0ZSA9IHtcbm5ldC9pcHY2L2lwNm1yLmMtMjE3LVx0LmZhbWlseVx0XHQ9IFJUTkxfRkFNSUxZX0lQNk1SLFxubmV0L2lwdjYvaXA2bXIuYzoyMTg6XHQucnVsZV9zaXplXHQ9IHNpemVvZihzdHJ1Y3QgaXA2bXJfcnVsZSksXG5uZXQvaXB2Ni9pcDZtci5jLTIxOS1cdC5hZGRyX3NpemVcdD0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkciksXG5uZXQvaXB2Ni9pcDZtci5jOjIyMDpcdC5hY3Rpb25cdFx0PSBpcDZtcl9ydWxlX2FjdGlvbixcbm5ldC9pcHY2L2lwNm1yLmM6MjIxOlx0Lm1hdGNoXHRcdD0gaXA2bXJfcnVsZV9tYXRjaCxcbm5ldC9pcHY2L2lwNm1yLmM6MjIyOlx0LmNvbmZpZ3VyZVx0PSBpcDZtcl9ydWxlX2NvbmZpZ3VyZSxcbm5ldC9pcHY2L2lwNm1yLmM6MjIzOlx0LmNvbXBhcmVcdD0gaXA2bXJfcnVsZV9jb21wYXJlLFxubmV0L2lwdjYvaXA2bXIuYzoyMjQ6XHQuZmlsbFx0XHQ9IGlwNm1yX3J1bGVfZmlsbCxcbm5ldC9pcHY2L2lwNm1yLmMtMjI1LVx0Lm5sZ3JvdXBcdD0gUlROTEdSUF9JUFY2X1JVTEUsXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0yMjgtXG5uZXQvaXB2Ni9pcDZtci5jOjIyOTpzdGF0aWMgaW50IF9fbmV0X2luaXQgaXA2bXJfcnVsZXNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvaXB2Ni9pcDZtci5jLTIzMC17XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0yMzUtXG5uZXQvaXB2Ni9pcDZtci5jOjIzNjpcdG9wcyA9IGZpYl9ydWxlc19yZWdpc3RlcihcdTAwMjZpcDZtcl9ydWxlc19vcHNfdGVtcGxhdGUsIG5ldCk7XG5uZXQvaXB2Ni9pcDZtci5jLTIzNy1cdGlmIChJU19FUlIob3BzKSlcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTI0MS1cbm5ldC9pcHY2L2lwNm1yLmM6MjQyOlx0bXJ0ID0gaXA2bXJfbmV3X3RhYmxlKG5ldCwgUlQ2X1RBQkxFX0RGTFQpO1xubmV0L2lwdjYvaXA2bXIuYy0yNDMtXHRpZiAoSVNfRVJSKG1ydCkpIHtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTI1NS1lcnIyOlxubmV0L2lwdjYvaXA2bXIuYzoyNTY6XHRpcDZtcl9mcmVlX3RhYmxlKG1ydCwgXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG5uZXQvaXB2Ni9pcDZtci5jLTI1Ny1lcnIxOlxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMjYxLVxubmV0L2lwdjYvaXA2bXIuYzoyNjI6c3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZtcl9ydWxlc19leGl0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9pcHY2L2lwNm1yLmMtMjYzLXtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTI2Ni1cbm5ldC9pcHY2L2lwNm1yLmM6MjY3OnN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2bXJfcnVsZXNfZXhpdF9ydG5sKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9pcHY2L2lwNm1yLmMtMjY4LVx0XHRcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRldl9raWxsX2xpc3QpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0yNzMtXHRcdGxpc3RfZGVsX3JjdShcdTAwMjZtcnQtXHUwMDNlbGlzdCk7XG5uZXQvaXB2Ni9pcDZtci5jOjI3NDpcdFx0aXA2bXJfZnJlZV90YWJsZShtcnQsIGRldl9raWxsX2xpc3QpO1xubmV0L2lwdjYvaXA2bXIuYy0yNzUtXHR9XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0yNzctXG5uZXQvaXB2Ni9pcDZtci5jOjI3ODpzdGF0aWMgaW50IGlwNm1yX3J1bGVzX2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxubmV0L2lwdjYvaXA2bXIuYy0yNzktXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTI4My1cbm5ldC9pcHY2L2lwNm1yLmM6Mjg0OnN0YXRpYyB1bnNpZ25lZCBpbnQgaXA2bXJfcnVsZXNfc2VxX3JlYWQoY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxubmV0L2lwdjYvaXA2bXIuYy0yODUte1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMjg4LVxubmV0L2lwdjYvaXA2bXIuYzoyODk6Ym9vbCBpcDZtcl9ydWxlX2RlZmF1bHQoY29uc3Qgc3RydWN0IGZpYl9ydWxlICpydWxlKVxubmV0L2lwdjYvaXA2bXIuYy0yOTAte1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMjkzLX1cbm5ldC9pcHY2L2lwNm1yLmM6Mjk0OkVYUE9SVF9TWU1CT0woaXA2bXJfcnVsZV9kZWZhdWx0KTtcbm5ldC9pcHY2L2lwNm1yLmMtMjk1LSNlbHNlXG5uZXQvaXB2Ni9pcDZtci5jOjI5NjpzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9tcl90YWJsZV9pdGVyKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9pcHY2L2lwNm1yLmMtMjk3LVx0XHRcdFx0XHQgICAgc3RydWN0IG1yX3RhYmxlICptcnQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0zMDMtXG5uZXQvaXB2Ni9pcDZtci5jOjMwNDpzdGF0aWMgc3RydWN0IG1yX3RhYmxlICpfX2lwNm1yX2dldF90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZClcbm5ldC9pcHY2L2lwNm1yLmMtMzA1LXtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTMxMC1cbm5ldC9pcHY2L2lwNm1yLmM6MzExOiNkZWZpbmUgaXA2bXJfZm9yX2VhY2hfdGFibGUobXJ0LCBuZXQpXHRcdFx0XHRcXFxubmV0L2lwdjYvaXA2bXIuYzozMTI6XHRmb3IgKG1ydCA9IF9faXA2bXJfZ2V0X3RhYmxlKG5ldCwgMCk7IG1ydDsgbXJ0ID0gTlVMTClcbm5ldC9pcHY2L2lwNm1yLmMtMzEzLVxubmV0L2lwdjYvaXA2bXIuYzozMTQ6c3RhdGljIGludCBpcDZtcl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNiAqZmxwNixcbm5ldC9pcHY2L2lwNm1yLmMtMzE1LVx0XHRcdCAgICBzdHJ1Y3QgbXJfdGFibGUgKiptcnQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0zMjItXG5uZXQvaXB2Ni9pcDZtci5jOjMyMzpzdGF0aWMgaW50IF9fbmV0X2luaXQgaXA2bXJfcnVsZXNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvaXB2Ni9pcDZtci5jLTMyNC17XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0zMjYtXG5uZXQvaXB2Ni9pcDZtci5jOjMyNzpcdG1ydCA9IGlwNm1yX25ld190YWJsZShuZXQsIFJUNl9UQUJMRV9ERkxUKTtcbm5ldC9pcHY2L2lwNm1yLmMtMzI4LVx0aWYgKElTX0VSUihtcnQpKVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMzM0LVxubmV0L2lwdjYvaXA2bXIuYzozMzU6c3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZtcl9ydWxlc19leGl0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9pcHY2L2lwNm1yLmMtMzM2LXtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTMzOC1cbm5ldC9pcHY2L2lwNm1yLmM6MzM5OnN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2bXJfcnVsZXNfZXhpdF9ydG5sKHN0cnVjdCBuZXQgKm5ldCxcbm5ldC9pcHY2L2lwNm1yLmMtMzQwLVx0XHRcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRldl9raWxsX2xpc3QpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0zNDQtXHRSQ1VfSU5JVF9QT0lOVEVSKG5ldC1cdTAwM2VpcHY2Lm1ydDYsIE5VTEwpO1xubmV0L2lwdjYvaXA2bXIuYzozNDU6XHRpcDZtcl9mcmVlX3RhYmxlKG1ydCwgZGV2X2tpbGxfbGlzdCk7XG5uZXQvaXB2Ni9pcDZtci5jLTM0Ni19XG5uZXQvaXB2Ni9pcDZtci5jLTM0Ny1cbm5ldC9pcHY2L2lwNm1yLmM6MzQ4OnN0YXRpYyBpbnQgaXA2bXJfcnVsZXNfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsXG5uZXQvaXB2Ni9pcDZtci5jLTM0OS1cdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMzUzLVxubmV0L2lwdjYvaXA2bXIuYzozNTQ6c3RhdGljIHVuc2lnbmVkIGludCBpcDZtcl9ydWxlc19zZXFfcmVhZChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvaXB2Ni9pcDZtci5jLTM1NS17XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0zNTktXG5uZXQvaXB2Ni9pcDZtci5jOjM2MDpzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9nZXRfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXG5uZXQvaXB2Ni9pcDZtci5jLTM2MS17XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0zNjQtXHRyY3VfcmVhZF9sb2NrKCk7XG5uZXQvaXB2Ni9pcDZtci5jOjM2NTpcdG1ydCA9IF9faXA2bXJfZ2V0X3RhYmxlKG5ldCwgaWQpO1xubmV0L2lwdjYvaXA2bXIuYy0zNjYtXHRyY3VfcmVhZF91bmxvY2soKTtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTM3MC1cbm5ldC9pcHY2L2lwNm1yLmM6MzcxOnN0YXRpYyBpbnQgaXA2bXJfaGFzaF9jbXAoc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKmFyZyxcbm5ldC9pcHY2L2lwNm1yLmMtMzcyLVx0XHRcdCAgY29uc3Qgdm9pZCAqcHRyKVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMzgwLVxubmV0L2lwdjYvaXA2bXIuYzozODE6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBpcDZtcl9yaHRfcGFyYW1zID0ge1xubmV0L2lwdjYvaXA2bXIuYy0zODItXHQuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbXJfbWZjLCBtbm9kZSksXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0zODUtXHQubmVsZW1faGludCA9IDMsXG5uZXQvaXB2Ni9pcDZtci5jOjM4NjpcdC5vYmpfY21wZm4gPSBpcDZtcl9oYXNoX2NtcCxcbm5ldC9pcHY2L2lwNm1yLmMtMzg3LVx0LmF1dG9tYXRpY19zaHJpbmtpbmcgPSB0cnVlLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMzg5LVxubmV0L2lwdjYvaXA2bXIuYzozOTA6c3RhdGljIHZvaWQgaXA2bXJfbmV3X3RhYmxlX3NldChzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbm5ldC9pcHY2L2lwNm1yLmMtMzkxLVx0XHRcdFx0c3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMzk3LVxubmV0L2lwdjYvaXA2bXIuYzozOTg6c3RhdGljIHN0cnVjdCBtZmM2X2NhY2hlX2NtcF9hcmcgaXA2bXJfbXJfdGFibGVfb3BzX2NtcGFyZ19hbnkgPSB7XG5uZXQvaXB2Ni9pcDZtci5jLTM5OS1cdC5tZjZjX29yaWdpbiA9IElONkFERFJfQU5ZX0lOSVQsXG4tLVxubmV0L2lwdjYvaXA2bXIuYy00MDItXG5uZXQvaXB2Ni9pcDZtci5jOjQwMzpzdGF0aWMgc3RydWN0IG1yX3RhYmxlX29wcyBpcDZtcl9tcl90YWJsZV9vcHMgPSB7XG5uZXQvaXB2Ni9pcDZtci5jOjQwNDpcdC5yaHRfcGFyYW1zID0gXHUwMDI2aXA2bXJfcmh0X3BhcmFtcyxcbm5ldC9pcHY2L2lwNm1yLmM6NDA1Olx0LmNtcGFyZ19hbnkgPSBcdTAwMjZpcDZtcl9tcl90YWJsZV9vcHNfY21wYXJnX2FueSxcbm5ldC9pcHY2L2lwNm1yLmMtNDA2LX07XG5uZXQvaXB2Ni9pcDZtci5jLTQwNy1cbm5ldC9pcHY2L2lwNm1yLmM6NDA4OnN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwNm1yX25ld190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZClcbm5ldC9pcHY2L2lwNm1yLmMtNDA5LXtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTQxMS1cbm5ldC9pcHY2L2lwNm1yLmM6NDEyOlx0bXJ0ID0gX19pcDZtcl9nZXRfdGFibGUobmV0LCBpZCk7XG5uZXQvaXB2Ni9pcDZtci5jLTQxMy1cdGlmIChtcnQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy00MTUtXG5uZXQvaXB2Ni9pcDZtci5jOjQxNjpcdHJldHVybiBtcl90YWJsZV9hbGxvYyhuZXQsIGlkLCBcdTAwMjZpcDZtcl9tcl90YWJsZV9vcHMsXG5uZXQvaXB2Ni9pcDZtci5jOjQxNzpcdFx0XHQgICAgICBpcG1yX2V4cGlyZV9wcm9jZXNzLCBpcDZtcl9uZXdfdGFibGVfc2V0KTtcbm5ldC9pcHY2L2lwNm1yLmMtNDE4LX1cbm5ldC9pcHY2L2lwNm1yLmMtNDE5LVxubmV0L2lwdjYvaXA2bXIuYzo0MjA6c3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbm5ldC9pcHY2L2lwNm1yLmMtNDIxLVx0XHRcdCAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGV2X2tpbGxfbGlzdClcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTQyMy1cdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcdTAwMjZtcnQtXHUwMDNlbmV0KTtcbm5ldC9pcHY2L2lwNm1yLmM6NDI0Olx0TElTVF9IRUFEKGlwNm1yX2Rldl9raWxsX2xpc3QpO1xubmV0L2lwdjYvaXA2bXIuYy00MjUtXG4tLVxubmV0L2lwdjYvaXA2bXIuYy00MzAtXHRcdFx0ICAgIE1SVDZfRkxVU0hfTUZDIHwgTVJUNl9GTFVTSF9NRkNfU1RBVElDLFxubmV0L2lwdjYvaXA2bXIuYzo0MzE6XHRcdFx0ICAgIFx1MDAyNmlwNm1yX2Rldl9raWxsX2xpc3QpO1xubmV0L2lwdjYvaXA2bXIuYy00MzItXG4tLVxubmV0L2lwdjYvaXA2bXIuYy00MzQtXG5uZXQvaXB2Ni9pcDZtci5jOjQzNTpcdFdBUk5fT05fT05DRSghbmV0X2luaXRpYWxpemVkKG5ldCkgXHUwMDI2XHUwMDI2ICFsaXN0X2VtcHR5KFx1MDAyNmlwNm1yX2Rldl9raWxsX2xpc3QpKTtcbm5ldC9pcHY2L2lwNm1yLmM6NDM2Olx0bGlzdF9zcGxpY2UoXHUwMDI2aXA2bXJfZGV2X2tpbGxfbGlzdCwgZGV2X2tpbGxfbGlzdCk7XG5uZXQvaXB2Ni9pcDZtci5jLTQzNy19XG4tLVxubmV0L2lwdjYvaXA2bXIuYy00NDMtXG5uZXQvaXB2Ni9pcDZtci5jOjQ0NDpzdGF0aWMgdm9pZCAqaXA2bXJfdmlmX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXG5uZXQvaXB2Ni9pcDZtci5jLTQ0NS1cdF9fYWNxdWlyZXMoUkNVKVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNDUxLVx0cmN1X3JlYWRfbG9jaygpO1xubmV0L2lwdjYvaXA2bXIuYzo0NTI6XHRtcnQgPSBfX2lwNm1yX2dldF90YWJsZShuZXQsIFJUNl9UQUJMRV9ERkxUKTtcbm5ldC9pcHY2L2lwNm1yLmMtNDUzLVx0aWYgKCFtcnQpIHtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTQ2Mi1cbm5ldC9pcHY2L2lwNm1yLmM6NDYzOnN0YXRpYyB2b2lkIGlwNm1yX3ZpZl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbm5ldC9pcHY2L2lwNm1yLmMtNDY0LVx0X19yZWxlYXNlcyhSQ1UpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy00NjgtXG5uZXQvaXB2Ni9pcDZtci5jOjQ2OTpzdGF0aWMgaW50IGlwNm1yX3ZpZl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcbm5ldC9pcHY2L2lwNm1yLmMtNDcwLXtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTQ5NC1cbm5ldC9pcHY2L2lwNm1yLmM6NDk1OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaXA2bXJfdmlmX3NlcV9vcHMgPSB7XG5uZXQvaXB2Ni9pcDZtci5jOjQ5NjpcdC5zdGFydCA9IGlwNm1yX3ZpZl9zZXFfc3RhcnQsXG5uZXQvaXB2Ni9pcDZtci5jLTQ5Ny1cdC5uZXh0ICA9IG1yX3ZpZl9zZXFfbmV4dCxcbm5ldC9pcHY2L2lwNm1yLmM6NDk4Olx0LnN0b3AgID0gaXA2bXJfdmlmX3NlcV9zdG9wLFxubmV0L2lwdjYvaXA2bXIuYzo0OTk6XHQuc2hvdyAgPSBpcDZtcl92aWZfc2VxX3Nob3csXG5uZXQvaXB2Ni9pcDZtci5jLTUwMC19O1xuLS1cbm5ldC9pcHY2L2lwNm1yLmM9NTAyPXN0YXRpYyB2b2lkICppcG1yX21mY19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNTA2LVxubmV0L2lwdjYvaXA2bXIuYzo1MDc6XHRtcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCBSVDZfVEFCTEVfREZMVCk7XG5uZXQvaXB2Ni9pcDZtci5jLTUwOC1cdGlmICghbXJ0KVxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9NTY2PXN0YXRpYyBpbnQgcGltNl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTU5OS1cbm5ldC9pcHY2L2lwNm1yLmM6NjAwOlx0aWYgKGlwNm1yX2ZpYl9sb29rdXAobmV0LCBcdTAwMjZmbDYsIFx1MDAyNm1ydCkgXHUwMDNjIDApXG5uZXQvaXB2Ni9pcDZtci5jLTYwMS1cdFx0Z290byBkcm9wO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmM9NjMzPXN0YXRpYyBuZXRkZXZfdHhfdCByZWdfdmlmX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTY0OC1cbm5ldC9pcHY2L2lwNm1yLmM6NjQ5Olx0aWYgKGlwNm1yX2ZpYl9sb29rdXAobmV0LCBcdTAwMjZmbDYsIFx1MDAyNm1ydCkgXHUwMDNjIDApXG5uZXQvaXB2Ni9pcDZtci5jLTY1MC1cdFx0Z290byB0eF9sb29rdXBfZXJyO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNjU0LVxubmV0L2lwdjYvaXA2bXIuYzo2NTU6XHRpcDZtcl9jYWNoZV9yZXBvcnQobXJ0LCBza2IsIFJFQURfT05DRShtcnQtXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtKSxcbm5ldC9pcHY2L2lwNm1yLmMtNjU2LVx0XHRcdCAgIE1SVDZNU0dfV0hPTEVQS1QpO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmM9Njc5PXN0YXRpYyB2b2lkIHJlZ192aWZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTY4OC1cbm5ldC9pcHY2L2lwNm1yLmM6Njg5OnN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqaXA2bXJfcmVnX3ZpZihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0KVxubmV0L2lwdjYvaXA2bXIuYy02OTAte1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNzIxLVxubmV0L2lwdjYvaXA2bXIuYzo3MjI6c3RhdGljIGludCBjYWxsX2lwNm1yX3ZpZl9lbnRyeV9ub3RpZmllcnMoc3RydWN0IG5ldCAqbmV0LFxubmV0L2lwdjYvaXA2bXIuYy03MjMtXHRcdFx0XHRcdCAgZW51bSBmaWJfZXZlbnRfdHlwZSBldmVudF90eXBlLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNzMyLVxubmV0L2lwdjYvaXA2bXIuYzo3MzM6c3RhdGljIGludCBjYWxsX2lwNm1yX21mY19lbnRyeV9ub3RpZmllcnMoc3RydWN0IG5ldCAqbmV0LFxubmV0L2lwdjYvaXA2bXIuYy03MzQtXHRcdFx0XHRcdCAgZW51bSBmaWJfZXZlbnRfdHlwZSBldmVudF90eXBlLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9NzQyPXN0YXRpYyBpbnQgbWlmNl9kZWxldGUoc3RydWN0IG1yX3RhYmxlICptcnQsIGludCB2aWZpLCBpbnQgbm90aWZ5LFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNzU3LVxubmV0L2lwdjYvaXA2bXIuYzo3NTg6XHRjYWxsX2lwNm1yX3ZpZl9lbnRyeV9ub3RpZmllcnMocmVhZF9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQpLFxubmV0L2lwdjYvaXA2bXIuYy03NTktXHRcdFx0XHQgICAgICAgRklCX0VWRU5UX1ZJRl9ERUwsIHYsIGRldixcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTc2NS1cdGlmICh2aWZpID09IG1ydC1cdTAwM2Vtcm91dGVfcmVnX3ZpZl9udW0pIHtcbm5ldC9pcHY2L2lwNm1yLmM6NzY2Olx0XHQvKiBQYWlycyB3aXRoIFJFQURfT05DRSgpIGluIGlwNm1yX2NhY2hlX3JlcG9ydCgpIGFuZCByZWdfdmlmX3htaXQoKSAqL1xubmV0L2lwdjYvaXA2bXIuYy03NjctXHRcdFdSSVRFX09OQ0UobXJ0LVx1MDAzZW1yb3V0ZV9yZWdfdmlmX251bSwgLTEpO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtNzk4LVxubmV0L2lwdjYvaXA2bXIuYzo3OTk6c3RhdGljIGlubGluZSB2b2lkIGlwNm1yX2NhY2hlX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcbm5ldC9pcHY2L2lwNm1yLmMtODAwLXtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTgwNS1cbm5ldC9pcHY2L2lwNm1yLmM6ODA2OnN0YXRpYyBpbmxpbmUgdm9pZCBpcDZtcl9jYWNoZV9mcmVlKHN0cnVjdCBtZmM2X2NhY2hlICpjKVxubmV0L2lwdjYvaXA2bXIuYy04MDcte1xubmV0L2lwdjYvaXA2bXIuYzo4MDg6XHRjYWxsX3JjdShcdTAwMjZjLVx1MDAzZV9jLnJjdSwgaXA2bXJfY2FjaGVfZnJlZV9yY3UpO1xubmV0L2lwdjYvaXA2bXIuYy04MDktfVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtODE0LVxubmV0L2lwdjYvaXA2bXIuYzo4MTU6c3RhdGljIHZvaWQgaXA2bXJfZGVzdHJveV91bnJlcyhzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IG1mYzZfY2FjaGUgKmMpXG5uZXQvaXB2Ni9pcDZtci5jLTgxNi17XG4tLVxubmV0L2lwdjYvaXA2bXIuYy04MzUtXG5uZXQvaXB2Ni9pcDZtci5jOjgzNjpcdGlwNm1yX2NhY2hlX2ZyZWUoYyk7XG5uZXQvaXB2Ni9pcDZtci5jLTgzNy19XG4tLVxubmV0L2lwdjYvaXA2bXIuYz04NDI9c3RhdGljIHZvaWQgaXBtcl9kb19leHBpcmVfcHJvY2VzcyhzdHJ1Y3QgbXJfdGFibGUgKm1ydClcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTg1OC1cdFx0bXI2X25ldGxpbmtfZXZlbnQobXJ0LCAoc3RydWN0IG1mYzZfY2FjaGUgKiljLCBSVE1fREVMUk9VVEUpO1xubmV0L2lwdjYvaXA2bXIuYzo4NTk6XHRcdGlwNm1yX2Rlc3Ryb3lfdW5yZXMobXJ0LCAoc3RydWN0IG1mYzZfY2FjaGUgKiljKTtcbm5ldC9pcHY2L2lwNm1yLmMtODYwLVx0fVxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9ODY2PXN0YXRpYyB2b2lkIGlwbXJfZXhwaXJlX3Byb2Nlc3Moc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy04ODItXG5uZXQvaXB2Ni9pcDZtci5jOjg4MzpzdGF0aWMgdm9pZCBpcDZtcl91cGRhdGVfdGhyZXNob2xkcyhzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbm5ldC9pcHY2L2lwNm1yLmMtODg0LVx0XHRcdFx0ICAgIHN0cnVjdCBtcl9tZmMgKmNhY2hlLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9OTA2PXN0YXRpYyBpbnQgbWlmNl9hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTkyNy1cdFx0XHRyZXR1cm4gLUVBRERSSU5VU0U7XG5uZXQvaXB2Ni9pcDZtci5jOjkyODpcdFx0ZGV2ID0gaXA2bXJfcmVnX3ZpZihuZXQsIG1ydCk7XG5uZXQvaXB2Ni9pcDZtci5jLTkyOS1cdFx0aWYgKCFkZXYpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy05NzYtXHRzcGluX3VubG9jayhcdTAwMjZtcnRfbG9jayk7XG5uZXQvaXB2Ni9pcDZtci5jOjk3NzpcdGNhbGxfaXA2bXJfdmlmX2VudHJ5X25vdGlmaWVycyhuZXQsIEZJQl9FVkVOVF9WSUZfQURELFxubmV0L2lwdjYvaXA2bXIuYy05NzgtXHRcdFx0XHQgICAgICAgdiwgZGV2LCB2aWZpLCBtcnQtXHUwMDNlaWQpO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmMtOTgxLVxubmV0L2lwdjYvaXA2bXIuYzo5ODI6c3RhdGljIHN0cnVjdCBtZmM2X2NhY2hlICppcDZtcl9jYWNoZV9maW5kKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxubmV0L2lwdjYvaXA2bXIuYy05ODMtXHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqb3JpZ2luLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtOTk0LS8qIExvb2sgZm9yIGEgKCosRykgZW50cnkgKi9cbm5ldC9pcHY2L2lwNm1yLmM6OTk1OnN0YXRpYyBzdHJ1Y3QgbWZjNl9jYWNoZSAqaXA2bXJfY2FjaGVfZmluZF9hbnkoc3RydWN0IG1yX3RhYmxlICptcnQsXG5uZXQvaXB2Ni9pcDZtci5jLTk5Ni1cdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBpbjZfYWRkciAqbWNhc3RncnAsXG4tLVxubmV0L2lwdjYvaXA2bXIuYz0xMDEwPXN0YXRpYyBzdHJ1Y3QgbWZjNl9jYWNoZSAqXG5uZXQvaXB2Ni9pcDZtci5jOjEwMTE6aXA2bXJfY2FjaGVfZmluZF9wYXJlbnQoc3RydWN0IG1yX3RhYmxlICptcnQsXG5uZXQvaXB2Ni9pcDZtci5jLTEwMTItXHRcdFx0Y29uc3Qgc3RydWN0IGluNl9hZGRyICpvcmlnaW4sXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMDI0LS8qIEFsbG9jYXRlIGEgbXVsdGljYXN0IGNhY2hlIGVudHJ5ICovXG5uZXQvaXB2Ni9pcDZtci5jOjEwMjU6c3RhdGljIHN0cnVjdCBtZmM2X2NhY2hlICppcDZtcl9jYWNoZV9hbGxvYyh2b2lkKVxubmV0L2lwdjYvaXA2bXIuYy0xMDI2LXtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTEwMzEtXHRjLVx1MDAzZV9jLm1mY191bi5yZXMubWludmlmID0gTUFYTUlGUztcbm5ldC9pcHY2L2lwNm1yLmM6MTAzMjpcdGMtXHUwMDNlX2MuZnJlZSA9IGlwNm1yX2NhY2hlX2ZyZWVfcmN1O1xubmV0L2lwdjYvaXA2bXIuYy0xMDMzLVx0cmVmY291bnRfc2V0KFx1MDAyNmMtXHUwMDNlX2MubWZjX3VuLnJlcy5yZWZjb3VudCwgMSk7XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMDM2LVxubmV0L2lwdjYvaXA2bXIuYzoxMDM3OnN0YXRpYyBzdHJ1Y3QgbWZjNl9jYWNoZSAqaXA2bXJfY2FjaGVfYWxsb2NfdW5yZXModm9pZClcbm5ldC9pcHY2L2lwNm1yLmMtMTAzOC17XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMDUwLVxubmV0L2lwdjYvaXA2bXIuYzoxMDUxOnN0YXRpYyB2b2lkIGlwNm1yX2NhY2hlX3Jlc29sdmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbm5ldC9pcHY2L2lwNm1yLmMtMTA1Mi1cdFx0XHRcdHN0cnVjdCBtZmM2X2NhY2hlICp1Yywgc3RydWN0IG1mYzZfY2FjaGUgKmMpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMDg4LVxubmV0L2lwdjYvaXA2bXIuYzoxMDg5OnN0YXRpYyBpbnQgaXA2bXJfY2FjaGVfcmVwb3J0KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqcGt0LFxubmV0L2lwdjYvaXA2bXIuYy0xMDkwLVx0XHRcdCAgICAgIG1pZmlfdCBtaWZpLCBpbnQgYXNzZXJ0KVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTE4Mi0vKiBRdWV1ZSBhIHBhY2tldCBmb3IgcmVzb2x1dGlvbi4gSXQgZ2V0cyBsb2NrZWQgY2FjaGUgZW50cnkhICovXG5uZXQvaXB2Ni9pcDZtci5jOjExODM6c3RhdGljIGludCBpcDZtcl9jYWNoZV91bnJlc29sdmVkKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBtaWZpX3QgbWlmaSxcbm5ldC9pcHY2L2lwNm1yLmMtMTE4NC1cdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTEyMTAtXG5uZXQvaXB2Ni9pcDZtci5jOjEyMTE6XHRcdGMgPSBpcDZtcl9jYWNoZV9hbGxvY191bnJlcygpO1xubmV0L2lwdjYvaXA2bXIuYy0xMjEyLVx0XHRpZiAoIWMpIHtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTEyMjQtXHRcdCAqL1xubmV0L2lwdjYvaXA2bXIuYzoxMjI1Olx0XHRlcnIgPSBpcDZtcl9jYWNoZV9yZXBvcnQobXJ0LCBza2IsIG1pZmksIE1SVDZNU0dfTk9DQUNIRSk7XG5uZXQvaXB2Ni9pcDZtci5jLTEyMjYtXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMjU3LVx0aWYgKGMpXG5uZXQvaXB2Ni9pcDZtci5jOjEyNTg6XHRcdGlwNm1yX2NhY2hlX2ZyZWUoYyk7XG5uZXQvaXB2Ni9pcDZtci5jLTEyNTktXHRrZnJlZV9za2Ioc2tiKTtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTEyNjYtXG5uZXQvaXB2Ni9pcDZtci5jOjEyNjc6c3RhdGljIGludCBpcDZtcl9tZmNfZGVsZXRlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3QgbWY2Y2N0bCAqbWZjLFxubmV0L2lwdjYvaXA2bXIuYy0xMjY4LVx0XHRcdCAgICBpbnQgcGFyZW50KVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTI3Mi1cdHJjdV9yZWFkX2xvY2soKTtcbm5ldC9pcHY2L2lwNm1yLmM6MTI3MzpcdGMgPSBpcDZtcl9jYWNoZV9maW5kX3BhcmVudChtcnQsIFx1MDAyNm1mYy1cdTAwM2VtZjZjY19vcmlnaW4uc2luNl9hZGRyLFxubmV0L2lwdjYvaXA2bXIuYy0xMjc0LVx0XHRcdFx0ICAgIFx1MDAyNm1mYy1cdTAwM2VtZjZjY19tY2FzdGdycC5zaW42X2FkZHIsIHBhcmVudCk7XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMjc3LVx0XHRyZXR1cm4gLUVOT0VOVDtcbm5ldC9pcHY2L2lwNm1yLmM6MTI3ODpcdHJobHRhYmxlX3JlbW92ZShcdTAwMjZtcnQtXHUwMDNlbWZjX2hhc2gsIFx1MDAyNmMtXHUwMDNlX2MubW5vZGUsIGlwNm1yX3JodF9wYXJhbXMpO1xubmV0L2lwdjYvaXA2bXIuYy0xMjc5LVx0bGlzdF9kZWxfcmN1KFx1MDAyNmMtXHUwMDNlX2MubGlzdCk7XG5uZXQvaXB2Ni9pcDZtci5jLTEyODAtXG5uZXQvaXB2Ni9pcDZtci5jOjEyODE6XHRjYWxsX2lwNm1yX21mY19lbnRyeV9ub3RpZmllcnMocmVhZF9wbmV0KFx1MDAyNm1ydC1cdTAwM2VuZXQpLFxubmV0L2lwdjYvaXA2bXIuYy0xMjgyLVx0XHRcdFx0ICAgICAgIEZJQl9FVkVOVF9FTlRSWV9ERUwsIGMsIG1ydC1cdTAwM2VpZCk7XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMjg3LVxubmV0L2lwdjYvaXA2bXIuYzoxMjg4OnN0YXRpYyBpbnQgaXA2bXJfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcbm5ldC9pcHY2L2lwNm1yLmMtMTI4OS1cdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMjk5LVxubmV0L2lwdjYvaXA2bXIuYzoxMzAwOlx0aXA2bXJfZm9yX2VhY2hfdGFibGUobXJ0LCBuZXQpIHtcbm5ldC9pcHY2L2lwNm1yLmMtMTMwMS1cdFx0diA9IFx1MDAyNm1ydC1cdTAwM2V2aWZfdGFibGVbMF07XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMzEwLVxubmV0L2lwdjYvaXA2bXIuYzoxMzExOnN0YXRpYyB1bnNpZ25lZCBpbnQgaXA2bXJfc2VxX3JlYWQoY29uc3Qgc3RydWN0IG5ldCAqbmV0KVxubmV0L2lwdjYvaXA2bXIuYy0xMzEyLXtcbm5ldC9pcHY2L2lwNm1yLmM6MTMxMzpcdHJldHVybiBhdG9taWNfcmVhZChcdTAwMjZuZXQtXHUwMDNlaXB2Ni5pcG1yX3NlcSkgJiM0MzsgaXA2bXJfcnVsZXNfc2VxX3JlYWQobmV0KTtcbm5ldC9pcHY2L2lwNm1yLmMtMTMxNC19XG5uZXQvaXB2Ni9pcDZtci5jLTEzMTUtXG5uZXQvaXB2Ni9pcDZtci5jOjEzMTY6c3RhdGljIGludCBpcDZtcl9kdW1wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYixcbm5ldC9pcHY2L2lwNm1yLmMtMTMxNy1cdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxubmV0L2lwdjYvaXA2bXIuYy0xMzE4LXtcbm5ldC9pcHY2L2lwNm1yLmM6MTMxOTpcdHJldHVybiBtcl9kdW1wKG5ldCwgbmIsIFJUTkxfRkFNSUxZX0lQNk1SLCBpcDZtcl9ydWxlc19kdW1wLFxubmV0L2lwdjYvaXA2bXIuYzoxMzIwOlx0XHQgICAgICAgaXA2bXJfbXJfdGFibGVfaXRlciwgZXh0YWNrKTtcbm5ldC9pcHY2L2lwNm1yLmMtMTMyMS19XG4tLVxubmV0L2lwdjYvaXA2bXIuYz0xMzIzPXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgaXA2X21yX25vdGlmaWVyID0ge1xubmV0L2lwdjYvaXA2bXIuYzoxMzI0Olx0Lm5vdGlmaWVyX2NhbGwgPSBpcDZtcl9kZXZpY2VfZXZlbnRcbm5ldC9pcHY2L2lwNm1yLmMtMTMyNS19O1xubmV0L2lwdjYvaXA2bXIuYy0xMzI2LVxubmV0L2lwdjYvaXA2bXIuYzoxMzI3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmliX25vdGlmaWVyX29wcyBpcDZtcl9ub3RpZmllcl9vcHNfdGVtcGxhdGUgPSB7XG5uZXQvaXB2Ni9pcDZtci5jLTEzMjgtXHQuZmFtaWx5XHRcdD0gUlROTF9GQU1JTFlfSVA2TVIsXG5uZXQvaXB2Ni9pcDZtci5jOjEzMjk6XHQuZmliX3NlcV9yZWFkXHQ9IGlwNm1yX3NlcV9yZWFkLFxubmV0L2lwdjYvaXA2bXIuYzoxMzMwOlx0LmZpYl9kdW1wXHQ9IGlwNm1yX2R1bXAsXG5uZXQvaXB2Ni9pcDZtci5jLTEzMzEtXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTEzMzMtXG5uZXQvaXB2Ni9pcDZtci5jOjEzMzQ6c3RhdGljIGludCBfX25ldF9pbml0IGlwNm1yX25vdGlmaWVyX2luaXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L2lwdjYvaXA2bXIuYy0xMzM1LXtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTEzMzktXG5uZXQvaXB2Ni9pcDZtci5jOjEzNDA6XHRvcHMgPSBmaWJfbm90aWZpZXJfb3BzX3JlZ2lzdGVyKFx1MDAyNmlwNm1yX25vdGlmaWVyX29wc190ZW1wbGF0ZSwgbmV0KTtcbm5ldC9pcHY2L2lwNm1yLmMtMTM0MS1cdGlmIChJU19FUlIob3BzKSlcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTEzNDMtXG5uZXQvaXB2Ni9pcDZtci5jOjEzNDQ6XHRuZXQtXHUwMDNlaXB2Ni5pcDZtcl9ub3RpZmllcl9vcHMgPSBvcHM7XG5uZXQvaXB2Ni9pcDZtci5jLTEzNDUtXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMzQ4LVxubmV0L2lwdjYvaXA2bXIuYzoxMzQ5OnN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2bXJfbm90aWZpZXJfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpXG5uZXQvaXB2Ni9pcDZtci5jLTEzNTAte1xubmV0L2lwdjYvaXA2bXIuYzoxMzUxOlx0ZmliX25vdGlmaWVyX29wc191bnJlZ2lzdGVyKG5ldC1cdTAwM2VpcHY2LmlwNm1yX25vdGlmaWVyX29wcyk7XG5uZXQvaXB2Ni9pcDZtci5jOjEzNTI6XHRuZXQtXHUwMDNlaXB2Ni5pcDZtcl9ub3RpZmllcl9vcHMgPSBOVUxMO1xubmV0L2lwdjYvaXA2bXIuYy0xMzUzLX1cbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTEzNTUtLyogU2V0dXAgZm9yIElQIG11bHRpY2FzdCByb3V0aW5nICovXG5uZXQvaXB2Ni9pcDZtci5jOjEzNTY6c3RhdGljIGludCBfX25ldF9pbml0IGlwNm1yX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbm5ldC9pcHY2L2lwNm1yLmMtMTM1Ny17XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMzY0LVxubmV0L2lwdjYvaXA2bXIuYzoxMzY1Olx0ZXJyID0gaXA2bXJfbm90aWZpZXJfaW5pdChuZXQpO1xubmV0L2lwdjYvaXA2bXIuYy0xMzY2LVx0aWYgKGVycilcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTEzNjgtXG5uZXQvaXB2Ni9pcDZtci5jOjEzNjk6XHRlcnIgPSBpcDZtcl9ydWxlc19pbml0KG5ldCk7XG5uZXQvaXB2Ni9pcDZtci5jLTEzNzAtXHRpZiAoZXJyIFx1MDAzYyAwKVxubmV0L2lwdjYvaXA2bXIuYzoxMzcxOlx0XHRnb3RvIGlwNm1yX3J1bGVzX2ZhaWw7XG5uZXQvaXB2Ni9pcDZtci5jLTEzNzItXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMzc0LVx0ZXJyID0gLUVOT01FTTtcbm5ldC9pcHY2L2lwNm1yLmM6MTM3NTpcdGlmICghcHJvY19jcmVhdGVfbmV0KFwmIzM0O2lwNl9tcl92aWZcJiMzNDssIDAsIG5ldC1cdTAwM2Vwcm9jX25ldCwgXHUwMDI2aXA2bXJfdmlmX3NlcV9vcHMsXG5uZXQvaXB2Ni9pcDZtci5jLTEzNzYtXHRcdFx0c2l6ZW9mKHN0cnVjdCBtcl92aWZfaXRlcikpKVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTM4OC1wcm9jX3ZpZl9mYWlsOlxubmV0L2lwdjYvaXA2bXIuYzoxMzg5Olx0aXA2bXJfcnVsZXNfZXhpdF9ydG5sKG5ldCwgXHUwMDI2ZGV2X2tpbGxfbGlzdCk7XG5uZXQvaXB2Ni9pcDZtci5jOjEzOTA6XHRpcDZtcl9ydWxlc19leGl0KG5ldCk7XG5uZXQvaXB2Ni9pcDZtci5jLTEzOTEtI2VuZGlmXG5uZXQvaXB2Ni9pcDZtci5jOjEzOTI6aXA2bXJfcnVsZXNfZmFpbDpcbm5ldC9pcHY2L2lwNm1yLmM6MTM5MzpcdGlwNm1yX25vdGlmaWVyX2V4aXQobmV0KTtcbm5ldC9pcHY2L2lwNm1yLmMtMTM5NC1cdHJldHVybiBlcnI7XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xMzk2LVxubmV0L2lwdjYvaXA2bXIuYzoxMzk3OnN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2bXJfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L2lwdjYvaXA2bXIuYy0xMzk4LXtcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTE0MDItI2VuZGlmXG5uZXQvaXB2Ni9pcDZtci5jOjE0MDM6XHRpcDZtcl9ydWxlc19leGl0KG5ldCk7XG5uZXQvaXB2Ni9pcDZtci5jOjE0MDQ6XHRpcDZtcl9ub3RpZmllcl9leGl0KG5ldCk7XG5uZXQvaXB2Ni9pcDZtci5jLTE0MDUtfVxubmV0L2lwdjYvaXA2bXIuYy0xNDA2LVxubmV0L2lwdjYvaXA2bXIuYzoxNDA3OnN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2bXJfbmV0X2V4aXRfcnRubChzdHJ1Y3QgbmV0ICpuZXQsXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3MDkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gaW4gUm91dGluZyBUYWJsZXMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwYXR0ZXJucyBhc3NvY2lhdGVkIHdpdGggcm91dGluZyB0YWJsZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhleSB1dGlsaXplIGBtcnRfY2FjaGVwYCBvciBjYWxsIGBtcl90YWJsZV9hbGxvY2AuIE15IGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCwgd2hhdCB0aGUgY29udGV4dCBpcywgYW5kIHBvdGVudGlhbGx5IGlkZW50aWZ5IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgaXNzdWVzLgoKVG8gc3RhcnQsIEkmIzM5O2xsIHVzZSBhIGBncmVwYCB0byBxdWlja2x5IHNjYW4gdGhlIHJlbGV2YW50IGNvZGViYXNlcy4gSSYjMzk7bGwgZm9jdXMgb24gYG5ldC9pcHY0YCBhbmQgYG5ldC9pcHY2YCBkaXJlY3RvcmllcywgYXMgdGhvc2UgYXJlIHRoZSBjb3JlIGFyZWFzIHdoZXJlIHJvdXRpbmcgYW5kIGZvcndhcmRpbmcgYXJlIGltcGxlbWVudGVkLiBUaGlzIHRhcmdldGVkIHNlYXJjaCBmb3IgYG1ydF9jYWNoZXBgIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBpdHMgdXNhZ2UgYWNyb3NzIGRpZmZlcmVudCBJUHY0IGFuZCBJUHY2IHJvdXRpbmcgb3BlcmF0aW9ucywgYW5kIGhvcGVmdWxseSBsZWFkIG1lIHRvIGNhbGxzIHRvIHRoZSBgbXJfdGFibGVfYWxsb2NgIGZ1bmN0aW9uLiBJIGFudGljaXBhdGUgZmluZGluZyBzZXZlcmFsIGtleSBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHdoaWNoIHVzZSB0aGVzZSBhbGxvY2F0aW9uIG1ldGhvZHMsIGFuZCB0aGF0IHdpbGwgYmUgbXkganVtcGluZyBvZmYgcG9pbnQgZm9yIG1vcmUgZGV0YWlsZWQgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21ydF9jYWNoZXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz05Mj1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1mY191bnJlc19sb2NrKTtcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTAxLVxubmV0L2lwdjQvaXBtci5jOjEwMjpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1ydF9jYWNoZXAgX19yb19hZnRlcl9pbml0O1xubmV0L2lwdjQvaXBtci5jLTEwMy1cbi0tXG5uZXQvaXB2NC9pcG1yLmM9NzQzPXN0YXRpYyB2b2lkIGlwbXJfY2FjaGVfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbm5ldC9pcHY0L2lwbXIuYy03NDYtXG5uZXQvaXB2NC9pcG1yLmM6NzQ3Olx0a21lbV9jYWNoZV9mcmVlKG1ydF9jYWNoZXAsIChzdHJ1Y3QgbWZjX2NhY2hlICopYyk7XG5uZXQvaXB2NC9pcG1yLmMtNzQ4LX1cbi0tXG5uZXQvaXB2NC9pcG1yLmM9OTk0PXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jKHZvaWQpXG5uZXQvaXB2NC9pcG1yLmMtOTk1LXtcbm5ldC9pcHY0L2lwbXIuYzo5OTY6XHRzdHJ1Y3QgbWZjX2NhY2hlICpjID0ga21lbV9jYWNoZV96YWxsb2MobXJ0X2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG5uZXQvaXB2NC9pcG1yLmMtOTk3LVxuLS1cbm5ldC9pcHY0L2lwbXIuYz0xMDA3PXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jX3VucmVzKHZvaWQpXG5uZXQvaXB2NC9pcG1yLmMtMTAwOC17XG5uZXQvaXB2NC9pcG1yLmM6MTAwOTpcdHN0cnVjdCBtZmNfY2FjaGUgKmMgPSBrbWVtX2NhY2hlX3phbGxvYyhtcnRfY2FjaGVwLCBHRlBfQVRPTUlDKTtcbm5ldC9pcHY0L2lwbXIuYy0xMDEwLVxuLS1cbm5ldC9pcHY0L2lwbXIuYz0zMzc1PWludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKVxuLS1cbm5ldC9pcHY0L2lwbXIuYy0zMzc4LVxubmV0L2lwdjQvaXBtci5jOjMzNzk6XHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsXG5uZXQvaXB2NC9pcG1yLmMtMzM4MC1cdFx0XHRcdFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpO1xuLS1cbm5ldC9pcHY0L2lwbXIuYy0zNDA2LXJlZ19wZXJuZXRfZmFpbDpcbm5ldC9pcHY0L2lwbXIuYzozNDA3Olx0a21lbV9jYWNoZV9kZXN0cm95KG1ydF9jYWNoZXApO1xubmV0L2lwdjQvaXBtci5jLTM0MDgtXHRyZXR1cm4gZXJyO1xuLS1cbm5ldC9pcHY2L2lwNm1yLmM9NzU9c3RhdGljIERFRklORV9TUElOTE9DSyhtZmNfdW5yZXNfbG9jayk7XG4tLVxubmV0L2lwdjYvaXA2bXIuYy04NC1cbm5ldC9pcHY2L2lwNm1yLmM6ODU6c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptcnRfY2FjaGVwIF9fcmVhZF9tb3N0bHk7XG5uZXQvaXB2Ni9pcDZtci5jLTg2LVxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9Nzk5PXN0YXRpYyBpbmxpbmUgdm9pZCBpcDZtcl9jYWNoZV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy04MDItXG5uZXQvaXB2Ni9pcDZtci5jOjgwMzpcdGttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCAoc3RydWN0IG1mYzZfY2FjaGUgKiljKTtcbm5ldC9pcHY2L2lwNm1yLmMtODA0LX1cbi0tXG5uZXQvaXB2Ni9pcDZtci5jPTEwMjU9c3RhdGljIHN0cnVjdCBtZmM2X2NhY2hlICppcDZtcl9jYWNoZV9hbGxvYyh2b2lkKVxubmV0L2lwdjYvaXA2bXIuYy0xMDI2LXtcbm5ldC9pcHY2L2lwNm1yLmM6MTAyNzpcdHN0cnVjdCBtZmM2X2NhY2hlICpjID0ga21lbV9jYWNoZV96YWxsb2MobXJ0X2NhY2hlcCwgR0ZQX0tFUk5FTCk7XG5uZXQvaXB2Ni9pcDZtci5jLTEwMjgtXHRpZiAoIWMpXG4tLVxubmV0L2lwdjYvaXA2bXIuYz0xMDM3PXN0YXRpYyBzdHJ1Y3QgbWZjNl9jYWNoZSAqaXA2bXJfY2FjaGVfYWxsb2NfdW5yZXModm9pZClcbm5ldC9pcHY2L2lwNm1yLmMtMTAzOC17XG5uZXQvaXB2Ni9pcDZtci5jOjEwMzk6XHRzdHJ1Y3QgbWZjNl9jYWNoZSAqYyA9IGttZW1fY2FjaGVfemFsbG9jKG1ydF9jYWNoZXAsIEdGUF9BVE9NSUMpO1xubmV0L2lwdjYvaXA2bXIuYy0xMDQwLVx0aWYgKCFjKVxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9MTQyNj1pbnQgX19pbml0IGlwNl9tcl9pbml0KHZvaWQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xNDI5LVxubmV0L2lwdjYvaXA2bXIuYzoxNDMwOlx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9BQ0NPVU5UKTtcbm5ldC9pcHY2L2lwNm1yLmM6MTQzMTpcdGlmICghbXJ0X2NhY2hlcClcbm5ldC9pcHY2L2lwNm1yLmMtMTQzMi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xNDU5LXJlZ19wZXJuZXRfZmFpbDpcbm5ldC9pcHY2L2lwNm1yLmM6MTQ2MDpcdGttZW1fY2FjaGVfZGVzdHJveShtcnRfY2FjaGVwKTtcbm5ldC9pcHY2L2lwNm1yLmMtMTQ2MS1cdHJldHVybiBlcnI7XG4tLVxubmV0L2lwdjYvaXA2bXIuYz0xNDY0PXZvaWQgX19pbml0IGlwNl9tcl9jbGVhbnVwKHZvaWQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYy0xNDcxLVx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFx1MDAyNmlwNm1yX25ldF9vcHMpO1xubmV0L2lwdjYvaXA2bXIuYzoxNDcyOlx0a21lbV9jYWNoZV9kZXN0cm95KG1ydF9jYWNoZXApO1xubmV0L2lwdjYvaXA2bXIuYy0xNDczLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM0MjIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYG1yX3RhYmxlX2FsbG9jYCBDYWxsZXJzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byB0aGlzIGBtcl90YWJsZV9hbGxvY2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyB1c2FnZSB3aXRoaW4gdGhlIGNvZGViYXNlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB1c2UgYGdyZXBgLiBJIHdhbnQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIHBsYWNlcyB3aGVyZSBgbXJfdGFibGVfYWxsb2NgIGlzIGNhbGxlZC4gSXQmIzM5O3MgdGhlIG1vc3QgZGlyZWN0IGFuZCBlZmZpY2llbnQgd2F5IHRvIGdldCBhIGJpcmQmIzM5O3MtZXllIHZpZXcgb2YgaG93IHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gVGhpcyBzaG91bGQgcXVpY2tseSBnaXZlIG1lIGEgbGlzdCBvZiBhbGwgcG90ZW50aWFsIGNhbGwgc2l0ZXMsIHdoaWNoIEkgY2FuIHRoZW4gYW5hbHl6ZSBpbiBtb3JlIGRldGFpbC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgdW5jb3ZlcnMuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bXJfdGFibGVfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwbXIuYz00MjY9c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXBtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXG4tLVxubmV0L2lwdjQvaXBtci5jLTQzNy1cbm5ldC9pcHY0L2lwbXIuYzo0Mzg6XHRyZXR1cm4gbXJfdGFibGVfYWxsb2MobmV0LCBpZCwgXHUwMDI2aXBtcl9tcl90YWJsZV9vcHMsXG5uZXQvaXB2NC9pcG1yLmMtNDM5LVx0XHRcdCAgICAgIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIGlwbXJfbmV3X3RhYmxlX3NldCk7XG4tLVxubmV0L2lwdjQvaXBtcl9iYXNlLmM9NDU9c3RydWN0IG1yX3RhYmxlICpcbm5ldC9pcHY0L2lwbXJfYmFzZS5jOjQ2Om1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxubmV0L2lwdjQvaXBtcl9iYXNlLmMtNDctXHQgICAgICAgc3RydWN0IG1yX3RhYmxlX29wcyAqb3BzLFxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9NDA4PXN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwNm1yX25ld190YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZClcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTQxNS1cbm5ldC9pcHY2L2lwNm1yLmM6NDE2Olx0cmV0dXJuIG1yX3RhYmxlX2FsbG9jKG5ldCwgaWQsIFx1MDAyNmlwNm1yX21yX3RhYmxlX29wcyxcbm5ldC9pcHY2L2lwNm1yLmMtNDE3LVx0XHRcdCAgICAgIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIGlwNm1yX25ld190YWJsZV9zZXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk2NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTXVsdGljYXN0IFJvdXRpbmcgVGFibGUgYW5kIENhY2hlIEFsbG9jYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGlzIG11bHRpY2FzdCByb3V0aW5nIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIGBtcl90YWJsZWAgYW5kIGBtZmNfY2FjaGVgL2BtZmM2X2NhY2hlYCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBoYW5kbGVkLCBzbyBJJiMzOTtsbCBzdGFydCBieSBsaXN0aW5nIHRoZSBrZXkgZnVuY3Rpb25zIGludm9sdmVkLiBXZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgZW50cnkgcG9pbnRzIGFuZCB0aGUgYWxsb2NhdGlvbi91c2FnZSBwYXR0ZXJuczoKCiogICBgaXBtcl9uZXdfdGFibGVgIGFuZCBgaXA2bXJfbmV3X3RhYmxlYCBhcmUgdGhlIHRhYmxlIGluaXRpYWxpemVyczsgSSYjMzk7bGwgd2FudCB0byBjaGVjayBob3cgdGhleSBzZXQgdGhpbmdzIHVwLgoqICAgYG1yX3RhYmxlX2FsbG9jYCBsaWtlbHkgaGFuZGxlcyB0aGUgdW5kZXJseWluZyBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgdGhlIHJvdXRpbmcgdGFibGUgaXRzZWxmLgoqICAgVGhlbiB3ZSBoYXZlIGBpcG1yX21mY19hZGRgIGFuZCBgaXA2bXJfbWZjX2FkZGAgZm9yIGFkZGluZyBtdWx0aWNhc3QgZm9yd2FyZGluZyBjYWNoZSAoTUZDKSBlbnRyaWVzIC0gdGhlc2UgYXJlIGNyaXRpY2FsLgoqICAgRm9yIHRoZSBjYWNoZSBhbGxvY2F0aW9uLCB3ZSYjMzk7dmUgZ290IGBpcG1yX2NhY2hlX2FsbG9jYCwgYGlwbXJfY2FjaGVfYWxsb2NfdW5yZXNgLCBgaXA2bXJfY2FjaGVfYWxsb2NgLCBhbmQgYGlwNm1yX2NhY2hlX2FsbG9jX3VucmVzYC4gVGhlc2UgZGVzZXJ2ZSBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IHRoZSAmIzM0O3VucmVzJiMzNDsgdmFyaWFudHMuCiogICBGaW5hbGx5LCB0aGUgc2V0c29ja29wdCBjYWxscywgYGlwX21yb3V0ZV9zZXRzb2Nrb3B0YCBhbmQgYGlwNl9tcm91dGVfc2V0c29ja29wdGAsIG5lZWQgdG8gYmUgY2hlY2tlZDsgdGhleSYjMzk7cmUgdGhlIHVzZXItbGV2ZWwgaW50ZXJmYWNlLgoKUmlnaHQsIHdpdGggdGhhdCBsaXN0IGluIG1pbmQsIEkgbmVlZCB0byBtYWtlIGEgcXVpY2sgdmVyaWZpY2F0aW9uIG9mIHRoZSBhY3R1YWwgZnVuY3Rpb24gbmFtZXMgZm9yIGBpcG1yX21mY19hZGRgIGFuZCBgaXA2bXJfbWZjX2FkZGAuIEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgbWlnaHQgYmUgYSBzdWJ0bGUgbnVhbmNlIGluIHRoZWlyIG5hbWluZyBvciBpbXBsZW1lbnRhdGlvbiB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGNsdWUgb2YgdGhlaXIgcm9sZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGV5IGFyZSBleGFjdGx5IHdoYXQgSSBleHBlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwLiptci4qbWZjX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBtci5jPTEyMjE9c3RhdGljIGludCBpcG1yX21mY19kZWxldGUoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBtZmNjdGwgKm1mYywgaW50IHBhcmVudClcbi0tXG5uZXQvaXB2NC9pcG1yLmMtMTI0MC1cbm5ldC9pcHY0L2lwbXIuYzoxMjQxOnN0YXRpYyBpbnQgaXBtcl9tZmNfYWRkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXG5uZXQvaXB2NC9pcG1yLmMtMTI0Mi1cdFx0XHRzdHJ1Y3QgbWZjY3RsICptZmMsIGludCBtcnRzb2NrLCBpbnQgcGFyZW50KVxuLS1cbm5ldC9pcHY0L2lwbXIuYz0xNDEwPWludCBpcF9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxuLS1cbm5ldC9pcHY0L2lwbXIuYy0xNTIxLVx0XHRlbHNlXG5uZXQvaXB2NC9pcG1yLmM6MTUyMjpcdFx0XHRyZXQgPSBpcG1yX21mY19hZGQobmV0LCBtcnQsIFx1MDAyNm1mYyxcbm5ldC9pcHY0L2lwbXIuYy0xNTIzLVx0XHRcdFx0XHQgICBzayA9PSBydG5sX2RlcmVmZXJlbmNlKG1ydC1cdTAwM2Vtcm91dGVfc2spLFxuLS1cbm5ldC9pcHY0L2lwbXIuYz0yOTQzPXN0YXRpYyBpbnQgaXBtcl9ydG1fcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L2lwdjQvaXBtci5jLTI5NTktXHRpZiAobmxoLVx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV1JPVVRFKVxubmV0L2lwdjQvaXBtci5jOjI5NjA6XHRcdHJldCA9IGlwbXJfbWZjX2FkZChuZXQsIHRibCwgXHUwMDI2bWZjYywgbXJ0c29jaywgcGFyZW50KTtcbm5ldC9pcHY0L2lwbXIuYy0yOTYxLVx0ZWxzZVxuLS1cbm5ldC9pcHY2L2lwNm1yLmM9MTQ2ND12b2lkIF9faW5pdCBpcDZfbXJfY2xlYW51cCh2b2lkKVxuLS1cbm5ldC9pcHY2L2lwNm1yLmMtMTQ3NC1cbm5ldC9pcHY2L2lwNm1yLmM6MTQ3NTpzdGF0aWMgaW50IGlwNm1yX21mY19hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcbm5ldC9pcHY2L2lwNm1yLmMtMTQ3Ni1cdFx0XHQgc3RydWN0IG1mNmNjdGwgKm1mYywgaW50IG1ydHNvY2ssIGludCBwYXJlbnQpXG4tLVxubmV0L2lwdjYvaXA2bXIuYz0xNzEyPWludCBpcDZfbXJvdXRlX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0bmFtZSwgc29ja3B0cl90IG9wdHZhbCxcbi0tXG5uZXQvaXB2Ni9pcDZtci5jLTE3OTAtXHRcdGVsc2Vcbm5ldC9pcHY2L2lwNm1yLmM6MTc5MTpcdFx0XHRyZXQgPSBpcDZtcl9tZmNfYWRkKG5ldCwgbXJ0LCBcdTAwMjZtZmMsXG5uZXQvaXB2Ni9pcDZtci5jLTE3OTItXHRcdFx0XHRcdCAgICBzayA9PVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTIzMgoJCQkJCQkJb3V0cHV0OiAxNzIKCQkJCQkJCXRob3VnaHRzOiA3NjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIHRvdWNoZWQgYnkgdGhpcyBwYXRjaC4gSSBzZWUgdGhhdCBgaXBfbXJfaW5pdGAsIGBtcl90YWJsZV9hbGxvY2AsIGFuZCBgaXA2X21yX2luaXRgIGFyZSBkaXJlY3RseSBtb2RpZmllZCwgYW5kIGBtcl90YWJsZV9hbGxvY2AgYWxvbmcgd2l0aCBzZXZlcmFsIGNhY2hlIGFsbG9jYXRpb24gZnVuY3Rpb25zIChgaXBtcl9jYWNoZV9hbGxvY2AsIGBpcG1yX2NhY2hlX2FsbG9jX3VucmVzYCwgYGlwNm1yX2NhY2hlX2FsbG9jYCwgYGlwNm1yX2NhY2hlX2FsbG9jX3VucmVzYCkgYW5kIG1mYyBvcGVyYXRpb25zIChgaXBtcl9tZmNfYWRkYCwgYGlwNm1yX21mY19hZGRgKSBhcmUgdXNlcnMgb2YgdGhlIGFmZmVjdGVkIG9iamVjdHMuIEFkZGl0aW9uYWxseSwgdGhlIHNldHNvY2tvcHQgY2FsbHMsIGBpcF9tcm91dGVfc2V0c29ja29wdGAgYW5kIGBpcDZfbXJvdXRlX3NldHNvY2tvcHRgLCBhcmUgcmVsZXZhbnQgYmVjYXVzZSB0aGV5IHByb3ZpZGUgdXNlcnNwYWNlIGFjY2VzcyB0byB0aGlzIGZ1bmN0aW9uYWxpdHkuCgpOZXh0LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBJUF9NUk9VVEVgLCBgSVBWNl9NUk9VVEVgLCBhbmQgYE1FTUNHYCAoZm9yIFNMQUJfQUNDT1VOVCBhY2NvdW50aW5nKSBhcmUgbmVjZXNzYXJ5LiBJJiMzOTt2ZSBhbHNvIGRvdWJsZS1jaGVja2VkIHRoZSBkZXBlbmRlbmNpZXM6IGBJUF9NUk9VVEVgIGRlcGVuZHMgb24gYElQX01VTFRJQ0FTVGAgYW5kIHNlbGVjdHMgYElQX01ST1VURV9DT01NT05gLCBhbmQgYElQVjZfTVJPVVRFYCBkZXBlbmRzIG9uIGBJUFY2YCBhbmQgYWxzbyBzZWxlY3RzIGBJUF9NUk9VVEVfQ09NTU9OYC4KCk5vdywgdGhlIGNydWNpYWwgc3RlcDogaWRlbnRpZnlpbmcgdGhlIGBGb2N1c1N5bWJvbHNgLiBCYXNlZCBvbiB0aGUgZ3VpZGVsaW5lcywgSSBuZWVkIHRvIGF2b2lkIHViaXF1aXRvdXMgZnVuY3Rpb25zIGFuZCB0YXJnZXQgc3BlY2lmaWMgbG9naWMgb3IgZW50cnkgcG9pbnRzLiBBZnRlciBjYXJlZnVsIGNvbnNpZGVyYXRpb24sIEkmIzM5O3ZlIGRlY2lkZWQgdG8gaW5jbHVkZSBgbXJfdGFibGVfYWxsb2NgLCBgaXBtcl9tZmNfYWRkYCwgYGlwNm1yX21mY19hZGRgLCBgaXBfbXJvdXRlX3NldHNvY2tvcHRgLCBhbmQgYGlwNl9tcm91dGVfc2V0c29ja29wdGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGFuZCBhbGxvY2F0aW9uIHBvaW50cyByZWxhdGVkIHRvIHRoZSBtdWx0aWNhc3Qgcm91dGluZyBmdW5jdGlvbmFsaXR5LgoKUmVhc29uaW5nOiBUaGlzIHBhdGNoIGlzIGVuYWJsaW5nIG1lbWNnIHNsYWIgYWNjb3VudGluZyBmb3IgSVB2NC9JUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlcyAoYG1yX3RhYmxlYCkgYW5kIG11bHRpY2FzdCBmb3J3YXJkaW5nIGNhY2hlIGVudHJpZXMgKGBtZmNfY2FjaGVgIGFuZCBgbWZjNl9jYWNoZWApLiBUaGlzIGlzIHNpZ25pZmljYW50IGJlY2F1c2UgdGhlc2UgYWxsb2NhdGlvbnMgYXJlIHRyaWdnZXJlZCBhbmQgbWFuYWdlZCBieSB1c2Vyc3BhY2UgdGhyb3VnaCBzZXRzb2Nrb3B0IGNvbW1hbmRzIGxpa2UgYE1SVF9BRERfTUZDYCAod2hpY2gsIG9mIGNvdXJzZSwgcmVsaWVzIG9uIHRoZSBpbmNsdWRlZCBlbnRyeXBvaW50cykgYW5kIHBvdGVudGlhbGx5IG5ldGxpbmsgcm91dGUgY29uZmlndXJhdGlvbi4gVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGZ1enppbmcgdGFyZ2V0cyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2Ugd2l0aGluIGNvcmUgbmV0d29ya2luZyBjb2RlLCBhbmQgdGhlIFNMQUJfQUNDT1VOVCBtb2RpZmljYXRpb25zIGp1c3RpZnkgZnV6emluZyB1bmRlciBjb25zdHJhaW5lZCBtZW1vcnkgZW52aXJvbm1lbnRzIChpLmUuIHVuZGVyIG1lbW9yeS1jb25zdHJhaW5lZCBjZ3JvdXBzKS4KCkZpbmFsbHksIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgdHJ1ZWAuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBbJiMzNDtJUF9NUk9VVEUmIzM0OywgJiMzNDtJUFY2X01ST1VURSYjMzQ7LCAmIzM0O01FTUNHJiMzNDtdYCwgYW5kIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgYFsmIzM0O21yX3RhYmxlX2FsbG9jJiMzNDssICYjMzQ7aXBfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywgJiMzNDtpcDZfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywgJiMzNDtpcG1yX21mY19hZGQmIzM0OywgJiMzNDtpcDZtcl9tZmNfYWRkJiMzNDtdYC4gRXZlcnl0aGluZyBpcyBsb29raW5nIGNvcnJlY3Qgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfTVJPVVRFJiMzNDssCiAgICAmIzM0O0lQVjZfTVJPVVRFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXJfdGFibGVfYWxsb2MmIzM0OywKICAgICYjMzQ7aXBfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXA2X21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwbXJfbWZjX2FkZCYjMzQ7LAogICAgJiMzNDtpcDZtcl9tZmNfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgU0xBQl9BQ0NPVU5UIGFuZCBHRlBfS0VSTkVMX0FDQ09VTlQgZmxhZ3MgdG8gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZSBhbmQgZm9yd2FyZGluZyBjYWNoZSBhbGxvY2F0aW9ucyAobWZjX2NhY2hlLCBtZmM2X2NhY2hlLCBtcl90YWJsZSkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgcmVhY2hhYmxlIHZpYSBzZXRzb2Nrb3B0IGFuZCBuZXRsaW5rIG11bHRpY2FzdCByb3V0aW5nIGludGVyZmFjZXMsIHdhcnJhbnRpbmcgZnV6emluZyB1bmRlciBtZW1vcnktYWNjb3VudGluZyBjb25maWd1cmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfTVJPVVRFJiMzNDssCiAgICAmIzM0O0lQVjZfTVJPVVRFJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXJfdGFibGVfYWxsb2MmIzM0OywKICAgICYjMzQ7aXBfbXJvdXRlX3NldHNvY2tvcHQmIzM0OywKICAgICYjMzQ7aXA2X21yb3V0ZV9zZXRzb2Nrb3B0JiMzNDssCiAgICAmIzM0O2lwbXJfbWZjX2FkZCYjMzQ7LAogICAgJiMzNDtpcDZtcl9tZmNfYWRkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgU0xBQl9BQ0NPVU5UIGFuZCBHRlBfS0VSTkVMX0FDQ09VTlQgZmxhZ3MgdG8gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZSBhbmQgZm9yd2FyZGluZyBjYWNoZSBhbGxvY2F0aW9ucyAobWZjX2NhY2hlLCBtZmM2X2NhY2hlLCBtcl90YWJsZSkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgcmVhY2hhYmxlIHZpYSBzZXRzb2Nrb3B0IGFuZCBuZXRsaW5rIG11bHRpY2FzdCByb3V0aW5nIGludGVyZmFjZXMsIHdhcnJhbnRpbmcgZnV6emluZyB1bmRlciBtZW1vcnktYWNjb3VudGluZyBjb25maWd1cmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgYWRkcyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgZmxhZ3MgKFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UKSB0byB0aGUgSVB2NC9JUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIGFsbG9jYXRpb25zIGFuZCBzbGFiIGNhY2hlIGNyZWF0aW9uIChtcnRfY2FjaGVwKS4gVGhlIGFsbG9jYXRpb24gaW4gbXJfdGFibGVfYWxsb2Mgc3RpbGwgdXNlcyBremFsbG9jX29iaiB3aGljaCBlbnN1cmVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgbWVtb3J5LCBhbmQgU0xBQl9BQ0NPVU5UIHNvbGVseSBlbmFibGVzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBvbiBjYWNoZSBhbGxvY2F0aW9ucy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXItc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJiYWE4ZDA1NjJmZDk2MjhhODIxNjRlZjk0MzgxY2YwZWYzNWMyNGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDEzOjU0OjIzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IGU1ZjJiMWM2MTUwZDIuLmI5YzU0NGQ0OGM0NTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTMzNzYsNyAmIzQzOzMzNzYsOCBAQCBpbnQgX19pbml0IGlwX21yX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JbXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDKTsKJiM0MzsJbXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLAomIzQzOwkJCQlTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDIHwgU0xBQl9BQ0NPVU5UKTsKIAogCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmFtcDtpcG1yX25ldF9vcHMpOwogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yX2Jhc2UuYyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jCmluZGV4IDg2N2IyNGJlZGVkMTEuLmEwZWM2ZDE5YTIzN2YgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXJfYmFzZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jCkBAIC01Miw3ICYjNDM7NTIsNyBAQCBtcl90YWJsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCwKIAlzdHJ1Y3QgbXJfdGFibGUgKm1ydDsKIAlpbnQgZXJyOwogCi0JbXJ0ID0ga3phbGxvY19vYmooKm1ydCk7CiYjNDM7CW1ydCA9IGt6YWxsb2Nfb2JqKCptcnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiAJaWYgKCFtcnQpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCW1ydC0mZ3Q7aWQgPSBpZDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jCmluZGV4IDNmMmVkOWI3N2RlYjUuLjlkODExNmI1ZWRiMTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNm1yLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2bXIuYwpAQCAtMTQyNyw3ICYjNDM7MTQyNyw3IEBAIGludCBfX2luaXQgaXA2X21yX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyOwogCi0JbXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOKTsKJiM0MzsJbXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9BQ0NPVU5UKTsKIAlpZiAoIW1ydF9jYWNoZXApCiAJCXJldHVybiAtRU5PTUVNOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxMzo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IEFjY291bnRpbmcgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgcGF0Y2ggZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlc2UgYXJlIHN0cmFpZ2h0Zm9yd2FyZCBtZW1jZyBhY2NvdW50aW5nIGFkZGl0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgYWRkaW5nIGBTTEFCX0FDQ09VTlRgIHRvIHRoZSBzbGFiIGNhY2hlcyAoYG1ydF9jYWNoZXBgKSB1c2VkIGJ5IGJvdGggSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBjb21wb25lbnRzIChgbmV0L2lwdjQvaXBtci5jYCBhbmQgYG5ldC9pcHY2L2lwNm1yLmNgKS4gV2UmIzM5O3JlIGFsc28gc2VlaW5nIHRoZSBgR0ZQX0tFUk5FTF9BQ0NPVU5UYCBmbGFnIGJlaW5nIGFkZGVkIHRvIGBremFsbG9jX29iamAgY2FsbHMsIHNwZWNpZmljYWxseSB3aXRoaW4gYG1yX3RhYmxlX2FsbG9jYCBpbiBgbmV0L2lwdjQvaXBtcl9iYXNlLmNgLiBDbGFzc2ljIG1vdmUgdG8gdHJhY2sgbWVtb3J5IHVzYWdlIHdpdGhpbiBtZW1vcnkgY29udHJvbCBncm91cHMsIG5vdGhpbmcgdG9vIGV4Y2l0aW5nIHNvIGZhci4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB3ZSBhcmVuJiMzOTt0IGludHJvZHVjaW5nIGFueSBzdWJ0bGUgaXNzdWVzLiBUaGFua2Z1bGx5LCBga3phbGxvY2AgaXMgc3RpbGwgdXNlZCwgc28gemVybyBpbml0aWFsaXphdGlvbiBpcyBoYW5kbGVkLiBXZSYjMzk7cmUgb25seSBkZWFsaW5nIHdpdGggYWNjb3VudGluZyBmbGFncyBoZXJlLCBzbyB0aGVyZSBzaG91bGRuJiMzOTt0IGJlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGUgYFNMQUJfQUNDT1VOVGAgZmxhZyBpbiB0aGUgYG1ydF9jYWNoZXBgIGFsbG9jYXRpb25zIGlzIGp1c3QgZm9yIGFjY291bnRpbmcg4oCTIGl0IGRvZXNuJiMzOTt0IG1lc3Mgd2l0aCB0aGUgYWxsb2NhdGlvbiBpdHNlbGYuIEl0IGxvb2tzIGxpa2Ugbm8gbmV3IGFsbG9jYXRpb24gbG9naWMsIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNrcywgb3IgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIGFyZSBiZWluZyBpbnRyb2R1Y2VkIGFzIGEgcmVzdWx0IG9mIHRoZXNlIGNoYW5nZXMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayB0aGUgc291cmNlIGZvciBga3phbGxvY19vYmpgIGluIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2Agb3IgdXNlIGEgcXVpY2sgZ3JlcHBlciwganVzdCB0byBjb25maXJtIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBhY2N1cmF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3phbGxvY19vYmomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yX2Jhc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcG1yX2Jhc2UuYz00Nj1tcl90YWJsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCxcbi0tXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYy01NC1cbm5ldC9pcHY0L2lwbXJfYmFzZS5jOjU1Olx0bXJ0ID0ga3phbGxvY19vYmooKm1ydCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbm5ldC9pcHY0L2lwbXJfYmFzZS5jLTU2LVx0aWYgKCFtcnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDEzOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzNTEKCQkJCQkJCW91dHB1dDogMTQ4CgkJCQkJCQl0aG91Z2h0czogMzAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIE11bHRpY2FzdCBSb3V0aW5nIFRhYmxlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBvdmVyIHRoaXMgcGF0Y2guIEl0JiMzOTtzIHByZXR0eSBjbGVhci1jdXQuIFRoZXkmIzM5O3ZlIG1hZGUgc29tZSBjaGFuZ2VzIGludm9sdmluZyBtZW1vcnkgYWNjb3VudGluZywgYnV0IHRoZSBjb3JlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2Nlc3MgaGFzbiYjMzk7dCBjaGFuZ2VkIGluIGFueSB3YXkgdGhhdCB3b3VsZCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGV5JiMzOTtyZSB1c2luZyBga3phbGxvY19vYmpgIHRvIGFsbG9jYXRlIGFuZCB6ZXJvIHRoZSBtZW1vcnkgZm9yIHRoZSBgbXJ0YCBvYmplY3RzLCBhbmQgdGhleSYjMzk7dmUgYWRkZWQgYFNMQUJfQUNDT1VOVGAgdG8gdGhlIGttZW1fY2FjaGUgY3JlYXRpb24gaW4gYGlwbXIuY2AgYW5kIGBpcDZtci5jYC4gVGhhdCYjMzk7cyBpdC4KCk15IGltbWVkaWF0ZSBjb25jZXJuIHdhcyB3aGV0aGVyIHRoaXMgY2hhbmdlIGV4cG9zZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBCdXQgYGt6YWxsb2Nfb2JqYCAqc3RpbGwqIHplcm9lcyB0aGUgbWVtb3J5OyB0aGUgYWRkaXRpb24gb2YgYFNMQUJfQUNDT1VOVGAgaXMgKm9ubHkqIGFib3V0IG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBmb3IgdGhvc2Ugc2xhYiBhbGxvY2F0aW9ucy4gSSBjYW4gc2VlIG5vIHBhdGggd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgZXZlbiBicmFuY2hlZCBvbi4gVGhlcmUmIzM5O3Mgbm90aGluZyBoZXJlIHRoYXQgbG9va3Mgcmlza3kgZnJvbSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBwZXJzcGVjdGl2ZS4KClRoZXJlZm9yZSwgdGhpcyBkb2VzbiYjMzk7dCB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB3aXRoIEtNU0FOLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkLCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLgoKSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2Agb24gdGhpcy4gSSYjMzk7bSBjb25maWRlbnQgdGhlcmUgYXJlIG5vIEtNU0FOIGNvbmNlcm5zLiBUaGUgcGF0Y2ggaXMgc2ltcGx5IGFkZGluZyBhY2NvdW50aW5nIGZsYWdzLCBhbmQgdGhlIG1lbW9yeSBpbml0aWFsaXphdGlvbiByZW1haW5zIGludGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTM6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBmbGFncyAoU0xBQl9BQ0NPVU5UIGFuZCBHRlBfS0VSTkVMX0FDQ09VTlQpIHRvIHRoZSBJUHY0L0lQdjYgbXVsdGljYXN0IHJvdXRpbmcgdGFibGUgYWxsb2NhdGlvbnMgYW5kIHNsYWIgY2FjaGUgY3JlYXRpb24gKG1ydF9jYWNoZXApLiBUaGUgYWxsb2NhdGlvbiBpbiBtcl90YWJsZV9hbGxvYyBzdGlsbCB1c2VzIGt6YWxsb2Nfb2JqIHdoaWNoIGVuc3VyZXMgemVyby1pbml0aWFsaXphdGlvbiBvZiBtZW1vcnksIGFuZCBTTEFCX0FDQ09VTlQgc29sZWx5IGVuYWJsZXMgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIG9uIGNhY2hlIGFsbG9jYXRpb25zLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlci1zcGFjZSwgb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBhZGRzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBmbGFncyAoU0xBQl9BQ0NPVU5UIGFuZCBHRlBfS0VSTkVMX0FDQ09VTlQpIHRvIHRoZSBJUHY0L0lQdjYgbXVsdGljYXN0IHJvdXRpbmcgdGFibGUgYWxsb2NhdGlvbnMgYW5kIHNsYWIgY2FjaGUgY3JlYXRpb24gKG1ydF9jYWNoZXApLiBUaGUgYWxsb2NhdGlvbiBpbiBtcl90YWJsZV9hbGxvYyBzdGlsbCB1c2VzIGt6YWxsb2Nfb2JqIHdoaWNoIGVuc3VyZXMgemVyby1pbml0aWFsaXphdGlvbiBvZiBtZW1vcnksIGFuZCBTTEFCX0FDQ09VTlQgc29sZWx5IGVuYWJsZXMgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIG9uIGNhY2hlIGFsbG9jYXRpb25zLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlci1zcGFjZSwgb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzo1NDoyNC42NjUzMzMzMTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODgyMjY2NjM5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9NUk9VVEVcIixcbiAgICBcIklQVjZfTVJPVVRFXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1yX3RhYmxlX2FsbG9jXCIsXG4gICAgXCJpcF9tcm91dGVfc2V0c29ja29wdFwiLFxuICAgIFwiaXA2X21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcG1yX21mY19hZGRcIixcbiAgICBcImlwNm1yX21mY19hZGRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgZmxhZ3MgKFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UKSB0byB0aGUgSVB2NC9JUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIGFsbG9jYXRpb25zIGFuZCBzbGFiIGNhY2hlIGNyZWF0aW9uIChtcnRfY2FjaGVwKS4gVGhlIGFsbG9jYXRpb24gaW4gbXJfdGFibGVfYWxsb2Mgc3RpbGwgdXNlcyBremFsbG9jX29iaiB3aGljaCBlbnN1cmVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgbWVtb3J5LCBhbmQgU0xBQl9BQ0NPVU5UIHNvbGVseSBlbmFibGVzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBvbiBjYWNoZSBhbGxvY2F0aW9ucy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXItc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UIGZsYWdzIHRvIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHJvdXRpbmcgdGFibGUgYW5kIGZvcndhcmRpbmcgY2FjaGUgYWxsb2NhdGlvbnMgKG1mY19jYWNoZSwgbWZjNl9jYWNoZSwgbXJfdGFibGUpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHJlYWNoYWJsZSB2aWEgc2V0c29ja29wdCBhbmQgbmV0bGluayBtdWx0aWNhc3Qgcm91dGluZyBpbnRlcmZhY2VzLCB3YXJyYW50aW5nIGZ1enppbmcgdW5kZXIgbWVtb3J5LWFjY291bnRpbmcgY29uZmlndXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjI0LjY2NTMzOTYwNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4NTQ0OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMmJhYThkMDU2MmZkOTYyOGE4MjE2NGVmOTQzODFjZjBlZjM1YzI0ZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDEzOjU0OjIzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuY1xcbmluZGV4IGU1ZjJiMWM2MTUwZDIuLmI5YzU0NGQ0OGM0NTIgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBtci5jXFxuKysrIGIvbmV0L2lwdjQvaXBtci5jXFxuQEAgLTMzNzYsNyArMzM3Niw4IEBAIGludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKVxcbiB7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMpO1xcbitcXHRtcnRfY2FjaGVwID0gS01FTV9DQUNIRShtZmNfY2FjaGUsXFxuK1xcdFxcdFxcdFxcdFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpO1xcbiBcXG4gXFx0ZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2aXBtcl9uZXRfb3BzKTtcXG4gXFx0aWYgKGVycilcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtcl9iYXNlLmMgYi9uZXQvaXB2NC9pcG1yX2Jhc2UuY1xcbmluZGV4IDg2N2IyNGJlZGVkMTEuLmEwZWM2ZDE5YTIzN2YgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBtcl9iYXNlLmNcXG4rKysgYi9uZXQvaXB2NC9pcG1yX2Jhc2UuY1xcbkBAIC01Miw3ICs1Miw3IEBAIG1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxcbiBcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdG1ydCA9IGt6YWxsb2Nfb2JqKCptcnQpO1xcbitcXHRtcnQgPSBremFsbG9jX29iaigqbXJ0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiBcXHRpZiAoIW1ydClcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcdG1ydC1cXHUwMDNlaWQgPSBpZDtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2bXIuYyBiL25ldC9pcHY2L2lwNm1yLmNcXG5pbmRleCAzZjJlZDliNzdkZWI1Li45ZDgxMTZiNWVkYjE3IDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L2lwNm1yLmNcXG4rKysgYi9uZXQvaXB2Ni9pcDZtci5jXFxuQEAgLTE0MjcsNyArMTQyNyw3IEBAIGludCBfX2luaXQgaXA2X21yX2luaXQodm9pZClcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOKTtcXG4rXFx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9BQ0NPVU5UKTtcXG4gXFx0aWYgKCFtcnRfY2FjaGVwKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjI1LjEyNDY1MzE2N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTIyOTAwNzQ3MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfTVJPVVRFXCIsXG4gICAgXCJJUFY2X01ST1VURVwiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtcl90YWJsZV9hbGxvY1wiLFxuICAgIFwiaXBfbXJvdXRlX3NldHNvY2tvcHRcIixcbiAgICBcImlwNl9tcm91dGVfc2V0c29ja29wdFwiLFxuICAgIFwiaXBtcl9tZmNfYWRkXCIsXG4gICAgXCJpcDZtcl9tZmNfYWRkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBTTEFCX0FDQ09VTlQgYW5kIEdGUF9LRVJORUxfQUNDT1VOVCBmbGFncyB0byBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIGFuZCBmb3J3YXJkaW5nIGNhY2hlIGFsbG9jYXRpb25zIChtZmNfY2FjaGUsIG1mYzZfY2FjaGUsIG1yX3RhYmxlKS4gVGhpcyBhZmZlY3RzIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgY29kZSByZWFjaGFibGUgdmlhIHNldHNvY2tvcHQgYW5kIG5ldGxpbmsgbXVsdGljYXN0IHJvdXRpbmcgaW50ZXJmYWNlcywgd2FycmFudGluZyBmdXp6aW5nIHVuZGVyIG1lbW9yeS1hY2NvdW50aW5nIGNvbmZpZ3VyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJiYWE4ZDA1NjJmZDk2MjhhODIxNjRlZjk0MzgxY2YwZWYzNWMyNGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDEzOjU0OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jXG5pbmRleCBlNWYyYjFjNjE1MGQyLi5iOWM1NDRkNDhjNDUyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtci5jXG4rKysgYi9uZXQvaXB2NC9pcG1yLmNcbkBAIC0zMzc2LDcgKzMzNzYsOCBAQCBpbnQgX19pbml0IGlwX21yX2luaXQodm9pZClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDKTtcbitcdG1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mY19jYWNoZSxcbitcdFx0XHRcdFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpO1xuIFxuIFx0ZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZpcG1yX25ldF9vcHMpO1xuIFx0aWYgKGVycilcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yX2Jhc2UuYyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXG5pbmRleCA4NjdiMjRiZWRlZDExLi5hMGVjNmQxOWEyMzdmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtcl9iYXNlLmNcbisrKyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXG5AQCAtNTIsNyArNTIsNyBAQCBtcl90YWJsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCxcbiBcdHN0cnVjdCBtcl90YWJsZSAqbXJ0O1xuIFx0aW50IGVycjtcbiBcbi1cdG1ydCA9IGt6YWxsb2Nfb2JqKCptcnQpO1xuK1x0bXJ0ID0ga3phbGxvY19vYmooKm1ydCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbXJ0KVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcdG1ydC1cdTAwM2VpZCA9IGlkO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jXG5pbmRleCAzZjJlZDliNzdkZWI1Li45ZDgxMTZiNWVkYjE3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2bXIuY1xuKysrIGIvbmV0L2lwdjYvaXA2bXIuY1xuQEAgLTE0MjcsNyArMTQyNyw3IEBAIGludCBfX2luaXQgaXA2X21yX2luaXQodm9pZClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOKTtcbitcdG1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mYzZfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfQUNDT1VOVCk7XG4gXHRpZiAoIW1ydF9jYWNoZXApXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6NTQ6MjUuMTI0NjU0NjE2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk2NDYxNDQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGlzIElQIE11bHRpY2FzdCBQYXRjaCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmb2N1cyBoZXJlIGlzIG1lbW9yeSBhY2NvdW50aW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBJUCBtdWx0aWNhc3Qgcm91dGluZyBjb2RlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIHBlcmhhcHMgcHJldmVudGluZyBwb3RlbnRpYWwgZGVuaWFsLW9mLXNlcnZpY2UgdnVsbmVyYWJpbGl0aWVzLiBMZXQncyBzZWUuLi4gdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBpcG1yLmNgLCBgaXBtcl9iYXNlLmNgLCBhbmQgYGlwNm1yLmNgLCB3aGljaCBhcmUgYWxsIGNvcmUgbXVsdGljYXN0IHJvdXRpbmcgY29tcG9uZW50cyBmb3IgYm90aCBJUHY0IGFuZCBJUHY2LlxuXG5UaGUgZmlyc3QgY2hhbmdlIGluIGBpcG1yLmNgLCB3aXRoaW4gdGhlIGBpcF9tcl9pbml0YCBmdW5jdGlvbiwgYWRkcyBgU0xBQl9BQ0NPVU5UYCB0byB0aGUgYG1mY19jYWNoZWAgS01FTSBjYWNoZS4gVGhpcyB0ZWxscyB0aGUga2VybmVsJ3Mgc2xhYiBhbGxvY2F0b3IgdG8gYWNjb3VudCBmb3IgbWVtb3J5IGFsbG9jYXRpb25zIGZyb20gdGhpcyBjYWNoZS4gVGhhdCdzIGEgY2xhc3NpYyBzaWduYWwgb2YgbWVtb3J5IHRyYWNraW5nLiBUaGUgc2FtZSB0aGluZyBpcyBoYXBwZW5pbmcgd2l0aCB0aGUgYG1mYzZfY2FjaGVgIGluIGBpcDZtci5jYCwgd2l0aCB0aGUgYWRkaXRpb24gb2YgYFNMQUJfQUNDT1VOVGAuIFNvIHRoYXQncyBjb25zaXN0ZW50LlxuXG5UaGVuLCBvdmVyIGluIGBpcG1yX2Jhc2UuY2AsIGluc2lkZSB0aGUgYG1yX3RhYmxlX2FsbG9jYCBmdW5jdGlvbiwgdGhlIGBremFsbG9jX29iaigpYCBjYWxsIGlzIGdldHRpbmcgdGhlIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGZsYWcuIFRoaXMgaXMgdGhlIGV4cGxpY2l0IGtlcm5lbC1sZXZlbCBhbGxvY2F0aW9uIGZsYWcgdGhhdCdzIGdvaW5nIHRvIHRyYWNrIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGZvciB0aGlzIG11bHRpY2FzdCByb3V0aW5nIHRhYmxlLiBUaGlzIGlzIGFub3RoZXIgY2xlYXIgaW5kaWNhdG9yIHRoYXQgdGhlcmUgaXMgYW4gaW50ZW50IHRvIGtlZXAgdHJhY2sgb2YgdGhpcyBtZW1vcnkuXG5cblNvLCB0aGUgY29tbW9uIHRocmVhZCBpcyBtZW1vcnkgYWNjb3VudGluZyBpbiBtdWx0aWNhc3Qgcm91dGluZy4gTG9va3MgbGlrZSB0aGUgaW50ZW50aW9uIGlzIGRlZmluaXRlbHkgdG8gdHJhY2sgdGhlc2UgbWVtb3J5IGFsbG9jYXRpb25zIGFuZCBwb3RlbnRpYWxseSBzZXQgbGltaXRzLCBvciBhdCBsZWFzdCBoYXZlIGEgY2xlYXJlciBwaWN0dXJlIG9mIG1lbW9yeSB1c2FnZSBpbiBtdWx0aWNhc3Qgcm91dGluZy4gTm93LCBJIHdhbnQgdG8gY29uZmlybSB3aGljaCBLY29uZmlnIG9wdGlvbnMgYXJlIGludm9sdmVkIHNvIEknbGwgcmVhY2ggZm9yIGdyZXBwZXIgdG8gZ2V0IGEgZ29vZCBpZGVhIG9mIHdoYXQncyBnb2luZyBvbiBhbmQgd2hlcmUgdGhpcyBpcyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzA0LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6NTQ6MzQuMDg5MjcxMDEzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NjIwMjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklQX01ST1VURVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MjA3PWNvbmZpZyBORVRfSVBHUkVfQlJPQURDQVNUXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTIxNS1cXG5uZXQvaXB2NC9LY29uZmlnOjIxNjpjb25maWcgSVBfTVJPVVRFX0NPTU1PTlxcbm5ldC9pcHY0L0tjb25maWctMjE3LVxcdGJvb2xcXG5uZXQvaXB2NC9LY29uZmlnOjIxODpcXHRkZXBlbmRzIG9uIElQX01ST1VURSB8fCBJUFY2X01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjE5LVxcbm5ldC9pcHY0L0tjb25maWc6MjIwOmNvbmZpZyBJUF9NUk9VVEVcXG5uZXQvaXB2NC9LY29uZmlnLTIyMS1cXHRib29sIFxcXCJJUDogbXVsdGljYXN0IHJvdXRpbmdcXFwiXFxubmV0L2lwdjQvS2NvbmZpZy0yMjItXFx0ZGVwZW5kcyBvbiBJUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9LY29uZmlnOjIyMzpcXHRzZWxlY3QgSVBfTVJPVVRFX0NPTU1PTlxcbm5ldC9pcHY0L0tjb25maWctMjI0LVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjMxLVxcbm5ldC9pcHY0L0tjb25maWc6MjMyOmNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjQvS2NvbmZpZy0yMzMtXFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdCBwb2xpY3kgcm91dGluZ1xcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjIzNDpcXHRkZXBlbmRzIG9uIElQX01ST1VURSBcXHUwMDI2XFx1MDAyNiBJUF9BRFZBTkNFRF9ST1VURVJcXG5uZXQvaXB2NC9LY29uZmlnLTIzNS1cXHRzZWxlY3QgRklCX1JVTEVTXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTI0Nj1jb25maWcgSVBfUElNU01fVjFcXG5uZXQvaXB2NC9LY29uZmlnLTI0Ny1cXHRib29sIFxcXCJJUDogUElNLVNNIHZlcnNpb24gMSBzdXBwb3J0XFxcIlxcbm5ldC9pcHY0L0tjb25maWc6MjQ4OlxcdGRlcGVuZHMgb24gSVBfTVJPVVRFXFxubmV0L2lwdjQvS2NvbmZpZy0yNDktXFx0aGVscFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0yNTk9Y29uZmlnIElQX1BJTVNNX1YyXFxubmV0L2lwdjQvS2NvbmZpZy0yNjAtXFx0Ym9vbCBcXFwiSVA6IFBJTS1TTSB2ZXJzaW9uIDIgc3VwcG9ydFxcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjI2MTpcXHRkZXBlbmRzIG9uIElQX01ST1VURVxcbm5ldC9pcHY0L0tjb25maWctMjYyLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlPTIyPW9iai0kKENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMpICs9IGZpYl9ydWxlcy5vXFxubmV0L2lwdjQvTWFrZWZpbGU6MjM6b2JqLSQoQ09ORklHX0lQX01ST1VURSkgKz0gaXBtci5vXFxubmV0L2lwdjQvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX0lQX01ST1VURV9DT01NT04pICs9IGlwbXJfYmFzZS5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMjUtb2JqLSQoQ09ORklHX05FVF9JUElQKSArPSBpcGlwLm9cXG4tLVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xMTYtI2luY2x1ZGUgXFx1MDAzY25ldC9zZWN1cmVfc2VxLmhcXHUwMDNlXFxubmV0L2lwdjQvYWZfaW5ldC5jOjExNzojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xMTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21yb3V0ZS5oXFx1MDAzZVxcbi0tXFxubmV0L2lwdjQvYWZfaW5ldC5jPTE4ODI9c3RhdGljIGludCBfX2luaXQgaW5ldF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvaXB2NC9hZl9pbmV0LmMtMTk4OC1cXHQgKi9cXG5uZXQvaXB2NC9hZl9pbmV0LmM6MTk4OTojaWYgZGVmaW5lZChDT05GSUdfSVBfTVJPVVRFKVxcbm5ldC9pcHY0L2FmX2luZXQuYy0xOTkwLVxcdGlmIChpcF9tcl9pbml0KCkpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTAxLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRmaWx0ZXJfaXB2NC5oXFx1MDAzZVxcbm5ldC9pcHY0L2lnbXAuYzoxMDI6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVcXG5uZXQvaXB2NC9pZ21wLmMtMTAzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tcm91dGUuaFxcdTAwM2VcXG4tLVxcbm5ldC9pcHY0L2lwX291dHB1dC5jPTM2Nz1pbnQgaXBfbWNfb3V0cHV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L2lwdjQvaXBfb3V0cHV0LmMtMzgzLVxcdFxcdGlmIChza19tY19sb29wKHNrKVxcbm5ldC9pcHY0L2lwX291dHB1dC5jOjM4NDojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbm5ldC9pcHY0L2lwX291dHB1dC5jLTM4NS1cXHRcXHQvKiBTbWFsbCBvcHRpbWl6YXRpb246IGRvIG5vdCBsb29wYmFjayBub3QgbG9jYWwgZnJhbWVzLFxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTExOD1zdGF0aWMgdm9pZCBpcG1yX2V4cGlyZV9wcm9jZXNzKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG5uZXQvaXB2NC9pcG1yLmMtMTE5LVxcbm5ldC9pcHY0L2lwbXIuYzoxMjA6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjQvaXBtci5jLTEyMS0jZGVmaW5lIGlwbXJfZm9yX2VhY2hfdGFibGUobXJ0LCBuZXQpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTQwOD1zdGF0aWMgdm9pZCBpcG1yX25ld190YWJsZV9zZXQoc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtNDEwLXtcXG5uZXQvaXB2NC9pcG1yLmM6NDExOiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFX01VTFRJUExFX1RBQkxFU1xcbm5ldC9pcHY0L2lwbXIuYy00MTItXFx0bGlzdF9hZGRfdGFpbF9yY3UoXFx1MDAyNm1ydC1cXHUwMDNlbGlzdCwgXFx1MDAyNm5ldC1cXHUwMDNlaXB2NC5tcl90YWJsZXMpO1xcbi0tXFxubmV0L2lwdjQvaXBtci5jPTE0MTA9aW50IGlwX21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTU3OC1cXHRjYXNlIE1SVF9UQUJMRTpcXG5uZXQvaXB2NC9pcG1yLmM6MTU3OTpcXHRcXHRpZiAoIUlTX0JVSUxUSU4oQ09ORklHX0lQX01ST1VURV9NVUxUSVBMRV9UQUJMRVMpKSB7XFxubmV0L2lwdjQvaXBtci5jLTE1ODAtXFx0XFx0XFx0cmV0ID0gLUVOT1BST1RPT1BUO1xcbi0tXFxubmV0L2lwdjQvcmF3LmM9ODg5PXN0YXRpYyBpbnQgcmF3X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgaW50ICprYXJnKVxcbi0tXFxubmV0L2lwdjQvcmF3LmMtOTA5LVxcdGRlZmF1bHQ6XFxubmV0L2lwdjQvcmF3LmM6OTEwOiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXFxubmV0L2lwdjQvcmF3LmMtOTExLVxcdFxcdHJldHVybiBpcG1yX2lvY3RsKHNrLCBjbWQsIGthcmcpO1xcbi0tXFxubmV0L2lwdjQvcmF3LmM9OTE5PXN0YXRpYyBpbnQgY29tcGF0X3Jhd19pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbi0tXFxubmV0L2lwdjQvcmF3LmMtOTI1LVxcdGRlZmF1bHQ6XFxubmV0L2lwdjQvcmF3LmM6OTI2OiNpZmRlZiBDT05GSUdfSVBfTVJPVVRFXFxubmV0L2lwdjQvcmF3LmMtOTI3LVxcdFxcdHJldHVybiBpcG1yX2NvbXBhdF9pb2N0bChzaywgY21kLCBjb21wYXRfcHRyKGFyZykpO1xcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0xNzcxPWlwX3JvdXRlX2lucHV0X21jKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0xODAxLVxcbm5ldC9pcHY0L3JvdXRlLmM6MTgwMjojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbm5ldC9pcHY0L3JvdXRlLmMtMTgwMy1cXHRpZiAoIWlwdjRfaXNfbG9jYWxfbXVsdGljYXN0KGRhZGRyKSBcXHUwMDI2XFx1MDAyNiBJTl9ERVZfTUZPUldBUkQoaW5fZGV2KSlcXG4tLVxcbm5ldC9pcHY0L3JvdXRlLmM9MjUyMz1pcF9yb3V0ZV9pbnB1dF9yY3Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTI1NTktXFx0XFx0aWYgKG91clxcbm5ldC9pcHY0L3JvdXRlLmM6MjU2MDojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbm5ldC9pcHY0L3JvdXRlLmMtMjU2MS1cXHRcXHRcXHR8fFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYz0yNTkxPXN0YXRpYyBzdHJ1Y3QgcnRhYmxlICpfX21rcm91dGVfb3V0cHV0KGNvbnN0IHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsXFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jLTI2OTgtXFx0XFx0fVxcbm5ldC9pcHY0L3JvdXRlLmM6MjY5OTojaWZkZWYgQ09ORklHX0lQX01ST1VURVxcbm5ldC9pcHY0L3JvdXRlLmMtMjcwMC1cXHRcXHRpZiAodHlwZSA9PSBSVE5fTVVMVElDQVNUKSB7XFxuLS1cXG5uZXQvaXB2NC9yb3V0ZS5jPTI5Nzg9c3RhdGljIGludCBydF9maWxsX2luZm8oc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgZHN0LCBfX2JlMzIgc3JjLFxcbi0tXFxubmV0L2lwdjQvcm91dGUuYy0zMDgwLVxcdFxcdGlmIChydF9pc19pbnB1dF9yb3V0ZShydCkpIHtcXG5uZXQvaXB2NC9yb3V0ZS5jOjMwODE6I2lmZGVmIENPTkZJR19JUF9NUk9VVEVcXG5uZXQvaXB2NC9yb3V0ZS5jLTMwODItXFx0XFx0XFx0aWYgKGlwdjRfaXNfbXVsdGljYXN0KGRzdCkgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9pcHY2L0tjb25maWc9MjU3PWNvbmZpZyBJUFY2X01ST1VURVxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yNTktXFx0ZGVwZW5kcyBvbiBJUFY2XFxubmV0L2lwdjYvS2NvbmZpZzoyNjA6XFx0c2VsZWN0IElQX01ST1VURV9DT01NT05cXG5uZXQvaXB2Ni9LY29uZmlnLTI2MS1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjM0LjE2Njg5NjI2N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzUwNTYzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSBjaGFuZ2VzLlxuXG4qKkRpdmluZyBEZWVwIGludG8gdGhlIE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBncmFudWxhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzLCBhbmQgYSBzdXJmYWNlLWxldmVsIG92ZXJ2aWV3IGp1c3Qgd29uJ3QgY3V0IGl0LiBMZXQncyBzdGFydCBieSBkaXNzZWN0aW5nIHRoZW0gdGhvcm91Z2hseS4gSSdtIGdvaW5nIHRvIGxldmVyYWdlIG15IHByZWZlcnJlZCB0b29scyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSDigJMgcHJvYmFibHkgYSBjb21iaW5hdGlvbiBvZiBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGNvbnRleHQgb2YgdGhvc2UgZmlsZXMgaW4gdGhlaXIgZW50aXJldHksIGFuZCBgZ3JlcHBlcmAgdG8gcXVpY2tseSBwaW5wb2ludCBhbmQgZXh0cmFjdCB0aGUgcmVsZXZhbnQgY29kZSBzbmlwcGV0cyB0aGF0IGFyZSBpbXBhY3RlZCBieSB0aGlzIHBhdGNoLiBJJ2xsIG5lZWQgdG8gc2VlIHByZWNpc2VseSAqaG93KiB0aGUgc3Vycm91bmRpbmcgY29kZSBpcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBtb2RpZmllZCBwb3J0aW9ucy4gTm8gc2hvcnRjdXRzIGhlcmU7IGdvdHRhIGdldCBhIHNvbGlkIGdyYXNwIG9uIHRoZSBiZWZvcmUtYW5kLWFmdGVyIHNjZW5hcmlvcyB0byB0cnVseSBhc3Nlc3MgdGhlIGltcGFjdCBhbmQgZW5zdXJlIHRoZXJlIGFyZSBubyB1bmZvcmVzZWVuIGNvbnNlcXVlbmNlcyBvciByZWdyZXNzaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAyMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjM2LjIwMTk1NTkzOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcG1yLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzM3MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzM3MDpcXHRcXHR7LnByb3RvY29sID0gUlROTF9GQU1JTFlfSVBNUiwgLm1zZ3R5cGUgPSBSVE1fR0VUUk9VVEUsXFxuMzM3MTpcXHRcXHQgLmRvaXQgPSBpcG1yX3J0bV9nZXRyb3V0ZSwgLmR1bXBpdCA9IGlwbXJfcnRtX2R1bXByb3V0ZSxcXG4zMzcyOlxcdFxcdCAuZmxhZ3MgPSBSVE5MX0ZMQUdfRE9JVF9VTkxPQ0tFRCB8IFJUTkxfRkxBR19EVU1QX1VOTE9DS0VEfSxcXG4zMzczOlxcdH07XFxuMzM3NDpcXHRcXG4zMzc1OlxcdGludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKVxcbjMzNzY6XFx0e1xcbjMzNzc6XFx0XFx0aW50IGVycjtcXG4zMzc4OlxcdFxcbjMzNzk6XFx0XFx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLFxcbjMzODA6XFx0XFx0XFx0XFx0XFx0U0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9QQU5JQyB8IFNMQUJfQUNDT1VOVCk7XFxuMzM4MTpcXHRcXG4zMzgyOlxcdFxcdGVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXFx1MDAyNmlwbXJfbmV0X29wcyk7XFxuMzM4MzpcXHRcXHRpZiAoZXJyKVxcbjMzODQ6XFx0XFx0XFx0Z290byByZWdfcGVybmV0X2ZhaWw7XFxuMzM4NTpcXHRcXG4zMzg2OlxcdFxcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2aXBfbXJfbm90aWZpZXIpO1xcbjMzODc6XFx0XFx0aWYgKGVycilcXG4zMzg4OlxcdFxcdFxcdGdvdG8gcmVnX25vdGlmX2ZhaWw7XFxuMzM4OTpcXHQjaWZkZWYgQ09ORklHX0lQX1BJTVNNX1YyXFxuMzM5MDpcXHRcXHRpZiAoaW5ldF9hZGRfcHJvdG9jb2woXFx1MDAyNnBpbV9wcm90b2NvbCwgSVBQUk9UT19QSU0pIFxcdTAwM2MgMCkge1xcbjMzOTE6XFx0XFx0XFx0cHJfZXJyKFxcXCIlczogY2FuJ3QgYWRkIFBJTSBwcm90b2NvbFxcXFxuXFxcIiwgX19mdW5jX18pO1xcbjMzOTI6XFx0XFx0XFx0ZXJyID0gLUVBR0FJTjtcXG4zMzkzOlxcdFxcdFxcdGdvdG8gYWRkX3Byb3RvX2ZhaWw7XFxuMzM5NDpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjM2LjIwMjEzOTA0OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNDU4MzcwODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIElQIE11bHRpY2FzdCBSb3V0aW5nIENvZGUqKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IG11bHRpY2FzdCByb3V0aW5nLCBhbmQgSSdtIHRoaW5raW5nLCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIGtlcm5lbCBjb2RlLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSBhIGxvdCBvZiB0aGUgY29yZSBtdWx0aWNhc3Qgcm91dGluZyBsb2dpYyBsaXZlcyBpbiB0aGUgSVB2NCBzdGFjay4gSSBmaWd1cmUsIGlmIHdlJ3JlIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSBiZWhhdmlvciBvciBwb3RlbnRpYWxseSBkZWJ1ZyBzb21ldGhpbmcsIGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIGZvdW5kYXRpb24gaXMga2V5LiBJJ20gZm9jdXNpbmcgbXkgYXR0ZW50aW9uIGFyb3VuZCBsaW5lIDUyLiBMZXQncyBzZWUgd2hhdCB0aGF0IHNlY3Rpb24gaXMgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2OTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjM4LjI0Nzk3OTEzOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwbXJfYmFzZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdHZvaWQgbXJfdGFibGVfZnJlZShzdHJ1Y3QgbXJfdGFibGUgKm1ydClcXG4gIDQxOlxcdHtcXG4gIDQyOlxcdFxcdHF1ZXVlX3JjdV93b3JrKHN5c3RlbV9kZmxfd3EsIFxcdTAwMjZtcnQtXFx1MDAzZXdvcmspO1xcbiAgNDM6XFx0fVxcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdHJ1Y3QgbXJfdGFibGUgKlxcbiAgNDY6XFx0bXJfdGFibGVfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsXFxuICA0NzpcXHRcXHQgICAgICAgc3RydWN0IG1yX3RhYmxlX29wcyAqb3BzLFxcbiAgNDg6XFx0XFx0ICAgICAgIHZvaWQgKCpleHBpcmVfZnVuYykoc3RydWN0IHRpbWVyX2xpc3QgKnQpLFxcbiAgNDk6XFx0XFx0ICAgICAgIHZvaWQgKCp0YWJsZV9zZXQpKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbiAgNTA6XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXQgKm5ldCkpXFxuICA1MTpcXHR7XFxuICA1MjpcXHRcXHRzdHJ1Y3QgbXJfdGFibGUgKm1ydDtcXG4gIDUzOlxcdFxcdGludCBlcnI7XFxuICA1NDpcXHRcXG4gIDU1OlxcdFxcdG1ydCA9IGt6YWxsb2Nfb2JqKCptcnQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuICA1NjpcXHRcXHRpZiAoIW1ydClcXG4gIDU3OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbiAgNTg6XFx0XFx0bXJ0LVxcdTAwM2VpZCA9IGlkO1xcbiAgNTk6XFx0XFx0d3JpdGVfcG5ldChcXHUwMDI2bXJ0LVxcdTAwM2VuZXQsIG5ldCk7XFxuICA2MDpcXHRcXG4gIDYxOlxcdFxcdG1ydC1cXHUwMDNlb3BzID0gKm9wcztcXG4gIDYyOlxcdFxcdGVyciA9IHJobHRhYmxlX2luaXQoXFx1MDAyNm1ydC1cXHUwMDNlbWZjX2hhc2gsIG1ydC1cXHUwMDNlb3BzLnJodF9wYXJhbXMpO1xcbiAgNjM6XFx0XFx0aWYgKGVycikge1xcbiAgNjQ6XFx0XFx0XFx0a2ZyZWUobXJ0KTtcXG4gIDY1OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuICA2NjpcXHRcXHR9XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdElOSVRfUkNVX1dPUksoXFx1MDAyNm1ydC1cXHUwMDNld29yaywgX19tcl9mcmVlX3RhYmxlKTtcXG4gIDY5OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZtcnQtXFx1MDAzZW1mY19jYWNoZV9saXN0KTtcXG4gIDcwOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZtcnQtXFx1MDAzZW1mY191bnJlc19xdWV1ZSk7XFxuICA3MTpcXHRcXG4gIDcyOlxcdFxcdHRpbWVyX3NldHVwKFxcdTAwMjZtcnQtXFx1MDAzZWlwbXJfZXhwaXJlX3RpbWVyLCBleHBpcmVfZnVuYywgMCk7XFxuICA3MzpcXHRcXG4gIDc0OlxcdFxcdG1ydC1cXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtID0gLTE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjM4LjI0ODA1MjIyOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NTAxNjIxNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYGlwNm1yLmNgKipcblxuT2theSwgdGltZSB0byBkaWcgaW4uIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUga2VybmVsJ3MgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBjb2RlLCBzcGVjaWZpY2FsbHkgYG5ldC9pcHY2L2lwNm1yLmNgLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBpc3N1ZSBJJ20gdHJvdWJsZXNob290aW5nLCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgZXhhbWluaW5nIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDE0MjcuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhcyBvZnRlbiBjZXJ0YWluIGNvcmUgZnVuY3Rpb25hbGl0aWVzIG9yIHBvdGVudGlhbCBwcm9ibGVtIGFyZWFzIHRlbmQgdG8gYmUgbG9jYWxpemVkIGFyb3VuZCBzaW1pbGFyIHNlY3Rpb25zLCBieSBjb252ZW50aW9uLCBvciBmcm9tIHBhc3QgZXhwZXJpZW5jZS4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBzZWN0aW9uIG9mIHRoZSBjb2RlIHJldmVhbHMuIEkgZXhwZWN0IHRvIGJlIGxvb2tpbmcgZm9yIGNsdWVzIHJlbGF0ZWQgdG8gW0ltcGxpZWQgUHJvYmxlbSBBcmVhIC0gaW5zZXJ0IGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBwcm9ibGVtXS4gSSdsbCBiZSBmb2N1c2VkIG9uIGhvdyB0aGUgY29kZSBoYW5kbGVzIFtTcGVjaWZpYyBBcmVhIG9mIGludGVyZXN0IC0gYWxzbyBpbXBsaWVkIGZyb20gb3JpZ2luYWwgcHJvYmxlbV0sIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgb2J2aW91cyBsb2dpYyBlcnJvcnMsIHJhY2UgY29uZGl0aW9ucywgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0MzcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjQwLjY5ODIxNzI4N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvaXA2bXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDIwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDIwOlxcdFxcdHsub3duZXIgPSBUSElTX01PRFVMRSwgLnByb3RvY29sID0gUlROTF9GQU1JTFlfSVA2TVIsXFxuMTQyMTpcXHRcXHQgLm1zZ3R5cGUgPSBSVE1fR0VUUk9VVEUsXFxuMTQyMjpcXHRcXHQgLmRvaXQgPSBpcDZtcl9ydG1fZ2V0cm91dGUsIC5kdW1waXQgPSBpcDZtcl9ydG1fZHVtcHJvdXRlLFxcbjE0MjM6XFx0XFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEIHwgUlROTF9GTEFHX0RVTVBfVU5MT0NLRUR9LFxcbjE0MjQ6XFx0fTtcXG4xNDI1OlxcdFxcbjE0MjY6XFx0aW50IF9faW5pdCBpcDZfbXJfaW5pdCh2b2lkKVxcbjE0Mjc6XFx0e1xcbjE0Mjg6XFx0XFx0aW50IGVycjtcXG4xNDI5OlxcdFxcbjE0MzA6XFx0XFx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9BQ0NPVU5UKTtcXG4xNDMxOlxcdFxcdGlmICghbXJ0X2NhY2hlcClcXG4xNDMyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjE0MzM6XFx0XFxuMTQzNDpcXHRcXHRlcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZpcDZtcl9uZXRfb3BzKTtcXG4xNDM1OlxcdFxcdGlmIChlcnIpXFxuMTQzNjpcXHRcXHRcXHRnb3RvIHJlZ19wZXJuZXRfZmFpbDtcXG4xNDM3OlxcdFxcbjE0Mzg6XFx0XFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFxcdTAwMjZpcDZfbXJfbm90aWZpZXIpO1xcbjE0Mzk6XFx0XFx0aWYgKGVycilcXG4xNDQwOlxcdFxcdFxcdGdvdG8gcmVnX25vdGlmX2ZhaWw7XFxuMTQ0MTpcXHQjaWZkZWYgQ09ORklHX0lQVjZfUElNU01fVjJcXG4xNDQyOlxcdFxcdGlmIChpbmV0Nl9hZGRfcHJvdG9jb2woXFx1MDAyNnBpbTZfcHJvdG9jb2wsIElQUFJPVE9fUElNKSBcXHUwMDNjIDApIHtcXG4xNDQzOlxcdFxcdFxcdHByX2VycihcXFwiJXM6IGNhbid0IGFkZCBQSU0gcHJvdG9jb2xcXFxcblxcXCIsIF9fZnVuY19fKTtcXG4xNDQ0OlxcdFxcdFxcdGVyciA9IC1FQUdBSU47XFxuMTQ0NTpcXHRcXHRcXHRnb3RvIGFkZF9wcm90b19mYWlsO1xcbjE0NDY6XFx0XFx0fVxcbjE0NDc6XFx0I2VuZGlmXFxuMTQ0ODpcXHRcXHRlcnIgPSBydG5sX3JlZ2lzdGVyX21hbnkoaXA2bXJfcnRubF9tc2dfaGFuZGxlcnMpO1xcbjE0NDk6XFx0XFx0aWYgKCFlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjQwLjY5ODM0MTk0N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDI4MzkzMjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKldvcnRoRnV6emluZz10cnVlOiBNdWx0aWNhc3QgUm91dGluZyBNZW1vcnkgQWNjb3VudGluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBhZGRlZCBgU0xBQl9BQ0NPVU5UYCB0byBgbXJ0X2NhY2hlcGAgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9mIGJvdGggSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZywgYW5kIGl0IGFkZGVkIGBHRlBfS0VSTkVMX0FDQ09VTlRgIHdoZW4gYWxsb2NhdGluZyBgbXJfdGFibGVgIG9iamVjdHMuIFRoZSBpbnRlbnQsIEkgc2VlLCBpcyB0byBpbnRlZ3JhdGUgbWVtY2cgKGNncm91cCBtZW1vcnkgYWNjb3VudGluZykgaW50byB0aGVzZSBtdWx0aWNhc3Qgcm91dGluZyBzdHJ1Y3R1cmVzLiBTaW5jZSBgbWZjX2NhY2hlYCwgYG1mYzZfY2FjaGVgLCBhbmQgYG1yX3RhYmxlYCBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgaW4gcmVzcG9uc2UgdG8gdXNlci1zcGFjZSByZXF1ZXN0cyBvciBmcm9tIG5ldHdvcmsgcm91dGluZyB0YWJsZXMgY3JlYXRlZCBieSB1c2VyLXNwYWNlIHByb2Nlc3NlcywgdGhpcyBhY2NvdW50aW5nIHByZXZlbnRzIHVzZXIgcHJvY2Vzc2VzIHdpdGhpbiBtZW1jZ3MgZnJvbSBleGNlZWRpbmcgdGhlaXIgbWVtb3J5IGxpbWl0cyB1bm5vdGljZWQgYW5kIGV4aGF1c3RpbmcgdGhlIHN5c3RlbS5cblxuTm93LCBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlPyBBYnNvbHV0ZWx5ISBXZSdyZSB0YWxraW5nIGNvcmUgbmV0d29ya2luZyDigJMgSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZy4gVGhpcyBhbGlnbnMgd2l0aCB0aGUgXCJjb3JlIHN1YnN5c3RlbXNcIiBwb3NpdGl2ZSBjcml0ZXJpb24gb3V0bGluZWQ6IFwiQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4uLi4gY29yZSBuZXR3b3JraW5nLlwiIFRoZSBjaGFuZ2VzIG1vZGlmeSBob3cgdGhlIGtlcm5lbCAqYWNjb3VudHMqIGZvciBtZW1vcnkgdXNlZCBieSBhIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbi4gVGhhdCdzIGEgZGVmaW5pdGUgcG9zaXRpdmUuIFRoaXMgaXNuJ3Qgc29tZSBvYnNjdXJlIGRyaXZlciBvciBhbiB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aC5cblxuR2l2ZW4gdGhlIGNyaXRlcmlhIGZvciBkZXRlcm1pbmluZyBgV29ydGhGdXp6aW5nYCwgSSBjYW4gY29uZmlkZW50bHkgY29uY2x1ZGUgdGhhdCB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcsIHNvIGBXb3J0aEZ1enppbmdgIGlzIGB0cnVlYC5cblxuSSBzaG91bGQgcHJvYmFibHkgYWxzbyB2ZXJpZnkgdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWd1cmF0aW9ucyBieSBjaGVja2luZyBgbmV0L2lwdjQvS2NvbmZpZ2AgYW5kIGBuZXQvaXB2Ni9LY29uZmlnYCB0byBjb25maXJtIGBJUF9NUk9VVEVgIGFuZCBgSVBWNl9NUk9VVEVgIGFyZSBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjIxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6NTQ6NDUuMTI2NzM2OTgyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDc3ODQ0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBWNl9NUk9VVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9MjQzPWNvbmZpZyBJUFY2X1NVQlRSRUVTXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTI1Ni1cXG5uZXQvaXB2Ni9LY29uZmlnOjI1Nzpjb25maWcgSVBWNl9NUk9VVEVcXG5uZXQvaXB2Ni9LY29uZmlnLTI1OC1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3Qgcm91dGluZ1xcXCJcXG4tLVxcbm5ldC9pcHY2L0tjb25maWctMjY0LVxcbm5ldC9pcHY2L0tjb25maWc6MjY1OmNvbmZpZyBJUFY2X01ST1VURV9NVUxUSVBMRV9UQUJMRVNcXG5uZXQvaXB2Ni9LY29uZmlnLTI2Ni1cXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjQ1LjE4MTUxODkyNFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzQ5NTg5MjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBpbiBgbmV0L2lwdjYvS2NvbmZpZ2A6XG5cbioqRGl2aW5nIGludG8gdGhlIElQdjYgS2NvbmZpZyBmb3IgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gemVybyBpbiBvbiB0aGF0IElQdjYgS2NvbmZpZyBmaWxlLiBMZXQncyBzZWUuLi4gdGhlIHRleHQgbWVudGlvbmVkIHRob3NlIGxpbmVzLCAyNTUtMjc1LCBzbyBJJ2xsIGp1bXAgcmlnaHQgdGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGV5IGxpa2VseSBkZWFsaW5nIHdpdGggaW4gdGhhdCBzcGVjaWZpYyByYW5nZT8gVGhpcyB1c3VhbGx5IGNvdmVycyBzb21lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIGV4cGVjdGluZyB0byBzZWUgZmVhdHVyZXMgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZCwgcG9zc2libHkgZGVwZW5kZW50IG9uIGRlcGVuZGVuY2llcyB3aXRoIG90aGVyIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSdtIGludGVyZXN0ZWQgaW4gdGhlIGludGVycGxheSBvZiB0aG9zZSBvcHRpb25zIHdpdGhpbiB0aGUga2VybmVsIGJ1aWxkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBoaW50cyBvbiBob3cgdGhlc2Ugc2V0dGluZ3MgYWZmZWN0IHRoZSBvdmVyYWxsIElQdjYgc3RhY2sgYmVoYXZpb3IsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggc3BlY2lmaWMgSVB2NiBmZWF0dXJlcyBsaWtlIGV4dGVuc2lvbiBoZWFkZXJzLCBmcmFnbWVudGF0aW9uLCBvciByb3V0aW5nLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBvZiB0aGVzZSBvcHRpb25zIGFuZCBob3cgdGhleSB0aWUgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIElQdjYgbmV0d29yayBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyBjb25maWd1cmF0aW9ucyB0aG9zZSBsaW5lcyBob2xkIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTgzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6NTQ6NDcuOTMxMTExMzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjYvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNTY6XFx0XFxuIDI1NzpcXHRjb25maWcgSVBWNl9NUk9VVEVcXG4gMjU4OlxcdFxcdGJvb2wgXFxcIklQdjY6IG11bHRpY2FzdCByb3V0aW5nXFxcIlxcbiAyNTk6XFx0XFx0ZGVwZW5kcyBvbiBJUFY2XFxuIDI2MDpcXHRcXHRzZWxlY3QgSVBfTVJPVVRFX0NPTU1PTlxcbiAyNjE6XFx0XFx0aGVscFxcbiAyNjI6XFx0XFx0ICBTdXBwb3J0IGZvciBJUHY2IG11bHRpY2FzdCBmb3J3YXJkaW5nLlxcbiAyNjM6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNjQ6XFx0XFxuIDI2NTpcXHRjb25maWcgSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxuIDI2NjpcXHRcXHRib29sIFxcXCJJUHY2OiBtdWx0aWNhc3QgcG9saWN5IHJvdXRpbmdcXFwiXFxuIDI2NzpcXHRcXHRkZXBlbmRzIG9uIElQVjZfTVJPVVRFXFxuIDI2ODpcXHRcXHRzZWxlY3QgRklCX1JVTEVTXFxuIDI2OTpcXHRcXHRoZWxwXFxuIDI3MDpcXHRcXHQgIE5vcm1hbGx5LCBhIG11bHRpY2FzdCByb3V0ZXIgcnVucyBhIHVzZXJzcGFjZSBkYWVtb24gYW5kIGRlY2lkZXNcXG4gMjcxOlxcdFxcdCAgd2hhdCB0byBkbyB3aXRoIGEgbXVsdGljYXN0IHBhY2tldCBiYXNlZCBvbiB0aGUgc291cmNlIGFuZFxcbiAyNzI6XFx0XFx0ICBkZXN0aW5hdGlvbiBhZGRyZXNzZXMuIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUgbXVsdGljYXN0IHJvdXRlclxcbiAyNzM6XFx0XFx0ICB3aWxsIGFsc28gYmUgYWJsZSB0byB0YWtlIGludGVyZmFjZXMgYW5kIHBhY2tldCBtYXJrcyBpbnRvXFxuIDI3NDpcXHRcXHQgIGFjY291bnQgYW5kIHJ1biBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdXNlcnNwYWNlIGRhZW1vbnNcXG4gMjc1OlxcdFxcdCAgc2ltdWx0YW5lb3VzbHksIGVhY2ggb25lIGhhbmRsaW5nIGEgc2luZ2xlIHRhYmxlLlxcbiAyNzY6XFx0XFxuIDI3NzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI3ODpcXHRcXG4gMjc5OlxcdGNvbmZpZyBJUFY2X1BJTVNNX1YyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjQ3LjkzMTE4MjA2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3NTI5NTQ5NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSVB2NCBDb25maWd1cmF0aW9uKipcblxuT2theSwgSSBuZWVkIHRvIGdldCBpbnRvIHRoZSBoZWFydCBvZiB0aGUgSVB2NCBjb25maWd1cmF0aW9uIHdpdGhpbiB0aGUga2VybmVsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBuZXQvaXB2NC9LY29uZmlnYC4gSXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGZvciB0aGUga2V5IHBhcmFtZXRlcnMgYW5kIGRlcGVuZGVuY2llcy4gSSdtIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgbGluZXMgMjE1IHRvIDI0MCwgYXMgdGhlIGNvbnRleHQgb2YgbXkgaW52ZXN0aWdhdGlvbiBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IHRoZSBpbmZvcm1hdGlvbiBJIHJlcXVpcmUgd2lsbCBiZSBjb250YWluZWQgd2l0aGluIHRoaXMgYmxvY2suIEl0J3MgbGlrZWx5IHRoYXQgY3JpdGljYWwgZmxhZ3MsIGJ1aWxkIG9wdGlvbnMsIG9yIGRlZmF1bHQgc2V0dGluZ3MgcmVsYXRlZCB0byB0aGUgZnVuY3Rpb25hbGl0eSBJJ20gd29ya2luZyB3aXRoIGFyZSBkZWZpbmVkIHRoZXJlLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5ODE4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzo1NDo1MS42ODQxMzk3MDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTY5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTU6XFx0XFxuIDIxNjpcXHRjb25maWcgSVBfTVJPVVRFX0NPTU1PTlxcbiAyMTc6XFx0XFx0Ym9vbFxcbiAyMTg6XFx0XFx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgfHwgSVBWNl9NUk9VVEVcXG4gMjE5OlxcdFxcbiAyMjA6XFx0Y29uZmlnIElQX01ST1VURVxcbiAyMjE6XFx0XFx0Ym9vbCBcXFwiSVA6IG11bHRpY2FzdCByb3V0aW5nXFxcIlxcbiAyMjI6XFx0XFx0ZGVwZW5kcyBvbiBJUF9NVUxUSUNBU1RcXG4gMjIzOlxcdFxcdHNlbGVjdCBJUF9NUk9VVEVfQ09NTU9OXFxuIDIyNDpcXHRcXHRoZWxwXFxuIDIyNTpcXHRcXHQgIFRoaXMgaXMgdXNlZCBpZiB5b3Ugd2FudCB5b3VyIG1hY2hpbmUgdG8gYWN0IGFzIGEgcm91dGVyIGZvciBJUFxcbiAyMjY6XFx0XFx0ICBwYWNrZXRzIHRoYXQgaGF2ZSBzZXZlcmFsIGRlc3RpbmF0aW9uIGFkZHJlc3Nlcy4gSXQgaXMgbmVlZGVkIG9uIHRoZVxcbiAyMjc6XFx0XFx0ICBNQk9ORSwgYSBoaWdoIGJhbmR3aWR0aCBuZXR3b3JrIG9uIHRvcCBvZiB0aGUgSW50ZXJuZXQgd2hpY2ggY2Fycmllc1xcbiAyMjg6XFx0XFx0ICBhdWRpbyBhbmQgdmlkZW8gYnJvYWRjYXN0cy4gSW4gb3JkZXIgdG8gZG8gdGhhdCwgeW91IHdvdWxkIG1vc3RcXG4gMjI5OlxcdFxcdCAgbGlrZWx5IHJ1biB0aGUgcHJvZ3JhbSBtcm91dGVkLiBJZiB5b3UgaGF2ZW4ndCBoZWFyZCBhYm91dCBpdCwgeW91XFxuIDIzMDpcXHRcXHQgIGRvbid0IG5lZWQgaXQuXFxuIDIzMTpcXHRcXG4gMjMyOlxcdGNvbmZpZyBJUF9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxuIDIzMzpcXHRcXHRib29sIFxcXCJJUDogbXVsdGljYXN0IHBvbGljeSByb3V0aW5nXFxcIlxcbiAyMzQ6XFx0XFx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgXFx1MDAyNlxcdTAwMjYgSVBfQURWQU5DRURfUk9VVEVSXFxuIDIzNTpcXHRcXHRzZWxlY3QgRklCX1JVTEVTXFxuIDIzNjpcXHRcXHRoZWxwXFxuIDIzNzpcXHRcXHQgIE5vcm1hbGx5LCBhIG11bHRpY2FzdCByb3V0ZXIgcnVucyBhIHVzZXJzcGFjZSBkYWVtb24gYW5kIGRlY2lkZXNcXG4gMjM4OlxcdFxcdCAgd2hhdCB0byBkbyB3aXRoIGEgbXVsdGljYXN0IHBhY2tldCBiYXNlZCBvbiB0aGUgc291cmNlIGFuZFxcbiAyMzk6XFx0XFx0ICBkZXN0aW5hdGlvbiBhZGRyZXNzZXMuIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUgbXVsdGljYXN0IHJvdXRlclxcbiAyNDA6XFx0XFx0ICB3aWxsIGFsc28gYmUgYWJsZSB0byB0YWtlIGludGVyZmFjZXMgYW5kIHBhY2tldCBtYXJrcyBpbnRvXFxuIDI0MTpcXHRcXHQgIGFjY291bnQgYW5kIHJ1biBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdXNlcnNwYWNlIGRhZW1vbnNcXG4gMjQyOlxcdFxcdCAgc2ltdWx0YW5lb3VzbHksIGVhY2ggb25lIGhhbmRsaW5nIGEgc2luZ2xlIHRhYmxlLlxcbiAyNDM6XFx0XFxuIDI0NDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU0OjUxLjY4NDIzODQ1N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NjU3NjAxNjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBhbiBleHBlcnQgaW4gdGhpcyBhcmVhOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvcmUgUm91dGluZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBzb21ldGhpbmcgcmVsYXRlZCB0byBtdWx0aWNhc3Qgcm91dGluZywgbGlrZWx5IGEga2VybmVsIG1vZHVsZS4gVGhlIGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBtZW1jZy9TTEFCIGFjY291bnRpbmcsIGp1c3QgYSBzdGFuZGFyZCBjaGVjayB0byBzZWUgaWYgdGhhdCdzIGluZmx1ZW5jaW5nIGFueXRoaW5nLiBUaGF0J3MgdXN1YWxseSB0aGUgZmlyc3Qgc3RlcCwgYnV0IGl0J3MgcHJvYmFibHkgbm90IHRoZSBjb3JlIGlzc3VlLiBOb3csIEknbSB6b25pbmcgaW4gb24gdGhlIGFjdHVhbCBtZWF0IG9mIHRoZSBjb25maWd1cmF0aW9uOiBgSVBfTVJPVVRFYCBhbmQgYElQVjZfTVJPVVRFYC4gVGhvc2UgYXJlICpkZWZpbml0ZWx5KiB0aGUgcmVsZXZhbnQgZmxhZ3MgZm9yIGJ1aWxkaW5nIHRoZSBgaXBtci5jYCwgYGlwbXJfYmFzZS5jYCwgYW5kIGBpcDZtci5jYCBtb2R1bGVzLiBUaGF0IHRlbGxzIG1lIHRoZXNlIGFyZSBjZW50cmFsIHRvIHRoZSBtdWx0aWNhc3Qgcm91dGluZyBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIGdvIHJpZ2h0IHRvIHRoZSBzb3VyY2UgYW5kIGV4YW1pbmUgdGhlIGBuZXQvaXB2NC9NYWtlZmlsZWAgYW5kIGBuZXQvaXB2Ni9NYWtlZmlsZWAgYnVpbGQgZmlsZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aG9zZSBmbGFncyBhcmUgdXNlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgdGhleSBoYXZlLiBGcm9tIHRoZXJlLCBJJ2xsIGJlIGFibGUgdG8gaW5mZXIgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGJlaGF2aW9yLCBvciBhdCBsZWFzdCBoYXZlIGEgZnJhbWV3b3JrIHRvIGludmVzdGlnYXRlIGl0IGZ1cnRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDk0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzo1NDo1Ni4zNDE4NDI2NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAzNzg4NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNm1yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDg5NSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubmV0L2lwdjYvTWFrZWZpbGU9MTU9aXB2Ni0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bF9uZXRfaXB2Ni5vXFxubmV0L2lwdjYvTWFrZWZpbGU6MTY6aXB2Ni0kKENPTkZJR19JUFY2X01ST1VURSkgKz0gaXA2bXIub1xcbm5ldC9pcHY2L01ha2VmaWxlLTE3LVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy01Mi1cXG5uZXQvaXB2Ni9pcDZtci5jOjUzOnN0cnVjdCBpcDZtcl9ydWxlIHtcXG5uZXQvaXB2Ni9pcDZtci5jLTU0LVxcdHN0cnVjdCBmaWJfcnVsZVxcdFxcdGNvbW1vbjtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNTYtXFxubmV0L2lwdjYvaXA2bXIuYzo1NzpzdHJ1Y3QgaXA2bXJfcmVzdWx0IHtcXG5uZXQvaXB2Ni9pcDZtci5jLTU4LVxcdHN0cnVjdCBtcl90YWJsZVxcdCptcnQ7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTg1PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbXJ0X2NhY2hlcCBfX3JlYWRfbW9zdGx5O1xcbm5ldC9pcHY2L2lwNm1yLmMtODYtXFxubmV0L2lwdjYvaXA2bXIuYzo4NzpzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpO1xcbm5ldC9pcHY2L2lwNm1yLmM6ODg6c3RhdGljIHZvaWQgaXA2bXJfZnJlZV90YWJsZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG5uZXQvaXB2Ni9pcDZtci5jLTg5LVxcdFxcdFxcdCAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGV2X2tpbGxfbGlzdCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTkxPXN0YXRpYyB2b2lkIGlwNl9tcl9mb3J3YXJkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG1yX3RhYmxlICptcnQsXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTkzLVxcdFxcdFxcdCAgIHN0cnVjdCBtZmM2X2NhY2hlICpjYWNoZSk7XFxubmV0L2lwdjYvaXA2bXIuYzo5NDpzdGF0aWMgaW50IGlwNm1yX2NhY2hlX3JlcG9ydChjb25zdCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IHNrX2J1ZmYgKnBrdCxcXG5uZXQvaXB2Ni9pcDZtci5jLTk1LVxcdFxcdFxcdCAgICAgIG1pZmlfdCBtaWZpLCBpbnQgYXNzZXJ0KTtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9OTg9c3RhdGljIHZvaWQgbXJ0Nm1zZ19uZXRsaW5rX2V2ZW50KGNvbnN0IHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqcGt0KTtcXG5uZXQvaXB2Ni9pcDZtci5jOjk5OnN0YXRpYyBpbnQgaXA2bXJfcnRtX2dldHJvdXRlKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbm5ldC9pcHY2L2lwNm1yLmMtMTAwLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxubmV0L2lwdjYvaXA2bXIuYzoxMDE6c3RhdGljIGludCBpcDZtcl9ydG1fZHVtcHJvdXRlKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvaXA2bXIuYy0xMDItXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTEwNT1zdGF0aWMgdm9pZCBpcG1yX2V4cGlyZV9wcm9jZXNzKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTA3LSNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEVfTVVMVElQTEVfVEFCTEVTXFxubmV0L2lwdjYvaXA2bXIuYzoxMDg6I2RlZmluZSBpcDZtcl9mb3JfZWFjaF90YWJsZShtcnQsIG5ldCkgXFxcXFxcbm5ldC9pcHY2L2lwNm1yLmMtMTA5LVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG1ydCwgXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5tcjZfdGFibGVzLCBsaXN0LCBcXFxcXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTExMi1cXG5uZXQvaXB2Ni9pcDZtci5jOjExMzpzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9tcl90YWJsZV9pdGVyKHN0cnVjdCBuZXQgKm5ldCxcXG5uZXQvaXB2Ni9pcDZtci5jLTExNC1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IG1yX3RhYmxlICptcnQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTEyOS1cXG5uZXQvaXB2Ni9pcDZtci5jOjEzMDpzdGF0aWMgc3RydWN0IG1yX3RhYmxlICpfX2lwNm1yX2dldF90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZClcXG5uZXQvaXB2Ni9pcDZtci5jLTEzMS17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTEzMy1cXG5uZXQvaXB2Ni9pcDZtci5jOjEzNDpcXHRpcDZtcl9mb3JfZWFjaF90YWJsZShtcnQsIG5ldCkge1xcbm5ldC9pcHY2L2lwNm1yLmMtMTM1LVxcdFxcdGlmIChtcnQtXFx1MDAzZWlkID09IGlkKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xNDAtXFxubmV0L2lwdjYvaXA2bXIuYzoxNDE6c3RhdGljIGludCBpcDZtcl9maWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZsb3dpNiAqZmxwNixcXG5uZXQvaXB2Ni9pcDZtci5jLTE0Mi1cXHRcXHRcXHQgICAgc3RydWN0IG1yX3RhYmxlICoqbXJ0KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xNDQtXFx0aW50IGVycjtcXG5uZXQvaXB2Ni9pcDZtci5jOjE0NTpcXHRzdHJ1Y3QgaXA2bXJfcmVzdWx0IHJlcztcXG5uZXQvaXB2Ni9pcDZtci5jLTE0Ni1cXHRzdHJ1Y3QgZmliX2xvb2t1cF9hcmcgYXJnID0ge1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xNjEtXFxubmV0L2lwdjYvaXA2bXIuYzoxNjI6c3RhdGljIGludCBpcDZtcl9ydWxlX2FjdGlvbihzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsIHN0cnVjdCBmbG93aSAqZmxwLFxcbm5ldC9pcHY2L2lwNm1yLmMtMTYzLVxcdFxcdFxcdCAgICAgaW50IGZsYWdzLCBzdHJ1Y3QgZmliX2xvb2t1cF9hcmcgKmFyZylcXG5uZXQvaXB2Ni9pcDZtci5jLTE2NC17XFxubmV0L2lwdjYvaXA2bXIuYzoxNjU6XFx0c3RydWN0IGlwNm1yX3Jlc3VsdCAqcmVzID0gYXJnLVxcdTAwM2VyZXN1bHQ7XFxubmV0L2lwdjYvaXA2bXIuYy0xNjYtXFx0c3RydWN0IG1yX3RhYmxlICptcnQ7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTE4MS1cXG5uZXQvaXB2Ni9pcDZtci5jOjE4MjpcXHRtcnQgPSBfX2lwNm1yX2dldF90YWJsZShydWxlLVxcdTAwM2Vmcl9uZXQsIGFyZy1cXHUwMDNldGFibGUpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTgzLVxcdGlmICghbXJ0KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xODgtXFxubmV0L2lwdjYvaXA2bXIuYzoxODk6c3RhdGljIGludCBpcDZtcl9ydWxlX21hdGNoKHN0cnVjdCBmaWJfcnVsZSAqcnVsZSwgc3RydWN0IGZsb3dpICpmbHAsIGludCBmbGFncylcXG5uZXQvaXB2Ni9pcDZtci5jLTE5MC17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTE5My1cXG5uZXQvaXB2Ni9pcDZtci5jOjE5NDpzdGF0aWMgaW50IGlwNm1yX3J1bGVfY29uZmlndXJlKHN0cnVjdCBmaWJfcnVsZSAqcnVsZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9pcDZtci5jLTE5NS1cXHRcXHRcXHRcXHRzdHJ1Y3QgZmliX3J1bGVfaGRyICpmcmgsIHN0cnVjdCBubGF0dHIgKip0YixcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMjAwLVxcbm5ldC9pcHY2L2lwNm1yLmM6MjAxOnN0YXRpYyBpbnQgaXA2bXJfcnVsZV9jb21wYXJlKHN0cnVjdCBmaWJfcnVsZSAqcnVsZSwgc3RydWN0IGZpYl9ydWxlX2hkciAqZnJoLFxcbm5ldC9pcHY2L2lwNm1yLmMtMjAyLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBubGF0dHIgKip0YilcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMjA2LVxcbm5ldC9pcHY2L2lwNm1yLmM6MjA3OnN0YXRpYyBpbnQgaXA2bXJfcnVsZV9maWxsKHN0cnVjdCBmaWJfcnVsZSAqcnVsZSwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9pcDZtci5jLTIwOC1cXHRcXHRcXHQgICBzdHJ1Y3QgZmliX3J1bGVfaGRyICpmcmgpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTIxNS1cXG5uZXQvaXB2Ni9pcDZtci5jOjIxNjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9ydWxlc19vcHMgX19uZXRfaW5pdGNvbnN0IGlwNm1yX3J1bGVzX29wc190ZW1wbGF0ZSA9IHtcXG5uZXQvaXB2Ni9pcDZtci5jLTIxNy1cXHQuZmFtaWx5XFx0XFx0PSBSVE5MX0ZBTUlMWV9JUDZNUixcXG5uZXQvaXB2Ni9pcDZtci5jOjIxODpcXHQucnVsZV9zaXplXFx0PSBzaXplb2Yoc3RydWN0IGlwNm1yX3J1bGUpLFxcbm5ldC9pcHY2L2lwNm1yLmMtMjE5LVxcdC5hZGRyX3NpemVcXHQ9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpLFxcbm5ldC9pcHY2L2lwNm1yLmM6MjIwOlxcdC5hY3Rpb25cXHRcXHQ9IGlwNm1yX3J1bGVfYWN0aW9uLFxcbm5ldC9pcHY2L2lwNm1yLmM6MjIxOlxcdC5tYXRjaFxcdFxcdD0gaXA2bXJfcnVsZV9tYXRjaCxcXG5uZXQvaXB2Ni9pcDZtci5jOjIyMjpcXHQuY29uZmlndXJlXFx0PSBpcDZtcl9ydWxlX2NvbmZpZ3VyZSxcXG5uZXQvaXB2Ni9pcDZtci5jOjIyMzpcXHQuY29tcGFyZVxcdD0gaXA2bXJfcnVsZV9jb21wYXJlLFxcbm5ldC9pcHY2L2lwNm1yLmM6MjI0OlxcdC5maWxsXFx0XFx0PSBpcDZtcl9ydWxlX2ZpbGwsXFxubmV0L2lwdjYvaXA2bXIuYy0yMjUtXFx0Lm5sZ3JvdXBcXHQ9IFJUTkxHUlBfSVBWNl9SVUxFLFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0yMjgtXFxubmV0L2lwdjYvaXA2bXIuYzoyMjk6c3RhdGljIGludCBfX25ldF9pbml0IGlwNm1yX3J1bGVzX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9pcHY2L2lwNm1yLmMtMjMwLXtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMjM1LVxcbm5ldC9pcHY2L2lwNm1yLmM6MjM2OlxcdG9wcyA9IGZpYl9ydWxlc19yZWdpc3RlcihcXHUwMDI2aXA2bXJfcnVsZXNfb3BzX3RlbXBsYXRlLCBuZXQpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMjM3LVxcdGlmIChJU19FUlIob3BzKSlcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMjQxLVxcbm5ldC9pcHY2L2lwNm1yLmM6MjQyOlxcdG1ydCA9IGlwNm1yX25ld190YWJsZShuZXQsIFJUNl9UQUJMRV9ERkxUKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTI0My1cXHRpZiAoSVNfRVJSKG1ydCkpIHtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMjU1LWVycjI6XFxubmV0L2lwdjYvaXA2bXIuYzoyNTY6XFx0aXA2bXJfZnJlZV90YWJsZShtcnQsIFxcdTAwMjZkZXZfa2lsbF9saXN0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTI1Ny1lcnIxOlxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0yNjEtXFxubmV0L2lwdjYvaXA2bXIuYzoyNjI6c3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZtcl9ydWxlc19leGl0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvaXB2Ni9pcDZtci5jLTI2My17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTI2Ni1cXG5uZXQvaXB2Ni9pcDZtci5jOjI2NzpzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNm1yX3J1bGVzX2V4aXRfcnRubChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2lwdjYvaXA2bXIuYy0yNjgtXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfa2lsbF9saXN0KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0yNzMtXFx0XFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZtcnQtXFx1MDAzZWxpc3QpO1xcbm5ldC9pcHY2L2lwNm1yLmM6Mjc0OlxcdFxcdGlwNm1yX2ZyZWVfdGFibGUobXJ0LCBkZXZfa2lsbF9saXN0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTI3NS1cXHR9XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTI3Ny1cXG5uZXQvaXB2Ni9pcDZtci5jOjI3ODpzdGF0aWMgaW50IGlwNm1yX3J1bGVzX2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbm5ldC9pcHY2L2lwNm1yLmMtMjc5LVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTI4My1cXG5uZXQvaXB2Ni9pcDZtci5jOjI4NDpzdGF0aWMgdW5zaWduZWQgaW50IGlwNm1yX3J1bGVzX3NlcV9yZWFkKGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvaXB2Ni9pcDZtci5jLTI4NS17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTI4OC1cXG5uZXQvaXB2Ni9pcDZtci5jOjI4OTpib29sIGlwNm1yX3J1bGVfZGVmYXVsdChjb25zdCBzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUpXFxubmV0L2lwdjYvaXA2bXIuYy0yOTAte1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0yOTMtfVxcbm5ldC9pcHY2L2lwNm1yLmM6Mjk0OkVYUE9SVF9TWU1CT0woaXA2bXJfcnVsZV9kZWZhdWx0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTI5NS0jZWxzZVxcbm5ldC9pcHY2L2lwNm1yLmM6Mjk2OnN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwNm1yX21yX3RhYmxlX2l0ZXIoc3RydWN0IG5ldCAqbmV0LFxcbm5ldC9pcHY2L2lwNm1yLmMtMjk3LVxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbXJfdGFibGUgKm1ydClcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMzAzLVxcbm5ldC9pcHY2L2lwNm1yLmM6MzA0OnN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKl9faXA2bXJfZ2V0X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxcbm5ldC9pcHY2L2lwNm1yLmMtMzA1LXtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMzEwLVxcbm5ldC9pcHY2L2lwNm1yLmM6MzExOiNkZWZpbmUgaXA2bXJfZm9yX2VhY2hfdGFibGUobXJ0LCBuZXQpXFx0XFx0XFx0XFx0XFxcXFxcbm5ldC9pcHY2L2lwNm1yLmM6MzEyOlxcdGZvciAobXJ0ID0gX19pcDZtcl9nZXRfdGFibGUobmV0LCAwKTsgbXJ0OyBtcnQgPSBOVUxMKVxcbm5ldC9pcHY2L2lwNm1yLmMtMzEzLVxcbm5ldC9pcHY2L2lwNm1yLmM6MzE0OnN0YXRpYyBpbnQgaXA2bXJfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmbG93aTYgKmZscDYsXFxubmV0L2lwdjYvaXA2bXIuYy0zMTUtXFx0XFx0XFx0ICAgIHN0cnVjdCBtcl90YWJsZSAqKm1ydClcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMzIyLVxcbm5ldC9pcHY2L2lwNm1yLmM6MzIzOnN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcDZtcl9ydWxlc19pbml0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvaXB2Ni9pcDZtci5jLTMyNC17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTMyNi1cXG5uZXQvaXB2Ni9pcDZtci5jOjMyNzpcXHRtcnQgPSBpcDZtcl9uZXdfdGFibGUobmV0LCBSVDZfVEFCTEVfREZMVCk7XFxubmV0L2lwdjYvaXA2bXIuYy0zMjgtXFx0aWYgKElTX0VSUihtcnQpKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0zMzQtXFxubmV0L2lwdjYvaXA2bXIuYzozMzU6c3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZtcl9ydWxlc19leGl0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvaXB2Ni9pcDZtci5jLTMzNi17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTMzOC1cXG5uZXQvaXB2Ni9pcDZtci5jOjMzOTpzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNm1yX3J1bGVzX2V4aXRfcnRubChzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2lwdjYvaXA2bXIuYy0zNDAtXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpkZXZfa2lsbF9saXN0KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0zNDQtXFx0UkNVX0lOSVRfUE9JTlRFUihuZXQtXFx1MDAzZWlwdjYubXJ0NiwgTlVMTCk7XFxubmV0L2lwdjYvaXA2bXIuYzozNDU6XFx0aXA2bXJfZnJlZV90YWJsZShtcnQsIGRldl9raWxsX2xpc3QpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMzQ2LX1cXG5uZXQvaXB2Ni9pcDZtci5jLTM0Ny1cXG5uZXQvaXB2Ni9pcDZtci5jOjM0ODpzdGF0aWMgaW50IGlwNm1yX3J1bGVzX2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbm5ldC9pcHY2L2lwNm1yLmMtMzQ5LVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTM1My1cXG5uZXQvaXB2Ni9pcDZtci5jOjM1NDpzdGF0aWMgdW5zaWduZWQgaW50IGlwNm1yX3J1bGVzX3NlcV9yZWFkKGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvaXB2Ni9pcDZtci5jLTM1NS17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTM1OS1cXG5uZXQvaXB2Ni9pcDZtci5jOjM2MDpzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9nZXRfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXFxubmV0L2lwdjYvaXA2bXIuYy0zNjEte1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0zNjQtXFx0cmN1X3JlYWRfbG9jaygpO1xcbm5ldC9pcHY2L2lwNm1yLmM6MzY1OlxcdG1ydCA9IF9faXA2bXJfZ2V0X3RhYmxlKG5ldCwgaWQpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMzY2LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0zNzAtXFxubmV0L2lwdjYvaXA2bXIuYzozNzE6c3RhdGljIGludCBpcDZtcl9oYXNoX2NtcChzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyAqYXJnLFxcbm5ldC9pcHY2L2lwNm1yLmMtMzcyLVxcdFxcdFxcdCAgY29uc3Qgdm9pZCAqcHRyKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0zODAtXFxubmV0L2lwdjYvaXA2bXIuYzozODE6c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyBpcDZtcl9yaHRfcGFyYW1zID0ge1xcbm5ldC9pcHY2L2lwNm1yLmMtMzgyLVxcdC5oZWFkX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBtcl9tZmMsIG1ub2RlKSxcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMzg1LVxcdC5uZWxlbV9oaW50ID0gMyxcXG5uZXQvaXB2Ni9pcDZtci5jOjM4NjpcXHQub2JqX2NtcGZuID0gaXA2bXJfaGFzaF9jbXAsXFxubmV0L2lwdjYvaXA2bXIuYy0zODctXFx0LmF1dG9tYXRpY19zaHJpbmtpbmcgPSB0cnVlLFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0zODktXFxubmV0L2lwdjYvaXA2bXIuYzozOTA6c3RhdGljIHZvaWQgaXA2bXJfbmV3X3RhYmxlX3NldChzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG5uZXQvaXB2Ni9pcDZtci5jLTM5MS1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTM5Ny1cXG5uZXQvaXB2Ni9pcDZtci5jOjM5ODpzdGF0aWMgc3RydWN0IG1mYzZfY2FjaGVfY21wX2FyZyBpcDZtcl9tcl90YWJsZV9vcHNfY21wYXJnX2FueSA9IHtcXG5uZXQvaXB2Ni9pcDZtci5jLTM5OS1cXHQubWY2Y19vcmlnaW4gPSBJTjZBRERSX0FOWV9JTklULFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy00MDItXFxubmV0L2lwdjYvaXA2bXIuYzo0MDM6c3RhdGljIHN0cnVjdCBtcl90YWJsZV9vcHMgaXA2bXJfbXJfdGFibGVfb3BzID0ge1xcbm5ldC9pcHY2L2lwNm1yLmM6NDA0OlxcdC5yaHRfcGFyYW1zID0gXFx1MDAyNmlwNm1yX3JodF9wYXJhbXMsXFxubmV0L2lwdjYvaXA2bXIuYzo0MDU6XFx0LmNtcGFyZ19hbnkgPSBcXHUwMDI2aXA2bXJfbXJfdGFibGVfb3BzX2NtcGFyZ19hbnksXFxubmV0L2lwdjYvaXA2bXIuYy00MDYtfTtcXG5uZXQvaXB2Ni9pcDZtci5jLTQwNy1cXG5uZXQvaXB2Ni9pcDZtci5jOjQwODpzdGF0aWMgc3RydWN0IG1yX3RhYmxlICppcDZtcl9uZXdfdGFibGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQpXFxubmV0L2lwdjYvaXA2bXIuYy00MDkte1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy00MTEtXFxubmV0L2lwdjYvaXA2bXIuYzo0MTI6XFx0bXJ0ID0gX19pcDZtcl9nZXRfdGFibGUobmV0LCBpZCk7XFxubmV0L2lwdjYvaXA2bXIuYy00MTMtXFx0aWYgKG1ydClcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNDE1LVxcbm5ldC9pcHY2L2lwNm1yLmM6NDE2OlxcdHJldHVybiBtcl90YWJsZV9hbGxvYyhuZXQsIGlkLCBcXHUwMDI2aXA2bXJfbXJfdGFibGVfb3BzLFxcbm5ldC9pcHY2L2lwNm1yLmM6NDE3OlxcdFxcdFxcdCAgICAgIGlwbXJfZXhwaXJlX3Byb2Nlc3MsIGlwNm1yX25ld190YWJsZV9zZXQpO1xcbm5ldC9pcHY2L2lwNm1yLmMtNDE4LX1cXG5uZXQvaXB2Ni9pcDZtci5jLTQxOS1cXG5uZXQvaXB2Ni9pcDZtci5jOjQyMDpzdGF0aWMgdm9pZCBpcDZtcl9mcmVlX3RhYmxlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY2L2lwNm1yLmMtNDIxLVxcdFxcdFxcdCAgICAgc3RydWN0IGxpc3RfaGVhZCAqZGV2X2tpbGxfbGlzdClcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNDIzLVxcdHN0cnVjdCBuZXQgKm5ldCA9IHJlYWRfcG5ldChcXHUwMDI2bXJ0LVxcdTAwM2VuZXQpO1xcbm5ldC9pcHY2L2lwNm1yLmM6NDI0OlxcdExJU1RfSEVBRChpcDZtcl9kZXZfa2lsbF9saXN0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTQyNS1cXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNDMwLVxcdFxcdFxcdCAgICBNUlQ2X0ZMVVNIX01GQyB8IE1SVDZfRkxVU0hfTUZDX1NUQVRJQyxcXG5uZXQvaXB2Ni9pcDZtci5jOjQzMTpcXHRcXHRcXHQgICAgXFx1MDAyNmlwNm1yX2Rldl9raWxsX2xpc3QpO1xcbm5ldC9pcHY2L2lwNm1yLmMtNDMyLVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy00MzQtXFxubmV0L2lwdjYvaXA2bXIuYzo0MzU6XFx0V0FSTl9PTl9PTkNFKCFuZXRfaW5pdGlhbGl6ZWQobmV0KSBcXHUwMDI2XFx1MDAyNiAhbGlzdF9lbXB0eShcXHUwMDI2aXA2bXJfZGV2X2tpbGxfbGlzdCkpO1xcbm5ldC9pcHY2L2lwNm1yLmM6NDM2OlxcdGxpc3Rfc3BsaWNlKFxcdTAwMjZpcDZtcl9kZXZfa2lsbF9saXN0LCBkZXZfa2lsbF9saXN0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTQzNy19XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTQ0My1cXG5uZXQvaXB2Ni9pcDZtci5jOjQ0NDpzdGF0aWMgdm9pZCAqaXA2bXJfdmlmX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxubmV0L2lwdjYvaXA2bXIuYy00NDUtXFx0X19hY3F1aXJlcyhSQ1UpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTQ1MS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxubmV0L2lwdjYvaXA2bXIuYzo0NTI6XFx0bXJ0ID0gX19pcDZtcl9nZXRfdGFibGUobmV0LCBSVDZfVEFCTEVfREZMVCk7XFxubmV0L2lwdjYvaXA2bXIuYy00NTMtXFx0aWYgKCFtcnQpIHtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNDYyLVxcbm5ldC9pcHY2L2lwNm1yLmM6NDYzOnN0YXRpYyB2b2lkIGlwNm1yX3ZpZl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdilcXG5uZXQvaXB2Ni9pcDZtci5jLTQ2NC1cXHRfX3JlbGVhc2VzKFJDVSlcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNDY4LVxcbm5ldC9pcHY2L2lwNm1yLmM6NDY5OnN0YXRpYyBpbnQgaXA2bXJfdmlmX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbm5ldC9pcHY2L2lwNm1yLmMtNDcwLXtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNDk0LVxcbm5ldC9pcHY2L2lwNm1yLmM6NDk1OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgaXA2bXJfdmlmX3NlcV9vcHMgPSB7XFxubmV0L2lwdjYvaXA2bXIuYzo0OTY6XFx0LnN0YXJ0ID0gaXA2bXJfdmlmX3NlcV9zdGFydCxcXG5uZXQvaXB2Ni9pcDZtci5jLTQ5Ny1cXHQubmV4dCAgPSBtcl92aWZfc2VxX25leHQsXFxubmV0L2lwdjYvaXA2bXIuYzo0OTg6XFx0LnN0b3AgID0gaXA2bXJfdmlmX3NlcV9zdG9wLFxcbm5ldC9pcHY2L2lwNm1yLmM6NDk5OlxcdC5zaG93ICA9IGlwNm1yX3ZpZl9zZXFfc2hvdyxcXG5uZXQvaXB2Ni9pcDZtci5jLTUwMC19O1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz01MDI9c3RhdGljIHZvaWQgKmlwbXJfbWZjX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTUwNi1cXG5uZXQvaXB2Ni9pcDZtci5jOjUwNzpcXHRtcnQgPSBpcDZtcl9nZXRfdGFibGUobmV0LCBSVDZfVEFCTEVfREZMVCk7XFxubmV0L2lwdjYvaXA2bXIuYy01MDgtXFx0aWYgKCFtcnQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTU2Nj1zdGF0aWMgaW50IHBpbTZfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTU5OS1cXG5uZXQvaXB2Ni9pcDZtci5jOjYwMDpcXHRpZiAoaXA2bXJfZmliX2xvb2t1cChuZXQsIFxcdTAwMjZmbDYsIFxcdTAwMjZtcnQpIFxcdTAwM2MgMClcXG5uZXQvaXB2Ni9pcDZtci5jLTYwMS1cXHRcXHRnb3RvIGRyb3A7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTYzMz1zdGF0aWMgbmV0ZGV2X3R4X3QgcmVnX3ZpZl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTY0OC1cXG5uZXQvaXB2Ni9pcDZtci5jOjY0OTpcXHRpZiAoaXA2bXJfZmliX2xvb2t1cChuZXQsIFxcdTAwMjZmbDYsIFxcdTAwMjZtcnQpIFxcdTAwM2MgMClcXG5uZXQvaXB2Ni9pcDZtci5jLTY1MC1cXHRcXHRnb3RvIHR4X2xvb2t1cF9lcnI7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTY1NC1cXG5uZXQvaXB2Ni9pcDZtci5jOjY1NTpcXHRpcDZtcl9jYWNoZV9yZXBvcnQobXJ0LCBza2IsIFJFQURfT05DRShtcnQtXFx1MDAzZW1yb3V0ZV9yZWdfdmlmX251bSksXFxubmV0L2lwdjYvaXA2bXIuYy02NTYtXFx0XFx0XFx0ICAgTVJUNk1TR19XSE9MRVBLVCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTY3OT1zdGF0aWMgdm9pZCByZWdfdmlmX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTY4OC1cXG5uZXQvaXB2Ni9pcDZtci5jOjY4OTpzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmlwNm1yX3JlZ192aWYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydClcXG5uZXQvaXB2Ni9pcDZtci5jLTY5MC17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTcyMS1cXG5uZXQvaXB2Ni9pcDZtci5jOjcyMjpzdGF0aWMgaW50IGNhbGxfaXA2bXJfdmlmX2VudHJ5X25vdGlmaWVycyhzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2lwdjYvaXA2bXIuYy03MjMtXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGZpYl9ldmVudF90eXBlIGV2ZW50X3R5cGUsXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTczMi1cXG5uZXQvaXB2Ni9pcDZtci5jOjczMzpzdGF0aWMgaW50IGNhbGxfaXA2bXJfbWZjX2VudHJ5X25vdGlmaWVycyhzdHJ1Y3QgbmV0ICpuZXQsXFxubmV0L2lwdjYvaXA2bXIuYy03MzQtXFx0XFx0XFx0XFx0XFx0ICBlbnVtIGZpYl9ldmVudF90eXBlIGV2ZW50X3R5cGUsXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTc0Mj1zdGF0aWMgaW50IG1pZjZfZGVsZXRlKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBpbnQgdmlmaSwgaW50IG5vdGlmeSxcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNzU3LVxcbm5ldC9pcHY2L2lwNm1yLmM6NzU4OlxcdGNhbGxfaXA2bXJfdmlmX2VudHJ5X25vdGlmaWVycyhyZWFkX3BuZXQoXFx1MDAyNm1ydC1cXHUwMDNlbmV0KSxcXG5uZXQvaXB2Ni9pcDZtci5jLTc1OS1cXHRcXHRcXHRcXHQgICAgICAgRklCX0VWRU5UX1ZJRl9ERUwsIHYsIGRldixcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtNzY1LVxcdGlmICh2aWZpID09IG1ydC1cXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtKSB7XFxubmV0L2lwdjYvaXA2bXIuYzo3NjY6XFx0XFx0LyogUGFpcnMgd2l0aCBSRUFEX09OQ0UoKSBpbiBpcDZtcl9jYWNoZV9yZXBvcnQoKSBhbmQgcmVnX3ZpZl94bWl0KCkgKi9cXG5uZXQvaXB2Ni9pcDZtci5jLTc2Ny1cXHRcXHRXUklURV9PTkNFKG1ydC1cXHUwMDNlbXJvdXRlX3JlZ192aWZfbnVtLCAtMSk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTc5OC1cXG5uZXQvaXB2Ni9pcDZtci5jOjc5OTpzdGF0aWMgaW5saW5lIHZvaWQgaXA2bXJfY2FjaGVfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbm5ldC9pcHY2L2lwNm1yLmMtODAwLXtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtODA1LVxcbm5ldC9pcHY2L2lwNm1yLmM6ODA2OnN0YXRpYyBpbmxpbmUgdm9pZCBpcDZtcl9jYWNoZV9mcmVlKHN0cnVjdCBtZmM2X2NhY2hlICpjKVxcbm5ldC9pcHY2L2lwNm1yLmMtODA3LXtcXG5uZXQvaXB2Ni9pcDZtci5jOjgwODpcXHRjYWxsX3JjdShcXHUwMDI2Yy1cXHUwMDNlX2MucmN1LCBpcDZtcl9jYWNoZV9mcmVlX3JjdSk7XFxubmV0L2lwdjYvaXA2bXIuYy04MDktfVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy04MTQtXFxubmV0L2lwdjYvaXA2bXIuYzo4MTU6c3RhdGljIHZvaWQgaXA2bXJfZGVzdHJveV91bnJlcyhzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IG1mYzZfY2FjaGUgKmMpXFxubmV0L2lwdjYvaXA2bXIuYy04MTYte1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy04MzUtXFxubmV0L2lwdjYvaXA2bXIuYzo4MzY6XFx0aXA2bXJfY2FjaGVfZnJlZShjKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTgzNy19XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTg0Mj1zdGF0aWMgdm9pZCBpcG1yX2RvX2V4cGlyZV9wcm9jZXNzKHN0cnVjdCBtcl90YWJsZSAqbXJ0KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy04NTgtXFx0XFx0bXI2X25ldGxpbmtfZXZlbnQobXJ0LCAoc3RydWN0IG1mYzZfY2FjaGUgKiljLCBSVE1fREVMUk9VVEUpO1xcbm5ldC9pcHY2L2lwNm1yLmM6ODU5OlxcdFxcdGlwNm1yX2Rlc3Ryb3lfdW5yZXMobXJ0LCAoc3RydWN0IG1mYzZfY2FjaGUgKiljKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTg2MC1cXHR9XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTg2Nj1zdGF0aWMgdm9pZCBpcG1yX2V4cGlyZV9wcm9jZXNzKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy04ODItXFxubmV0L2lwdjYvaXA2bXIuYzo4ODM6c3RhdGljIHZvaWQgaXA2bXJfdXBkYXRlX3RocmVzaG9sZHMoc3RydWN0IG1yX3RhYmxlICptcnQsXFxubmV0L2lwdjYvaXA2bXIuYy04ODQtXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBtcl9tZmMgKmNhY2hlLFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz05MDY9c3RhdGljIGludCBtaWY2X2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy05MjctXFx0XFx0XFx0cmV0dXJuIC1FQUREUklOVVNFO1xcbm5ldC9pcHY2L2lwNm1yLmM6OTI4OlxcdFxcdGRldiA9IGlwNm1yX3JlZ192aWYobmV0LCBtcnQpO1xcbm5ldC9pcHY2L2lwNm1yLmMtOTI5LVxcdFxcdGlmICghZGV2KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy05NzYtXFx0c3Bpbl91bmxvY2soXFx1MDAyNm1ydF9sb2NrKTtcXG5uZXQvaXB2Ni9pcDZtci5jOjk3NzpcXHRjYWxsX2lwNm1yX3ZpZl9lbnRyeV9ub3RpZmllcnMobmV0LCBGSUJfRVZFTlRfVklGX0FERCxcXG5uZXQvaXB2Ni9pcDZtci5jLTk3OC1cXHRcXHRcXHRcXHQgICAgICAgdiwgZGV2LCB2aWZpLCBtcnQtXFx1MDAzZWlkKTtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtOTgxLVxcbm5ldC9pcHY2L2lwNm1yLmM6OTgyOnN0YXRpYyBzdHJ1Y3QgbWZjNl9jYWNoZSAqaXA2bXJfY2FjaGVfZmluZChzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG5uZXQvaXB2Ni9pcDZtci5jLTk4My1cXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKm9yaWdpbixcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtOTk0LS8qIExvb2sgZm9yIGEgKCosRykgZW50cnkgKi9cXG5uZXQvaXB2Ni9pcDZtci5jOjk5NTpzdGF0aWMgc3RydWN0IG1mYzZfY2FjaGUgKmlwNm1yX2NhY2hlX2ZpbmRfYW55KHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY2L2lwNm1yLmMtOTk2LVxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKm1jYXN0Z3JwLFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz0xMDEwPXN0YXRpYyBzdHJ1Y3QgbWZjNl9jYWNoZSAqXFxubmV0L2lwdjYvaXA2bXIuYzoxMDExOmlwNm1yX2NhY2hlX2ZpbmRfcGFyZW50KHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY2L2lwNm1yLmMtMTAxMi1cXHRcXHRcXHRjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKm9yaWdpbixcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTAyNC0vKiBBbGxvY2F0ZSBhIG11bHRpY2FzdCBjYWNoZSBlbnRyeSAqL1xcbm5ldC9pcHY2L2lwNm1yLmM6MTAyNTpzdGF0aWMgc3RydWN0IG1mYzZfY2FjaGUgKmlwNm1yX2NhY2hlX2FsbG9jKHZvaWQpXFxubmV0L2lwdjYvaXA2bXIuYy0xMDI2LXtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTAzMS1cXHRjLVxcdTAwM2VfYy5tZmNfdW4ucmVzLm1pbnZpZiA9IE1BWE1JRlM7XFxubmV0L2lwdjYvaXA2bXIuYzoxMDMyOlxcdGMtXFx1MDAzZV9jLmZyZWUgPSBpcDZtcl9jYWNoZV9mcmVlX3JjdTtcXG5uZXQvaXB2Ni9pcDZtci5jLTEwMzMtXFx0cmVmY291bnRfc2V0KFxcdTAwMjZjLVxcdTAwM2VfYy5tZmNfdW4ucmVzLnJlZmNvdW50LCAxKTtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTAzNi1cXG5uZXQvaXB2Ni9pcDZtci5jOjEwMzc6c3RhdGljIHN0cnVjdCBtZmM2X2NhY2hlICppcDZtcl9jYWNoZV9hbGxvY191bnJlcyh2b2lkKVxcbm5ldC9pcHY2L2lwNm1yLmMtMTAzOC17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTEwNTAtXFxubmV0L2lwdjYvaXA2bXIuYzoxMDUxOnN0YXRpYyB2b2lkIGlwNm1yX2NhY2hlX3Jlc29sdmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG5uZXQvaXB2Ni9pcDZtci5jLTEwNTItXFx0XFx0XFx0XFx0c3RydWN0IG1mYzZfY2FjaGUgKnVjLCBzdHJ1Y3QgbWZjNl9jYWNoZSAqYylcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTA4OC1cXG5uZXQvaXB2Ni9pcDZtci5jOjEwODk6c3RhdGljIGludCBpcDZtcl9jYWNoZV9yZXBvcnQoY29uc3Qgc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBza19idWZmICpwa3QsXFxubmV0L2lwdjYvaXA2bXIuYy0xMDkwLVxcdFxcdFxcdCAgICAgIG1pZmlfdCBtaWZpLCBpbnQgYXNzZXJ0KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xMTgyLS8qIFF1ZXVlIGEgcGFja2V0IGZvciByZXNvbHV0aW9uLiBJdCBnZXRzIGxvY2tlZCBjYWNoZSBlbnRyeSEgKi9cXG5uZXQvaXB2Ni9pcDZtci5jOjExODM6c3RhdGljIGludCBpcDZtcl9jYWNoZV91bnJlc29sdmVkKHN0cnVjdCBtcl90YWJsZSAqbXJ0LCBtaWZpX3QgbWlmaSxcXG5uZXQvaXB2Ni9pcDZtci5jLTExODQtXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xMjEwLVxcbm5ldC9pcHY2L2lwNm1yLmM6MTIxMTpcXHRcXHRjID0gaXA2bXJfY2FjaGVfYWxsb2NfdW5yZXMoKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTEyMTItXFx0XFx0aWYgKCFjKSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTEyMjQtXFx0XFx0ICovXFxubmV0L2lwdjYvaXA2bXIuYzoxMjI1OlxcdFxcdGVyciA9IGlwNm1yX2NhY2hlX3JlcG9ydChtcnQsIHNrYiwgbWlmaSwgTVJUNk1TR19OT0NBQ0hFKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTEyMjYtXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTEyNTctXFx0aWYgKGMpXFxubmV0L2lwdjYvaXA2bXIuYzoxMjU4OlxcdFxcdGlwNm1yX2NhY2hlX2ZyZWUoYyk7XFxubmV0L2lwdjYvaXA2bXIuYy0xMjU5LVxcdGtmcmVlX3NrYihza2IpO1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xMjY2LVxcbm5ldC9pcHY2L2lwNm1yLmM6MTI2NzpzdGF0aWMgaW50IGlwNm1yX21mY19kZWxldGUoc3RydWN0IG1yX3RhYmxlICptcnQsIHN0cnVjdCBtZjZjY3RsICptZmMsXFxubmV0L2lwdjYvaXA2bXIuYy0xMjY4LVxcdFxcdFxcdCAgICBpbnQgcGFyZW50KVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xMjcyLVxcdHJjdV9yZWFkX2xvY2soKTtcXG5uZXQvaXB2Ni9pcDZtci5jOjEyNzM6XFx0YyA9IGlwNm1yX2NhY2hlX2ZpbmRfcGFyZW50KG1ydCwgXFx1MDAyNm1mYy1cXHUwMDNlbWY2Y2Nfb3JpZ2luLnNpbjZfYWRkcixcXG5uZXQvaXB2Ni9pcDZtci5jLTEyNzQtXFx0XFx0XFx0XFx0ICAgIFxcdTAwMjZtZmMtXFx1MDAzZW1mNmNjX21jYXN0Z3JwLnNpbjZfYWRkciwgcGFyZW50KTtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTI3Ny1cXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG5uZXQvaXB2Ni9pcDZtci5jOjEyNzg6XFx0cmhsdGFibGVfcmVtb3ZlKFxcdTAwMjZtcnQtXFx1MDAzZW1mY19oYXNoLCBcXHUwMDI2Yy1cXHUwMDNlX2MubW5vZGUsIGlwNm1yX3JodF9wYXJhbXMpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTI3OS1cXHRsaXN0X2RlbF9yY3UoXFx1MDAyNmMtXFx1MDAzZV9jLmxpc3QpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTI4MC1cXG5uZXQvaXB2Ni9pcDZtci5jOjEyODE6XFx0Y2FsbF9pcDZtcl9tZmNfZW50cnlfbm90aWZpZXJzKHJlYWRfcG5ldChcXHUwMDI2bXJ0LVxcdTAwM2VuZXQpLFxcbm5ldC9pcHY2L2lwNm1yLmMtMTI4Mi1cXHRcXHRcXHRcXHQgICAgICAgRklCX0VWRU5UX0VOVFJZX0RFTCwgYywgbXJ0LVxcdTAwM2VpZCk7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTEyODctXFxubmV0L2lwdjYvaXA2bXIuYzoxMjg4OnN0YXRpYyBpbnQgaXA2bXJfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcyxcXG5uZXQvaXB2Ni9pcDZtci5jLTEyODktXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xMjk5LVxcbm5ldC9pcHY2L2lwNm1yLmM6MTMwMDpcXHRpcDZtcl9mb3JfZWFjaF90YWJsZShtcnQsIG5ldCkge1xcbm5ldC9pcHY2L2lwNm1yLmMtMTMwMS1cXHRcXHR2ID0gXFx1MDAyNm1ydC1cXHUwMDNldmlmX3RhYmxlWzBdO1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xMzEwLVxcbm5ldC9pcHY2L2lwNm1yLmM6MTMxMTpzdGF0aWMgdW5zaWduZWQgaW50IGlwNm1yX3NlcV9yZWFkKGNvbnN0IHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvaXB2Ni9pcDZtci5jLTEzMTIte1xcbm5ldC9pcHY2L2lwNm1yLmM6MTMxMzpcXHRyZXR1cm4gYXRvbWljX3JlYWQoXFx1MDAyNm5ldC1cXHUwMDNlaXB2Ni5pcG1yX3NlcSkgKyBpcDZtcl9ydWxlc19zZXFfcmVhZChuZXQpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTMxNC19XFxubmV0L2lwdjYvaXA2bXIuYy0xMzE1LVxcbm5ldC9pcHY2L2lwNm1yLmM6MTMxNjpzdGF0aWMgaW50IGlwNm1yX2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLFxcbm5ldC9pcHY2L2lwNm1yLmMtMTMxNy1cXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxubmV0L2lwdjYvaXA2bXIuYy0xMzE4LXtcXG5uZXQvaXB2Ni9pcDZtci5jOjEzMTk6XFx0cmV0dXJuIG1yX2R1bXAobmV0LCBuYiwgUlROTF9GQU1JTFlfSVA2TVIsIGlwNm1yX3J1bGVzX2R1bXAsXFxubmV0L2lwdjYvaXA2bXIuYzoxMzIwOlxcdFxcdCAgICAgICBpcDZtcl9tcl90YWJsZV9pdGVyLCBleHRhY2spO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTMyMS19XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTEzMjM9c3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBpcDZfbXJfbm90aWZpZXIgPSB7XFxubmV0L2lwdjYvaXA2bXIuYzoxMzI0OlxcdC5ub3RpZmllcl9jYWxsID0gaXA2bXJfZGV2aWNlX2V2ZW50XFxubmV0L2lwdjYvaXA2bXIuYy0xMzI1LX07XFxubmV0L2lwdjYvaXA2bXIuYy0xMzI2LVxcbm5ldC9pcHY2L2lwNm1yLmM6MTMyNzpzdGF0aWMgY29uc3Qgc3RydWN0IGZpYl9ub3RpZmllcl9vcHMgaXA2bXJfbm90aWZpZXJfb3BzX3RlbXBsYXRlID0ge1xcbm5ldC9pcHY2L2lwNm1yLmMtMTMyOC1cXHQuZmFtaWx5XFx0XFx0PSBSVE5MX0ZBTUlMWV9JUDZNUixcXG5uZXQvaXB2Ni9pcDZtci5jOjEzMjk6XFx0LmZpYl9zZXFfcmVhZFxcdD0gaXA2bXJfc2VxX3JlYWQsXFxubmV0L2lwdjYvaXA2bXIuYzoxMzMwOlxcdC5maWJfZHVtcFxcdD0gaXA2bXJfZHVtcCxcXG5uZXQvaXB2Ni9pcDZtci5jLTEzMzEtXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTMzMy1cXG5uZXQvaXB2Ni9pcDZtci5jOjEzMzQ6c3RhdGljIGludCBfX25ldF9pbml0IGlwNm1yX25vdGlmaWVyX2luaXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9pcHY2L2lwNm1yLmMtMTMzNS17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTEzMzktXFxubmV0L2lwdjYvaXA2bXIuYzoxMzQwOlxcdG9wcyA9IGZpYl9ub3RpZmllcl9vcHNfcmVnaXN0ZXIoXFx1MDAyNmlwNm1yX25vdGlmaWVyX29wc190ZW1wbGF0ZSwgbmV0KTtcXG5uZXQvaXB2Ni9pcDZtci5jLTEzNDEtXFx0aWYgKElTX0VSUihvcHMpKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xMzQzLVxcbm5ldC9pcHY2L2lwNm1yLmM6MTM0NDpcXHRuZXQtXFx1MDAzZWlwdjYuaXA2bXJfbm90aWZpZXJfb3BzID0gb3BzO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTM0NS1cXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTM0OC1cXG5uZXQvaXB2Ni9pcDZtci5jOjEzNDk6c3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZtcl9ub3RpZmllcl9leGl0KHN0cnVjdCBuZXQgKm5ldClcXG5uZXQvaXB2Ni9pcDZtci5jLTEzNTAte1xcbm5ldC9pcHY2L2lwNm1yLmM6MTM1MTpcXHRmaWJfbm90aWZpZXJfb3BzX3VucmVnaXN0ZXIobmV0LVxcdTAwM2VpcHY2LmlwNm1yX25vdGlmaWVyX29wcyk7XFxubmV0L2lwdjYvaXA2bXIuYzoxMzUyOlxcdG5ldC1cXHUwMDNlaXB2Ni5pcDZtcl9ub3RpZmllcl9vcHMgPSBOVUxMO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTM1My19XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTEzNTUtLyogU2V0dXAgZm9yIElQIG11bHRpY2FzdCByb3V0aW5nICovXFxubmV0L2lwdjYvaXA2bXIuYzoxMzU2OnN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcDZtcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpXFxubmV0L2lwdjYvaXA2bXIuYy0xMzU3LXtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTM2NC1cXG5uZXQvaXB2Ni9pcDZtci5jOjEzNjU6XFx0ZXJyID0gaXA2bXJfbm90aWZpZXJfaW5pdChuZXQpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTM2Ni1cXHRpZiAoZXJyKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xMzY4LVxcbm5ldC9pcHY2L2lwNm1yLmM6MTM2OTpcXHRlcnIgPSBpcDZtcl9ydWxlc19pbml0KG5ldCk7XFxubmV0L2lwdjYvaXA2bXIuYy0xMzcwLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbm5ldC9pcHY2L2lwNm1yLmM6MTM3MTpcXHRcXHRnb3RvIGlwNm1yX3J1bGVzX2ZhaWw7XFxubmV0L2lwdjYvaXA2bXIuYy0xMzcyLVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xMzc0LVxcdGVyciA9IC1FTk9NRU07XFxubmV0L2lwdjYvaXA2bXIuYzoxMzc1OlxcdGlmICghcHJvY19jcmVhdGVfbmV0KFxcXCJpcDZfbXJfdmlmXFxcIiwgMCwgbmV0LVxcdTAwM2Vwcm9jX25ldCwgXFx1MDAyNmlwNm1yX3ZpZl9zZXFfb3BzLFxcbm5ldC9pcHY2L2lwNm1yLmMtMTM3Ni1cXHRcXHRcXHRzaXplb2Yoc3RydWN0IG1yX3ZpZl9pdGVyKSkpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTEzODgtcHJvY192aWZfZmFpbDpcXG5uZXQvaXB2Ni9pcDZtci5jOjEzODk6XFx0aXA2bXJfcnVsZXNfZXhpdF9ydG5sKG5ldCwgXFx1MDAyNmRldl9raWxsX2xpc3QpO1xcbm5ldC9pcHY2L2lwNm1yLmM6MTM5MDpcXHRpcDZtcl9ydWxlc19leGl0KG5ldCk7XFxubmV0L2lwdjYvaXA2bXIuYy0xMzkxLSNlbmRpZlxcbm5ldC9pcHY2L2lwNm1yLmM6MTM5MjppcDZtcl9ydWxlc19mYWlsOlxcbm5ldC9pcHY2L2lwNm1yLmM6MTM5MzpcXHRpcDZtcl9ub3RpZmllcl9leGl0KG5ldCk7XFxubmV0L2lwdjYvaXA2bXIuYy0xMzk0LVxcdHJldHVybiBlcnI7XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTEzOTYtXFxubmV0L2lwdjYvaXA2bXIuYzoxMzk3OnN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2bXJfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9pcHY2L2lwNm1yLmMtMTM5OC17XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTE0MDItI2VuZGlmXFxubmV0L2lwdjYvaXA2bXIuYzoxNDAzOlxcdGlwNm1yX3J1bGVzX2V4aXQobmV0KTtcXG5uZXQvaXB2Ni9pcDZtci5jOjE0MDQ6XFx0aXA2bXJfbm90aWZpZXJfZXhpdChuZXQpO1xcbm5ldC9pcHY2L2lwNm1yLmMtMTQwNS19XFxubmV0L2lwdjYvaXA2bXIuYy0xNDA2LVxcbm5ldC9pcHY2L2lwNm1yLmM6MTQwNzpzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNm1yX25ldF9leGl0X3J0bmwoc3RydWN0IG5ldCAqbmV0LFxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzo1NDo1Ni42NDU2NDYzNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNDQ3NjkyNDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBpbiBSb3V0aW5nIFRhYmxlcyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwYXR0ZXJucyBhc3NvY2lhdGVkIHdpdGggcm91dGluZyB0YWJsZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBob3cgdGhleSB1dGlsaXplIGBtcnRfY2FjaGVwYCBvciBjYWxsIGBtcl90YWJsZV9hbGxvY2AuIE15IGdvYWwgaXMgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoZXJlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCwgd2hhdCB0aGUgY29udGV4dCBpcywgYW5kIHBvdGVudGlhbGx5IGlkZW50aWZ5IG9wcG9ydHVuaXRpZXMgZm9yIG9wdGltaXphdGlvbiBvciBwb3RlbnRpYWwgaXNzdWVzLlxuXG5UbyBzdGFydCwgSSdsbCB1c2UgYSBgZ3JlcGAgdG8gcXVpY2tseSBzY2FuIHRoZSByZWxldmFudCBjb2RlYmFzZXMuIEknbGwgZm9jdXMgb24gYG5ldC9pcHY0YCBhbmQgYG5ldC9pcHY2YCBkaXJlY3RvcmllcywgYXMgdGhvc2UgYXJlIHRoZSBjb3JlIGFyZWFzIHdoZXJlIHJvdXRpbmcgYW5kIGZvcndhcmRpbmcgYXJlIGltcGxlbWVudGVkLiBUaGlzIHRhcmdldGVkIHNlYXJjaCBmb3IgYG1ydF9jYWNoZXBgIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiBpdHMgdXNhZ2UgYWNyb3NzIGRpZmZlcmVudCBJUHY0IGFuZCBJUHY2IHJvdXRpbmcgb3BlcmF0aW9ucywgYW5kIGhvcGVmdWxseSBsZWFkIG1lIHRvIGNhbGxzIHRvIHRoZSBgbXJfdGFibGVfYWxsb2NgIGZ1bmN0aW9uLiBJIGFudGljaXBhdGUgZmluZGluZyBzZXZlcmFsIGtleSBmdW5jdGlvbnMgb3IgZGF0YSBzdHJ1Y3R1cmVzIHdoaWNoIHVzZSB0aGVzZSBhbGxvY2F0aW9uIG1ldGhvZHMsIGFuZCB0aGF0IHdpbGwgYmUgbXkganVtcGluZyBvZmYgcG9pbnQgZm9yIG1vcmUgZGV0YWlsZWQgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzA5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6NTU6MDAuMDkzMzQxMTYxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njg3NjI5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtcnRfY2FjaGVwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBtci5jPTkyPXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWZjX3VucmVzX2xvY2spO1xcbi0tXFxubmV0L2lwdjQvaXBtci5jLTEwMS1cXG5uZXQvaXB2NC9pcG1yLmM6MTAyOnN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbXJ0X2NhY2hlcCBfX3JvX2FmdGVyX2luaXQ7XFxubmV0L2lwdjQvaXBtci5jLTEwMy1cXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz03NDM9c3RhdGljIHZvaWQgaXBtcl9jYWNoZV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtNzQ2LVxcbm5ldC9pcHY0L2lwbXIuYzo3NDc6XFx0a21lbV9jYWNoZV9mcmVlKG1ydF9jYWNoZXAsIChzdHJ1Y3QgbWZjX2NhY2hlICopYyk7XFxubmV0L2lwdjQvaXBtci5jLTc0OC19XFxuLS1cXG5uZXQvaXB2NC9pcG1yLmM9OTk0PXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jKHZvaWQpXFxubmV0L2lwdjQvaXBtci5jLTk5NS17XFxubmV0L2lwdjQvaXBtci5jOjk5NjpcXHRzdHJ1Y3QgbWZjX2NhY2hlICpjID0ga21lbV9jYWNoZV96YWxsb2MobXJ0X2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxubmV0L2lwdjQvaXBtci5jLTk5Ny1cXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz0xMDA3PXN0YXRpYyBzdHJ1Y3QgbWZjX2NhY2hlICppcG1yX2NhY2hlX2FsbG9jX3VucmVzKHZvaWQpXFxubmV0L2lwdjQvaXBtci5jLTEwMDgte1xcbm5ldC9pcHY0L2lwbXIuYzoxMDA5OlxcdHN0cnVjdCBtZmNfY2FjaGUgKmMgPSBrbWVtX2NhY2hlX3phbGxvYyhtcnRfY2FjaGVwLCBHRlBfQVRPTUlDKTtcXG5uZXQvaXB2NC9pcG1yLmMtMTAxMC1cXG4tLVxcbm5ldC9pcHY0L2lwbXIuYz0zMzc1PWludCBfX2luaXQgaXBfbXJfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTMzNzgtXFxubmV0L2lwdjQvaXBtci5jOjMzNzk6XFx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLFxcbm5ldC9pcHY0L2lwbXIuYy0zMzgwLVxcdFxcdFxcdFxcdFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpO1xcbi0tXFxubmV0L2lwdjQvaXBtci5jLTM0MDYtcmVnX3Blcm5ldF9mYWlsOlxcbm5ldC9pcHY0L2lwbXIuYzozNDA3OlxcdGttZW1fY2FjaGVfZGVzdHJveShtcnRfY2FjaGVwKTtcXG5uZXQvaXB2NC9pcG1yLmMtMzQwOC1cXHRyZXR1cm4gZXJyO1xcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz03NT1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1mY191bnJlc19sb2NrKTtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtODQtXFxubmV0L2lwdjYvaXA2bXIuYzo4NTpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1ydF9jYWNoZXAgX19yZWFkX21vc3RseTtcXG5uZXQvaXB2Ni9pcDZtci5jLTg2LVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz03OTk9c3RhdGljIGlubGluZSB2b2lkIGlwNm1yX2NhY2hlX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtODAyLVxcbm5ldC9pcHY2L2lwNm1yLmM6ODAzOlxcdGttZW1fY2FjaGVfZnJlZShtcnRfY2FjaGVwLCAoc3RydWN0IG1mYzZfY2FjaGUgKiljKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTgwNC19XFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTEwMjU9c3RhdGljIHN0cnVjdCBtZmM2X2NhY2hlICppcDZtcl9jYWNoZV9hbGxvYyh2b2lkKVxcbm5ldC9pcHY2L2lwNm1yLmMtMTAyNi17XFxubmV0L2lwdjYvaXA2bXIuYzoxMDI3OlxcdHN0cnVjdCBtZmM2X2NhY2hlICpjID0ga21lbV9jYWNoZV96YWxsb2MobXJ0X2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxubmV0L2lwdjYvaXA2bXIuYy0xMDI4LVxcdGlmICghYylcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9MTAzNz1zdGF0aWMgc3RydWN0IG1mYzZfY2FjaGUgKmlwNm1yX2NhY2hlX2FsbG9jX3VucmVzKHZvaWQpXFxubmV0L2lwdjYvaXA2bXIuYy0xMDM4LXtcXG5uZXQvaXB2Ni9pcDZtci5jOjEwMzk6XFx0c3RydWN0IG1mYzZfY2FjaGUgKmMgPSBrbWVtX2NhY2hlX3phbGxvYyhtcnRfY2FjaGVwLCBHRlBfQVRPTUlDKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTEwNDAtXFx0aWYgKCFjKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz0xNDI2PWludCBfX2luaXQgaXA2X21yX2luaXQodm9pZClcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTQyOS1cXG5uZXQvaXB2Ni9pcDZtci5jOjE0MzA6XFx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOIHwgU0xBQl9BQ0NPVU5UKTtcXG5uZXQvaXB2Ni9pcDZtci5jOjE0MzE6XFx0aWYgKCFtcnRfY2FjaGVwKVxcbm5ldC9pcHY2L2lwNm1yLmMtMTQzMi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmMtMTQ1OS1yZWdfcGVybmV0X2ZhaWw6XFxubmV0L2lwdjYvaXA2bXIuYzoxNDYwOlxcdGttZW1fY2FjaGVfZGVzdHJveShtcnRfY2FjaGVwKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTE0NjEtXFx0cmV0dXJuIGVycjtcXG4tLVxcbm5ldC9pcHY2L2lwNm1yLmM9MTQ2ND12b2lkIF9faW5pdCBpcDZfbXJfY2xlYW51cCh2b2lkKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xNDcxLVxcdHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcXHUwMDI2aXA2bXJfbmV0X29wcyk7XFxubmV0L2lwdjYvaXA2bXIuYzoxNDcyOlxcdGttZW1fY2FjaGVfZGVzdHJveShtcnRfY2FjaGVwKTtcXG5uZXQvaXB2Ni9pcDZtci5jLTE0NzMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzo1NTowMC4xNjAyMjI1NjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIwNTAzMDgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBtcl90YWJsZV9hbGxvY2AgQ2FsbGVycyoqXG5cbk9rYXksIHNvIHdlJ3JlIGRpdmluZyBpbnRvIHRoaXMgYG1yX3RhYmxlX2FsbG9jYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHVzYWdlIHdpdGhpbiB0aGUgY29kZWJhc2UuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHVzZSBgZ3JlcGAuIEkgd2FudCB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgcGxhY2VzIHdoZXJlIGBtcl90YWJsZV9hbGxvY2AgaXMgY2FsbGVkLiBJdCdzIHRoZSBtb3N0IGRpcmVjdCBhbmQgZWZmaWNpZW50IHdheSB0byBnZXQgYSBiaXJkJ3MtZXllIHZpZXcgb2YgaG93IHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gVGhpcyBzaG91bGQgcXVpY2tseSBnaXZlIG1lIGEgbGlzdCBvZiBhbGwgcG90ZW50aWFsIGNhbGwgc2l0ZXMsIHdoaWNoIEkgY2FuIHRoZW4gYW5hbHl6ZSBpbiBtb3JlIGRldGFpbC4gTGV0J3Mgc2VlIHdoYXQgdGhhdCB1bmNvdmVycy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzQyMiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU1OjA0LjM2NTI1NTM5MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc2NzMwMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXJfdGFibGVfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcG1yLmM9NDI2PXN0YXRpYyBzdHJ1Y3QgbXJfdGFibGUgKmlwbXJfbmV3X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTQzNy1cXG5uZXQvaXB2NC9pcG1yLmM6NDM4OlxcdHJldHVybiBtcl90YWJsZV9hbGxvYyhuZXQsIGlkLCBcXHUwMDI2aXBtcl9tcl90YWJsZV9vcHMsXFxubmV0L2lwdjQvaXBtci5jLTQzOS1cXHRcXHRcXHQgICAgICBpcG1yX2V4cGlyZV9wcm9jZXNzLCBpcG1yX25ld190YWJsZV9zZXQpO1xcbi0tXFxubmV0L2lwdjQvaXBtcl9iYXNlLmM9NDU9c3RydWN0IG1yX3RhYmxlICpcXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYzo0Njptcl90YWJsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCxcXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYy00Ny1cXHQgICAgICAgc3RydWN0IG1yX3RhYmxlX29wcyAqb3BzLFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz00MDg9c3RhdGljIHN0cnVjdCBtcl90YWJsZSAqaXA2bXJfbmV3X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy00MTUtXFxubmV0L2lwdjYvaXA2bXIuYzo0MTY6XFx0cmV0dXJuIG1yX3RhYmxlX2FsbG9jKG5ldCwgaWQsIFxcdTAwMjZpcDZtcl9tcl90YWJsZV9vcHMsXFxubmV0L2lwdjYvaXA2bXIuYy00MTctXFx0XFx0XFx0ICAgICAgaXBtcl9leHBpcmVfcHJvY2VzcywgaXA2bXJfbmV3X3RhYmxlX3NldCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU1OjA0LjQzMjkzNjI5NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjI5NTYwMjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNdWx0aWNhc3QgUm91dGluZyBUYWJsZSBhbmQgQ2FjaGUgQWxsb2NhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiB0aGlzIG11bHRpY2FzdCByb3V0aW5nIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlIGBtcl90YWJsZWAgYW5kIGBtZmNfY2FjaGVgL2BtZmM2X2NhY2hlYCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBoYW5kbGVkLCBzbyBJJ2xsIHN0YXJ0IGJ5IGxpc3RpbmcgdGhlIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQuIFdlJ3JlIGxvb2tpbmcgYXQgdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIGFsbG9jYXRpb24vdXNhZ2UgcGF0dGVybnM6XG5cbiogICBgaXBtcl9uZXdfdGFibGVgIGFuZCBgaXA2bXJfbmV3X3RhYmxlYCBhcmUgdGhlIHRhYmxlIGluaXRpYWxpemVyczsgSSdsbCB3YW50IHRvIGNoZWNrIGhvdyB0aGV5IHNldCB0aGluZ3MgdXAuXG4qICAgYG1yX3RhYmxlX2FsbG9jYCBsaWtlbHkgaGFuZGxlcyB0aGUgdW5kZXJseWluZyBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgdGhlIHJvdXRpbmcgdGFibGUgaXRzZWxmLlxuKiAgIFRoZW4gd2UgaGF2ZSBgaXBtcl9tZmNfYWRkYCBhbmQgYGlwNm1yX21mY19hZGRgIGZvciBhZGRpbmcgbXVsdGljYXN0IGZvcndhcmRpbmcgY2FjaGUgKE1GQykgZW50cmllcyAtIHRoZXNlIGFyZSBjcml0aWNhbC5cbiogICBGb3IgdGhlIGNhY2hlIGFsbG9jYXRpb24sIHdlJ3ZlIGdvdCBgaXBtcl9jYWNoZV9hbGxvY2AsIGBpcG1yX2NhY2hlX2FsbG9jX3VucmVzYCwgYGlwNm1yX2NhY2hlX2FsbG9jYCwgYW5kIGBpcDZtcl9jYWNoZV9hbGxvY191bnJlc2AuIFRoZXNlIGRlc2VydmUgYSBjbG9zZXIgbG9vaywgZXNwZWNpYWxseSB0aGUgXCJ1bnJlc1wiIHZhcmlhbnRzLlxuKiAgIEZpbmFsbHksIHRoZSBzZXRzb2Nrb3B0IGNhbGxzLCBgaXBfbXJvdXRlX3NldHNvY2tvcHRgIGFuZCBgaXA2X21yb3V0ZV9zZXRzb2Nrb3B0YCwgbmVlZCB0byBiZSBjaGVja2VkOyB0aGV5J3JlIHRoZSB1c2VyLWxldmVsIGludGVyZmFjZS5cblxuUmlnaHQsIHdpdGggdGhhdCBsaXN0IGluIG1pbmQsIEkgbmVlZCB0byBtYWtlIGEgcXVpY2sgdmVyaWZpY2F0aW9uIG9mIHRoZSBhY3R1YWwgZnVuY3Rpb24gbmFtZXMgZm9yIGBpcG1yX21mY19hZGRgIGFuZCBgaXA2bXJfbWZjX2FkZGAuIEkgaGF2ZSBhIGZlZWxpbmcgdGhlcmUgbWlnaHQgYmUgYSBzdWJ0bGUgbnVhbmNlIGluIHRoZWlyIG5hbWluZyBvciBpbXBsZW1lbnRhdGlvbiB0aGF0IHdpbGwgZ2l2ZSBtZSBhIGNsdWUgb2YgdGhlaXIgcm9sZS4gTGV0J3MgbWFrZSBzdXJlIHRoZXkgYXJlIGV4YWN0bHkgd2hhdCBJIGV4cGVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5NjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6NTU6MDcuNjYyNDk5NDAxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODExNDIyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcC4qbXIuKm1mY19hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcG1yLmM9MTIyMT1zdGF0aWMgaW50IGlwbXJfbWZjX2RlbGV0ZShzdHJ1Y3QgbXJfdGFibGUgKm1ydCwgc3RydWN0IG1mY2N0bCAqbWZjLCBpbnQgcGFyZW50KVxcbi0tXFxubmV0L2lwdjQvaXBtci5jLTEyNDAtXFxubmV0L2lwdjQvaXBtci5jOjEyNDE6c3RhdGljIGludCBpcG1yX21mY19hZGQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXJfdGFibGUgKm1ydCxcXG5uZXQvaXB2NC9pcG1yLmMtMTI0Mi1cXHRcXHRcXHRzdHJ1Y3QgbWZjY3RsICptZmMsIGludCBtcnRzb2NrLCBpbnQgcGFyZW50KVxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTE0MTA9aW50IGlwX21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICpzaywgaW50IG9wdG5hbWUsIHNvY2twdHJfdCBvcHR2YWwsXFxuLS1cXG5uZXQvaXB2NC9pcG1yLmMtMTUyMS1cXHRcXHRlbHNlXFxubmV0L2lwdjQvaXBtci5jOjE1MjI6XFx0XFx0XFx0cmV0ID0gaXBtcl9tZmNfYWRkKG5ldCwgbXJ0LCBcXHUwMDI2bWZjLFxcbm5ldC9pcHY0L2lwbXIuYy0xNTIzLVxcdFxcdFxcdFxcdFxcdCAgIHNrID09IHJ0bmxfZGVyZWZlcmVuY2UobXJ0LVxcdTAwM2Vtcm91dGVfc2spLFxcbi0tXFxubmV0L2lwdjQvaXBtci5jPTI5NDM9c3RhdGljIGludCBpcG1yX3J0bV9yb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCxcXG4tLVxcbm5ldC9pcHY0L2lwbXIuYy0yOTU5LVxcdGlmIChubGgtXFx1MDAzZW5sbXNnX3R5cGUgPT0gUlRNX05FV1JPVVRFKVxcbm5ldC9pcHY0L2lwbXIuYzoyOTYwOlxcdFxcdHJldCA9IGlwbXJfbWZjX2FkZChuZXQsIHRibCwgXFx1MDAyNm1mY2MsIG1ydHNvY2ssIHBhcmVudCk7XFxubmV0L2lwdjQvaXBtci5jLTI5NjEtXFx0ZWxzZVxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYz0xNDY0PXZvaWQgX19pbml0IGlwNl9tcl9jbGVhbnVwKHZvaWQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jLTE0NzQtXFxubmV0L2lwdjYvaXA2bXIuYzoxNDc1OnN0YXRpYyBpbnQgaXA2bXJfbWZjX2FkZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtcl90YWJsZSAqbXJ0LFxcbm5ldC9pcHY2L2lwNm1yLmMtMTQ3Ni1cXHRcXHRcXHQgc3RydWN0IG1mNmNjdGwgKm1mYywgaW50IG1ydHNvY2ssIGludCBwYXJlbnQpXFxuLS1cXG5uZXQvaXB2Ni9pcDZtci5jPTE3MTI9aW50IGlwNl9tcm91dGVfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHRuYW1lLCBzb2NrcHRyX3Qgb3B0dmFsLFxcbi0tXFxubmV0L2lwdjYvaXA2bXIuYy0xNzkwLVxcdFxcdGVsc2VcXG5uZXQvaXB2Ni9pcDZtci5jOjE3OTE6XFx0XFx0XFx0cmV0ID0gaXA2bXJfbWZjX2FkZChuZXQsIG1ydCwgXFx1MDAyNm1mYyxcXG5uZXQvaXB2Ni9pcDZtci5jLTE3OTItXFx0XFx0XFx0XFx0XFx0ICAgIHNrID09XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU1OjA3LjczMDYxODc1NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NjAxNzkwMDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgdG91Y2hlZCBieSB0aGlzIHBhdGNoLiBJIHNlZSB0aGF0IGBpcF9tcl9pbml0YCwgYG1yX3RhYmxlX2FsbG9jYCwgYW5kIGBpcDZfbXJfaW5pdGAgYXJlIGRpcmVjdGx5IG1vZGlmaWVkLCBhbmQgYG1yX3RhYmxlX2FsbG9jYCBhbG9uZyB3aXRoIHNldmVyYWwgY2FjaGUgYWxsb2NhdGlvbiBmdW5jdGlvbnMgKGBpcG1yX2NhY2hlX2FsbG9jYCwgYGlwbXJfY2FjaGVfYWxsb2NfdW5yZXNgLCBgaXA2bXJfY2FjaGVfYWxsb2NgLCBgaXA2bXJfY2FjaGVfYWxsb2NfdW5yZXNgKSBhbmQgbWZjIG9wZXJhdGlvbnMgKGBpcG1yX21mY19hZGRgLCBgaXA2bXJfbWZjX2FkZGApIGFyZSB1c2VycyBvZiB0aGUgYWZmZWN0ZWQgb2JqZWN0cy4gQWRkaXRpb25hbGx5LCB0aGUgc2V0c29ja29wdCBjYWxscywgYGlwX21yb3V0ZV9zZXRzb2Nrb3B0YCBhbmQgYGlwNl9tcm91dGVfc2V0c29ja29wdGAsIGFyZSByZWxldmFudCBiZWNhdXNlIHRoZXkgcHJvdmlkZSB1c2Vyc3BhY2UgYWNjZXNzIHRvIHRoaXMgZnVuY3Rpb25hbGl0eS5cblxuTmV4dCwgSSBuZWVkIHRvIGRldGVybWluZSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBJUF9NUk9VVEVgLCBgSVBWNl9NUk9VVEVgLCBhbmQgYE1FTUNHYCAoZm9yIFNMQUJfQUNDT1VOVCBhY2NvdW50aW5nKSBhcmUgbmVjZXNzYXJ5LiBJJ3ZlIGFsc28gZG91YmxlLWNoZWNrZWQgdGhlIGRlcGVuZGVuY2llczogYElQX01ST1VURWAgZGVwZW5kcyBvbiBgSVBfTVVMVElDQVNUYCBhbmQgc2VsZWN0cyBgSVBfTVJPVVRFX0NPTU1PTmAsIGFuZCBgSVBWNl9NUk9VVEVgIGRlcGVuZHMgb24gYElQVjZgIGFuZCBhbHNvIHNlbGVjdHMgYElQX01ST1VURV9DT01NT05gLlxuXG5Ob3csIHRoZSBjcnVjaWFsIHN0ZXA6IGlkZW50aWZ5aW5nIHRoZSBgRm9jdXNTeW1ib2xzYC4gQmFzZWQgb24gdGhlIGd1aWRlbGluZXMsIEkgbmVlZCB0byBhdm9pZCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBhbmQgdGFyZ2V0IHNwZWNpZmljIGxvZ2ljIG9yIGVudHJ5IHBvaW50cy4gQWZ0ZXIgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLCBJJ3ZlIGRlY2lkZWQgdG8gaW5jbHVkZSBgbXJfdGFibGVfYWxsb2NgLCBgaXBtcl9tZmNfYWRkYCwgYGlwNm1yX21mY19hZGRgLCBgaXBfbXJvdXRlX3NldHNvY2tvcHRgLCBhbmQgYGlwNl9tcm91dGVfc2V0c29ja29wdGAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGFuZCBhbGxvY2F0aW9uIHBvaW50cyByZWxhdGVkIHRvIHRoZSBtdWx0aWNhc3Qgcm91dGluZyBmdW5jdGlvbmFsaXR5LlxuXG5SZWFzb25pbmc6IFRoaXMgcGF0Y2ggaXMgZW5hYmxpbmcgbWVtY2cgc2xhYiBhY2NvdW50aW5nIGZvciBJUHY0L0lQdjYgbXVsdGljYXN0IHJvdXRpbmcgdGFibGVzIChgbXJfdGFibGVgKSBhbmQgbXVsdGljYXN0IGZvcndhcmRpbmcgY2FjaGUgZW50cmllcyAoYG1mY19jYWNoZWAgYW5kIGBtZmM2X2NhY2hlYCkuIFRoaXMgaXMgc2lnbmlmaWNhbnQgYmVjYXVzZSB0aGVzZSBhbGxvY2F0aW9ucyBhcmUgdHJpZ2dlcmVkIGFuZCBtYW5hZ2VkIGJ5IHVzZXJzcGFjZSB0aHJvdWdoIHNldHNvY2tvcHQgY29tbWFuZHMgbGlrZSBgTVJUX0FERF9NRkNgICh3aGljaCwgb2YgY291cnNlLCByZWxpZXMgb24gdGhlIGluY2x1ZGVkIGVudHJ5cG9pbnRzKSBhbmQgcG90ZW50aWFsbHkgbmV0bGluayByb3V0ZSBjb25maWd1cmF0aW9uLiBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgZnV6emluZyB0YXJnZXRzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB3aXRoaW4gY29yZSBuZXR3b3JraW5nIGNvZGUsIGFuZCB0aGUgU0xBQl9BQ0NPVU5UIG1vZGlmaWNhdGlvbnMganVzdGlmeSBmdXp6aW5nIHVuZGVyIGNvbnN0cmFpbmVkIG1lbW9yeSBlbnZpcm9ubWVudHMgKGkuZS4gdW5kZXIgbWVtb3J5LWNvbnN0cmFpbmVkIGNncm91cHMpLlxuXG5GaW5hbGx5LCBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBgdHJ1ZWAuIFRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGBbXCJJUF9NUk9VVEVcIiwgXCJJUFY2X01ST1VURVwiLCBcIk1FTUNHXCJdYCwgYW5kIHRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgYFtcIm1yX3RhYmxlX2FsbG9jXCIsIFwiaXBfbXJvdXRlX3NldHNvY2tvcHRcIiwgXCJpcDZfbXJvdXRlX3NldHNvY2tvcHRcIiwgXCJpcG1yX21mY19hZGRcIiwgXCJpcDZtcl9tZmNfYWRkXCJdYC4gRXZlcnl0aGluZyBpcyBsb29raW5nIGNvcnJlY3Qgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTIzMiwiT3V0cHV0VG9rZW5zIjoxNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6NTU6MTcuMzMyNDEwOTQ0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODIzMTM2MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX01ST1VURVwiLFxuICAgIFwiSVBWNl9NUk9VVEVcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXJfdGFibGVfYWxsb2NcIixcbiAgICBcImlwX21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcDZfbXJvdXRlX3NldHNvY2tvcHRcIixcbiAgICBcImlwbXJfbWZjX2FkZFwiLFxuICAgIFwiaXA2bXJfbWZjX2FkZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgU0xBQl9BQ0NPVU5UIGFuZCBHRlBfS0VSTkVMX0FDQ09VTlQgZmxhZ3MgdG8gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZSBhbmQgZm9yd2FyZGluZyBjYWNoZSBhbGxvY2F0aW9ucyAobWZjX2NhY2hlLCBtZmM2X2NhY2hlLCBtcl90YWJsZSkuIFRoaXMgYWZmZWN0cyByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGNvZGUgcmVhY2hhYmxlIHZpYSBzZXRzb2Nrb3B0IGFuZCBuZXRsaW5rIG11bHRpY2FzdCByb3V0aW5nIGludGVyZmFjZXMsIHdhcnJhbnRpbmcgZnV6emluZyB1bmRlciBtZW1vcnktYWNjb3VudGluZyBjb25maWd1cmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9NUk9VVEVcIixcbiAgICBcIklQVjZfTVJPVVRFXCIsXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1yX3RhYmxlX2FsbG9jXCIsXG4gICAgXCJpcF9tcm91dGVfc2V0c29ja29wdFwiLFxuICAgIFwiaXA2X21yb3V0ZV9zZXRzb2Nrb3B0XCIsXG4gICAgXCJpcG1yX21mY19hZGRcIixcbiAgICBcImlwNm1yX21mY19hZGRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UIGZsYWdzIHRvIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IHJvdXRpbmcgdGFibGUgYW5kIGZvcndhcmRpbmcgY2FjaGUgYWxsb2NhdGlvbnMgKG1mY19jYWNoZSwgbWZjNl9jYWNoZSwgbXJfdGFibGUpLiBUaGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBjb2RlIHJlYWNoYWJsZSB2aWEgc2V0c29ja29wdCBhbmQgbmV0bGluayBtdWx0aWNhc3Qgcm91dGluZyBpbnRlcmZhY2VzLCB3YXJyYW50aW5nIGZ1enppbmcgdW5kZXIgbWVtb3J5LWFjY291bnRpbmcgY29uZmlndXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU1OjE3LjQxNDczMjMzMloiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYwNzMyNTYxMTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxMzo1NToxNy40MTUyNzU1MTNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyNjA3MjcwOTAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBhZGRzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBmbGFncyAoU0xBQl9BQ0NPVU5UIGFuZCBHRlBfS0VSTkVMX0FDQ09VTlQpIHRvIHRoZSBJUHY0L0lQdjYgbXVsdGljYXN0IHJvdXRpbmcgdGFibGUgYWxsb2NhdGlvbnMgYW5kIHNsYWIgY2FjaGUgY3JlYXRpb24gKG1ydF9jYWNoZXApLiBUaGUgYWxsb2NhdGlvbiBpbiBtcl90YWJsZV9hbGxvYyBzdGlsbCB1c2VzIGt6YWxsb2Nfb2JqIHdoaWNoIGVuc3VyZXMgemVyby1pbml0aWFsaXphdGlvbiBvZiBtZW1vcnksIGFuZCBTTEFCX0FDQ09VTlQgc29sZWx5IGVuYWJsZXMgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIG9uIGNhY2hlIGFsbG9jYXRpb25zLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaGFuZGxpbmcsIHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlci1zcGFjZSwgb3IgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVlZGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJiYWE4ZDA1NjJmZDk2MjhhODIxNjRlZjk0MzgxY2YwZWYzNWMyNGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDEzOjU0OjIzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jXG5pbmRleCBlNWYyYjFjNjE1MGQyLi5iOWM1NDRkNDhjNDUyIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtci5jXG4rKysgYi9uZXQvaXB2NC9pcG1yLmNcbkBAIC0zMzc2LDcgKzMzNzYsOCBAQCBpbnQgX19pbml0IGlwX21yX2luaXQodm9pZClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjX2NhY2hlLCBTTEFCX0hXQ0FDSEVfQUxJR04gfCBTTEFCX1BBTklDKTtcbitcdG1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mY19jYWNoZSxcbitcdFx0XHRcdFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfUEFOSUMgfCBTTEFCX0FDQ09VTlQpO1xuIFxuIFx0ZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZpcG1yX25ldF9vcHMpO1xuIFx0aWYgKGVycilcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yX2Jhc2UuYyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXG5pbmRleCA4NjdiMjRiZWRlZDExLi5hMGVjNmQxOWEyMzdmIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBtcl9iYXNlLmNcbisrKyBiL25ldC9pcHY0L2lwbXJfYmFzZS5jXG5AQCAtNTIsNyArNTIsNyBAQCBtcl90YWJsZV9hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBpZCxcbiBcdHN0cnVjdCBtcl90YWJsZSAqbXJ0O1xuIFx0aW50IGVycjtcbiBcbi1cdG1ydCA9IGt6YWxsb2Nfb2JqKCptcnQpO1xuK1x0bXJ0ID0ga3phbGxvY19vYmooKm1ydCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiBcdGlmICghbXJ0KVxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcdG1ydC1cdTAwM2VpZCA9IGlkO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jXG5pbmRleCAzZjJlZDliNzdkZWI1Li45ZDgxMTZiNWVkYjE3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2bXIuY1xuKysrIGIvbmV0L2lwdjYvaXA2bXIuY1xuQEAgLTE0MjcsNyArMTQyNyw3IEBAIGludCBfX2luaXQgaXA2X21yX2luaXQodm9pZClcbiB7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bXJ0X2NhY2hlcCA9IEtNRU1fQ0FDSEUobWZjNl9jYWNoZSwgU0xBQl9IV0NBQ0hFX0FMSUdOKTtcbitcdG1ydF9jYWNoZXAgPSBLTUVNX0NBQ0hFKG1mYzZfY2FjaGUsIFNMQUJfSFdDQUNIRV9BTElHTiB8IFNMQUJfQUNDT1VOVCk7XG4gXHRpZiAoIW1ydF9jYWNoZXApXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6NTU6MTcuNDE1Mjc5MDYzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNTg3NTQxNzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEFjY291bnRpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIHBhdGNoIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIGFyZSBzdHJhaWdodGZvcndhcmQgbWVtY2cgYWNjb3VudGluZyBhZGRpdGlvbnMuIEl0IGxvb2tzIGxpa2Ugd2UncmUgYWRkaW5nIGBTTEFCX0FDQ09VTlRgIHRvIHRoZSBzbGFiIGNhY2hlcyAoYG1ydF9jYWNoZXBgKSB1c2VkIGJ5IGJvdGggSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3Qgcm91dGluZyBjb21wb25lbnRzIChgbmV0L2lwdjQvaXBtci5jYCBhbmQgYG5ldC9pcHY2L2lwNm1yLmNgKS4gV2UncmUgYWxzbyBzZWVpbmcgdGhlIGBHRlBfS0VSTkVMX0FDQ09VTlRgIGZsYWcgYmVpbmcgYWRkZWQgdG8gYGt6YWxsb2Nfb2JqYCBjYWxscywgc3BlY2lmaWNhbGx5IHdpdGhpbiBgbXJfdGFibGVfYWxsb2NgIGluIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2AuIENsYXNzaWMgbW92ZSB0byB0cmFjayBtZW1vcnkgdXNhZ2Ugd2l0aGluIG1lbW9yeSBjb250cm9sIGdyb3Vwcywgbm90aGluZyB0b28gZXhjaXRpbmcgc28gZmFyLlxuXG5Ob3csIGxldCdzIG1ha2Ugc3VyZSB3ZSBhcmVuJ3QgaW50cm9kdWNpbmcgYW55IHN1YnRsZSBpc3N1ZXMuIFRoYW5rZnVsbHksIGBremFsbG9jYCBpcyBzdGlsbCB1c2VkLCBzbyB6ZXJvIGluaXRpYWxpemF0aW9uIGlzIGhhbmRsZWQuIFdlJ3JlIG9ubHkgZGVhbGluZyB3aXRoIGFjY291bnRpbmcgZmxhZ3MgaGVyZSwgc28gdGhlcmUgc2hvdWxkbid0IGJlIGFueSBuZXcgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBUaGUgYFNMQUJfQUNDT1VOVGAgZmxhZyBpbiB0aGUgYG1ydF9jYWNoZXBgIGFsbG9jYXRpb25zIGlzIGp1c3QgZm9yIGFjY291bnRpbmcg4oCTIGl0IGRvZXNuJ3QgbWVzcyB3aXRoIHRoZSBhbGxvY2F0aW9uIGl0c2VsZi4gSXQgbG9va3MgbGlrZSBubyBuZXcgYWxsb2NhdGlvbiBsb2dpYywgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tzLCBvciBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MgYXJlIGJlaW5nIGludHJvZHVjZWQgYXMgYSByZXN1bHQgb2YgdGhlc2UgY2hhbmdlcy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBjaGVjayB0aGUgc291cmNlIGZvciBga3phbGxvY19vYmpgIGluIGBuZXQvaXB2NC9pcG1yX2Jhc2UuY2Agb3IgdXNlIGEgcXVpY2sgZ3JlcHBlciwganVzdCB0byBjb25maXJtIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBhY2N1cmF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUxNiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU1OjM5LjAwMjgyNTEwNloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNDU3MzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwbXJfYmFzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwbXJfYmFzZS5jPTQ2PW1yX3RhYmxlX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkLFxcbi0tXFxubmV0L2lwdjQvaXBtcl9iYXNlLmMtNTQtXFxubmV0L2lwdjQvaXBtcl9iYXNlLmM6NTU6XFx0bXJ0ID0ga3phbGxvY19vYmooKm1ydCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5uZXQvaXB2NC9pcG1yX2Jhc2UuYy01Ni1cXHRpZiAoIW1ydClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTM6NTU6MzkuMTg0Mjg2MTNaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDMwMzY3NzUwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBNdWx0aWNhc3QgUm91dGluZyBUYWJsZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gSXQncyBwcmV0dHkgY2xlYXItY3V0LiBUaGV5J3ZlIG1hZGUgc29tZSBjaGFuZ2VzIGludm9sdmluZyBtZW1vcnkgYWNjb3VudGluZywgYnV0IHRoZSBjb3JlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2Nlc3MgaGFzbid0IGNoYW5nZWQgaW4gYW55IHdheSB0aGF0IHdvdWxkIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIFRoZXkncmUgdXNpbmcgYGt6YWxsb2Nfb2JqYCB0byBhbGxvY2F0ZSBhbmQgemVybyB0aGUgbWVtb3J5IGZvciB0aGUgYG1ydGAgb2JqZWN0cywgYW5kIHRoZXkndmUgYWRkZWQgYFNMQUJfQUNDT1VOVGAgdG8gdGhlIGttZW1fY2FjaGUgY3JlYXRpb24gaW4gYGlwbXIuY2AgYW5kIGBpcDZtci5jYC4gVGhhdCdzIGl0LlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiB3YXMgd2hldGhlciB0aGlzIGNoYW5nZSBleHBvc2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0IGBremFsbG9jX29iamAgKnN0aWxsKiB6ZXJvZXMgdGhlIG1lbW9yeTsgdGhlIGFkZGl0aW9uIG9mIGBTTEFCX0FDQ09VTlRgIGlzICpvbmx5KiBhYm91dCBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgZm9yIHRob3NlIHNsYWIgYWxsb2NhdGlvbnMuIEkgY2FuIHNlZSBubyBwYXRoIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGV2ZW4gYnJhbmNoZWQgb24uIFRoZXJlJ3Mgbm90aGluZyBoZXJlIHRoYXQgbG9va3Mgcmlza3kgZnJvbSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBwZXJzcGVjdGl2ZS5cblxuVGhlcmVmb3JlLCB0aGlzIGRvZXNuJ3Qgd2FycmFudCBmdXJ0aGVyIGludmVzdGlnYXRpb24gd2l0aCBLTVNBTi4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCwgb3IgY29waWVkIHRvIHVzZXJzcGFjZS5cblxuSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCBvbiB0aGlzLiBJJ20gY29uZmlkZW50IHRoZXJlIGFyZSBubyBLTVNBTiBjb25jZXJucy4gVGhlIHBhdGNoIGlzIHNpbXBseSBhZGRpbmcgYWNjb3VudGluZyBmbGFncywgYW5kIHRoZSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gcmVtYWlucyBpbnRhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzNTEsIk91dHB1dFRva2VucyI6MTQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDEzOjU1OjQzLjQ4Nzk2NjlaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgYWRkcyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgZmxhZ3MgKFNMQUJfQUNDT1VOVCBhbmQgR0ZQX0tFUk5FTF9BQ0NPVU5UKSB0byB0aGUgSVB2NC9JUHY2IG11bHRpY2FzdCByb3V0aW5nIHRhYmxlIGFsbG9jYXRpb25zIGFuZCBzbGFiIGNhY2hlIGNyZWF0aW9uIChtcnRfY2FjaGVwKS4gVGhlIGFsbG9jYXRpb24gaW4gbXJfdGFibGVfYWxsb2Mgc3RpbGwgdXNlcyBremFsbG9jX29iaiB3aGljaCBlbnN1cmVzIHplcm8taW5pdGlhbGl6YXRpb24gb2YgbWVtb3J5LCBhbmQgU0xBQl9BQ0NPVU5UIHNvbGVseSBlbmFibGVzIG1lbW9yeSBjZ3JvdXAgYWNjb3VudGluZyBvbiBjYWNoZSBhbGxvY2F0aW9ucy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhbmRsaW5nLCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXItc3BhY2UsIG9yIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lZWRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IGFkZHMgbWVtb3J5IGNncm91cCBhY2NvdW50aW5nIGZsYWdzIChTTEFCX0FDQ09VTlQgYW5kIEdGUF9LRVJORUxfQUNDT1VOVCkgdG8gdGhlIElQdjQvSVB2NiBtdWx0aWNhc3Qgcm91dGluZyB0YWJsZSBhbGxvY2F0aW9ucyBhbmQgc2xhYiBjYWNoZSBjcmVhdGlvbiAobXJ0X2NhY2hlcCkuIFRoZSBhbGxvY2F0aW9uIGluIG1yX3RhYmxlX2FsbG9jIHN0aWxsIHVzZXMga3phbGxvY19vYmogd2hpY2ggZW5zdXJlcyB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIG1lbW9yeSwgYW5kIFNMQUJfQUNDT1VOVCBzb2xlbHkgZW5hYmxlcyBtZW1vcnkgY2dyb3VwIGFjY291bnRpbmcgb24gY2FjaGUgYWxsb2NhdGlvbnMuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBoYW5kbGluZywgc3RydWN0dXJlIGNvcGllcyB0byB1c2VyLXNwYWNlLCBvciBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWVkZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvldk[1] Phase: Succeeded StartedAt: 2026-09-08 13:55:55 +0000 UTC FinishedAt: 2026-09-08 13:55:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 13:55:55 +0000 UTC FinishedAt: 2026-09-08 13:55:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[2] Phase: Succeeded StartedAt: 2026-09-08 13:55:55 +0000 UTC FinishedAt: 2026-09-08 17:34:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 13:55:55 +0000 UTC FinishedAt: 2026-09-08 17:34:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 13:55:55 +0000 UTC FinishedAt: 2026-09-08 13:56:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 13:55:55 +0000 UTC FinishedAt: 2026-09-08 13:56:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowzvldk/series-workflowzvldk-convert-artifact-2800107142/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 13:56:05 +0000 UTC FinishedAt: 2026-09-08 14:12:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 13:56:05 +0000 UTC FinishedAt: 2026-09-08 14:12:32 +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:*0384fd70-031b-4d10-a35b-8a247ad063ef,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-workflowzvldk/series-workflowzvldk-convert-artifact-2800107142/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": "d7f1d8fc-c542-460b-bf7b-a61f697e9c3e", "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-workflowzvldk/series-workflowzvldk-build-action-3878126108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 13:56:05 +0000 UTC FinishedAt: 2026-09-08 14:12:22 +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:*0384fd70-031b-4d10-a35b-8a247ad063ef,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-workflowzvldk/series-workflowzvldk-convert-artifact-2800107142/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": "d7f1d8fc-c542-460b-bf7b-a61f697e9c3e", "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-workflowzvldk/series-workflowzvldk-build-action-3878126108/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 14:12:32 +0000 UTC FinishedAt: 2026-09-08 14:12:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 14:12:32 +0000 UTC FinishedAt: 2026-09-08 14:12:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 14:12:32 +0000 UTC FinishedAt: 2026-09-08 14:12:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 14:12:32 +0000 UTC FinishedAt: 2026-09-08 14:12:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowzvldk/series-workflowzvldk-convert-artifact-54517209/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 14:12:42 +0000 UTC FinishedAt: 2026-09-08 14:14:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 14:12:42 +0000 UTC FinishedAt: 2026-09-08 14:14:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d7f1d8fc-c542-460b-bf7b-a61f697e9c3e,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-workflowzvldk/series-workflowzvldk-build-action-3878126108/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-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 14:14:19 +0000 UTC FinishedAt: 2026-09-08 14:14:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 14:14:19 +0000 UTC FinishedAt: 2026-09-08 14:14:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 14:14:19 +0000 UTC FinishedAt: 2026-09-08 14:31:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 14:14:19 +0000 UTC FinishedAt: 2026-09-08 14:31:11 +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:*0384fd70-031b-4d10-a35b-8a247ad063ef,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-workflowzvldk/series-workflowzvldk-convert-artifact-54517209/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": "42db9a25-6494-4928-841b-c8d20d0b2761", "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-workflowzvldk/series-workflowzvldk-build-action-2417426997/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 14:14:19 +0000 UTC FinishedAt: 2026-09-08 14:31:01 +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:*0384fd70-031b-4d10-a35b-8a247ad063ef,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-workflowzvldk/series-workflowzvldk-convert-artifact-54517209/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": "42db9a25-6494-4928-841b-c8d20d0b2761", "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-workflowzvldk/series-workflowzvldk-build-action-2417426997/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 14:31:11 +0000 UTC FinishedAt: 2026-09-08 14:31:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 14:31:11 +0000 UTC FinishedAt: 2026-09-08 14:31:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 14:31:11 +0000 UTC FinishedAt: 2026-09-08 14:33:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 14:31:11 +0000 UTC FinishedAt: 2026-09-08 14:33:05 +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:*42db9a25-6494-4928-841b-c8d20d0b2761,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-workflowzvldk/series-workflowzvldk-build-action-2417426997/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-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 14:33:15 +0000 UTC FinishedAt: 2026-09-08 17:34:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 14:33:15 +0000 UTC FinishedAt: 2026-09-08 17:34:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"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:*d7f1d8fc-c542-460b-bf7b-a61f697e9c3e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*42db9a25-6494-4928-841b-c8d20d0b2761,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-workflowzvldk/series-workflowzvldk-build-action-3878126108/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-workflowzvldk/series-workflowzvldk-build-action-2417426997/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 14:33:15 +0000 UTC FinishedAt: 2026-09-08 14:33:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 14:33:15 +0000 UTC FinishedAt: 2026-09-08 14:33:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"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-workflowzvldk/series-workflowzvldk-convert-artifact-2962983630/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 14:33:15 +0000 UTC FinishedAt: 2026-09-08 14:33:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 14:33:15 +0000 UTC FinishedAt: 2026-09-08 14:33:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 14:33:15 +0000 UTC FinishedAt: 2026-09-08 14:33:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 14:33:25 +0000 UTC FinishedAt: 2026-09-08 17:34:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvldk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mr_table_alloc","ip_mroute_setsockopt","ip6_mroute_setsockopt","ipmr_mfc_add","ip6mr_mfc_add"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"641d03105cc0d2437e32fdeec164f91a4ccef6c4","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_MROUTE","IPV6_MROUTE","MEMCG"],"series_id":"39f1cb2a-0751-44c8-b940-37b6fbeb85bb","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 14:33:25 +0000 UTC FinishedAt: 2026-09-08 17:34:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d7f1d8fc-c542-460b-bf7b-a61f697e9c3e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*42db9a25-6494-4928-841b-c8d20d0b2761,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-workflowzvldk/series-workflowzvldk-build-action-3878126108/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-workflowzvldk/series-workflowzvldk-build-action-2417426997/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-workflowzvldk/series-workflowzvldk-convert-artifact-2962983630/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,}