Name: series-workflow4fvhb Phase: Succeeded StartedAt: 2026-09-03 11:48:19 +0000 UTC FinishedAt: 2026-09-03 16:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[0] Phase: Succeeded StartedAt: 2026-09-03 11:48:19 +0000 UTC FinishedAt: 2026-09-03 12:32:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 11:48:19 +0000 UTC FinishedAt: 2026-09-03 12:32:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3ba13f5e7180c034b0a1ef7e052fb780856b134e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VXLAN", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3ba13f5e7180c034b0a1ef7e052fb780856b134e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VXLAN", "INET" ], "series_id": "e376c573-d1e8-4314-a062-e24befa19fdc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "vxlan_fdb_add", "vxlan_fdb_update_existing", "vxlan_fdb_update" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZYTEFOJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2eGxhbl9mZGJfYWRkJiMzNDssCiAgICAmIzM0O3Z4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcmIzM0OywKICAgICYjMzQ7dnhsYW5fZmRiX3VwZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgaW4gdnhsYW5fZmRiX2FkZCgpIGFuZCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKCkgdG8gcHJldmVudCBjb25maWd1cmluZyBvciB1cGRhdGluZyBuZXh0aG9wLWJhc2VkIFZYTEFOIEZEQiBlbnRyaWVzIHdpdGggZHluYW1pYyAoYWdpbmcpIHN0YXRlcy4gSXQgb25seSBpbnRyb2R1Y2VzIGNvbmRpdGlvbmFsIGNoZWNrcyBvbiBleGlzdGluZyB2YWxpZGF0ZWQgaW5wdXQgYXJndW1lbnRzIGFuZCByZXR1cm5zIHN0YW5kYXJkIGVycm9yIGNvZGVzIHdpdGggc3RhdGljIG5ldGxpbmsgZXJyb3IgbWVzc2FnZXMuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIG9yIGRhdGEgdHJhbnNmZXJzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIHByZXZlbnRpbmcgbmV4dGhvcCBGREIgZW50cmllcyBmcm9tIGJlaW5nIGNvbmZpZ3VyZWQgb3IgdXBkYXRlZCB3aXRoIGEgZHluYW1pYyBzdGF0ZSBpbiB0aGUgVlhMQU4gZHJpdmVyLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIG5ldHdvcmsgbmV0bGluay9GREIgaGFuZGxpbmcgY29kZSBpbiB2eGxhbl9jb3JlLmMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNDNhZWRlNzIyMjY3ZjQ0OWVlYzQwZDI3M2ZmZWQyNmUyYjBlMTViXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMjozMDo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcbmluZGV4IGFjODhkMWM4NWJlYTYuLjkzYmY3YzUzNWU2OTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY1xuQEAgLTk5Niw2ICYjNDM7OTk2LDEyIEBAIHN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuIFxuJiM0MztcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cdTAwM2VuaCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICEoc3RhdGUgXHUwMDI2IChOVURfUEVSTUFORU5UIHwgTlVEX05PQVJQKSkpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q2Fubm90IG1ha2UgYSBuZXh0aG9wIGZkYiBkeW5hbWljXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogRG8gbm90IGFsbG93IGFuIGV4dGVybmFsbHkgbGVhcm5lZCBlbnRyeSB0byB0YWtlIG92ZXIgYW4gZW50cnkgYWRkZWRcbiBcdCAqIGJ5IHRoZSB1c2VyLlxuIFx0ICovXG5AQCAtMTI1Nyw2ICYjNDM7MTI2MywxMSBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl9hZGQoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuJiM0MztcdGlmIChuaGlkIFx1MDAyNlx1MDAyNiAhKG5kbS1cdTAwM2VuZG1fc3RhdGUgXHUwMDI2IChOVURfUEVSTUFORU5UIHwgTlVEX05PQVJQKSkpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7QSBuZXh0aG9wIGZkYiBjYW5ub3QgYmUgZHluYW1pY1wmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHZ4bGFuLVx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pcC5zYS5zYV9mYW1pbHkgIT0gaXAuc2Euc2FfZmFtaWx5KVxuIFx0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmliX25leHRob3BzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZpYl9uZXh0aG9wcy5zaFxuaW5kZXggM2QzNDcxMjY3MzBhOS4uNDMxZDdiZWQ3NjIyNCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9maWJfbmV4dGhvcHMuc2hcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9maWJfbmV4dGhvcHMuc2hcbkBAIC01MzMsNiAmIzQzOzUzMywyMCBAQCBpcHY2X2ZkYl9ncnBfZmNuYWwoKVxuIFx0cnVuX2NtZCBcJiMzNDskQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTQgZGV2IHZ4MTAgbmhpZCA2MSBzZWxmXCYjMzQ7XG4gXHRsb2dfdGVzdCAkPyAyNTUgXCYjMzQ7RmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wXCYjMzQ7XG4gXG4mIzQzO1x0IyBmZGIgZW50cmllcyB3aXRoIGEgbmV4dGhvcCBncm91cCBjYW5ub3QgYmUgYWdlZCBvdXRcbiYjNDM7XHRydW5fY21kIFwmIzM0OyRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNSBkZXYgdngxMCBuaGlkIDEwMiBzZWxmIHN0YXRpY1wmIzM0O1xuJiM0MztcdGxvZ190ZXN0ICQ/IDAgXCYjMzQ7RmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBzdGF0aWMgc3RhdGVcJiMzNDtcbiYjNDM7XG4mIzQzO1x0cnVuX2NtZCBcJiMzNDskQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTYgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZiBkeW5hbWljXCYjMzQ7XG4mIzQzO1x0bG9nX3Rlc3QgJD8gMjU1IFwmIzM0O0ZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZVwmIzM0O1xuJiM0MztcbiYjNDM7XHRydW5fY21kIFwmIzM0OyRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNyBkZXYgdngxMCBuaGlkIDEwMiBzZWxmXCYjMzQ7XG4mIzQzO1x0cnVuX2NtZCBcJiMzNDskQlJJREdFIGZkYiByZXBsYWNlIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIGRzdCAyMDAxOmRiODo5MTo6MTEgc2VsZiBkeW5hbWljXCYjMzQ7XG4mIzQzO1x0bG9nX3Rlc3QgJD8gMjU1IFwmIzM0O0ZkYiBtYWMgcmVwbGFjZSB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGVcJiMzNDtcbiYjNDM7XG4mIzQzO1x0cnVuX2NtZCBcJiMzNDskQlJJREdFIGZkYiBhcHBlbmQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgZHN0IDIwMDE6ZGI4OjkxOjoxMSBzZWxmIGR5bmFtaWNcJiMzNDtcbiYjNDM7XHRsb2dfdGVzdCAkPyAyNTUgXCYjMzQ7RmRiIG1hYyBhcHBlbmQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlXCYjMzQ7XG4mIzQzO1xuIFx0cnVuX2NtZCBcJiMzNDskSVAgLTYgcm8gYWRkIDIwMDE6ZGI4OjEwMTo6MS8xMjggbmhpZCA2NlwmIzM0O1xuIFx0bG9nX3Rlc3QgJD8gMiBcJiMzNDtSb3V0ZSBhZGQgd2l0aCBmZGIgbmV4dGhvcFwmIzM0O1xuIFxuQEAgLTY2OSw2ICYjNDM7NjgzLDIwIEBAIGlwdjRfZmRiX2dycF9mY25hbCgpXG4gXHRydW5fY21kIFwmIzM0OyRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNCBkZXYgdngxMCBuaGlkIDEyIHNlbGZcJiMzNDtcbiBcdGxvZ190ZXN0ICQ/IDI1NSBcJiMzNDtGZGIgbWFjIGFkZCB3aXRoIG5leHRob3BcJiMzNDtcbiBcbiYjNDM7XHQjIGZkYiBlbnRyaWVzIHdpdGggYSBuZXh0aG9wIGdyb3VwIGNhbm5vdCBiZSBhZ2VkIG91dFxuJiM0MztcdHJ1bl9jbWQgXCYjMzQ7JEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE1IGRldiB2eDEwIG5oaWQgMTAyIHNlbGYgc3RhdGljXCYjMzQ7XG4mIzQzO1x0bG9nX3Rlc3QgJD8gMCBcJiMzNDtGZGIgbWFjIGFkZCB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIHN0YXRpYyBzdGF0ZVwmIzM0O1xuJiM0MztcbiYjNDM7XHRydW5fY21kIFwmIzM0OyRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNiBkZXYgdngxMCBuaGlkIDEwMiBzZWxmIGR5bmFtaWNcJiMzNDtcbiYjNDM7XHRsb2dfdGVzdCAkPyAyNTUgXCYjMzQ7RmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlXCYjMzQ7XG4mIzQzO1xuJiM0MztcdHJ1bl9jbWQgXCYjMzQ7JEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIG5oaWQgMTAyIHNlbGZcJiMzNDtcbiYjNDM7XHRydW5fY21kIFwmIzM0OyRCUklER0UgZmRiIHJlcGxhY2UgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgZHN0IDEwLjAuMC4zIHNlbGYgZHluYW1pY1wmIzM0O1xuJiM0MztcdGxvZ190ZXN0ICQ/IDI1NSBcJiMzNDtGZGIgbWFjIHJlcGxhY2Ugd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlXCYjMzQ7XG4mIzQzO1xuJiM0MztcdHJ1bl9jbWQgXCYjMzQ7JEJSSURHRSBmZGIgYXBwZW5kIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIGRzdCAxMC4wLjAuMyBzZWxmIGR5bmFtaWNcJiMzNDtcbiYjNDM7XHRsb2dfdGVzdCAkPyAyNTUgXCYjMzQ7RmRiIG1hYyBhcHBlbmQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlXCYjMzQ7XG4mIzQzO1xuIFx0cnVuX2NtZCBcJiMzNDskSVAgcm8gYWRkIDE3Mi4xNi4wLjAvMjIgbmhpZCAxNlwmIzM0O1xuIFx0bG9nX3Rlc3QgJD8gMiBcJiMzNDtSb3V0ZSBhZGQgd2l0aCBmZGIgbmV4dGhvcFwmIzM0O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZYTEFOJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2eGxhbl9mZGJfYWRkJiMzNDssCiAgICAmIzM0O3Z4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcmIzM0OywKICAgICYjMzQ7dnhsYW5fZmRiX3VwZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIHByZXZlbnRpbmcgbmV4dGhvcCBGREIgZW50cmllcyBmcm9tIGJlaW5nIGNvbmZpZ3VyZWQgb3IgdXBkYXRlZCB3aXRoIGEgZHluYW1pYyBzdGF0ZSBpbiB0aGUgVlhMQU4gZHJpdmVyLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIG5ldHdvcmsgbmV0bGluay9GREIgaGFuZGxpbmcgY29kZSBpbiB2eGxhbl9jb3JlLmMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxNDNhZWRlNzIyMjY3ZjQ0OWVlYzQwZDI3M2ZmZWQyNmUyYjBlMTViCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAxMjozMDo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYwppbmRleCBhYzg4ZDFjODViZWE2Li45M2JmN2M1MzVlNjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jCkBAIC05OTYsNiAmIzQzOzk5NiwxMiBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKJiM0MzsJaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihmLSZndDtuaCkgJmFtcDsmYW1wOwomIzQzOwkgICAgIShzdGF0ZSAmYW1wOyAoTlVEX1BFUk1BTkVOVCB8IE5VRF9OT0FSUCkpKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7Q2Fubm90IG1ha2UgYSBuZXh0aG9wIGZkYiBkeW5hbWljJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJLyogRG8gbm90IGFsbG93IGFuIGV4dGVybmFsbHkgbGVhcm5lZCBlbnRyeSB0byB0YWtlIG92ZXIgYW4gZW50cnkgYWRkZWQKIAkgKiBieSB0aGUgdXNlci4KIAkgKi8KQEAgLTEyNTcsNiAmIzQzOzEyNjMsMTEgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfYWRkKHN0cnVjdCBuZG1zZyAqbmRtLCBzdHJ1Y3QgbmxhdHRyICp0YltdLAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKJiM0MzsJaWYgKG5oaWQgJmFtcDsmYW1wOyAhKG5kbS0mZ3Q7bmRtX3N0YXRlICZhbXA7IChOVURfUEVSTUFORU5UIHwgTlVEX05PQVJQKSkpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtBIG5leHRob3AgZmRiIGNhbm5vdCBiZSBkeW5hbWljJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKIAlpZiAodnhsYW4tJmd0O2RlZmF1bHRfZHN0LnJlbW90ZV9pcC5zYS5zYV9mYW1pbHkgIT0gaXAuc2Euc2FfZmFtaWx5KQogCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZpYl9uZXh0aG9wcy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9maWJfbmV4dGhvcHMuc2gKaW5kZXggM2QzNDcxMjY3MzBhOS4uNDMxZDdiZWQ3NjIyNCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZpYl9uZXh0aG9wcy5zaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmliX25leHRob3BzLnNoCkBAIC01MzMsNiAmIzQzOzUzMywyMCBAQCBpcHY2X2ZkYl9ncnBfZmNuYWwoKQogCXJ1bl9jbWQgJiMzNDskQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTQgZGV2IHZ4MTAgbmhpZCA2MSBzZWxmJiMzNDsKIAlsb2dfdGVzdCAkPyAyNTUgJiMzNDtGZGIgbWFjIGFkZCB3aXRoIG5leHRob3AmIzM0OwogCiYjNDM7CSMgZmRiIGVudHJpZXMgd2l0aCBhIG5leHRob3AgZ3JvdXAgY2Fubm90IGJlIGFnZWQgb3V0CiYjNDM7CXJ1bl9jbWQgJiMzNDskQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTUgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZiBzdGF0aWMmIzM0OwomIzQzOwlsb2dfdGVzdCAkPyAwICYjMzQ7RmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBzdGF0aWMgc3RhdGUmIzM0OwomIzQzOwomIzQzOwlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE2IGRldiB2eDEwIG5oaWQgMTAyIHNlbGYgZHluYW1pYyYjMzQ7CiYjNDM7CWxvZ190ZXN0ICQ/IDI1NSAmIzM0O0ZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZSYjMzQ7CiYjNDM7CiYjNDM7CXJ1bl9jbWQgJiMzNDskQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZiYjMzQ7CiYjNDM7CXJ1bl9jbWQgJiMzNDskQlJJREdFIGZkYiByZXBsYWNlIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIGRzdCAyMDAxOmRiODo5MTo6MTEgc2VsZiBkeW5hbWljJiMzNDsKJiM0MzsJbG9nX3Rlc3QgJD8gMjU1ICYjMzQ7RmRiIG1hYyByZXBsYWNlIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZSYjMzQ7CiYjNDM7CiYjNDM7CXJ1bl9jbWQgJiMzNDskQlJJREdFIGZkYiBhcHBlbmQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgZHN0IDIwMDE6ZGI4OjkxOjoxMSBzZWxmIGR5bmFtaWMmIzM0OwomIzQzOwlsb2dfdGVzdCAkPyAyNTUgJiMzNDtGZGIgbWFjIGFwcGVuZCB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGUmIzM0OwomIzQzOwogCXJ1bl9jbWQgJiMzNDskSVAgLTYgcm8gYWRkIDIwMDE6ZGI4OjEwMTo6MS8xMjggbmhpZCA2NiYjMzQ7CiAJbG9nX3Rlc3QgJD8gMiAmIzM0O1JvdXRlIGFkZCB3aXRoIGZkYiBuZXh0aG9wJiMzNDsKIApAQCAtNjY5LDYgJiM0Mzs2ODMsMjAgQEAgaXB2NF9mZGJfZ3JwX2ZjbmFsKCkKIAlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE0IGRldiB2eDEwIG5oaWQgMTIgc2VsZiYjMzQ7CiAJbG9nX3Rlc3QgJD8gMjU1ICYjMzQ7RmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wJiMzNDsKIAomIzQzOwkjIGZkYiBlbnRyaWVzIHdpdGggYSBuZXh0aG9wIGdyb3VwIGNhbm5vdCBiZSBhZ2VkIG91dAomIzQzOwlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE1IGRldiB2eDEwIG5oaWQgMTAyIHNlbGYgc3RhdGljJiMzNDsKJiM0MzsJbG9nX3Rlc3QgJD8gMCAmIzM0O0ZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCBncm91cCBhbmQgc3RhdGljIHN0YXRlJiMzNDsKJiM0MzsKJiM0MzsJcnVuX2NtZCAmIzM0OyRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNiBkZXYgdngxMCBuaGlkIDEwMiBzZWxmIGR5bmFtaWMmIzM0OwomIzQzOwlsb2dfdGVzdCAkPyAyNTUgJiMzNDtGZGIgbWFjIGFkZCB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGUmIzM0OwomIzQzOwomIzQzOwlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIG5oaWQgMTAyIHNlbGYmIzM0OwomIzQzOwlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgcmVwbGFjZSAwMjowMjowMDowMDowMDoxNyBkZXYgdngxMCBkc3QgMTAuMC4wLjMgc2VsZiBkeW5hbWljJiMzNDsKJiM0MzsJbG9nX3Rlc3QgJD8gMjU1ICYjMzQ7RmRiIG1hYyByZXBsYWNlIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZSYjMzQ7CiYjNDM7CiYjNDM7CXJ1bl9jbWQgJiMzNDskQlJJREdFIGZkYiBhcHBlbmQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgZHN0IDEwLjAuMC4zIHNlbGYgZHluYW1pYyYjMzQ7CiYjNDM7CWxvZ190ZXN0ICQ/IDI1NSAmIzM0O0ZkYiBtYWMgYXBwZW5kIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZSYjMzQ7CiYjNDM7CiAJcnVuX2NtZCAmIzM0OyRJUCBybyBhZGQgMTcyLjE2LjAuMC8yMiBuaGlkIDE2JiMzNDsKIAlsb2dfdGVzdCAkPyAyICYjMzQ7Um91dGUgYWRkIHdpdGggZmRiIG5leHRob3AmIzM0OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWWExBTiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNgIGFuZCBhIHNlbGYtdGVzdCBzY3JpcHQsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmliX25leHRob3BzLnNoYC4gSW50ZXJlc3RpbmcuIExldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvcmUgY2hhbmdlcyBpbiBgdnhsYW5fY29yZS5jYCBmaXJzdC4KCkl0IGxvb2tzIGxpa2UgdGhlIGZvY3VzIGlzIG9uIGhvdyBWWExBTiBGREIgZW50cmllcyBpbnRlcmFjdCB3aXRoIG5leHQgaG9wcy4gSW4gYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgLCB0aGVyZSYjMzk7cyBhIG5ldyBjaGVjazogaWYgYSBuZXh0IGhvcCAoYGYtJmd0O25oYCkgYWxyZWFkeSBleGlzdHMgYW5kIGlzbiYjMzk7dCBtYXJrZWQgYXMgcGVybWFuZW50IG9yIGRvZXNuJiMzOTt0IHVzZSBBUlAsIHdlJiMzOTtyZSBub3cgcHJldmVudGluZyB1cGRhdGVzIHRoYXQgd291bGQgbWFrZSBpdCBkeW5hbWljLiBUaGUgZXJyb3IgbWVzc2FnZSBleHBsaWNpdGx5IHN0YXRlcywgJiMzNDtDYW5ub3QgbWFrZSBhIG5leHRob3AgZmRiIGR5bmFtaWMuJiMzNDsgVGhpcyBzdWdnZXN0cyB0aGVyZSBpcyBhIG5ldyByZXN0cmljdGlvbiBvbiB0aGUgc3RhdGUgb2YgYSBGREIgZW50cnkuCgpTaW1pbGFybHksIHdpdGhpbiBgdnhsYW5fZmRiX2FkZGAsIGEgc2ltaWxhciByZXN0cmljdGlvbiBleGlzdHMuIElmIGEgbmV4dCBob3AgaWRlbnRpZmllciAoYG5oaWRgKSBpcyBwcmVzZW50IGFuZCB0aGUgY29ycmVzcG9uZGluZyBuZXh0IGhvcCBlbnRyeSAoYG5kbS0mZ3Q7bmRtX3N0YXRlYCkgaXMgbm90IHBlcm1hbmVudCwgaXQgcmVzdWx0cyBpbiBhbiBlcnJvcjogJiMzNDtBIG5leHRob3AgZmRiIGNhbm5vdCBiZSBkeW5hbWljLiYjMzQ7IFRoZSBlcnJvciBjb2RlIGJlaW5nIHJldHVybmVkIGhlcmUgaXMgYSBsaXR0bGUgZGlmZmVyZW50LCBgLUVJTlZBTGAgdmVyc3VzIGAtRU9QTk9UU1VQUGAuIFRoaXMgY2hhbmdlIGNsZWFybHkgYWltcyB0byBlbmZvcmNlIHN0YXRpYywgbm9uLWR5bmFtaWMgbmV4dCBob3AgY29uZmlndXJhdGlvbnMgaW4gdGhlc2Ugc3BlY2lmaWMgRkRCIG9wZXJhdGlvbnMuIEkgd29uZGVyIGlmIHRoZXJlIGhhdmUgYmVlbiBpc3N1ZXMgd2l0aCB0aGUgb3JpZ2luYWwgZHluYW1pYyBpbXBsZW1lbnRhdGlvbiwgb3IgcGVyaGFwcywgZm9yIHNlY3VyaXR5IHJlYXNvbnMuCgpOb3csIGxldCBtZSBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgZm9yIFZYTEFOLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGNoYW5nZSBtaWdodCBiZSBpbXBhY3RpbmcgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYW5kIGVuYWJsaW5nIGNvbmRpdGlvbnMgd2lsbCBiZSBjcnVjaWFsIGZvciBhIGZ1bGwgYXNzZXNzbWVudCBvZiB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWWExBTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTIxNj1jb25maWcgSVBWVEFQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMjktXG5kcml2ZXJzL25ldC9LY29uZmlnOjIzMDpjb25maWcgVlhMQU5cbmRyaXZlcnMvbmV0L0tjb25maWctMjMxLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBlWHRlbnNpYmxlIExvY2FsIEFyZWEgTmV0d29yayAoVlhMQU4pXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk1NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBOZXR3b3JrIERyaXZlciBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNvbWV0aGluZyByZWxhdGVkIHRvIG5ldHdvcmsgZHJpdmVycywgcHJvYmFibHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIHN0YW5kYXJkIGxvY2F0aW9uOiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AuIEFuZCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBjb25maWcgZmlsZSBpcyBzdHJ1Y3R1cmVkLCBJJiMzOTtkIGJldCB0aGUgcmVsZXZhbnQgZW50cnkgaXMgZ29pbmcgdG8gYmUgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDIzMC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtb3JlIGNvcmUgYW5kIGdlbmVyaWMgZmVhdHVyZXMgYXJlIGRlZmluZWQsIG9yIHBlcmhhcHMgd2hlcmUgdGhleSYjMzk7cmUgZ3JvdXBpbmcgcmVsYXRlZCBkZXZpY2Utc3BlY2lmaWMgb3B0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHRoZXJlLi4uIGxpa2VseSBkZWFsaW5nIHdpdGggdGhlIHNwZWNpZmljIHBhcmFtZXRlcnMuIEkgZXhwZWN0IHRoZXJlIHRvIGJlIGEgbmVzdGVkIGBjb25maWdgIGJsb2NrIHdpdGggcG90ZW50aWFsbHkgc2V2ZXJhbCBkZXBlbmRlbmNpZXMgYW5kIGhlbHAgdGV4dC4gSSBob3BlIGl0JiMzOTtzIHdlbGwtZG9jdW1lbnRlZCEgVGltZSB0byBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjI1Olx0XHQgIGlwdnRhcCYjMzk7LCBhbmQgdGhlbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSB0YXAgdXNlciBzcGFjZSBpbnRlcmZhY2UuXG4gMjI2Olx0XG4gMjI3Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAyMjg6XHRcdCAgd2lsbCBiZSBjYWxsZWQgaXB2dGFwLlxuIDIyOTpcdFxuIDIzMDpcdGNvbmZpZyBWWExBTlxuIDIzMTpcdFx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBlWHRlbnNpYmxlIExvY2FsIEFyZWEgTmV0d29yayAoVlhMQU4pXCYjMzQ7XG4gMjMyOlx0XHRkZXBlbmRzIG9uIElORVRcbiAyMzM6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuIDIzNDpcdFx0c2VsZWN0IEdST19DRUxMU1xuIDIzNTpcdFx0aGVscFxuIDIzNjpcdFx0ICBUaGlzIGFsbG93cyBvbmUgdG8gY3JlYXRlIHZ4bGFuIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHByb3ZpZGVcbiAyMzc6XHRcdCAgTGF5ZXIgMiBOZXR3b3JrcyBvdmVyIExheWVyIDMgTmV0d29ya3MuIFZYTEFOIGlzIG9mdGVuIHVzZWRcbiAyMzg6XHRcdCAgdG8gdHVubmVsIHZpcnR1YWwgbmV0d29yayBpbmZyYXN0cnVjdHVyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG4gMjM5Olx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTpcbiAyNDA6XHRcdCAgICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1tYWhhbGluZ2FtLWR1dHQtZGNvcHMtdnhsYW4tMDJcbiAyNDE6XHRcbiAyNDI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDI0MzpcdFx0ICB3aWxsIGJlIGNhbGxlZCB2eGxhbi5cbiAyNDQ6XHRcbiAyNDU6XHRjb25maWcgR0VORVZFXG4gMjQ2Olx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIE5ldHdvcmsgVmlydHVhbGl6YXRpb24gRW5jYXBzdWxhdGlvblwmIzM0O1xuIDI0NzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gMjQ4Olx0XHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbiAyNDk6XHRcdHNlbGVjdCBHUk9fQ0VMTFNcbiAyNTA6XHRcdGhlbHBcbiAyNTE6XHRcdCAgVGhpcyBhbGxvd3Mgb25lIHRvIGNyZWF0ZSBnZW5ldmUgdmlydHVhbCBpbnRlcmZhY2VzIHRoYXQgcHJvdmlkZVxuIDI1MjpcdFx0ICBMYXllciAyIE5ldHdvcmtzIG92ZXIgTGF5ZXIgMyBOZXR3b3Jrcy4gR0VORVZFIGlzIG9mdGVuIHVzZWRcbiAyNTM6XHRcdCAgdG8gdHVubmVsIHZpcnR1YWwgbmV0d29yayBpbmZyYXN0cnVjdHVyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG4gMjU0Olx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjYyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBWWExBTiBGREIgVXBkYXRlIExvZ2ljKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIFZYTEFOIEZEQiB1cGRhdGVzLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBgdnhsYW5fY29yZS5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGhvbWluZyBpbiBvbiB0aGUgZnVuY3Rpb25zIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCBhbmQgYHZ4bGFuX2ZkYl9hZGRgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaGFuZGxpbmcgdGhlIGNyZWF0aW9uIGFuZCBtb2RpZmljYXRpb24gb2YgZm9yd2FyZGluZyBkYXRhYmFzZSBlbnRyaWVzIGZvciBWWExBTi4gSSBuZWVkIHRvIGRpc3NlY3QgdGhlIGxvZ2ljIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzLiBJIG5lZWQgdG8gZ3Jhc3AgaG93IHRoZSBleGlzdGluZyBlbnRyaWVzIGFyZSBoYW5kbGVkIGFuZCwgY29udmVyc2VseSwgaG93IG5ldyBlbnRyaWVzIGFyZSBhZGRlZCB0byB0aGUgRkRCLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIG15IGludmVzdGlnYXRpb24gbGllcy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgdHJ5IHRvIGRldGVybWluZSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgaXNzdWUgSSYjMzk7bSBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk4NTpcdFx0aW50IGVycjtcbiA5ODY6XHRcbiA5ODc6XHRcdGlmIChuaGlkIFx1MDAyNlx1MDAyNiAhcmN1X2FjY2Vzc19wb2ludGVyKGYtXHUwMDNlbmgpKSB7XG4gOTg4Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiA5ODk6XHRcdFx0XHQgICAgICAgXCYjMzQ7Q2Fubm90IHJlcGxhY2UgYW4gZXhpc3Rpbmcgbm9uIG5leHRob3AgZmRiIHdpdGggYSBuZXh0aG9wXCYjMzQ7KTtcbiA5OTA6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDk5MTpcdFx0fVxuIDk5MjpcdFxuIDk5MzpcdFx0aWYgKG5oaWQgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgTkxNX0ZfQVBQRU5EKSkge1xuIDk5NDpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4gOTk1Olx0XHRcdFx0ICAgICAgIFwmIzM0O0Nhbm5vdCBhcHBlbmQgdG8gYSBuZXh0aG9wIGZkYlwmIzM0Oyk7XG4gOTk2Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiA5OTc6XHRcdH1cbiA5OTg6XHRcbiA5OTk6XHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cdTAwM2VuaCkgXHUwMDI2XHUwMDI2XG4xMDAwOlx0XHQgICAgIShzdGF0ZSBcdTAwMjYgKE5VRF9QRVJNQU5FTlQgfCBOVURfTk9BUlApKSkge1xuMTAwMTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0Nhbm5vdCBtYWtlIGEgbmV4dGhvcCBmZGIgZHluYW1pY1wmIzM0Oyk7XG4xMDAyOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEwMDM6XHRcdH1cbjEwMDQ6XHRcbjEwMDU6XHRcdC8qIERvIG5vdCBhbGxvdyBhbiBleHRlcm5hbGx5IGxlYXJuZWQgZW50cnkgdG8gdGFrZSBvdmVyIGFuIGVudHJ5IGFkZGVkXG4xMDA2Olx0XHQgKiBieSB0aGUgdXNlci5cbjEwMDc6XHRcdCAqL1xuMTAwODpcdFx0aWYgKCEoZmRiX2ZsYWdzIFx1MDAyNiBOVEZfRVhUX0xFQVJORUQpIHx8XG4xMDA5Olx0XHQgICAgIShmLVx1MDAzZWZsYWdzIFx1MDAyNiBOVEZfVlhMQU5fQURERURfQllfVVNFUikpIHtcbjEwMTA6XHRcdFx0aWYgKGYtXHUwMDNlc3RhdGUgIT0gc3RhdGUpIHtcbjEwMTE6XHRcdFx0XHRmLVx1MDAzZXN0YXRlID0gc3RhdGU7XG4xMDEyOlx0XHRcdFx0bm90aWZ5ID0gMTtcbjEwMTM6XHRcdFx0fVxuMTAxNDpcdFx0XHRpZiAoZi1cdTAwM2VmbGFncyAhPSBmZGJfZmxhZ3MpIHtcbjEwMTU6XHRcdFx0XHRmLVx1MDAzZWZsYWdzID0gZmRiX2ZsYWdzO1xuMTAxNjpcdFx0XHRcdG5vdGlmeSA9IDE7XG4xMDE3Olx0XHRcdH1cbjEwMTg6XHRcdH1cbjEwMTk6XHRcbjEwMjA6XHRcdGlmICgoZmxhZ3MgXHUwMDI2IE5MTV9GX1JFUExBQ0UpKSB7XG4xMDIxOlx0XHRcdC8qIE9ubHkgY2hhbmdlIHVuaWNhc3RzICovXG4xMDIyOlx0XHRcdGlmICghKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGYtXHUwMDNla2V5LmV0aF9hZGRyKSB8fFxuMTAyMzpcdFx0XHQgICAgICBpc196ZXJvX2V0aGVyX2FkZHIoZi1cdTAwM2VrZXkuZXRoX2FkZHIpKSkge1xuMTAyNDpcdFx0XHRcdGlmIChuaGlkKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU2OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIFZYTEFOIEZvcndhcmRpbmcgRGF0YWJhc2UgQWRkaXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgVlhMQU4sIGFuZCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgZm9yd2FyZGluZyBkYXRhYmFzZS4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3Mgem9vbSBpbiBvbiBgdnhsYW5fZmRiX2FkZGAuIEl0JiMzOTtzIGhvdXNlZCBpbiBgdnhsYW5fY29yZS5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCYjMzk7cyB0aGUgY3JpdGljYWwgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGFkZGluZyBlbnRyaWVzIHRvIHRoZSBGREIuIFVuZGVyc3RhbmRpbmcgaXRzIG9wZXJhdGlvbiBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgVlhMQU4gaGFuZGxlcyBpdHMgTUFDIGFkZHJlc3MgbGVhcm5pbmcgYW5kIGZvcndhcmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjUwOlx0XHRpbnQgZXJyO1xuMTI1MTpcdFxuMTI1MjpcdFx0aWYgKCEobmRtLVx1MDAzZW5kbV9zdGF0ZSBcdTAwMjYgKE5VRF9QRVJNQU5FTlR8TlVEX1JFQUNIQUJMRSkpKSB7XG4xMjUzOlx0XHRcdHByX2luZm8oXCYjMzQ7UlRNX05FV05FSUdIIHdpdGggaW52YWxpZCBzdGF0ZSAlI3hcXG5cJiMzNDssXG4xMjU0Olx0XHRcdFx0bmRtLVx1MDAzZW5kbV9zdGF0ZSk7XG4xMjU1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI1NjpcdFx0fVxuMTI1NzpcdFxuMTI1ODpcdFx0aWYgKCF0YiB8fCAoIXRiW05EQV9EU1RdIFx1MDAyNlx1MDAyNiAhdGJbTkRBX05IX0lEXSkpXG4xMjU5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI2MDpcdFxuMTI2MTpcdFx0ZXJyID0gdnhsYW5fZmRiX3BhcnNlKHRiLCB2eGxhbiwgXHUwMDI2aXAsIFx1MDAyNnBvcnQsIFx1MDAyNnNyY192bmksIFx1MDAyNnZuaSwgXHUwMDI2aWZpbmRleCxcbjEyNjI6XHRcdFx0XHQgICAgICBcdTAwMjZuaGlkLCBleHRhY2spO1xuMTI2MzpcdFx0aWYgKGVycilcbjEyNjQ6XHRcdFx0cmV0dXJuIGVycjtcbjEyNjU6XHRcbjEyNjY6XHRcdGlmIChuaGlkIFx1MDAyNlx1MDAyNiAhKG5kbS1cdTAwM2VuZG1fc3RhdGUgXHUwMDI2IChOVURfUEVSTUFORU5UIHwgTlVEX05PQVJQKSkpIHtcbjEyNjc6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtBIG5leHRob3AgZmRiIGNhbm5vdCBiZSBkeW5hbWljXCYjMzQ7KTtcbjEyNjg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjY5Olx0XHR9XG4xMjcwOlx0XG4xMjcxOlx0XHRpZiAodnhsYW4tXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX2lwLnNhLnNhX2ZhbWlseSAhPSBpcC5zYS5zYV9mYW1pbHkpXG4xMjcyOlx0XHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuMTI3MzpcdFxuMTI3NDpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4xMjc1Olx0XHRlcnIgPSB2eGxhbl9mZGJfdXBkYXRlKHZ4bGFuLCBhZGRyLCBcdTAwMjZpcCwgbmRtLVx1MDAzZW5kbV9zdGF0ZSwgZmxhZ3MsXG4xMjc2Olx0XHRcdFx0ICAgICAgIHBvcnQsIHNyY192bmksIHZuaSwgaWZpbmRleCxcbjEyNzc6XHRcdFx0XHQgICAgICAgbmRtLVx1MDAzZW5kbV9mbGFncyB8IE5URl9WWExBTl9BRERFRF9CWV9VU0VSLFxuMTI3ODpcdFx0XHRcdCAgICAgICBuaGlkLCB0cnVlLCBleHRhY2spO1xuMTI3OTpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbjEyODA6XHRcbjEyODE6XHRcdGlmICghZXJyKVxuMTI4MjpcdFx0XHQqbm90aWZpZWQgPSB0cnVlO1xuMTI4MzpcdFxuMTI4NDpcdFx0cmV0dXJuIGVycjtcbjEyODU6XHR9XG4xMjg2Olx0XG4xMjg3Olx0aW50IF9fdnhsYW5fZmRiX2RlbGV0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbjEyODg6XHRcdFx0ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHVuaW9uIHZ4bGFuX2FkZHIgaXAsXG4xMjg5Olx0XHRcdCAgICAgICBfX2JlMTYgcG9ydCwgX19iZTMyIHNyY192bmksIF9fYmUzMiB2bmksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NDUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBWWExBTjogQSBUYXJnZXRlZCBBcHByb2FjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBmdXp6aW5nIFZYTEFOIGlzIGEgdmlhYmxlIHRhcmdldC4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBzb21ldGhpbmcgSSBjYW4gYWN0dWFsbHkgcmVhY2ggaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCDigJMgYW5kIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcy4gVlhMQU4gaXMgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGRyaXZlciwgZW5hYmxlZCBieSBgQ09ORklHX1ZYTEFOYCwgYW5kIGxldmVyYWdlcyBgcnRuZXRsaW5rYCBpbnRlcmZhY2VzLiBUaGlzIGlzIHByaW1lIHRlcnJpdG9yeSBmb3IgU3l6a2FsbGVyLCB3aGljaCBmcmVxdWVudGx5IHRhcmdldHMgdGhvc2UgYXJlYXMuCgpOZXh0LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIHRoaXMgY29kZSAqZXhlY3V0YWJsZSo/IFllcywgZGVmaW5pdGVseS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhvbmluZyBpbiBvbiBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AgYW5kIGB2eGxhbl9mZGJfYWRkYCB3aXRoaW4gYGRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY2AuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLgoKVGhlIHF1ZXN0aW9uIG9mIHdvcnRoaW5lc3MsIGdpdmVuIG15IGluaXRpYWwgYW5hbHlzaXMsIGlzIHNldHRsZWQ6IFdvcnRoRnV6emluZz10cnVlLgoKTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiBgdnhsYW5fZmRiX2FkZGAgYW5kIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCwgYW5kIHBvc3NpYmx5IGB2eGxhbl9mZGJfdXBkYXRlYCAuIEkmIzM5O2xsIHByaW9yaXRpemUgdGhlc2Ugc3ltYm9scyBmb3IgZnV6emluZy4KCk15IG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgYFZYTEFOYCBhbmQgYElORVRgLgoKQW5kIGZpbmFsbHksIHRvIG1ha2Ugc3VyZSwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIGNvbXBpbGF0aW9uOiBgdnhsYW5fY29yZS5jYCBpcyBpbmRlZWQgY29tcGlsZWQgd2hlbiBgQ09ORklHX1ZYTEFOYCBpcyBlbmFibGVkLiBMZXQmIzM5O3MgZG91YmxlIGNoZWNrIHRoYXQgTWFrZWZpbGUgaW4gYGRyaXZlcnMvbmV0L3Z4bGFuYCB0byBiZSBjZXJ0YWluLiBOb3csIGxldCYjMzk7cyBnZXQgdG8gd29yayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCNcbiAgIDI6XHQjIE1ha2VmaWxlIGZvciB0aGUgdnhsYW4gZHJpdmVyXG4gICAzOlx0I1xuICAgNDpcdFxuICAgNTpcdG9iai0kKENPTkZJR19WWExBTikgJiM0Mzs9IHZ4bGFuLm9cbiAgIDY6XHRcbiAgIDc6XHR2eGxhbi1vYmpzIDo9IHZ4bGFuX2NvcmUubyB2eGxhbl9tdWx0aWNhc3QubyB2eGxhbl92bmlmaWx0ZXIubyB2eGxhbl9tZGIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTU5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBWWExBTiBGREIgVXBkYXRlIE1lY2hhbmlzbXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIFZYTEFOIEZEQiB1cGRhdGUgc2l0dWF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGxheSBvZiB0aGUgbGFuZDsgYXJlIHRoZXJlIG90aGVyIHN5bWJvbHMgYXQgcGxheSBoZXJlIGJleW9uZCB0aGUgb25lcyBJJiMzOTttIGluaXRpYWxseSBhd2FyZSBvZj8gT2theSwgSSBzZWU6IGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCwgYHZ4bGFuX2ZkYl9hZGRgLCBhbmQgYHZ4bGFuX2ZkYl91cGRhdGVgLiBHb29kLiBOb3csIEkgd2FudCB0byBjb25maXJtIHRoZSBzY29wZSBvZiBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AuIElzIGl0IGEgc3RhdGljIGlubGluZSwgb3IganVzdCBhIHN0YXRpYyBmdW5jdGlvbj8gQWxyaWdodCwgaXQmIzM5O3MgZGVmaW5lZCBvbiBsaW5lIDk5NiBhcyBgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKC4uLilgLiBTbywgaXTigJlzIGEgc3RhdGljLCBub24taW5saW5lIGZ1bmN0aW9uIHJlc2lkaW5nIHdpdGhpbiBgdnhsYW5fY29yZS5jYC4gVGhpcyByZXN0cmljdHMgaXRzIHZpc2liaWxpdHksIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgaW50ZWdyYXRpb24gaW50byB0aGUgYnJvYWRlciBWWExBTiBmcmFtZXdvcmsuIE5vdywgYHZ4bGFuX2ZkYl9hZGRgIGlzIGFsc28gc3RhdGljLCBgc3RhdGljIGludCB2eGxhbl9mZGJfYWRkKC4uLilgLCBhbmQgZnJvbSBleHBlcmllbmNlLCBJIHJlY2FsbCB0aGF0IHRoaXMgb25lIGlzIGNvbm5lY3RlZCB0byBgLm5kb19mZGJfYWRkYCBvciBydG5ldGxpbmsgbmVpZ2hib3Igb3BlcmF0aW9ucy4gTXkgbmV4dCBzdGVwIGhlcmUgaXMgdG8gYW5hbHl6ZSB0aGUgY2FsbGVycyBvZiBgdnhsYW5fZmRiX2FkZGAgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGZkYi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnhsYW5fZmRiX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MTE1Mj1zdGF0aWMgaW50IHZ4bGFuX2ZkYl9wYXJzZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTIzOC0vKiBBZGQgc3RhdGljIGVudHJ5ICh2aWEgbmV0bGluaykgKi9cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoxMjM5OnN0YXRpYyBpbnQgdnhsYW5fZmRiX2FkZChzdHJ1Y3QgbmRtc2cgKm5kbSwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMjQwLVx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0zMjk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdnhsYW5fbmV0ZGV2X2V0aGVyX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzMwNS1cdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGV0aF9tYWNfYWRkcixcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzozMzA2Olx0Lm5kb19mZGJfYWRkXHRcdD0gdnhsYW5fZmRiX2FkZCxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zMzA3LVx0Lm5kb19mZGJfZGVsXHRcdD0gdnhsYW5fZmRiX2RlbGV0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk1NAoJCQkJCQkJb3V0cHV0OiAxMTcKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVlhMQU4gRkRCIEVudHJ5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBWWExBTiBGREIgbWFuYWdlbWVudCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYHZ4bGFuX2ZkYl9hZGRgIGlzIHRoZSBjb3JlIGhhbmRsZXIgZm9yIGFkZGluZyBuZXcgZW50cmllcywgYWN0aW5nIGFzIHRoZSBgbmRvX2ZkYl9hZGRgIGNhbGxiYWNrIGZvciBWWExBTiBuZXR3b3JrIGRldmljZXMuIEkgc2VlIHRoYXQgYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgIGFuZCBgdnhsYW5fZmRiX3VwZGF0ZWAgYXJlIGludGVybmFsIGhlbHBlcnMgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yIHRoZSBhY3R1YWwgcHJvY2VzcyBvZiB1cGRhdGluZyBleGlzdGluZyBGREIgZW50cmllcywgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGUgY29uZmlndXJhdGlvbnMgaW4gdXNlIGFyZSBgVlhMQU5gIGFuZCBgSU5FVGAuIE5vdGhpbmcgY29tcGxpY2F0ZWQgaGVyZSwgSSB0aGluayBJJiMzOTtsbCBiZSBhYmxlIHRvIHF1aWNrbHkgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VlhMQU4mIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Z4bGFuX2ZkYl9hZGQmIzM0OywKICAgICYjMzQ7dnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyYjMzQ7LAogICAgJiMzNDt2eGxhbl9mZGJfdXBkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgcHJldmVudGluZyBuZXh0aG9wIEZEQiBlbnRyaWVzIGZyb20gYmVpbmcgY29uZmlndXJlZCBvciB1cGRhdGVkIHdpdGggYSBkeW5hbWljIHN0YXRlIGluIHRoZSBWWExBTiBkcml2ZXIuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgbmV0d29yayBuZXRsaW5rL0ZEQiBoYW5kbGluZyBjb2RlIGluIHZ4bGFuX2NvcmUuYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VlhMQU4mIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Z4bGFuX2ZkYl9hZGQmIzM0OywKICAgICYjMzQ7dnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyYjMzQ7LAogICAgJiMzNDt2eGxhbl9mZGJfdXBkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgcHJldmVudGluZyBuZXh0aG9wIEZEQiBlbnRyaWVzIGZyb20gYmVpbmcgY29uZmlndXJlZCBvciB1cGRhdGVkIHdpdGggYSBkeW5hbWljIHN0YXRlIGluIHRoZSBWWExBTiBkcml2ZXIuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgbmV0d29yayBuZXRsaW5rL0ZEQiBoYW5kbGluZyBjb2RlIGluIHZ4bGFuX2NvcmUuYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgaW4gdnhsYW5fZmRiX2FkZCgpIGFuZCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKCkgdG8gcHJldmVudCBjb25maWd1cmluZyBvciB1cGRhdGluZyBuZXh0aG9wLWJhc2VkIFZYTEFOIEZEQiBlbnRyaWVzIHdpdGggZHluYW1pYyAoYWdpbmcpIHN0YXRlcy4gSXQgb25seSBpbnRyb2R1Y2VzIGNvbmRpdGlvbmFsIGNoZWNrcyBvbiBleGlzdGluZyB2YWxpZGF0ZWQgaW5wdXQgYXJndW1lbnRzIGFuZCByZXR1cm5zIHN0YW5kYXJkIGVycm9yIGNvZGVzIHdpdGggc3RhdGljIG5ldGxpbmsgZXJyb3IgbWVzc2FnZXMuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIG9yIGRhdGEgdHJhbnNmZXJzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTQzYWVkZTcyMjI2N2Y0NDllZWM0MGQyNzNmZmVkMjZlMmIwZTE1YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTI6MzA6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMKaW5kZXggYWM4OGQxYzg1YmVhNi4uOTNiZjdjNTM1ZTY5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYwpAQCAtOTk2LDYgJiM0Mzs5OTYsMTIgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCiYjNDM7CWlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi0mZ3Q7bmgpICZhbXA7JmFtcDsKJiM0MzsJICAgICEoc3RhdGUgJmFtcDsgKE5VRF9QRVJNQU5FTlQgfCBOVURfTk9BUlApKSkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O0Nhbm5vdCBtYWtlIGEgbmV4dGhvcCBmZGIgZHluYW1pYyYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCS8qIERvIG5vdCBhbGxvdyBhbiBleHRlcm5hbGx5IGxlYXJuZWQgZW50cnkgdG8gdGFrZSBvdmVyIGFuIGVudHJ5IGFkZGVkCiAJICogYnkgdGhlIHVzZXIuCiAJICovCkBAIC0xMjU3LDYgJiM0MzsxMjYzLDExIEBAIHN0YXRpYyBpbnQgdnhsYW5fZmRiX2FkZChzdHJ1Y3QgbmRtc2cgKm5kbSwgc3RydWN0IG5sYXR0ciAqdGJbXSwKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiYjNDM7CWlmIChuaGlkICZhbXA7JmFtcDsgIShuZG0tJmd0O25kbV9zdGF0ZSAmYW1wOyAoTlVEX1BFUk1BTkVOVCB8IE5VRF9OT0FSUCkpKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7QSBuZXh0aG9wIGZkYiBjYW5ub3QgYmUgZHluYW1pYyYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiAJaWYgKHZ4bGFuLSZndDtkZWZhdWx0X2RzdC5yZW1vdGVfaXAuc2Euc2FfZmFtaWx5ICE9IGlwLnNhLnNhX2ZhbWlseSkKIAkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9maWJfbmV4dGhvcHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmliX25leHRob3BzLnNoCmluZGV4IDNkMzQ3MTI2NzMwYTkuLjQzMWQ3YmVkNzYyMjQgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9maWJfbmV4dGhvcHMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZpYl9uZXh0aG9wcy5zaApAQCAtNTMzLDYgJiM0Mzs1MzMsMjAgQEAgaXB2Nl9mZGJfZ3JwX2ZjbmFsKCkKIAlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE0IGRldiB2eDEwIG5oaWQgNjEgc2VsZiYjMzQ7CiAJbG9nX3Rlc3QgJD8gMjU1ICYjMzQ7RmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wJiMzNDsKIAomIzQzOwkjIGZkYiBlbnRyaWVzIHdpdGggYSBuZXh0aG9wIGdyb3VwIGNhbm5vdCBiZSBhZ2VkIG91dAomIzQzOwlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE1IGRldiB2eDEwIG5oaWQgMTAyIHNlbGYgc3RhdGljJiMzNDsKJiM0MzsJbG9nX3Rlc3QgJD8gMCAmIzM0O0ZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCBncm91cCBhbmQgc3RhdGljIHN0YXRlJiMzNDsKJiM0MzsKJiM0MzsJcnVuX2NtZCAmIzM0OyRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNiBkZXYgdngxMCBuaGlkIDEwMiBzZWxmIGR5bmFtaWMmIzM0OwomIzQzOwlsb2dfdGVzdCAkPyAyNTUgJiMzNDtGZGIgbWFjIGFkZCB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGUmIzM0OwomIzQzOwomIzQzOwlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIG5oaWQgMTAyIHNlbGYmIzM0OwomIzQzOwlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgcmVwbGFjZSAwMjowMjowMDowMDowMDoxNyBkZXYgdngxMCBkc3QgMjAwMTpkYjg6OTE6OjExIHNlbGYgZHluYW1pYyYjMzQ7CiYjNDM7CWxvZ190ZXN0ICQ/IDI1NSAmIzM0O0ZkYiBtYWMgcmVwbGFjZSB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGUmIzM0OwomIzQzOwomIzQzOwlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgYXBwZW5kIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIGRzdCAyMDAxOmRiODo5MTo6MTEgc2VsZiBkeW5hbWljJiMzNDsKJiM0MzsJbG9nX3Rlc3QgJD8gMjU1ICYjMzQ7RmRiIG1hYyBhcHBlbmQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlJiMzNDsKJiM0MzsKIAlydW5fY21kICYjMzQ7JElQIC02IHJvIGFkZCAyMDAxOmRiODoxMDE6OjEvMTI4IG5oaWQgNjYmIzM0OwogCWxvZ190ZXN0ICQ/IDIgJiMzNDtSb3V0ZSBhZGQgd2l0aCBmZGIgbmV4dGhvcCYjMzQ7CiAKQEAgLTY2OSw2ICYjNDM7NjgzLDIwIEBAIGlwdjRfZmRiX2dycF9mY25hbCgpCiAJcnVuX2NtZCAmIzM0OyRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNCBkZXYgdngxMCBuaGlkIDEyIHNlbGYmIzM0OwogCWxvZ190ZXN0ICQ/IDI1NSAmIzM0O0ZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCYjMzQ7CiAKJiM0MzsJIyBmZGIgZW50cmllcyB3aXRoIGEgbmV4dGhvcCBncm91cCBjYW5ub3QgYmUgYWdlZCBvdXQKJiM0MzsJcnVuX2NtZCAmIzM0OyRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNSBkZXYgdngxMCBuaGlkIDEwMiBzZWxmIHN0YXRpYyYjMzQ7CiYjNDM7CWxvZ190ZXN0ICQ/IDAgJiMzNDtGZGIgbWFjIGFkZCB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIHN0YXRpYyBzdGF0ZSYjMzQ7CiYjNDM7CiYjNDM7CXJ1bl9jbWQgJiMzNDskQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTYgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZiBkeW5hbWljJiMzNDsKJiM0MzsJbG9nX3Rlc3QgJD8gMjU1ICYjMzQ7RmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlJiMzNDsKJiM0MzsKJiM0MzsJcnVuX2NtZCAmIzM0OyRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNyBkZXYgdngxMCBuaGlkIDEwMiBzZWxmJiMzNDsKJiM0MzsJcnVuX2NtZCAmIzM0OyRCUklER0UgZmRiIHJlcGxhY2UgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgZHN0IDEwLjAuMC4zIHNlbGYgZHluYW1pYyYjMzQ7CiYjNDM7CWxvZ190ZXN0ICQ/IDI1NSAmIzM0O0ZkYiBtYWMgcmVwbGFjZSB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGUmIzM0OwomIzQzOwomIzQzOwlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgYXBwZW5kIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIGRzdCAxMC4wLjAuMyBzZWxmIGR5bmFtaWMmIzM0OwomIzQzOwlsb2dfdGVzdCAkPyAyNTUgJiMzNDtGZGIgbWFjIGFwcGVuZCB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGUmIzM0OwomIzQzOwogCXJ1bl9jbWQgJiMzNDskSVAgcm8gYWRkIDE3Mi4xNi4wLjAvMjIgbmhpZCAxNiYjMzQ7CiAJbG9nX3Rlc3QgJD8gMiAmIzM0O1JvdXRlIGFkZCB3aXRoIGZkYiBuZXh0aG9wJiMzNDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzMQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZYTEFOIEZEQiBVcGRhdGUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIGRpZmYgc2hvd3MgY2hhbmdlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY2AuIFNwZWNpZmljYWxseSwgdGhlIGZvY3VzIGlzIG9uIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCBhbmQgYHZ4bGFuX2ZkYl9hZGRgLiBJIHNlZSBhIG5ld2x5IGludHJvZHVjZWQgY2hlY2sgaW4gYm90aCBmdW5jdGlvbnMgdGhhdCBzZWVtcyB0byBiZSByZWxhdGVkIHRvIHRoZSBzdGF0ZSBvZiBhIG5leHQgaG9wLgoKSW4gYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgLCB0aGUgY29kZSBub3cgZXhwbGljaXRseSBwcm9oaWJpdHMgdXBkYXRpbmcgYW4gZXhpc3RpbmcgRkRCIGVudHJ5JiMzOTtzIG5leHQgaG9wIHRvIGEgZHluYW1pYyBzdGF0ZSBpZiB0aGUgY3VycmVudCBuZXh0IGhvcCBgZi0mZ3Q7bmhgIGV4aXN0cyBhbmQgaXNuJiMzOTt0IG1hcmtlZCBhcyBgTlVEX1BFUk1BTkVOVGAgb3IgYE5VRF9OT0FSUGAuIFRoZSBzYW1lIGxvZ2ljIGlzIGFwcGxpZWQgaW4gYHZ4bGFuX2ZkYl9hZGRgLCB3aGVyZSB0aGUgcHJlc2VuY2Ugb2YgYSBuZXh0IGhvcCBJRCBgbmhpZGAgYWxvbmcgd2l0aCB0aGUgYG5kbV9zdGF0ZWAgbm90IGJlaW5nIGBOVURfUEVSTUFORU5UYCBvciBgTlVEX05PQVJQYCByZXN1bHRzIGluIGFuIGVycm9yLiBUaGUgZXJyb3IgbWVzc2FnZXMgc3VnZ2VzdCB0aGlzIGNoYW5nZSBwcmV2ZW50cyBtYWtpbmcgYSAmIzM0O25leHRob3AgZmRiIGR5bmFtaWMsJiMzNDsgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHJlc3RyaWN0aW9uLiBUbyBkbyB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgIGFuZCBgdnhsYW5fZmRiX2FkZGAgdG8gZ3Jhc3AgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBhZGRlZCBjb25zdHJhaW50IGFuZCB3aGF0IGl0JiMzOTtzIHRyeWluZyB0byBwcmV2ZW50LiBUaGUgZmFjdCB0aGF0IHRoaXMgaW1wYWN0cyBib3RoIHVwZGF0ZXMgYW5kIGFkZGl0aW9ucyBtZWFucyB0aGVyZSBpcyBhbiBpbXBvcnRhbnQgZGV0YWlsIGF0IGhhbmQgdGhhdCBjb3VsZCBoYXZlIGltcGFjdHMgZm9yIHRoZSB1c2VyLiBBbHNvLCBJIHNob3VsZCBjaGVjayB0aGUgcmVsYXRlZCB0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZpYl9uZXh0aG9wcy5zaGAgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTg1Olx0XHRpbnQgZXJyO1xuIDk4NjpcdFxuIDk4NzpcdFx0aWYgKG5oaWQgXHUwMDI2XHUwMDI2ICFyY3VfYWNjZXNzX3BvaW50ZXIoZi1cdTAwM2VuaCkpIHtcbiA5ODg6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuIDk4OTpcdFx0XHRcdCAgICAgICBcJiMzNDtDYW5ub3QgcmVwbGFjZSBhbiBleGlzdGluZyBub24gbmV4dGhvcCBmZGIgd2l0aCBhIG5leHRob3BcJiMzNDspO1xuIDk5MDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gOTkxOlx0XHR9XG4gOTkyOlx0XG4gOTkzOlx0XHRpZiAobmhpZCBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBOTE1fRl9BUFBFTkQpKSB7XG4gOTk0Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiA5OTU6XHRcdFx0XHQgICAgICAgXCYjMzQ7Q2Fubm90IGFwcGVuZCB0byBhIG5leHRob3AgZmRiXCYjMzQ7KTtcbiA5OTY6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDk5NzpcdFx0fVxuIDk5ODpcdFxuIDk5OTpcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihmLVx1MDAzZW5oKSBcdTAwMjZcdTAwMjZcbjEwMDA6XHRcdCAgICAhKHN0YXRlIFx1MDAyNiAoTlVEX1BFUk1BTkVOVCB8IE5VRF9OT0FSUCkpKSB7XG4xMDAxOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q2Fubm90IG1ha2UgYSBuZXh0aG9wIGZkYiBkeW5hbWljXCYjMzQ7KTtcbjEwMDI6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTAwMzpcdFx0fVxuMTAwNDpcdFxuMTAwNTpcdFx0LyogRG8gbm90IGFsbG93IGFuIGV4dGVybmFsbHkgbGVhcm5lZCBlbnRyeSB0byB0YWtlIG92ZXIgYW4gZW50cnkgYWRkZWRcbjEwMDY6XHRcdCAqIGJ5IHRoZSB1c2VyLlxuMTAwNzpcdFx0ICovXG4xMDA4Olx0XHRpZiAoIShmZGJfZmxhZ3MgXHUwMDI2IE5URl9FWFRfTEVBUk5FRCkgfHxcbjEwMDk6XHRcdCAgICAhKGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE5URl9WWExBTl9BRERFRF9CWV9VU0VSKSkge1xuMTAxMDpcdFx0XHRpZiAoZi1cdTAwM2VzdGF0ZSAhPSBzdGF0ZSkge1xuMTAxMTpcdFx0XHRcdGYtXHUwMDNlc3RhdGUgPSBzdGF0ZTtcbjEwMTI6XHRcdFx0XHRub3RpZnkgPSAxO1xuMTAxMzpcdFx0XHR9XG4xMDE0Olx0XHRcdGlmIChmLVx1MDAzZWZsYWdzICE9IGZkYl9mbGFncykge1xuMTAxNTpcdFx0XHRcdGYtXHUwMDNlZmxhZ3MgPSBmZGJfZmxhZ3M7XG4xMDE2Olx0XHRcdFx0bm90aWZ5ID0gMTtcbjEwMTc6XHRcdFx0fVxuMTAxODpcdFx0fVxuMTAxOTpcdFxuMTAyMDpcdFx0aWYgKChmbGFncyBcdTAwMjYgTkxNX0ZfUkVQTEFDRSkpIHtcbjEwMjE6XHRcdFx0LyogT25seSBjaGFuZ2UgdW5pY2FzdHMgKi9cbjEwMjI6XHRcdFx0aWYgKCEoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZi1cdTAwM2VrZXkuZXRoX2FkZHIpIHx8XG4xMDIzOlx0XHRcdCAgICAgIGlzX3plcm9fZXRoZXJfYWRkcihmLVx1MDAzZWtleS5ldGhfYWRkcikpKSB7XG4xMDI0Olx0XHRcdFx0aWYgKG5oaWQpIHtcbjEwMjU6XHRcdFx0XHRcdHJjID0gdnhsYW5fZmRiX25oX3VwZGF0ZSh2eGxhbiwgZiwgbmhpZCwgZXh0YWNrKTtcbjEwMjY6XHRcdFx0XHRcdGlmIChyYyBcdTAwM2MgMClcbjEwMjc6XHRcdFx0XHRcdFx0cmV0dXJuIHJjO1xuMTAyODpcdFx0XHRcdH0gZWxzZSB7XG4xMDI5Olx0XHRcdFx0XHRyYyA9IHZ4bGFuX2ZkYl9yZXBsYWNlKGYsIGlwLCBwb3J0LCB2bmksXG4xMDMwOlx0XHRcdFx0XHRcdFx0ICAgICAgIGlmaW5kZXgsIFx1MDAyNm9sZHJkKTtcbjEwMzE6XHRcdFx0XHR9XG4xMDMyOlx0XHRcdFx0bm90aWZ5IHw9IHJjO1xuMTAzMzpcdFx0XHR9IGVsc2Uge1xuMTAzNDpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q2Fubm90IHJlcGxhY2Ugbm9uLXVuaWNhc3QgZmRiIGVudHJpZXNcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTEwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIFZYTEFOIEZEQiBBZGRpdGlvbioqCgpPa2F5LCBsZXQmIzM5O3Mgem9vbSBpbiBhIGJpdCBmdXJ0aGVyLiBJIHdhbnQgdG8gc2hpZnQgbXkgZm9jdXMgdG8gdGhlIGB2eGxhbl9mZGJfYWRkYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmVzIDEyNTAgdGhyb3VnaCAxMjgwLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhhdCBwYXJ0IG9mIHRoZSBjb2RlLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBsZWFybmluZyB0aGUgTUFDIGFkZHJlc3NlcyBhc3NvY2lhdGVkIHdpdGggYSBWWExBTiBuZXR3b3JrLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGVkZ2UgY2FzZXMgaXMgcGFyYW1vdW50LiBJJiMzOTttIGhvcGluZyB0byBwaW5wb2ludCBob3cgaXQgaGFuZGxlcyBuZXcgZW50cmllcywgYWdpbmcsIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byBwcm92aWRlIHNvbWUgY3JpdGljYWwgY2x1ZXMgYXMgdG8gd2hlcmUgcHJvYmxlbXMgYXJlIG9jY3VycmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNDA6XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbjEyNDE6XHRcdFx0XHQgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZCwgdTE2IGZsYWdzLFxuMTI0MjpcdFx0XHRcdCBib29sICpub3RpZmllZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMTI0MzpcdHtcbjEyNDQ6XHRcdHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTtcbjEyNDU6XHRcdC8qIHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQodnhsYW4tXHUwMDNlZGV2KTsgKi9cbjEyNDY6XHRcdHVuaW9uIHZ4bGFuX2FkZHIgaXA7XG4xMjQ3Olx0XHRfX2JlMTYgcG9ydDtcbjEyNDg6XHRcdF9fYmUzMiBzcmNfdm5pLCB2bmk7XG4xMjQ5Olx0XHR1MzIgaWZpbmRleCwgbmhpZDtcbjEyNTA6XHRcdGludCBlcnI7XG4xMjUxOlx0XG4xMjUyOlx0XHRpZiAoIShuZG0tXHUwMDNlbmRtX3N0YXRlIFx1MDAyNiAoTlVEX1BFUk1BTkVOVHxOVURfUkVBQ0hBQkxFKSkpIHtcbjEyNTM6XHRcdFx0cHJfaW5mbyhcJiMzNDtSVE1fTkVXTkVJR0ggd2l0aCBpbnZhbGlkIHN0YXRlICUjeFxcblwmIzM0OyxcbjEyNTQ6XHRcdFx0XHRuZG0tXHUwMDNlbmRtX3N0YXRlKTtcbjEyNTU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjU2Olx0XHR9XG4xMjU3Olx0XG4xMjU4Olx0XHRpZiAoIXRiIHx8ICghdGJbTkRBX0RTVF0gXHUwMDI2XHUwMDI2ICF0YltOREFfTkhfSURdKSlcbjEyNTk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjYwOlx0XG4xMjYxOlx0XHRlcnIgPSB2eGxhbl9mZGJfcGFyc2UodGIsIHZ4bGFuLCBcdTAwMjZpcCwgXHUwMDI2cG9ydCwgXHUwMDI2c3JjX3ZuaSwgXHUwMDI2dm5pLCBcdTAwMjZpZmluZGV4LFxuMTI2MjpcdFx0XHRcdCAgICAgIFx1MDAyNm5oaWQsIGV4dGFjayk7XG4xMjYzOlx0XHRpZiAoZXJyKVxuMTI2NDpcdFx0XHRyZXR1cm4gZXJyO1xuMTI2NTpcdFxuMTI2NjpcdFx0aWYgKG5oaWQgXHUwMDI2XHUwMDI2ICEobmRtLVx1MDAzZW5kbV9zdGF0ZSBcdTAwMjYgKE5VRF9QRVJNQU5FTlQgfCBOVURfTk9BUlApKSkge1xuMTI2NzpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0EgbmV4dGhvcCBmZGIgY2Fubm90IGJlIGR5bmFtaWNcJiMzNDspO1xuMTI2ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyNjk6XHRcdH1cbjEyNzA6XHRcbjEyNzE6XHRcdGlmICh2eGxhbi1cdTAwM2VkZWZhdWx0X2RzdC5yZW1vdGVfaXAuc2Euc2FfZmFtaWx5ICE9IGlwLnNhLnNhX2ZhbWlseSlcbjEyNzI6XHRcdFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XG4xMjczOlx0XG4xMjc0Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbjEyNzU6XHRcdGVyciA9IHZ4bGFuX2ZkYl91cGRhdGUodnhsYW4sIGFkZHIsIFx1MDAyNmlwLCBuZG0tXHUwMDNlbmRtX3N0YXRlLCBmbGFncyxcbjEyNzY6XHRcdFx0XHQgICAgICAgcG9ydCwgc3JjX3ZuaSwgdm5pLCBpZmluZGV4LFxuMTI3NzpcdFx0XHRcdCAgICAgICBuZG0tXHUwMDNlbmRtX2ZsYWdzIHwgTlRGX1ZYTEFOX0FEREVEX0JZX1VTRVIsXG4xMjc4Olx0XHRcdFx0ICAgICAgIG5oaWQsIHRydWUsIGV4dGFjayk7XG4xMjc5Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ2eGxhbi1cdTAwM2VoYXNoX2xvY2spO1xuMTI4MDpcdFxuMTI4MTpcdFx0aWYgKCFlcnIpXG4xMjgyOlx0XHRcdCpub3RpZmllZCA9IHRydWU7XG4xMjgzOlx0XG4xMjg0Olx0XHRyZXR1cm4gZXJyO1xuMTI4NTpcdH1cbjEyODY6XHRcbjEyODc6XHRpbnQgX192eGxhbl9mZGJfZGVsZXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuMTI4ODpcdFx0XHQgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdW5pb24gdnhsYW5fYWRkciBpcCxcbjEyODk6XHRcdFx0ICAgICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAxNgoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBwcm9ibGVtOgoKKipBbmFseXppbmcgdGhlIER5bmFtaWMgTmV4dGhvcCBGREIgSXNzdWVzKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB3aHkgZHluYW1pYyBuZXh0aG9wIEZEQnMgYXJlIGNhdXNpbmcgcHJvYmxlbXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBkaXJlY3RseSBpbnRvIHRoZSBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBncmVwLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHdoZXJlIHRoZSAmIzM0O2YtJmd0O25oJiMzNDsgKHByZXN1bWFibHksIGEgcG9pbnRlciB0byB0aGUgbmV4dCBob3AgaW5mb3JtYXRpb24pIGlzIHVzZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYHZ4bGFuX2NvcmUuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgVlhMQU4gZnVuY3Rpb25hbGl0eSBsaWtlbHkgcmVzaWRlcy4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGR5bmFtaWMgbmV4dGhvcHMgYXJlIGJlaW5nIGhhbmRsZWQuIEFsdGVybmF0aXZlbHksIEkgY2FuIHNlZSB3aGF0IHRoZSBhZ2luZyBtZWNoYW5pc21zIGluIHRoZSBjb2RlYmFzZSBkbyB3aXRoIHRoaXMgdmFyaWFibGUuIEkgd2lsbCBnZXQgaXQgYnkgZG9pbmcgYSBzZWFyY2gsIHRvby4gSSB0aGluayBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlIHdpbGwgdGVsbCB1cyB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnhsYW5fZmRiX2NsZWFudXB8dnhsYW5fZmRiX2Rlc3Ryb3l8Zi1cdTAwM2VuaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9Nzc0PXN0YXRpYyBzdHJ1Y3QgdnhsYW5fZmRiICp2eGxhbl9mZGJfYWxsb2Moc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sIGNvbnN0IHU4ICptYWMsXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTc4Ny1cdGYtXHUwMDNla2V5LnZuaSA9IHNyY192bmk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6Nzg4Olx0Zi1cdTAwM2VuaCA9IE5VTEw7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNzg5LVx0UkNVX0lOSVRfUE9JTlRFUihmLVx1MDAzZXZkZXYsIHZ4bGFuKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo3OTA6XHRJTklUX0xJU1RfSEVBRChcdTAwMjZmLVx1MDAzZW5oX2xpc3QpO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTc5MS1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmYtXHUwMDNlcmVtb3Rlcyk7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTg1OT1pbnQgdnhsYW5fZmRiX2NyZWF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtODk4LWRlc3Ryb3lfcmVtb3RlOlxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjg5OTpcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cdTAwM2VuaCkpIHtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo5MDA6XHRcdGxpc3RfZGVsX3JjdShcdTAwMjZmLVx1MDAzZW5oX2xpc3QpO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjkwMTpcdFx0bmV4dGhvcF9wdXQocnRubF9kZXJlZmVyZW5jZShmLVx1MDAzZW5oKSk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTAyLVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9OTEyPXN0YXRpYyB2b2lkIF9fdnhsYW5fZmRiX2ZyZWUoc3RydWN0IHZ4bGFuX2ZkYiAqZilcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTE2LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjkxNzpcdG5oID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhmLVx1MDAzZW5oKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy05MTgtXHRpZiAobmgpIHtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo5MTk6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihmLVx1MDAzZW5oLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy05MjAtXHRcdHJjdV9hc3NpZ25fcG9pbnRlcihmLVx1MDAzZXZkZXYsIE5VTEwpO1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz05MzE9c3RhdGljIHZvaWQgdnhsYW5fZmRiX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy05MzctXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6OTM4OnN0YXRpYyB2b2lkIHZ4bGFuX2ZkYl9kZXN0cm95KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBzdHJ1Y3QgdnhsYW5fZmRiICpmLFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTkzOS1cdFx0XHQgICAgICBib29sIGRvX25vdGlmeSwgYm9vbCBzd2Rldl9ub3RpZnkpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTk0Ni1cdGlmIChkb19ub3RpZnkpIHtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo5NDc6XHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cdTAwM2VuaCkpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTQ4LVx0XHRcdHZ4bGFuX2ZkYl9ub3RpZnkodnhsYW4sIGYsIE5VTEwsIFJUTV9ERUxORUlHSCxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTU4LVx0XHRcdCAgICAgICB2eGxhbl9mZGJfcmh0X3BhcmFtcyk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6OTU5Olx0bGlzdF9kZWxfcmN1KFx1MDAyNmYtXHUwMDNlbmhfbGlzdCk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTYwLVx0Y2FsbF9yY3UoXHUwMDI2Zi1cdTAwM2VyY3UsIHZ4bGFuX2ZkYl9mcmVlKTtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9OTcxPXN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTg2LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjk4NzpcdGlmIChuaGlkIFx1MDAyNlx1MDAyNiAhcmN1X2FjY2Vzc19wb2ludGVyKGYtXHUwMDNlbmgpKSB7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTg4LVx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTk5OC1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo5OTk6XHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGYtXHUwMDNlbmgpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTEwMDAtXHQgICAgIShzdGF0ZSBcdTAwMjYgKE5VRF9QRVJNQU5FTlQgfCBOVURfTk9BUlApKSkge1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xMDc2PXN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTExMDYtZXJyX25vdGlmeTpcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoxMTA3Olx0dnhsYW5fZmRiX2Rlc3Ryb3kodnhsYW4sIGYsIGZhbHNlLCBmYWxzZSk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTEwOC1cdHJldHVybiByYztcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MTI4Nz1pbnQgX192eGxhbl9mZGJfZGVsZXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMzEzLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjEzMTQ6XHR2eGxhbl9mZGJfZGVzdHJveSh2eGxhbiwgZiwgdHJ1ZSwgc3dkZXZfbm90aWZ5KTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMzE1LVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xMzUwPXN0YXRpYyBpbnQgdnhsYW5fZmRiX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMzYyLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjEzNjM6XHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cdTAwM2VuaCkpIHtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMzY0LVx0XHRcdGlmICgqaWR4IFx1MDAzYyBjdHgtXHUwMDNlZmRiX2lkeClcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MTQzNj1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gdnhsYW5fc25vb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTQ2My1cdFx0LyogRG9uJiMzOTt0IG92ZXJyaWRlIGFuIGZkYiB3aXRoIG5leHRob3Agd2l0aCBhIGxlYXJudCBlbnRyeSAqL1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjE0NjQ6XHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cdTAwM2VuaCkpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTQ2NS1cdFx0XHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1ZYTEFOX0VOVFJZX0VYSVNUUztcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MjY2Nz1zdGF0aWMgdm9pZCB2eGxhbl94bWl0X25oKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI2NzctXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MjY3ODpcdG5oID0gcmN1X2RlcmVmZXJlbmNlKGYtXHUwMDNlbmgpO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI2NzktXHRpZiAoIW5oKVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0yNzQyPXN0YXRpYyBuZXRkZXZfdHhfdCB2eGxhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI4MzUtXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MjgzNjpcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cdTAwM2VuaCkpIHtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yODM3LVx0XHR2eGxhbl94bWl0X25oKHNrYiwgZGV2LCBmLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0yODYzPXN0YXRpYyB2b2lkIHZ4bGFuX2NsZWFudXAoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI4ODgtXHRcdFx0XHRmLVx1MDAzZXN0YXRlID0gTlVEX1NUQUxFO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjI4ODk6XHRcdFx0XHR2eGxhbl9mZGJfZGVzdHJveSh2eGxhbiwgZiwgdHJ1ZSwgdHJ1ZSk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjg5MC1cdFx0XHR9XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTMwMTU9c3RhdGljIGJvb2wgdnhsYW5fZmRiX25oaWRfbWF0Y2hlcyhjb25zdCBzdHJ1Y3QgdnhsYW5fZmRiICpmLCB1MzIgbmhpZClcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zMDE2LXtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzozMDE3Olx0c3RydWN0IG5leHRob3AgKm5oID0gcnRubF9kZXJlZmVyZW5jZShmLVx1MDAzZW5oKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zMDE4LVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0zMDg4PXN0YXRpYyB2b2lkIHZ4bGFuX2ZsdXNoKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zMTEyLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjMxMTM6XHRcdHZ4bGFuX2ZkYl9kZXN0cm95KHZ4bGFuLCBmLCB0cnVlLCB0cnVlKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zMTE0LXVubG9jazpcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9NDg3Nj1zdGF0aWMgdm9pZCB2eGxhbl9mZGJfbmhfZmx1c2goc3RydWN0IG5leHRob3AgKm5oKVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy00ODg2LVx0XHRpZiAoIWhsaXN0X3VuaGFzaGVkKFx1MDAyNmZkYi1cdTAwM2VmZGJfbm9kZSkpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6NDg4NzpcdFx0XHR2eGxhbl9mZGJfZGVzdHJveSh2eGxhbiwgZmRiLCBmYWxzZSwgZmFsc2UpO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ4ODgtXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MjIKCQkJCQkJCW91dHB1dDogMTM2CgkJCQkJCQl0aG91Z2h0czogNDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZYTEFOIEZEQiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQmIzM5O3MgYWxsIGFib3V0IGJvbHN0ZXJpbmcgdGhlIGlucHV0IHZhbGlkYXRpb24gZm9yIFZYTEFOIEZEQiBlbnRyaWVzLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgdHdvIGtleSBjaGVja3Mgd2l0aGluIHRoZSBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AgYW5kIGB2eGxhbl9mZGJfYWRkYCBmdW5jdGlvbnMuIEZpcnN0LCBpZiBhIG5leHQgaG9wIChgZi0mZ3Q7bmhgKSBpcyBzZXQgZHVyaW5nIGFuIHVwZGF0ZSwgYW5kIHRoZSByZXF1ZXN0ZWQgc3RhdGUgaXNuJiMzOTt0IGBOVURfUEVSTUFORU5UYCBvciBgTlVEX05PQVJQYCwgd2UgcmVqZWN0IHRoZSB1cGRhdGUgd2l0aCBgLUVPUE5PVFNVUFBgLiBTZWNvbmQsIGluIHRoZSBgYWRkYCBvcGVyYXRpb24sIGlmIGEgYG5oaWRgIGlzIHNwZWNpZmllZCBhbmQgdGhlIGRlc2lyZWQgc3RhdGUgaXNuJiMzOTt0IGBOVURfUEVSTUFORU5UYCBvciBgTlVEX05PQVJQYCwgd2UgcmV0dXJuIGAtRUlOVkFMYC4gRXNzZW50aWFsbHksIGl0IGJsb2NrcyBhZ2luZy9keW5hbWljIHRyYW5zaXRpb25zIGZvciBGREJzIGJvdW5kIHRvIGEgbmV4dCBob3AuCgpOb3csIGxldCYjMzk7cyBhZGRyZXNzIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGFsd2F5cyBteSBwcmltYXJ5IGNvbmNlcm4uIEkmIzM5O3ZlIHdhbGtlZCB0aHJvdWdoIHRoaXMgY2FyZWZ1bGx5LiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQsIHNvIHRoYXQmIzM5O3MgZ29vZC4gV2UgYXJlbiYjMzk7dCBjb3B5aW5nIGFueSBidWZmZXJzIHRvIHVzZXIgc3BhY2Ug4oCTIG9ubHkgbmV0bGluayBlcnJvciBtZXNzYWdlcywgd2hpY2ggYXJlIHN0cmluZyBsaXRlcmFscyBhbmQgdGh1cyBzYWZlLiBUaGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBoYW5kbGluZyBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBtZW1vcnksIGVpdGhlci4gVGhlIHBhdGNoIGRvZXMgcHJldmVudCBhZ2luZyBmb3IgbmV4dGhvcCBGREJzLCBidXQgdGhpcyBpcyBhICpzZW1hbnRpYyogdmFsaWRhdGlvbiwgbm90IGEgbWVtb3J5IHNhZmV0eSBpc3N1ZS4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgaXMgKnB1cmVseSogYSBjb250cm9sLWZsb3cgdmFsaWRhdGlvbiwgYSBtYXR0ZXIgb2YgaW5wdXQgY2hlY2tpbmcgb24gdGhlIG5ldGxpbmsgY29tbWFuZHMuIFRoZXJlJiMzOTtzIHplcm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIG5vIHBvc3NpYmlsaXR5IG9mIGluZm9ybWF0aW9uIGxlYWtzLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBwYXRjaC4KCkdpdmVuIHRoaXMsIEkgZG9uJiMzOTt0IHNlZSBhbnkgbmVlZCBmb3IgS01TQU4uIFRoZSBnb2FsIG9mIEtNU0FOIGlzIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgbGVha3MgdG8gdXNlcnNwYWNlLCBidXQgdGhpcyBkb2VzbuKAmXQgdG91Y2ggYW55IG9mIHRob3NlIGFyZWFzLiBUaGUgcGF0Y2ggaXMgYWxsIGFib3V0IHZhbGlkYXRpbmcgcHJvdmlkZWQgcGFyYW1ldGVycyBhbmQgcmV0dXJuaW5nIGFwcHJvcHJpYXRlIGVycm9yIGNvZGVzOyBzdGFuZGFyZCBzYW5pdGl6ZXJzIGxpa2UgS0FTQU4gYW5kIG91ciBleGlzdGluZyBmdW5jdGlvbmFsIHRlc3Rpbmcgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEtNU0FOJiMzOTtzIHJlc291cmNlIHJlcXVpcmVtZW50cyBhcmUgaGlnaCwgYW5kIHRoZSBwb3RlbnRpYWwgYmVuZWZpdCBoZXJlIGlzbiYjMzk7dCBlbm91Z2ggdG8ganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLgoKSW4gc3VtbWFyeTogVGhpcyBwYXRjaCByZXN0cmljdHMgdGhlIGR5bmFtaWMgc3RhdGUgZm9yIEZEQiBlbnRyaWVzIGNvbmZpZ3VyZWQgd2l0aCBuZXh0aG9wcyBieSB2YWxpZGF0aW5nIG5ldGxpbmsgaW5wdXQuIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIGFzIHRoZSBjb2RlIGNoYW5nZXMgZG8gbm90IGRlYWwgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeS4gV2UgY2FuIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgaW4gdnhsYW5fZmRiX2FkZCgpIGFuZCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKCkgdG8gcHJldmVudCBjb25maWd1cmluZyBvciB1cGRhdGluZyBuZXh0aG9wLWJhc2VkIFZYTEFOIEZEQiBlbnRyaWVzIHdpdGggZHluYW1pYyAoYWdpbmcpIHN0YXRlcy4gSXQgb25seSBpbnRyb2R1Y2VzIGNvbmRpdGlvbmFsIGNoZWNrcyBvbiBleGlzdGluZyB2YWxpZGF0ZWQgaW5wdXQgYXJndW1lbnRzIGFuZCByZXR1cm5zIHN0YW5kYXJkIGVycm9yIGNvZGVzIHdpdGggc3RhdGljIG5ldGxpbmsgZXJyb3IgbWVzc2FnZXMuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIG9yIGRhdGEgdHJhbnNmZXJzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBpbiB2eGxhbl9mZGJfYWRkKCkgYW5kIHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcoKSB0byBwcmV2ZW50IGNvbmZpZ3VyaW5nIG9yIHVwZGF0aW5nIG5leHRob3AtYmFzZWQgVlhMQU4gRkRCIGVudHJpZXMgd2l0aCBkeW5hbWljIChhZ2luZykgc3RhdGVzLiBJdCBvbmx5IGludHJvZHVjZXMgY29uZGl0aW9uYWwgY2hlY2tzIG9uIGV4aXN0aW5nIHZhbGlkYXRlZCBpbnB1dCBhcmd1bWVudHMgYW5kIHJldHVybnMgc3RhbmRhcmQgZXJyb3IgY29kZXMgd2l0aCBzdGF0aWMgbmV0bGluayBlcnJvciBtZXNzYWdlcy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgb3IgZGF0YSB0cmFuc2ZlcnMgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBkZXRlY3Rpb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjMwOjU2LjA3NjY1ODY2OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MzYzODUzNjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZYTEFOXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnhsYW5fZmRiX2FkZFwiLFxuICAgIFwidnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ1wiLFxuICAgIFwidnhsYW5fZmRiX3VwZGF0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBpbiB2eGxhbl9mZGJfYWRkKCkgYW5kIHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcoKSB0byBwcmV2ZW50IGNvbmZpZ3VyaW5nIG9yIHVwZGF0aW5nIG5leHRob3AtYmFzZWQgVlhMQU4gRkRCIGVudHJpZXMgd2l0aCBkeW5hbWljIChhZ2luZykgc3RhdGVzLiBJdCBvbmx5IGludHJvZHVjZXMgY29uZGl0aW9uYWwgY2hlY2tzIG9uIGV4aXN0aW5nIHZhbGlkYXRlZCBpbnB1dCBhcmd1bWVudHMgYW5kIHJldHVybnMgc3RhbmRhcmQgZXJyb3IgY29kZXMgd2l0aCBzdGF0aWMgbmV0bGluayBlcnJvciBtZXNzYWdlcy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgb3IgZGF0YSB0cmFuc2ZlcnMgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBkZXRlY3Rpb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBwcmV2ZW50aW5nIG5leHRob3AgRkRCIGVudHJpZXMgZnJvbSBiZWluZyBjb25maWd1cmVkIG9yIHVwZGF0ZWQgd2l0aCBhIGR5bmFtaWMgc3RhdGUgaW4gdGhlIFZYTEFOIGRyaXZlci4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBuZXR3b3JrIG5ldGxpbmsvRkRCIGhhbmRsaW5nIGNvZGUgaW4gdnhsYW5fY29yZS5jLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMDo1Ni4wNzY2NjM3NTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTMzOTE3NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNDNhZWRlNzIyMjY3ZjQ0OWVlYzQwZDI3M2ZmZWQyNmUyYjBlMTViXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMTI6MzA6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jIGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jXFxuaW5kZXggYWM4OGQxYzg1YmVhNi4uOTNiZjdjNTM1ZTY5OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcXG5AQCAtOTk2LDYgKzk5NiwxMiBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihmLVxcdTAwM2VuaCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICEoc3RhdGUgXFx1MDAyNiAoTlVEX1BFUk1BTkVOVCB8IE5VRF9OT0FSUCkpKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkNhbm5vdCBtYWtlIGEgbmV4dGhvcCBmZGIgZHluYW1pY1xcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIERvIG5vdCBhbGxvdyBhbiBleHRlcm5hbGx5IGxlYXJuZWQgZW50cnkgdG8gdGFrZSBvdmVyIGFuIGVudHJ5IGFkZGVkXFxuIFxcdCAqIGJ5IHRoZSB1c2VyLlxcbiBcXHQgKi9cXG5AQCAtMTI1Nyw2ICsxMjYzLDExIEBAIHN0YXRpYyBpbnQgdnhsYW5fZmRiX2FkZChzdHJ1Y3QgbmRtc2cgKm5kbSwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuK1xcdGlmIChuaGlkIFxcdTAwMjZcXHUwMDI2ICEobmRtLVxcdTAwM2VuZG1fc3RhdGUgXFx1MDAyNiAoTlVEX1BFUk1BTkVOVCB8IE5VRF9OT0FSUCkpKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkEgbmV4dGhvcCBmZGIgY2Fubm90IGJlIGR5bmFtaWNcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICh2eGxhbi1cXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX2lwLnNhLnNhX2ZhbWlseSAhPSBpcC5zYS5zYV9mYW1pbHkpXFxuIFxcdFxcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZpYl9uZXh0aG9wcy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9maWJfbmV4dGhvcHMuc2hcXG5pbmRleCAzZDM0NzEyNjczMGE5Li40MzFkN2JlZDc2MjI0IDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9maWJfbmV4dGhvcHMuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmliX25leHRob3BzLnNoXFxuQEAgLTUzMyw2ICs1MzMsMjAgQEAgaXB2Nl9mZGJfZ3JwX2ZjbmFsKClcXG4gXFx0cnVuX2NtZCBcXFwiJEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE0IGRldiB2eDEwIG5oaWQgNjEgc2VsZlxcXCJcXG4gXFx0bG9nX3Rlc3QgJD8gMjU1IFxcXCJGZGIgbWFjIGFkZCB3aXRoIG5leHRob3BcXFwiXFxuIFxcbitcXHQjIGZkYiBlbnRyaWVzIHdpdGggYSBuZXh0aG9wIGdyb3VwIGNhbm5vdCBiZSBhZ2VkIG91dFxcbitcXHRydW5fY21kIFxcXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTUgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZiBzdGF0aWNcXFwiXFxuK1xcdGxvZ190ZXN0ICQ/IDAgXFxcIkZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCBncm91cCBhbmQgc3RhdGljIHN0YXRlXFxcIlxcbitcXG4rXFx0cnVuX2NtZCBcXFwiJEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE2IGRldiB2eDEwIG5oaWQgMTAyIHNlbGYgZHluYW1pY1xcXCJcXG4rXFx0bG9nX3Rlc3QgJD8gMjU1IFxcXCJGZGIgbWFjIGFkZCB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGVcXFwiXFxuK1xcbitcXHRydW5fY21kIFxcXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZlxcXCJcXG4rXFx0cnVuX2NtZCBcXFwiJEJSSURHRSBmZGIgcmVwbGFjZSAwMjowMjowMDowMDowMDoxNyBkZXYgdngxMCBkc3QgMjAwMTpkYjg6OTE6OjExIHNlbGYgZHluYW1pY1xcXCJcXG4rXFx0bG9nX3Rlc3QgJD8gMjU1IFxcXCJGZGIgbWFjIHJlcGxhY2Ugd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlXFxcIlxcbitcXG4rXFx0cnVuX2NtZCBcXFwiJEJSSURHRSBmZGIgYXBwZW5kIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIGRzdCAyMDAxOmRiODo5MTo6MTEgc2VsZiBkeW5hbWljXFxcIlxcbitcXHRsb2dfdGVzdCAkPyAyNTUgXFxcIkZkYiBtYWMgYXBwZW5kIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZVxcXCJcXG4rXFxuIFxcdHJ1bl9jbWQgXFxcIiRJUCAtNiBybyBhZGQgMjAwMTpkYjg6MTAxOjoxLzEyOCBuaGlkIDY2XFxcIlxcbiBcXHRsb2dfdGVzdCAkPyAyIFxcXCJSb3V0ZSBhZGQgd2l0aCBmZGIgbmV4dGhvcFxcXCJcXG4gXFxuQEAgLTY2OSw2ICs2ODMsMjAgQEAgaXB2NF9mZGJfZ3JwX2ZjbmFsKClcXG4gXFx0cnVuX2NtZCBcXFwiJEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE0IGRldiB2eDEwIG5oaWQgMTIgc2VsZlxcXCJcXG4gXFx0bG9nX3Rlc3QgJD8gMjU1IFxcXCJGZGIgbWFjIGFkZCB3aXRoIG5leHRob3BcXFwiXFxuIFxcbitcXHQjIGZkYiBlbnRyaWVzIHdpdGggYSBuZXh0aG9wIGdyb3VwIGNhbm5vdCBiZSBhZ2VkIG91dFxcbitcXHRydW5fY21kIFxcXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTUgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZiBzdGF0aWNcXFwiXFxuK1xcdGxvZ190ZXN0ICQ/IDAgXFxcIkZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCBncm91cCBhbmQgc3RhdGljIHN0YXRlXFxcIlxcbitcXG4rXFx0cnVuX2NtZCBcXFwiJEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE2IGRldiB2eDEwIG5oaWQgMTAyIHNlbGYgZHluYW1pY1xcXCJcXG4rXFx0bG9nX3Rlc3QgJD8gMjU1IFxcXCJGZGIgbWFjIGFkZCB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGVcXFwiXFxuK1xcbitcXHRydW5fY21kIFxcXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZlxcXCJcXG4rXFx0cnVuX2NtZCBcXFwiJEJSSURHRSBmZGIgcmVwbGFjZSAwMjowMjowMDowMDowMDoxNyBkZXYgdngxMCBkc3QgMTAuMC4wLjMgc2VsZiBkeW5hbWljXFxcIlxcbitcXHRsb2dfdGVzdCAkPyAyNTUgXFxcIkZkYiBtYWMgcmVwbGFjZSB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGVcXFwiXFxuK1xcbitcXHRydW5fY21kIFxcXCIkQlJJREdFIGZkYiBhcHBlbmQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgZHN0IDEwLjAuMC4zIHNlbGYgZHluYW1pY1xcXCJcXG4rXFx0bG9nX3Rlc3QgJD8gMjU1IFxcXCJGZGIgbWFjIGFwcGVuZCB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGVcXFwiXFxuK1xcbiBcXHRydW5fY21kIFxcXCIkSVAgcm8gYWRkIDE3Mi4xNi4wLjAvMjIgbmhpZCAxNlxcXCJcXG4gXFx0bG9nX3Rlc3QgJD8gMiBcXFwiUm91dGUgYWRkIHdpdGggZmRiIG5leHRob3BcXFwiXFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMDo1Ny4zOTA2ODg0MThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxMzk1MDY4MzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZYTEFOXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnhsYW5fZmRiX2FkZFwiLFxuICAgIFwidnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ1wiLFxuICAgIFwidnhsYW5fZmRiX3VwZGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgcHJldmVudGluZyBuZXh0aG9wIEZEQiBlbnRyaWVzIGZyb20gYmVpbmcgY29uZmlndXJlZCBvciB1cGRhdGVkIHdpdGggYSBkeW5hbWljIHN0YXRlIGluIHRoZSBWWExBTiBkcml2ZXIuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgbmV0d29yayBuZXRsaW5rL0ZEQiBoYW5kbGluZyBjb2RlIGluIHZ4bGFuX2NvcmUuYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNDNhZWRlNzIyMjY3ZjQ0OWVlYzQwZDI3M2ZmZWQyNmUyYjBlMTViXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMjozMDo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY1xuaW5kZXggYWM4OGQxYzg1YmVhNi4uOTNiZjdjNTM1ZTY5OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY1xuKysrIGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jXG5AQCAtOTk2LDYgKzk5NiwxMiBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbiBcbitcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cdTAwM2VuaCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIShzdGF0ZSBcdTAwMjYgKE5VRF9QRVJNQU5FTlQgfCBOVURfTk9BUlApKSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiQ2Fubm90IG1ha2UgYSBuZXh0aG9wIGZkYiBkeW5hbWljXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHQvKiBEbyBub3QgYWxsb3cgYW4gZXh0ZXJuYWxseSBsZWFybmVkIGVudHJ5IHRvIHRha2Ugb3ZlciBhbiBlbnRyeSBhZGRlZFxuIFx0ICogYnkgdGhlIHVzZXIuXG4gXHQgKi9cbkBAIC0xMjU3LDYgKzEyNjMsMTEgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfYWRkKHN0cnVjdCBuZG1zZyAqbmRtLCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbitcdGlmIChuaGlkIFx1MDAyNlx1MDAyNiAhKG5kbS1cdTAwM2VuZG1fc3RhdGUgXHUwMDI2IChOVURfUEVSTUFORU5UIHwgTlVEX05PQVJQKSkpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIkEgbmV4dGhvcCBmZGIgY2Fubm90IGJlIGR5bmFtaWNcIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuIFx0aWYgKHZ4bGFuLVx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pcC5zYS5zYV9mYW1pbHkgIT0gaXAuc2Euc2FfZmFtaWx5KVxuIFx0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmliX25leHRob3BzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZpYl9uZXh0aG9wcy5zaFxuaW5kZXggM2QzNDcxMjY3MzBhOS4uNDMxZDdiZWQ3NjIyNCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9maWJfbmV4dGhvcHMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9maWJfbmV4dGhvcHMuc2hcbkBAIC01MzMsNiArNTMzLDIwIEBAIGlwdjZfZmRiX2dycF9mY25hbCgpXG4gXHRydW5fY21kIFwiJEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE0IGRldiB2eDEwIG5oaWQgNjEgc2VsZlwiXG4gXHRsb2dfdGVzdCAkPyAyNTUgXCJGZGIgbWFjIGFkZCB3aXRoIG5leHRob3BcIlxuIFxuK1x0IyBmZGIgZW50cmllcyB3aXRoIGEgbmV4dGhvcCBncm91cCBjYW5ub3QgYmUgYWdlZCBvdXRcbitcdHJ1bl9jbWQgXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTUgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZiBzdGF0aWNcIlxuK1x0bG9nX3Rlc3QgJD8gMCBcIkZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCBncm91cCBhbmQgc3RhdGljIHN0YXRlXCJcbitcbitcdHJ1bl9jbWQgXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTYgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZiBkeW5hbWljXCJcbitcdGxvZ190ZXN0ICQ/IDI1NSBcIkZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZVwiXG4rXG4rXHRydW5fY21kIFwiJEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIG5oaWQgMTAyIHNlbGZcIlxuK1x0cnVuX2NtZCBcIiRCUklER0UgZmRiIHJlcGxhY2UgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgZHN0IDIwMDE6ZGI4OjkxOjoxMSBzZWxmIGR5bmFtaWNcIlxuK1x0bG9nX3Rlc3QgJD8gMjU1IFwiRmRiIG1hYyByZXBsYWNlIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZVwiXG4rXG4rXHRydW5fY21kIFwiJEJSSURHRSBmZGIgYXBwZW5kIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIGRzdCAyMDAxOmRiODo5MTo6MTEgc2VsZiBkeW5hbWljXCJcbitcdGxvZ190ZXN0ICQ/IDI1NSBcIkZkYiBtYWMgYXBwZW5kIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZVwiXG4rXG4gXHRydW5fY21kIFwiJElQIC02IHJvIGFkZCAyMDAxOmRiODoxMDE6OjEvMTI4IG5oaWQgNjZcIlxuIFx0bG9nX3Rlc3QgJD8gMiBcIlJvdXRlIGFkZCB3aXRoIGZkYiBuZXh0aG9wXCJcbiBcbkBAIC02NjksNiArNjgzLDIwIEBAIGlwdjRfZmRiX2dycF9mY25hbCgpXG4gXHRydW5fY21kIFwiJEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE0IGRldiB2eDEwIG5oaWQgMTIgc2VsZlwiXG4gXHRsb2dfdGVzdCAkPyAyNTUgXCJGZGIgbWFjIGFkZCB3aXRoIG5leHRob3BcIlxuIFxuK1x0IyBmZGIgZW50cmllcyB3aXRoIGEgbmV4dGhvcCBncm91cCBjYW5ub3QgYmUgYWdlZCBvdXRcbitcdHJ1bl9jbWQgXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTUgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZiBzdGF0aWNcIlxuK1x0bG9nX3Rlc3QgJD8gMCBcIkZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCBncm91cCBhbmQgc3RhdGljIHN0YXRlXCJcbitcbitcdHJ1bl9jbWQgXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTYgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZiBkeW5hbWljXCJcbitcdGxvZ190ZXN0ICQ/IDI1NSBcIkZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZVwiXG4rXG4rXHRydW5fY21kIFwiJEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIG5oaWQgMTAyIHNlbGZcIlxuK1x0cnVuX2NtZCBcIiRCUklER0UgZmRiIHJlcGxhY2UgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgZHN0IDEwLjAuMC4zIHNlbGYgZHluYW1pY1wiXG4rXHRsb2dfdGVzdCAkPyAyNTUgXCJGZGIgbWFjIHJlcGxhY2Ugd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlXCJcbitcbitcdHJ1bl9jbWQgXCIkQlJJREdFIGZkYiBhcHBlbmQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgZHN0IDEwLjAuMC4zIHNlbGYgZHluYW1pY1wiXG4rXHRsb2dfdGVzdCAkPyAyNTUgXCJGZGIgbWFjIGFwcGVuZCB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGVcIlxuK1xuIFx0cnVuX2NtZCBcIiRJUCBybyBhZGQgMTcyLjE2LjAuMC8yMiBuaGlkIDE2XCJcbiBcdGxvZ190ZXN0ICQ/IDIgXCJSb3V0ZSBhZGQgd2l0aCBmZGIgbmV4dGhvcFwiXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMDo1Ny4zOTA2ODk4ODhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDQ1NzM5OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVlhMQU4gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNgIGFuZCBhIHNlbGYtdGVzdCBzY3JpcHQsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmliX25leHRob3BzLnNoYC4gSW50ZXJlc3RpbmcuIExldCdzIGRpdmUgaW50byB0aGUgY29yZSBjaGFuZ2VzIGluIGB2eGxhbl9jb3JlLmNgIGZpcnN0LlxuXG5JdCBsb29rcyBsaWtlIHRoZSBmb2N1cyBpcyBvbiBob3cgVlhMQU4gRkRCIGVudHJpZXMgaW50ZXJhY3Qgd2l0aCBuZXh0IGhvcHMuIEluIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCwgdGhlcmUncyBhIG5ldyBjaGVjazogaWYgYSBuZXh0IGhvcCAoYGYtXHUwMDNlbmhgKSBhbHJlYWR5IGV4aXN0cyBhbmQgaXNuJ3QgbWFya2VkIGFzIHBlcm1hbmVudCBvciBkb2Vzbid0IHVzZSBBUlAsIHdlJ3JlIG5vdyBwcmV2ZW50aW5nIHVwZGF0ZXMgdGhhdCB3b3VsZCBtYWtlIGl0IGR5bmFtaWMuIFRoZSBlcnJvciBtZXNzYWdlIGV4cGxpY2l0bHkgc3RhdGVzLCBcIkNhbm5vdCBtYWtlIGEgbmV4dGhvcCBmZGIgZHluYW1pYy5cIiBUaGlzIHN1Z2dlc3RzIHRoZXJlIGlzIGEgbmV3IHJlc3RyaWN0aW9uIG9uIHRoZSBzdGF0ZSBvZiBhIEZEQiBlbnRyeS5cblxuU2ltaWxhcmx5LCB3aXRoaW4gYHZ4bGFuX2ZkYl9hZGRgLCBhIHNpbWlsYXIgcmVzdHJpY3Rpb24gZXhpc3RzLiBJZiBhIG5leHQgaG9wIGlkZW50aWZpZXIgKGBuaGlkYCkgaXMgcHJlc2VudCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgbmV4dCBob3AgZW50cnkgKGBuZG0tXHUwMDNlbmRtX3N0YXRlYCkgaXMgbm90IHBlcm1hbmVudCwgaXQgcmVzdWx0cyBpbiBhbiBlcnJvcjogXCJBIG5leHRob3AgZmRiIGNhbm5vdCBiZSBkeW5hbWljLlwiIFRoZSBlcnJvciBjb2RlIGJlaW5nIHJldHVybmVkIGhlcmUgaXMgYSBsaXR0bGUgZGlmZmVyZW50LCBgLUVJTlZBTGAgdmVyc3VzIGAtRU9QTk9UU1VQUGAuIFRoaXMgY2hhbmdlIGNsZWFybHkgYWltcyB0byBlbmZvcmNlIHN0YXRpYywgbm9uLWR5bmFtaWMgbmV4dCBob3AgY29uZmlndXJhdGlvbnMgaW4gdGhlc2Ugc3BlY2lmaWMgRkRCIG9wZXJhdGlvbnMuIEkgd29uZGVyIGlmIHRoZXJlIGhhdmUgYmVlbiBpc3N1ZXMgd2l0aCB0aGUgb3JpZ2luYWwgZHluYW1pYyBpbXBsZW1lbnRhdGlvbiwgb3IgcGVyaGFwcywgZm9yIHNlY3VyaXR5IHJlYXNvbnMuXG5cbk5vdywgbGV0IG1lIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyBmb3IgVlhMQU4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgY2hhbmdlIG1pZ2h0IGJlIGltcGFjdGluZyBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBvciBmZWF0dXJlcy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhbmQgZW5hYmxpbmcgY29uZGl0aW9ucyB3aWxsIGJlIGNydWNpYWwgZm9yIGEgZnVsbCBhc3Nlc3NtZW50IG9mIHRoZSBwYXRjaCdzIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxOSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjMxOjA2LjQzNjQzMTYxNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUwODI0MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZYTEFOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTIxNj1jb25maWcgSVBWVEFQXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTIyOS1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjIzMDpjb25maWcgVlhMQU5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzMS1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBlWHRlbnNpYmxlIExvY2FsIEFyZWEgTmV0d29yayAoVlhMQU4pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMTowNi41OTE1MTg2MDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDExNTQzODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgTmV0d29yayBEcml2ZXIgS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNvbWV0aGluZyByZWxhdGVkIHRvIG5ldHdvcmsgZHJpdmVycywgcHJvYmFibHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgc3RhbmRhcmQgbG9jYXRpb246IGBkcml2ZXJzL25ldC9LY29uZmlnYC4gQW5kLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGNvbmZpZyBmaWxlIGlzIHN0cnVjdHVyZWQsIEknZCBiZXQgdGhlIHJlbGV2YW50IGVudHJ5IGlzIGdvaW5nIHRvIGJlIHNvbWV3aGVyZSBhcm91bmQgbGluZSAyMzAuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtb3JlIGNvcmUgYW5kIGdlbmVyaWMgZmVhdHVyZXMgYXJlIGRlZmluZWQsIG9yIHBlcmhhcHMgd2hlcmUgdGhleSdyZSBncm91cGluZyByZWxhdGVkIGRldmljZS1zcGVjaWZpYyBvcHRpb25zLiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLi4uIGxpa2VseSBkZWFsaW5nIHdpdGggdGhlIHNwZWNpZmljIHBhcmFtZXRlcnMuIEkgZXhwZWN0IHRoZXJlIHRvIGJlIGEgbmVzdGVkIGBjb25maWdgIGJsb2NrIHdpdGggcG90ZW50aWFsbHkgc2V2ZXJhbCBkZXBlbmRlbmNpZXMgYW5kIGhlbHAgdGV4dC4gSSBob3BlIGl0J3Mgd2VsbC1kb2N1bWVudGVkISBUaW1lIHRvIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMToxMS42MDMwNjQ2OTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjU6XFx0XFx0ICBpcHZ0YXAnLCBhbmQgdGhlbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSB0YXAgdXNlciBzcGFjZSBpbnRlcmZhY2UuXFxuIDIyNjpcXHRcXG4gMjI3OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAyMjg6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBpcHZ0YXAuXFxuIDIyOTpcXHRcXG4gMjMwOlxcdGNvbmZpZyBWWExBTlxcbiAyMzE6XFx0XFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgZVh0ZW5zaWJsZSBMb2NhbCBBcmVhIE5ldHdvcmsgKFZYTEFOKVxcXCJcXG4gMjMyOlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAyMzM6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuIDIzNDpcXHRcXHRzZWxlY3QgR1JPX0NFTExTXFxuIDIzNTpcXHRcXHRoZWxwXFxuIDIzNjpcXHRcXHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgdnhsYW4gdmlydHVhbCBpbnRlcmZhY2VzIHRoYXQgcHJvdmlkZVxcbiAyMzc6XFx0XFx0ICBMYXllciAyIE5ldHdvcmtzIG92ZXIgTGF5ZXIgMyBOZXR3b3Jrcy4gVlhMQU4gaXMgb2Z0ZW4gdXNlZFxcbiAyMzg6XFx0XFx0ICB0byB0dW5uZWwgdmlydHVhbCBuZXR3b3JrIGluZnJhc3RydWN0dXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cXG4gMjM5OlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlOlxcbiAyNDA6XFx0XFx0ICAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LW1haGFsaW5nYW0tZHV0dC1kY29wcy12eGxhbi0wMlxcbiAyNDE6XFx0XFxuIDI0MjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMjQzOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgdnhsYW4uXFxuIDI0NDpcXHRcXG4gMjQ1OlxcdGNvbmZpZyBHRU5FVkVcXG4gMjQ2OlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIE5ldHdvcmsgVmlydHVhbGl6YXRpb24gRW5jYXBzdWxhdGlvblxcXCJcXG4gMjQ3OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAyNDg6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuIDI0OTpcXHRcXHRzZWxlY3QgR1JPX0NFTExTXFxuIDI1MDpcXHRcXHRoZWxwXFxuIDI1MTpcXHRcXHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgZ2VuZXZlIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHByb3ZpZGVcXG4gMjUyOlxcdFxcdCAgTGF5ZXIgMiBOZXR3b3JrcyBvdmVyIExheWVyIDMgTmV0d29ya3MuIEdFTkVWRSBpcyBvZnRlbiB1c2VkXFxuIDI1MzpcXHRcXHQgIHRvIHR1bm5lbCB2aXJ0dWFsIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxcbiAyNTQ6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjMxOjExLjYwMzE3Mjg1MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MTI4NTYxODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWWExBTiBGREIgVXBkYXRlIExvZ2ljKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSBWWExBTiBGREIgdXBkYXRlcy4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgYHZ4bGFuX2NvcmUuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGhvbWluZyBpbiBvbiB0aGUgZnVuY3Rpb25zIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCBhbmQgYHZ4bGFuX2ZkYl9hZGRgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaGFuZGxpbmcgdGhlIGNyZWF0aW9uIGFuZCBtb2RpZmljYXRpb24gb2YgZm9yd2FyZGluZyBkYXRhYmFzZSBlbnRyaWVzIGZvciBWWExBTi4gSSBuZWVkIHRvIGRpc3NlY3QgdGhlIGxvZ2ljIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzLiBJIG5lZWQgdG8gZ3Jhc3AgaG93IHRoZSBleGlzdGluZyBlbnRyaWVzIGFyZSBoYW5kbGVkIGFuZCwgY29udmVyc2VseSwgaG93IG5ldyBlbnRyaWVzIGFyZSBhZGRlZCB0byB0aGUgRkRCLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIG15IGludmVzdGlnYXRpb24gbGllcy4gRnJvbSB0aGVyZSwgSSdsbCB0cnkgdG8gZGV0ZXJtaW5lIHRoZSByb290IGNhdXNlIG9mIHRoZSBpc3N1ZSBJJ20gZGVidWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjYyLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMToxNC4wMTYwMzA4OTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk4NTpcXHRcXHRpbnQgZXJyO1xcbiA5ODY6XFx0XFxuIDk4NzpcXHRcXHRpZiAobmhpZCBcXHUwMDI2XFx1MDAyNiAhcmN1X2FjY2Vzc19wb2ludGVyKGYtXFx1MDAzZW5oKSkge1xcbiA5ODg6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbiA5ODk6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJDYW5ub3QgcmVwbGFjZSBhbiBleGlzdGluZyBub24gbmV4dGhvcCBmZGIgd2l0aCBhIG5leHRob3BcXFwiKTtcXG4gOTkwOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gOTkxOlxcdFxcdH1cXG4gOTkyOlxcdFxcbiA5OTM6XFx0XFx0aWYgKG5oaWQgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgTkxNX0ZfQVBQRU5EKSkge1xcbiA5OTQ6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbiA5OTU6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJDYW5ub3QgYXBwZW5kIHRvIGEgbmV4dGhvcCBmZGJcXFwiKTtcXG4gOTk2OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gOTk3OlxcdFxcdH1cXG4gOTk4OlxcdFxcbiA5OTk6XFx0XFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihmLVxcdTAwM2VuaCkgXFx1MDAyNlxcdTAwMjZcXG4xMDAwOlxcdFxcdCAgICAhKHN0YXRlIFxcdTAwMjYgKE5VRF9QRVJNQU5FTlQgfCBOVURfTk9BUlApKSkge1xcbjEwMDE6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQ2Fubm90IG1ha2UgYSBuZXh0aG9wIGZkYiBkeW5hbWljXFxcIik7XFxuMTAwMjpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTAwMzpcXHRcXHR9XFxuMTAwNDpcXHRcXG4xMDA1OlxcdFxcdC8qIERvIG5vdCBhbGxvdyBhbiBleHRlcm5hbGx5IGxlYXJuZWQgZW50cnkgdG8gdGFrZSBvdmVyIGFuIGVudHJ5IGFkZGVkXFxuMTAwNjpcXHRcXHQgKiBieSB0aGUgdXNlci5cXG4xMDA3OlxcdFxcdCAqL1xcbjEwMDg6XFx0XFx0aWYgKCEoZmRiX2ZsYWdzIFxcdTAwMjYgTlRGX0VYVF9MRUFSTkVEKSB8fFxcbjEwMDk6XFx0XFx0ICAgICEoZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBOVEZfVlhMQU5fQURERURfQllfVVNFUikpIHtcXG4xMDEwOlxcdFxcdFxcdGlmIChmLVxcdTAwM2VzdGF0ZSAhPSBzdGF0ZSkge1xcbjEwMTE6XFx0XFx0XFx0XFx0Zi1cXHUwMDNlc3RhdGUgPSBzdGF0ZTtcXG4xMDEyOlxcdFxcdFxcdFxcdG5vdGlmeSA9IDE7XFxuMTAxMzpcXHRcXHRcXHR9XFxuMTAxNDpcXHRcXHRcXHRpZiAoZi1cXHUwMDNlZmxhZ3MgIT0gZmRiX2ZsYWdzKSB7XFxuMTAxNTpcXHRcXHRcXHRcXHRmLVxcdTAwM2VmbGFncyA9IGZkYl9mbGFncztcXG4xMDE2OlxcdFxcdFxcdFxcdG5vdGlmeSA9IDE7XFxuMTAxNzpcXHRcXHRcXHR9XFxuMTAxODpcXHRcXHR9XFxuMTAxOTpcXHRcXG4xMDIwOlxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBOTE1fRl9SRVBMQUNFKSkge1xcbjEwMjE6XFx0XFx0XFx0LyogT25seSBjaGFuZ2UgdW5pY2FzdHMgKi9cXG4xMDIyOlxcdFxcdFxcdGlmICghKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGYtXFx1MDAzZWtleS5ldGhfYWRkcikgfHxcXG4xMDIzOlxcdFxcdFxcdCAgICAgIGlzX3plcm9fZXRoZXJfYWRkcihmLVxcdTAwM2VrZXkuZXRoX2FkZHIpKSkge1xcbjEwMjQ6XFx0XFx0XFx0XFx0aWYgKG5oaWQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzE6MTQuMDE2MjMxNzAzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU3Mzg0NDgxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVlhMQU4gRm9yd2FyZGluZyBEYXRhYmFzZSBBZGRpdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgVlhMQU4sIGFuZCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgZm9yd2FyZGluZyBkYXRhYmFzZS4gU3BlY2lmaWNhbGx5LCBsZXQncyB6b29tIGluIG9uIGB2eGxhbl9mZGJfYWRkYC4gSXQncyBob3VzZWQgaW4gYHZ4bGFuX2NvcmUuY2AsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCdzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgYWRkaW5nIGVudHJpZXMgdG8gdGhlIEZEQi4gVW5kZXJzdGFuZGluZyBpdHMgb3BlcmF0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBWWExBTiBoYW5kbGVzIGl0cyBNQUMgYWRkcmVzcyBsZWFybmluZyBhbmQgZm9yd2FyZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU2OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzE6MTUuNTkwMDc5NTA3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI1MDpcXHRcXHRpbnQgZXJyO1xcbjEyNTE6XFx0XFxuMTI1MjpcXHRcXHRpZiAoIShuZG0tXFx1MDAzZW5kbV9zdGF0ZSBcXHUwMDI2IChOVURfUEVSTUFORU5UfE5VRF9SRUFDSEFCTEUpKSkge1xcbjEyNTM6XFx0XFx0XFx0cHJfaW5mbyhcXFwiUlRNX05FV05FSUdIIHdpdGggaW52YWxpZCBzdGF0ZSAlI3hcXFxcblxcXCIsXFxuMTI1NDpcXHRcXHRcXHRcXHRuZG0tXFx1MDAzZW5kbV9zdGF0ZSk7XFxuMTI1NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjU2OlxcdFxcdH1cXG4xMjU3OlxcdFxcbjEyNTg6XFx0XFx0aWYgKCF0YiB8fCAoIXRiW05EQV9EU1RdIFxcdTAwMjZcXHUwMDI2ICF0YltOREFfTkhfSURdKSlcXG4xMjU5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyNjA6XFx0XFxuMTI2MTpcXHRcXHRlcnIgPSB2eGxhbl9mZGJfcGFyc2UodGIsIHZ4bGFuLCBcXHUwMDI2aXAsIFxcdTAwMjZwb3J0LCBcXHUwMDI2c3JjX3ZuaSwgXFx1MDAyNnZuaSwgXFx1MDAyNmlmaW5kZXgsXFxuMTI2MjpcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2bmhpZCwgZXh0YWNrKTtcXG4xMjYzOlxcdFxcdGlmIChlcnIpXFxuMTI2NDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEyNjU6XFx0XFxuMTI2NjpcXHRcXHRpZiAobmhpZCBcXHUwMDI2XFx1MDAyNiAhKG5kbS1cXHUwMDNlbmRtX3N0YXRlIFxcdTAwMjYgKE5VRF9QRVJNQU5FTlQgfCBOVURfTk9BUlApKSkge1xcbjEyNjc6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQSBuZXh0aG9wIGZkYiBjYW5ub3QgYmUgZHluYW1pY1xcXCIpO1xcbjEyNjg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTI2OTpcXHRcXHR9XFxuMTI3MDpcXHRcXG4xMjcxOlxcdFxcdGlmICh2eGxhbi1cXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX2lwLnNhLnNhX2ZhbWlseSAhPSBpcC5zYS5zYV9mYW1pbHkpXFxuMTI3MjpcXHRcXHRcXHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcXG4xMjczOlxcdFxcbjEyNzQ6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ2eGxhbi1cXHUwMDNlaGFzaF9sb2NrKTtcXG4xMjc1OlxcdFxcdGVyciA9IHZ4bGFuX2ZkYl91cGRhdGUodnhsYW4sIGFkZHIsIFxcdTAwMjZpcCwgbmRtLVxcdTAwM2VuZG1fc3RhdGUsIGZsYWdzLFxcbjEyNzY6XFx0XFx0XFx0XFx0ICAgICAgIHBvcnQsIHNyY192bmksIHZuaSwgaWZpbmRleCxcXG4xMjc3OlxcdFxcdFxcdFxcdCAgICAgICBuZG0tXFx1MDAzZW5kbV9mbGFncyB8IE5URl9WWExBTl9BRERFRF9CWV9VU0VSLFxcbjEyNzg6XFx0XFx0XFx0XFx0ICAgICAgIG5oaWQsIHRydWUsIGV4dGFjayk7XFxuMTI3OTpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dnhsYW4tXFx1MDAzZWhhc2hfbG9jayk7XFxuMTI4MDpcXHRcXG4xMjgxOlxcdFxcdGlmICghZXJyKVxcbjEyODI6XFx0XFx0XFx0Km5vdGlmaWVkID0gdHJ1ZTtcXG4xMjgzOlxcdFxcbjEyODQ6XFx0XFx0cmV0dXJuIGVycjtcXG4xMjg1OlxcdH1cXG4xMjg2OlxcdFxcbjEyODc6XFx0aW50IF9fdnhsYW5fZmRiX2RlbGV0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4xMjg4OlxcdFxcdFxcdCAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1bmlvbiB2eGxhbl9hZGRyIGlwLFxcbjEyODk6XFx0XFx0XFx0ICAgICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzE6MTUuNTkwMjY2MTA3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4ODU0NTE2OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBWWExBTjogQSBUYXJnZXRlZCBBcHByb2FjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgZnV6emluZyBWWExBTiBpcyBhIHZpYWJsZSB0YXJnZXQuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgc29tZXRoaW5nIEkgY2FuIGFjdHVhbGx5IHJlYWNoIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQg4oCTIGFuZCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuIFZYTEFOIGlzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSBkcml2ZXIsIGVuYWJsZWQgYnkgYENPTkZJR19WWExBTmAsIGFuZCBsZXZlcmFnZXMgYHJ0bmV0bGlua2AgaW50ZXJmYWNlcy4gVGhpcyBpcyBwcmltZSB0ZXJyaXRvcnkgZm9yIFN5emthbGxlciwgd2hpY2ggZnJlcXVlbnRseSB0YXJnZXRzIHRob3NlIGFyZWFzLlxuXG5OZXh0LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIHRoaXMgY29kZSAqZXhlY3V0YWJsZSo/IFllcywgZGVmaW5pdGVseS4gU3BlY2lmaWNhbGx5LCBJJ20gaG9uaW5nIGluIG9uIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCBhbmQgYHZ4bGFuX2ZkYl9hZGRgIHdpdGhpbiBgZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uXG5cblRoZSBxdWVzdGlvbiBvZiB3b3J0aGluZXNzLCBnaXZlbiBteSBpbml0aWFsIGFuYWx5c2lzLCBpcyBzZXR0bGVkOiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiBgdnhsYW5fZmRiX2FkZGAgYW5kIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCwgYW5kIHBvc3NpYmx5IGB2eGxhbl9mZGJfdXBkYXRlYCAuIEknbGwgcHJpb3JpdGl6ZSB0aGVzZSBzeW1ib2xzIGZvciBmdXp6aW5nLlxuXG5NeSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGBWWExBTmAgYW5kIGBJTkVUYC5cblxuQW5kIGZpbmFsbHksIHRvIG1ha2Ugc3VyZSwgbGV0J3MgY29uZmlybSB0aGUgY29tcGlsYXRpb246IGB2eGxhbl9jb3JlLmNgIGlzIGluZGVlZCBjb21waWxlZCB3aGVuIGBDT05GSUdfVlhMQU5gIGlzIGVuYWJsZWQuIExldCdzIGRvdWJsZSBjaGVjayB0aGF0IE1ha2VmaWxlIGluIGBkcml2ZXJzL25ldC92eGxhbmAgdG8gYmUgY2VydGFpbi4gTm93LCBsZXQncyBnZXQgdG8gd29yayFcblxuXG4iLCJJbnB1dFRva2VucyI6NzQ0NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjMxOjIxLjQ3NTcyMDM0MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC92eGxhbi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCNcXG4gICAyOlxcdCMgTWFrZWZpbGUgZm9yIHRoZSB2eGxhbiBkcml2ZXJcXG4gICAzOlxcdCNcXG4gICA0OlxcdFxcbiAgIDU6XFx0b2JqLSQoQ09ORklHX1ZYTEFOKSArPSB2eGxhbi5vXFxuICAgNjpcXHRcXG4gICA3OlxcdHZ4bGFuLW9ianMgOj0gdnhsYW5fY29yZS5vIHZ4bGFuX211bHRpY2FzdC5vIHZ4bGFuX3ZuaWZpbHRlci5vIHZ4bGFuX21kYi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjMxOjIxLjQ3NTc3NzcxM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTI3Mzc0MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWWExBTiBGREIgVXBkYXRlIE1lY2hhbmlzbXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBWWExBTiBGREIgdXBkYXRlIHNpdHVhdGlvbi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQ7IGFyZSB0aGVyZSBvdGhlciBzeW1ib2xzIGF0IHBsYXkgaGVyZSBiZXlvbmQgdGhlIG9uZXMgSSdtIGluaXRpYWxseSBhd2FyZSBvZj8gT2theSwgSSBzZWU6IGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCwgYHZ4bGFuX2ZkYl9hZGRgLCBhbmQgYHZ4bGFuX2ZkYl91cGRhdGVgLiBHb29kLiBOb3csIEkgd2FudCB0byBjb25maXJtIHRoZSBzY29wZSBvZiBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AuIElzIGl0IGEgc3RhdGljIGlubGluZSwgb3IganVzdCBhIHN0YXRpYyBmdW5jdGlvbj8gQWxyaWdodCwgaXQncyBkZWZpbmVkIG9uIGxpbmUgOTk2IGFzIGBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcoLi4uKWAuIFNvLCBpdOKAmXMgYSBzdGF0aWMsIG5vbi1pbmxpbmUgZnVuY3Rpb24gcmVzaWRpbmcgd2l0aGluIGB2eGxhbl9jb3JlLmNgLiBUaGlzIHJlc3RyaWN0cyBpdHMgdmlzaWJpbGl0eSwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbnRlZ3JhdGlvbiBpbnRvIHRoZSBicm9hZGVyIFZYTEFOIGZyYW1ld29yay4gTm93LCBgdnhsYW5fZmRiX2FkZGAgaXMgYWxzbyBzdGF0aWMsIGBzdGF0aWMgaW50IHZ4bGFuX2ZkYl9hZGQoLi4uKWAsIGFuZCBmcm9tIGV4cGVyaWVuY2UsIEkgcmVjYWxsIHRoYXQgdGhpcyBvbmUgaXMgY29ubmVjdGVkIHRvIGAubmRvX2ZkYl9hZGRgIG9yIHJ0bmV0bGluayBuZWlnaGJvciBvcGVyYXRpb25zLiBNeSBuZXh0IHN0ZXAgaGVyZSBpcyB0byBhbmFseXplIHRoZSBjYWxsZXJzIG9mIGB2eGxhbl9mZGJfYWRkYCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBmZGIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMToyNC42MDMxNTQ4MjJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTU3MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZ4bGFuX2ZkYl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xMTUyPXN0YXRpYyBpbnQgdnhsYW5fZmRiX3BhcnNlKHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTEyMzgtLyogQWRkIHN0YXRpYyBlbnRyeSAodmlhIG5ldGxpbmspICovXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjEyMzk6c3RhdGljIGludCB2eGxhbl9mZGJfYWRkKHN0cnVjdCBuZG1zZyAqbmRtLCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMjQwLVxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTMyOTY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2eGxhbl9uZXRkZXZfZXRoZXJfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTMzMDUtXFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcXHQ9IGV0aF9tYWNfYWRkcixcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MzMwNjpcXHQubmRvX2ZkYl9hZGRcXHRcXHQ9IHZ4bGFuX2ZkYl9hZGQsXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTMzMDctXFx0Lm5kb19mZGJfZGVsXFx0XFx0PSB2eGxhbl9mZGJfZGVsZXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMToyNC42NDY3MTY5MzFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDA2NDQzNDYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipWWExBTiBGREIgRW50cnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBWWExBTiBGREIgbWFuYWdlbWVudCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYHZ4bGFuX2ZkYl9hZGRgIGlzIHRoZSBjb3JlIGhhbmRsZXIgZm9yIGFkZGluZyBuZXcgZW50cmllcywgYWN0aW5nIGFzIHRoZSBgbmRvX2ZkYl9hZGRgIGNhbGxiYWNrIGZvciBWWExBTiBuZXR3b3JrIGRldmljZXMuIEkgc2VlIHRoYXQgYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgIGFuZCBgdnhsYW5fZmRiX3VwZGF0ZWAgYXJlIGludGVybmFsIGhlbHBlcnMgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yIHRoZSBhY3R1YWwgcHJvY2VzcyBvZiB1cGRhdGluZyBleGlzdGluZyBGREIgZW50cmllcywgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGUgY29uZmlndXJhdGlvbnMgaW4gdXNlIGFyZSBgVlhMQU5gIGFuZCBgSU5FVGAuIE5vdGhpbmcgY29tcGxpY2F0ZWQgaGVyZSwgSSB0aGluayBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NTQsIk91dHB1dFRva2VucyI6MTE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjMxOjI4LjcxMTE1MzUyNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NjAwOTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWWExBTlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZ4bGFuX2ZkYl9hZGRcIixcbiAgICBcInZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdcIixcbiAgICBcInZ4bGFuX2ZkYl91cGRhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIHByZXZlbnRpbmcgbmV4dGhvcCBGREIgZW50cmllcyBmcm9tIGJlaW5nIGNvbmZpZ3VyZWQgb3IgdXBkYXRlZCB3aXRoIGEgZHluYW1pYyBzdGF0ZSBpbiB0aGUgVlhMQU4gZHJpdmVyLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIG5ldHdvcmsgbmV0bGluay9GREIgaGFuZGxpbmcgY29kZSBpbiB2eGxhbl9jb3JlLmMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlhMQU5cIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2eGxhbl9mZGJfYWRkXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBwcmV2ZW50aW5nIG5leHRob3AgRkRCIGVudHJpZXMgZnJvbSBiZWluZyBjb25maWd1cmVkIG9yIHVwZGF0ZWQgd2l0aCBhIGR5bmFtaWMgc3RhdGUgaW4gdGhlIFZYTEFOIGRyaXZlci4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBuZXR3b3JrIG5ldGxpbmsvRkRCIGhhbmRsaW5nIGNvZGUgaW4gdnhsYW5fY29yZS5jLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMToyOC43ODU3NTk4MzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NjU0NzQyODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzE6MjguNzg2MjE0Nzc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQ2NTQyODMyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgaW4gdnhsYW5fZmRiX2FkZCgpIGFuZCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKCkgdG8gcHJldmVudCBjb25maWd1cmluZyBvciB1cGRhdGluZyBuZXh0aG9wLWJhc2VkIFZYTEFOIEZEQiBlbnRyaWVzIHdpdGggZHluYW1pYyAoYWdpbmcpIHN0YXRlcy4gSXQgb25seSBpbnRyb2R1Y2VzIGNvbmRpdGlvbmFsIGNoZWNrcyBvbiBleGlzdGluZyB2YWxpZGF0ZWQgaW5wdXQgYXJndW1lbnRzIGFuZCByZXR1cm5zIHN0YW5kYXJkIGVycm9yIGNvZGVzIHdpdGggc3RhdGljIG5ldGxpbmsgZXJyb3IgbWVzc2FnZXMuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIG9yIGRhdGEgdHJhbnNmZXJzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE0M2FlZGU3MjIyNjdmNDQ5ZWVjNDBkMjczZmZlZDI2ZTJiMGUxNWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDEyOjMwOjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jIGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jXG5pbmRleCBhYzg4ZDFjODViZWE2Li45M2JmN2M1MzVlNjk4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jXG4rKysgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcbkBAIC05OTYsNiArOTk2LDEyIEBAIHN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuIFxuK1x0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihmLVx1MDAzZW5oKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhKHN0YXRlIFx1MDAyNiAoTlVEX1BFUk1BTkVOVCB8IE5VRF9OT0FSUCkpKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJDYW5ub3QgbWFrZSBhIG5leHRob3AgZmRiIGR5bmFtaWNcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbiBcdC8qIERvIG5vdCBhbGxvdyBhbiBleHRlcm5hbGx5IGxlYXJuZWQgZW50cnkgdG8gdGFrZSBvdmVyIGFuIGVudHJ5IGFkZGVkXG4gXHQgKiBieSB0aGUgdXNlci5cbiBcdCAqL1xuQEAgLTEyNTcsNiArMTI2MywxMSBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl9hZGQoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuK1x0aWYgKG5oaWQgXHUwMDI2XHUwMDI2ICEobmRtLVx1MDAzZW5kbV9zdGF0ZSBcdTAwMjYgKE5VRF9QRVJNQU5FTlQgfCBOVURfTk9BUlApKSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiQSBuZXh0aG9wIGZkYiBjYW5ub3QgYmUgZHluYW1pY1wiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4gXHRpZiAodnhsYW4tXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX2lwLnNhLnNhX2ZhbWlseSAhPSBpcC5zYS5zYV9mYW1pbHkpXG4gXHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9maWJfbmV4dGhvcHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmliX25leHRob3BzLnNoXG5pbmRleCAzZDM0NzEyNjczMGE5Li40MzFkN2JlZDc2MjI0IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZpYl9uZXh0aG9wcy5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZpYl9uZXh0aG9wcy5zaFxuQEAgLTUzMyw2ICs1MzMsMjAgQEAgaXB2Nl9mZGJfZ3JwX2ZjbmFsKClcbiBcdHJ1bl9jbWQgXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTQgZGV2IHZ4MTAgbmhpZCA2MSBzZWxmXCJcbiBcdGxvZ190ZXN0ICQ/IDI1NSBcIkZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcFwiXG4gXG4rXHQjIGZkYiBlbnRyaWVzIHdpdGggYSBuZXh0aG9wIGdyb3VwIGNhbm5vdCBiZSBhZ2VkIG91dFxuK1x0cnVuX2NtZCBcIiRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNSBkZXYgdngxMCBuaGlkIDEwMiBzZWxmIHN0YXRpY1wiXG4rXHRsb2dfdGVzdCAkPyAwIFwiRmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBzdGF0aWMgc3RhdGVcIlxuK1xuK1x0cnVuX2NtZCBcIiRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNiBkZXYgdngxMCBuaGlkIDEwMiBzZWxmIGR5bmFtaWNcIlxuK1x0bG9nX3Rlc3QgJD8gMjU1IFwiRmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlXCJcbitcbitcdHJ1bl9jbWQgXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZlwiXG4rXHRydW5fY21kIFwiJEJSSURHRSBmZGIgcmVwbGFjZSAwMjowMjowMDowMDowMDoxNyBkZXYgdngxMCBkc3QgMjAwMTpkYjg6OTE6OjExIHNlbGYgZHluYW1pY1wiXG4rXHRsb2dfdGVzdCAkPyAyNTUgXCJGZGIgbWFjIHJlcGxhY2Ugd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlXCJcbitcbitcdHJ1bl9jbWQgXCIkQlJJREdFIGZkYiBhcHBlbmQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgZHN0IDIwMDE6ZGI4OjkxOjoxMSBzZWxmIGR5bmFtaWNcIlxuK1x0bG9nX3Rlc3QgJD8gMjU1IFwiRmRiIG1hYyBhcHBlbmQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlXCJcbitcbiBcdHJ1bl9jbWQgXCIkSVAgLTYgcm8gYWRkIDIwMDE6ZGI4OjEwMTo6MS8xMjggbmhpZCA2NlwiXG4gXHRsb2dfdGVzdCAkPyAyIFwiUm91dGUgYWRkIHdpdGggZmRiIG5leHRob3BcIlxuIFxuQEAgLTY2OSw2ICs2ODMsMjAgQEAgaXB2NF9mZGJfZ3JwX2ZjbmFsKClcbiBcdHJ1bl9jbWQgXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTQgZGV2IHZ4MTAgbmhpZCAxMiBzZWxmXCJcbiBcdGxvZ190ZXN0ICQ/IDI1NSBcIkZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcFwiXG4gXG4rXHQjIGZkYiBlbnRyaWVzIHdpdGggYSBuZXh0aG9wIGdyb3VwIGNhbm5vdCBiZSBhZ2VkIG91dFxuK1x0cnVuX2NtZCBcIiRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNSBkZXYgdngxMCBuaGlkIDEwMiBzZWxmIHN0YXRpY1wiXG4rXHRsb2dfdGVzdCAkPyAwIFwiRmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBzdGF0aWMgc3RhdGVcIlxuK1xuK1x0cnVuX2NtZCBcIiRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNiBkZXYgdngxMCBuaGlkIDEwMiBzZWxmIGR5bmFtaWNcIlxuK1x0bG9nX3Rlc3QgJD8gMjU1IFwiRmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlXCJcbitcbitcdHJ1bl9jbWQgXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZlwiXG4rXHRydW5fY21kIFwiJEJSSURHRSBmZGIgcmVwbGFjZSAwMjowMjowMDowMDowMDoxNyBkZXYgdngxMCBkc3QgMTAuMC4wLjMgc2VsZiBkeW5hbWljXCJcbitcdGxvZ190ZXN0ICQ/IDI1NSBcIkZkYiBtYWMgcmVwbGFjZSB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGVcIlxuK1xuK1x0cnVuX2NtZCBcIiRCUklER0UgZmRiIGFwcGVuZCAwMjowMjowMDowMDowMDoxNyBkZXYgdngxMCBkc3QgMTAuMC4wLjMgc2VsZiBkeW5hbWljXCJcbitcdGxvZ190ZXN0ICQ/IDI1NSBcIkZkYiBtYWMgYXBwZW5kIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZVwiXG4rXG4gXHRydW5fY21kIFwiJElQIHJvIGFkZCAxNzIuMTYuMC4wLzIyIG5oaWQgMTZcIlxuIFx0bG9nX3Rlc3QgJD8gMiBcIlJvdXRlIGFkZCB3aXRoIGZkYiBuZXh0aG9wXCJcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjMxOjI4Ljc4NjIxNTYyNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTkyNDMyNjI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZYTEFOIEZEQiBVcGRhdGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBkaWZmIHNob3dzIGNoYW5nZXMgd2l0aGluIGBkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBmb2N1cyBpcyBvbiBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AgYW5kIGB2eGxhbl9mZGJfYWRkYC4gSSBzZWUgYSBuZXdseSBpbnRyb2R1Y2VkIGNoZWNrIGluIGJvdGggZnVuY3Rpb25zIHRoYXQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byB0aGUgc3RhdGUgb2YgYSBuZXh0IGhvcC5cblxuSW4gYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgLCB0aGUgY29kZSBub3cgZXhwbGljaXRseSBwcm9oaWJpdHMgdXBkYXRpbmcgYW4gZXhpc3RpbmcgRkRCIGVudHJ5J3MgbmV4dCBob3AgdG8gYSBkeW5hbWljIHN0YXRlIGlmIHRoZSBjdXJyZW50IG5leHQgaG9wIGBmLVx1MDAzZW5oYCBleGlzdHMgYW5kIGlzbid0IG1hcmtlZCBhcyBgTlVEX1BFUk1BTkVOVGAgb3IgYE5VRF9OT0FSUGAuIFRoZSBzYW1lIGxvZ2ljIGlzIGFwcGxpZWQgaW4gYHZ4bGFuX2ZkYl9hZGRgLCB3aGVyZSB0aGUgcHJlc2VuY2Ugb2YgYSBuZXh0IGhvcCBJRCBgbmhpZGAgYWxvbmcgd2l0aCB0aGUgYG5kbV9zdGF0ZWAgbm90IGJlaW5nIGBOVURfUEVSTUFORU5UYCBvciBgTlVEX05PQVJQYCByZXN1bHRzIGluIGFuIGVycm9yLiBUaGUgZXJyb3IgbWVzc2FnZXMgc3VnZ2VzdCB0aGlzIGNoYW5nZSBwcmV2ZW50cyBtYWtpbmcgYSBcIm5leHRob3AgZmRiIGR5bmFtaWMsXCIgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcmVzdHJpY3Rpb24uIFRvIGRvIHRoYXQsIEknbGwgbmVlZCB0byByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCBhbmQgYHZ4bGFuX2ZkYl9hZGRgIHRvIGdyYXNwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgYWRkZWQgY29uc3RyYWludCBhbmQgd2hhdCBpdCdzIHRyeWluZyB0byBwcmV2ZW50LiBUaGUgZmFjdCB0aGF0IHRoaXMgaW1wYWN0cyBib3RoIHVwZGF0ZXMgYW5kIGFkZGl0aW9ucyBtZWFucyB0aGVyZSBpcyBhbiBpbXBvcnRhbnQgZGV0YWlsIGF0IGhhbmQgdGhhdCBjb3VsZCBoYXZlIGltcGFjdHMgZm9yIHRoZSB1c2VyLiBBbHNvLCBJIHNob3VsZCBjaGVjayB0aGUgcmVsYXRlZCB0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZpYl9uZXh0aG9wcy5zaGAgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDMxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzE6NDQuNzEwNTQ0NTY5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTg1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTg1OlxcdFxcdGludCBlcnI7XFxuIDk4NjpcXHRcXG4gOTg3OlxcdFxcdGlmIChuaGlkIFxcdTAwMjZcXHUwMDI2ICFyY3VfYWNjZXNzX3BvaW50ZXIoZi1cXHUwMDNlbmgpKSB7XFxuIDk4ODpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuIDk4OTpcXHRcXHRcXHRcXHQgICAgICAgXFxcIkNhbm5vdCByZXBsYWNlIGFuIGV4aXN0aW5nIG5vbiBuZXh0aG9wIGZkYiB3aXRoIGEgbmV4dGhvcFxcXCIpO1xcbiA5OTA6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA5OTE6XFx0XFx0fVxcbiA5OTI6XFx0XFxuIDk5MzpcXHRcXHRpZiAobmhpZCBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBOTE1fRl9BUFBFTkQpKSB7XFxuIDk5NDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuIDk5NTpcXHRcXHRcXHRcXHQgICAgICAgXFxcIkNhbm5vdCBhcHBlbmQgdG8gYSBuZXh0aG9wIGZkYlxcXCIpO1xcbiA5OTY6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA5OTc6XFx0XFx0fVxcbiA5OTg6XFx0XFxuIDk5OTpcXHRcXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGYtXFx1MDAzZW5oKSBcXHUwMDI2XFx1MDAyNlxcbjEwMDA6XFx0XFx0ICAgICEoc3RhdGUgXFx1MDAyNiAoTlVEX1BFUk1BTkVOVCB8IE5VRF9OT0FSUCkpKSB7XFxuMTAwMTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJDYW5ub3QgbWFrZSBhIG5leHRob3AgZmRiIGR5bmFtaWNcXFwiKTtcXG4xMDAyOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMDAzOlxcdFxcdH1cXG4xMDA0OlxcdFxcbjEwMDU6XFx0XFx0LyogRG8gbm90IGFsbG93IGFuIGV4dGVybmFsbHkgbGVhcm5lZCBlbnRyeSB0byB0YWtlIG92ZXIgYW4gZW50cnkgYWRkZWRcXG4xMDA2OlxcdFxcdCAqIGJ5IHRoZSB1c2VyLlxcbjEwMDc6XFx0XFx0ICovXFxuMTAwODpcXHRcXHRpZiAoIShmZGJfZmxhZ3MgXFx1MDAyNiBOVEZfRVhUX0xFQVJORUQpIHx8XFxuMTAwOTpcXHRcXHQgICAgIShmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5URl9WWExBTl9BRERFRF9CWV9VU0VSKSkge1xcbjEwMTA6XFx0XFx0XFx0aWYgKGYtXFx1MDAzZXN0YXRlICE9IHN0YXRlKSB7XFxuMTAxMTpcXHRcXHRcXHRcXHRmLVxcdTAwM2VzdGF0ZSA9IHN0YXRlO1xcbjEwMTI6XFx0XFx0XFx0XFx0bm90aWZ5ID0gMTtcXG4xMDEzOlxcdFxcdFxcdH1cXG4xMDE0OlxcdFxcdFxcdGlmIChmLVxcdTAwM2VmbGFncyAhPSBmZGJfZmxhZ3MpIHtcXG4xMDE1OlxcdFxcdFxcdFxcdGYtXFx1MDAzZWZsYWdzID0gZmRiX2ZsYWdzO1xcbjEwMTY6XFx0XFx0XFx0XFx0bm90aWZ5ID0gMTtcXG4xMDE3OlxcdFxcdFxcdH1cXG4xMDE4OlxcdFxcdH1cXG4xMDE5OlxcdFxcbjEwMjA6XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IE5MTV9GX1JFUExBQ0UpKSB7XFxuMTAyMTpcXHRcXHRcXHQvKiBPbmx5IGNoYW5nZSB1bmljYXN0cyAqL1xcbjEwMjI6XFx0XFx0XFx0aWYgKCEoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZi1cXHUwMDNla2V5LmV0aF9hZGRyKSB8fFxcbjEwMjM6XFx0XFx0XFx0ICAgICAgaXNfemVyb19ldGhlcl9hZGRyKGYtXFx1MDAzZWtleS5ldGhfYWRkcikpKSB7XFxuMTAyNDpcXHRcXHRcXHRcXHRpZiAobmhpZCkge1xcbjEwMjU6XFx0XFx0XFx0XFx0XFx0cmMgPSB2eGxhbl9mZGJfbmhfdXBkYXRlKHZ4bGFuLCBmLCBuaGlkLCBleHRhY2spO1xcbjEwMjY6XFx0XFx0XFx0XFx0XFx0aWYgKHJjIFxcdTAwM2MgMClcXG4xMDI3OlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiByYztcXG4xMDI4OlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMTAyOTpcXHRcXHRcXHRcXHRcXHRyYyA9IHZ4bGFuX2ZkYl9yZXBsYWNlKGYsIGlwLCBwb3J0LCB2bmksXFxuMTAzMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaWZpbmRleCwgXFx1MDAyNm9sZHJkKTtcXG4xMDMxOlxcdFxcdFxcdFxcdH1cXG4xMDMyOlxcdFxcdFxcdFxcdG5vdGlmeSB8PSByYztcXG4xMDMzOlxcdFxcdFxcdH0gZWxzZSB7XFxuMTAzNDpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJDYW5ub3QgcmVwbGFjZSBub24tdW5pY2FzdCBmZGIgZW50cmllc1xcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMTo0NC43MTA3MTc1OTlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU4MDQ5ODQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIFZYTEFOIEZEQiBBZGRpdGlvbioqXG5cbk9rYXksIGxldCdzIHpvb20gaW4gYSBiaXQgZnVydGhlci4gSSB3YW50IHRvIHNoaWZ0IG15IGZvY3VzIHRvIHRoZSBgdnhsYW5fZmRiX2FkZGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmVzIDEyNTAgdGhyb3VnaCAxMjgwLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhhdCBwYXJ0IG9mIHRoZSBjb2RlLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBsZWFybmluZyB0aGUgTUFDIGFkZHJlc3NlcyBhc3NvY2lhdGVkIHdpdGggYSBWWExBTiBuZXR3b3JrLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGVkZ2UgY2FzZXMgaXMgcGFyYW1vdW50LiBJJ20gaG9waW5nIHRvIHBpbnBvaW50IGhvdyBpdCBoYW5kbGVzIG5ldyBlbnRyaWVzLCBhZ2luZywgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gSSdtIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gcHJvdmlkZSBzb21lIGNyaXRpY2FsIGNsdWVzIGFzIHRvIHdoZXJlIHByb2JsZW1zIGFyZSBvY2N1cnJpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MTAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjMxOjQ4LjI5MTIxOTg1MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNDA6XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuMTI0MTpcXHRcXHRcXHRcXHQgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZCwgdTE2IGZsYWdzLFxcbjEyNDI6XFx0XFx0XFx0XFx0IGJvb2wgKm5vdGlmaWVkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMTI0MzpcXHR7XFxuMTI0NDpcXHRcXHRzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiA9IG5ldGRldl9wcml2KGRldik7XFxuMTI0NTpcXHRcXHQvKiBzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHZ4bGFuLVxcdTAwM2VkZXYpOyAqL1xcbjEyNDY6XFx0XFx0dW5pb24gdnhsYW5fYWRkciBpcDtcXG4xMjQ3OlxcdFxcdF9fYmUxNiBwb3J0O1xcbjEyNDg6XFx0XFx0X19iZTMyIHNyY192bmksIHZuaTtcXG4xMjQ5OlxcdFxcdHUzMiBpZmluZGV4LCBuaGlkO1xcbjEyNTA6XFx0XFx0aW50IGVycjtcXG4xMjUxOlxcdFxcbjEyNTI6XFx0XFx0aWYgKCEobmRtLVxcdTAwM2VuZG1fc3RhdGUgXFx1MDAyNiAoTlVEX1BFUk1BTkVOVHxOVURfUkVBQ0hBQkxFKSkpIHtcXG4xMjUzOlxcdFxcdFxcdHByX2luZm8oXFxcIlJUTV9ORVdORUlHSCB3aXRoIGludmFsaWQgc3RhdGUgJSN4XFxcXG5cXFwiLFxcbjEyNTQ6XFx0XFx0XFx0XFx0bmRtLVxcdTAwM2VuZG1fc3RhdGUpO1xcbjEyNTU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTI1NjpcXHRcXHR9XFxuMTI1NzpcXHRcXG4xMjU4OlxcdFxcdGlmICghdGIgfHwgKCF0YltOREFfRFNUXSBcXHUwMDI2XFx1MDAyNiAhdGJbTkRBX05IX0lEXSkpXFxuMTI1OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjYwOlxcdFxcbjEyNjE6XFx0XFx0ZXJyID0gdnhsYW5fZmRiX3BhcnNlKHRiLCB2eGxhbiwgXFx1MDAyNmlwLCBcXHUwMDI2cG9ydCwgXFx1MDAyNnNyY192bmksIFxcdTAwMjZ2bmksIFxcdTAwMjZpZmluZGV4LFxcbjEyNjI6XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm5oaWQsIGV4dGFjayk7XFxuMTI2MzpcXHRcXHRpZiAoZXJyKVxcbjEyNjQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMjY1OlxcdFxcbjEyNjY6XFx0XFx0aWYgKG5oaWQgXFx1MDAyNlxcdTAwMjYgIShuZG0tXFx1MDAzZW5kbV9zdGF0ZSBcXHUwMDI2IChOVURfUEVSTUFORU5UIHwgTlVEX05PQVJQKSkpIHtcXG4xMjY3OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkEgbmV4dGhvcCBmZGIgY2Fubm90IGJlIGR5bmFtaWNcXFwiKTtcXG4xMjY4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyNjk6XFx0XFx0fVxcbjEyNzA6XFx0XFxuMTI3MTpcXHRcXHRpZiAodnhsYW4tXFx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pcC5zYS5zYV9mYW1pbHkgIT0gaXAuc2Euc2FfZmFtaWx5KVxcbjEyNzI6XFx0XFx0XFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XFxuMTI3MzpcXHRcXG4xMjc0OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dnhsYW4tXFx1MDAzZWhhc2hfbG9jayk7XFxuMTI3NTpcXHRcXHRlcnIgPSB2eGxhbl9mZGJfdXBkYXRlKHZ4bGFuLCBhZGRyLCBcXHUwMDI2aXAsIG5kbS1cXHUwMDNlbmRtX3N0YXRlLCBmbGFncyxcXG4xMjc2OlxcdFxcdFxcdFxcdCAgICAgICBwb3J0LCBzcmNfdm5pLCB2bmksIGlmaW5kZXgsXFxuMTI3NzpcXHRcXHRcXHRcXHQgICAgICAgbmRtLVxcdTAwM2VuZG1fZmxhZ3MgfCBOVEZfVlhMQU5fQURERURfQllfVVNFUixcXG4xMjc4OlxcdFxcdFxcdFxcdCAgICAgICBuaGlkLCB0cnVlLCBleHRhY2spO1xcbjEyNzk6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnZ4bGFuLVxcdTAwM2VoYXNoX2xvY2spO1xcbjEyODA6XFx0XFxuMTI4MTpcXHRcXHRpZiAoIWVycilcXG4xMjgyOlxcdFxcdFxcdCpub3RpZmllZCA9IHRydWU7XFxuMTI4MzpcXHRcXG4xMjg0OlxcdFxcdHJldHVybiBlcnI7XFxuMTI4NTpcXHR9XFxuMTI4NjpcXHRcXG4xMjg3OlxcdGludCBfX3Z4bGFuX2ZkYl9kZWxldGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuMTI4ODpcXHRcXHRcXHQgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdW5pb24gdnhsYW5fYWRkciBpcCxcXG4xMjg5OlxcdFxcdFxcdCAgICAgICBfX2JlMTYgcG9ydCwgX19iZTMyIHNyY192bmksIF9fYmUzMiB2bmksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjMxOjQ4LjI5MTM5MTQ2MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NzI0OTI5MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyBwcm9ibGVtOlxuXG4qKkFuYWx5emluZyB0aGUgRHluYW1pYyBOZXh0aG9wIEZEQiBJc3N1ZXMqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCB3aHkgZHluYW1pYyBuZXh0aG9wIEZEQnMgYXJlIGNhdXNpbmcgcHJvYmxlbXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBkaXJlY3RseSBpbnRvIHRoZSBjb2RlLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGdyZXAuIEknbGwgbmVlZCB0byBmb2N1cyBvbiB3aGVyZSB0aGUgXCJmLVx1MDAzZW5oXCIgKHByZXN1bWFibHksIGEgcG9pbnRlciB0byB0aGUgbmV4dCBob3AgaW5mb3JtYXRpb24pIGlzIHVzZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYHZ4bGFuX2NvcmUuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgVlhMQU4gZnVuY3Rpb25hbGl0eSBsaWtlbHkgcmVzaWRlcy4gSXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZHluYW1pYyBuZXh0aG9wcyBhcmUgYmVpbmcgaGFuZGxlZC4gQWx0ZXJuYXRpdmVseSwgSSBjYW4gc2VlIHdoYXQgdGhlIGFnaW5nIG1lY2hhbmlzbXMgaW4gdGhlIGNvZGViYXNlIGRvIHdpdGggdGhpcyB2YXJpYWJsZS4gSSB3aWxsIGdldCBpdCBieSBkb2luZyBhIHNlYXJjaCwgdG9vLiBJIHRoaW5rIGEgZGVlcCBkaXZlIGludG8gdGhlIGNvZGUgd2lsbCB0ZWxsIHVzIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMTYsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjMxOjU4LjAxNjMyMjc0NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2Mzk2NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnhsYW5fZmRiX2NsZWFudXB8dnhsYW5fZmRiX2Rlc3Ryb3l8Zi1cXHUwMDNlbmhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz03NzQ9c3RhdGljIHN0cnVjdCB2eGxhbl9mZGIgKnZ4bGFuX2ZkYl9hbGxvYyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgY29uc3QgdTggKm1hYyxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy03ODctXFx0Zi1cXHUwMDNla2V5LnZuaSA9IHNyY192bmk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjc4ODpcXHRmLVxcdTAwM2VuaCA9IE5VTEw7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTc4OS1cXHRSQ1VfSU5JVF9QT0lOVEVSKGYtXFx1MDAzZXZkZXYsIHZ4bGFuKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6NzkwOlxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZmLVxcdTAwM2VuaF9saXN0KTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNzkxLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZmLVxcdTAwM2VyZW1vdGVzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz04NTk9aW50IHZ4bGFuX2ZkYl9jcmVhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtODk4LWRlc3Ryb3lfcmVtb3RlOlxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo4OTk6XFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihmLVxcdTAwM2VuaCkpIHtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6OTAwOlxcdFxcdGxpc3RfZGVsX3JjdShcXHUwMDI2Zi1cXHUwMDNlbmhfbGlzdCk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjkwMTpcXHRcXHRuZXh0aG9wX3B1dChydG5sX2RlcmVmZXJlbmNlKGYtXFx1MDAzZW5oKSk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTkwMi1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTkxMj1zdGF0aWMgdm9pZCBfX3Z4bGFuX2ZkYl9mcmVlKHN0cnVjdCB2eGxhbl9mZGIgKmYpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTE2LVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo5MTc6XFx0bmggPSByY3VfZGVyZWZlcmVuY2VfcmF3KGYtXFx1MDAzZW5oKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTE4LVxcdGlmIChuaCkge1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo5MTk6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGYtXFx1MDAzZW5oLCBOVUxMKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTIwLVxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihmLVxcdTAwM2V2ZGV2LCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz05MzE9c3RhdGljIHZvaWQgdnhsYW5fZmRiX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTkzNy1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6OTM4OnN0YXRpYyB2b2lkIHZ4bGFuX2ZkYl9kZXN0cm95KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBzdHJ1Y3QgdnhsYW5fZmRiICpmLFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy05MzktXFx0XFx0XFx0ICAgICAgYm9vbCBkb19ub3RpZnksIGJvb2wgc3dkZXZfbm90aWZ5KVxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTk0Ni1cXHRpZiAoZG9fbm90aWZ5KSB7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjk0NzpcXHRcXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGYtXFx1MDAzZW5oKSlcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTQ4LVxcdFxcdFxcdHZ4bGFuX2ZkYl9ub3RpZnkodnhsYW4sIGYsIE5VTEwsIFJUTV9ERUxORUlHSCxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy05NTgtXFx0XFx0XFx0ICAgICAgIHZ4bGFuX2ZkYl9yaHRfcGFyYW1zKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6OTU5OlxcdGxpc3RfZGVsX3JjdShcXHUwMDI2Zi1cXHUwMDNlbmhfbGlzdCk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTk2MC1cXHRjYWxsX3JjdShcXHUwMDI2Zi1cXHUwMDNlcmN1LCB2eGxhbl9mZGJfZnJlZSk7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9OTcxPXN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy05ODYtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjk4NzpcXHRpZiAobmhpZCBcXHUwMDI2XFx1MDAyNiAhcmN1X2FjY2Vzc19wb2ludGVyKGYtXFx1MDAzZW5oKSkge1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy05ODgtXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTk5OC1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6OTk5OlxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cXHUwMDNlbmgpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTEwMDAtXFx0ICAgICEoc3RhdGUgXFx1MDAyNiAoTlVEX1BFUk1BTkVOVCB8IE5VRF9OT0FSUCkpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MTA3Nj1zdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTExMDYtZXJyX25vdGlmeTpcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTEwNzpcXHR2eGxhbl9mZGJfZGVzdHJveSh2eGxhbiwgZiwgZmFsc2UsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTEwOC1cXHRyZXR1cm4gcmM7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MTI4Nz1pbnQgX192eGxhbl9mZGJfZGVsZXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTEzMTMtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjEzMTQ6XFx0dnhsYW5fZmRiX2Rlc3Ryb3kodnhsYW4sIGYsIHRydWUsIHN3ZGV2X25vdGlmeSk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTEzMTUtXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MTM1MD1zdGF0aWMgaW50IHZ4bGFuX2ZkYl9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMzYyLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoxMzYzOlxcdFxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cXHUwMDNlbmgpKSB7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTEzNjQtXFx0XFx0XFx0aWYgKCppZHggXFx1MDAzYyBjdHgtXFx1MDAzZWZkYl9pZHgpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MTQzNj1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gdnhsYW5fc25vb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNDYzLVxcdFxcdC8qIERvbid0IG92ZXJyaWRlIGFuIGZkYiB3aXRoIG5leHRob3Agd2l0aCBhIGxlYXJudCBlbnRyeSAqL1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoxNDY0OlxcdFxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cXHUwMDNlbmgpKVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNDY1LVxcdFxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVlhMQU5fRU5UUllfRVhJU1RTO1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTI2Njc9c3RhdGljIHZvaWQgdnhsYW5feG1pdF9uaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI2NzctXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjI2Nzg6XFx0bmggPSByY3VfZGVyZWZlcmVuY2UoZi1cXHUwMDNlbmgpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yNjc5LVxcdGlmICghbmgpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9Mjc0Mj1zdGF0aWMgbmV0ZGV2X3R4X3QgdnhsYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI4MzUtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjI4MzY6XFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihmLVxcdTAwM2VuaCkpIHtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjgzNy1cXHRcXHR2eGxhbl94bWl0X25oKHNrYiwgZGV2LCBmLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTI4NjM9c3RhdGljIHZvaWQgdnhsYW5fY2xlYW51cChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yODg4LVxcdFxcdFxcdFxcdGYtXFx1MDAzZXN0YXRlID0gTlVEX1NUQUxFO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoyODg5OlxcdFxcdFxcdFxcdHZ4bGFuX2ZkYl9kZXN0cm95KHZ4bGFuLCBmLCB0cnVlLCB0cnVlKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjg5MC1cXHRcXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MzAxNT1zdGF0aWMgYm9vbCB2eGxhbl9mZGJfbmhpZF9tYXRjaGVzKGNvbnN0IHN0cnVjdCB2eGxhbl9mZGIgKmYsIHUzMiBuaGlkKVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zMDE2LXtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MzAxNzpcXHRzdHJ1Y3QgbmV4dGhvcCAqbmggPSBydG5sX2RlcmVmZXJlbmNlKGYtXFx1MDAzZW5oKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzAxOC1cXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0zMDg4PXN0YXRpYyB2b2lkIHZ4bGFuX2ZsdXNoKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTMxMTItXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjMxMTM6XFx0XFx0dnhsYW5fZmRiX2Rlc3Ryb3kodnhsYW4sIGYsIHRydWUsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zMTE0LXVubG9jazpcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz00ODc2PXN0YXRpYyB2b2lkIHZ4bGFuX2ZkYl9uaF9mbHVzaChzdHJ1Y3QgbmV4dGhvcCAqbmgpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDg4Ni1cXHRcXHRpZiAoIWhsaXN0X3VuaGFzaGVkKFxcdTAwMjZmZGItXFx1MDAzZWZkYl9ub2RlKSlcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6NDg4NzpcXHRcXHRcXHR2eGxhbl9mZGJfZGVzdHJveSh2eGxhbiwgZmRiLCBmYWxzZSwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy00ODg4LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ2eGxhbi1cXHUwMDNlaGFzaF9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzE6NTguMDYyOTY1OTM0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzNzc1MDI4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVlhMQU4gRkRCIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQncyBhbGwgYWJvdXQgYm9sc3RlcmluZyB0aGUgaW5wdXQgdmFsaWRhdGlvbiBmb3IgVlhMQU4gRkRCIGVudHJpZXMuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyB0d28ga2V5IGNoZWNrcyB3aXRoaW4gdGhlIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCBhbmQgYHZ4bGFuX2ZkYl9hZGRgIGZ1bmN0aW9ucy4gRmlyc3QsIGlmIGEgbmV4dCBob3AgKGBmLVx1MDAzZW5oYCkgaXMgc2V0IGR1cmluZyBhbiB1cGRhdGUsIGFuZCB0aGUgcmVxdWVzdGVkIHN0YXRlIGlzbid0IGBOVURfUEVSTUFORU5UYCBvciBgTlVEX05PQVJQYCwgd2UgcmVqZWN0IHRoZSB1cGRhdGUgd2l0aCBgLUVPUE5PVFNVUFBgLiBTZWNvbmQsIGluIHRoZSBgYWRkYCBvcGVyYXRpb24sIGlmIGEgYG5oaWRgIGlzIHNwZWNpZmllZCBhbmQgdGhlIGRlc2lyZWQgc3RhdGUgaXNuJ3QgYE5VRF9QRVJNQU5FTlRgIG9yIGBOVURfTk9BUlBgLCB3ZSByZXR1cm4gYC1FSU5WQUxgLiBFc3NlbnRpYWxseSwgaXQgYmxvY2tzIGFnaW5nL2R5bmFtaWMgdHJhbnNpdGlvbnMgZm9yIEZEQnMgYm91bmQgdG8gYSBuZXh0IGhvcC5cblxuTm93LCBsZXQncyBhZGRyZXNzIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGFsd2F5cyBteSBwcmltYXJ5IGNvbmNlcm4uIEkndmUgd2Fsa2VkIHRocm91Z2ggdGhpcyBjYXJlZnVsbHkuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGFsbG9jYXRlZCwgc28gdGhhdCdzIGdvb2QuIFdlIGFyZW4ndCBjb3B5aW5nIGFueSBidWZmZXJzIHRvIHVzZXIgc3BhY2Ug4oCTIG9ubHkgbmV0bGluayBlcnJvciBtZXNzYWdlcywgd2hpY2ggYXJlIHN0cmluZyBsaXRlcmFscyBhbmQgdGh1cyBzYWZlLiBUaGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGhhbmRsaW5nIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSwgZWl0aGVyLiBUaGUgcGF0Y2ggZG9lcyBwcmV2ZW50IGFnaW5nIGZvciBuZXh0aG9wIEZEQnMsIGJ1dCB0aGlzIGlzIGEgKnNlbWFudGljKiB2YWxpZGF0aW9uLCBub3QgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLlxuXG5UaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIGlzICpwdXJlbHkqIGEgY29udHJvbC1mbG93IHZhbGlkYXRpb24sIGEgbWF0dGVyIG9mIGlucHV0IGNoZWNraW5nIG9uIHRoZSBuZXRsaW5rIGNvbW1hbmRzLiBUaGVyZSdzIHplcm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIG5vIHBvc3NpYmlsaXR5IG9mIGluZm9ybWF0aW9uIGxlYWtzLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBwYXRjaC5cblxuR2l2ZW4gdGhpcywgSSBkb24ndCBzZWUgYW55IG5lZWQgZm9yIEtNU0FOLiBUaGUgZ29hbCBvZiBLTVNBTiBpcyB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGxlYWtzIHRvIHVzZXJzcGFjZSwgYnV0IHRoaXMgZG9lc27igJl0IHRvdWNoIGFueSBvZiB0aG9zZSBhcmVhcy4gVGhlIHBhdGNoIGlzIGFsbCBhYm91dCB2YWxpZGF0aW5nIHByb3ZpZGVkIHBhcmFtZXRlcnMgYW5kIHJldHVybmluZyBhcHByb3ByaWF0ZSBlcnJvciBjb2Rlczsgc3RhbmRhcmQgc2FuaXRpemVycyBsaWtlIEtBU0FOIGFuZCBvdXIgZXhpc3RpbmcgZnVuY3Rpb25hbCB0ZXN0aW5nIHNob3VsZCBiZSBzdWZmaWNpZW50LiBLTVNBTidzIHJlc291cmNlIHJlcXVpcmVtZW50cyBhcmUgaGlnaCwgYW5kIHRoZSBwb3RlbnRpYWwgYmVuZWZpdCBoZXJlIGlzbid0IGVub3VnaCB0byBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uXG5cbkluIHN1bW1hcnk6IFRoaXMgcGF0Y2ggcmVzdHJpY3RzIHRoZSBkeW5hbWljIHN0YXRlIGZvciBGREIgZW50cmllcyBjb25maWd1cmVkIHdpdGggbmV4dGhvcHMgYnkgdmFsaWRhdGluZyBuZXRsaW5rIGlucHV0LiBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LCBhcyB0aGUgY29kZSBjaGFuZ2VzIGRvIG5vdCBkZWFsIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIFdlIGNhbiBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODIyLCJPdXRwdXRUb2tlbnMiOjEzNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMjowMy40NDA0NzA2MTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgaW4gdnhsYW5fZmRiX2FkZCgpIGFuZCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKCkgdG8gcHJldmVudCBjb25maWd1cmluZyBvciB1cGRhdGluZyBuZXh0aG9wLWJhc2VkIFZYTEFOIEZEQiBlbnRyaWVzIHdpdGggZHluYW1pYyAoYWdpbmcpIHN0YXRlcy4gSXQgb25seSBpbnRyb2R1Y2VzIGNvbmRpdGlvbmFsIGNoZWNrcyBvbiBleGlzdGluZyB2YWxpZGF0ZWQgaW5wdXQgYXJndW1lbnRzIGFuZCByZXR1cm5zIHN0YW5kYXJkIGVycm9yIGNvZGVzIHdpdGggc3RhdGljIG5ldGxpbmsgZXJyb3IgbWVzc2FnZXMuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIG9yIGRhdGEgdHJhbnNmZXJzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgaW4gdnhsYW5fZmRiX2FkZCgpIGFuZCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKCkgdG8gcHJldmVudCBjb25maWd1cmluZyBvciB1cGRhdGluZyBuZXh0aG9wLWJhc2VkIFZYTEFOIEZEQiBlbnRyaWVzIHdpdGggZHluYW1pYyAoYWdpbmcpIHN0YXRlcy4gSXQgb25seSBpbnRyb2R1Y2VzIGNvbmRpdGlvbmFsIGNoZWNrcyBvbiBleGlzdGluZyB2YWxpZGF0ZWQgaW5wdXQgYXJndW1lbnRzIGFuZCByZXR1cm5zIHN0YW5kYXJkIGVycm9yIGNvZGVzIHdpdGggc3RhdGljIG5ldGxpbmsgZXJyb3IgbWVzc2FnZXMuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIG9yIGRhdGEgdHJhbnNmZXJzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4fvhb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 11:48:19 +0000 UTC FinishedAt: 2026-09-03 12:32:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3ba13f5e7180c034b0a1ef7e052fb780856b134e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VXLAN", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "3ba13f5e7180c034b0a1ef7e052fb780856b134e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VXLAN", "INET" ], "series_id": "e376c573-d1e8-4314-a062-e24befa19fdc" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "vxlan_fdb_add", "vxlan_fdb_update_existing", "vxlan_fdb_update" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZYTEFOJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2eGxhbl9mZGJfYWRkJiMzNDssCiAgICAmIzM0O3Z4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcmIzM0OywKICAgICYjMzQ7dnhsYW5fZmRiX3VwZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgaW4gdnhsYW5fZmRiX2FkZCgpIGFuZCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKCkgdG8gcHJldmVudCBjb25maWd1cmluZyBvciB1cGRhdGluZyBuZXh0aG9wLWJhc2VkIFZYTEFOIEZEQiBlbnRyaWVzIHdpdGggZHluYW1pYyAoYWdpbmcpIHN0YXRlcy4gSXQgb25seSBpbnRyb2R1Y2VzIGNvbmRpdGlvbmFsIGNoZWNrcyBvbiBleGlzdGluZyB2YWxpZGF0ZWQgaW5wdXQgYXJndW1lbnRzIGFuZCByZXR1cm5zIHN0YW5kYXJkIGVycm9yIGNvZGVzIHdpdGggc3RhdGljIG5ldGxpbmsgZXJyb3IgbWVzc2FnZXMuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIG9yIGRhdGEgdHJhbnNmZXJzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIHByZXZlbnRpbmcgbmV4dGhvcCBGREIgZW50cmllcyBmcm9tIGJlaW5nIGNvbmZpZ3VyZWQgb3IgdXBkYXRlZCB3aXRoIGEgZHluYW1pYyBzdGF0ZSBpbiB0aGUgVlhMQU4gZHJpdmVyLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIG5ldHdvcmsgbmV0bGluay9GREIgaGFuZGxpbmcgY29kZSBpbiB2eGxhbl9jb3JlLmMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxNDNhZWRlNzIyMjY3ZjQ0OWVlYzQwZDI3M2ZmZWQyNmUyYjBlMTViXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMjozMDo1NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcbmluZGV4IGFjODhkMWM4NWJlYTYuLjkzYmY3YzUzNWU2OTggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY1xuQEAgLTk5Niw2ICYjNDM7OTk2LDEyIEBAIHN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuIFxuJiM0MztcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cdTAwM2VuaCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICEoc3RhdGUgXHUwMDI2IChOVURfUEVSTUFORU5UIHwgTlVEX05PQVJQKSkpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q2Fubm90IG1ha2UgYSBuZXh0aG9wIGZkYiBkeW5hbWljXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0LyogRG8gbm90IGFsbG93IGFuIGV4dGVybmFsbHkgbGVhcm5lZCBlbnRyeSB0byB0YWtlIG92ZXIgYW4gZW50cnkgYWRkZWRcbiBcdCAqIGJ5IHRoZSB1c2VyLlxuIFx0ICovXG5AQCAtMTI1Nyw2ICYjNDM7MTI2MywxMSBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl9hZGQoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuJiM0MztcdGlmIChuaGlkIFx1MDAyNlx1MDAyNiAhKG5kbS1cdTAwM2VuZG1fc3RhdGUgXHUwMDI2IChOVURfUEVSTUFORU5UIHwgTlVEX05PQVJQKSkpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7QSBuZXh0aG9wIGZkYiBjYW5ub3QgYmUgZHluYW1pY1wmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0aWYgKHZ4bGFuLVx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pcC5zYS5zYV9mYW1pbHkgIT0gaXAuc2Euc2FfZmFtaWx5KVxuIFx0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmliX25leHRob3BzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZpYl9uZXh0aG9wcy5zaFxuaW5kZXggM2QzNDcxMjY3MzBhOS4uNDMxZDdiZWQ3NjIyNCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9maWJfbmV4dGhvcHMuc2hcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9maWJfbmV4dGhvcHMuc2hcbkBAIC01MzMsNiAmIzQzOzUzMywyMCBAQCBpcHY2X2ZkYl9ncnBfZmNuYWwoKVxuIFx0cnVuX2NtZCBcJiMzNDskQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTQgZGV2IHZ4MTAgbmhpZCA2MSBzZWxmXCYjMzQ7XG4gXHRsb2dfdGVzdCAkPyAyNTUgXCYjMzQ7RmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wXCYjMzQ7XG4gXG4mIzQzO1x0IyBmZGIgZW50cmllcyB3aXRoIGEgbmV4dGhvcCBncm91cCBjYW5ub3QgYmUgYWdlZCBvdXRcbiYjNDM7XHRydW5fY21kIFwmIzM0OyRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNSBkZXYgdngxMCBuaGlkIDEwMiBzZWxmIHN0YXRpY1wmIzM0O1xuJiM0MztcdGxvZ190ZXN0ICQ/IDAgXCYjMzQ7RmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBzdGF0aWMgc3RhdGVcJiMzNDtcbiYjNDM7XG4mIzQzO1x0cnVuX2NtZCBcJiMzNDskQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTYgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZiBkeW5hbWljXCYjMzQ7XG4mIzQzO1x0bG9nX3Rlc3QgJD8gMjU1IFwmIzM0O0ZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZVwmIzM0O1xuJiM0MztcbiYjNDM7XHRydW5fY21kIFwmIzM0OyRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNyBkZXYgdngxMCBuaGlkIDEwMiBzZWxmXCYjMzQ7XG4mIzQzO1x0cnVuX2NtZCBcJiMzNDskQlJJREdFIGZkYiByZXBsYWNlIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIGRzdCAyMDAxOmRiODo5MTo6MTEgc2VsZiBkeW5hbWljXCYjMzQ7XG4mIzQzO1x0bG9nX3Rlc3QgJD8gMjU1IFwmIzM0O0ZkYiBtYWMgcmVwbGFjZSB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGVcJiMzNDtcbiYjNDM7XG4mIzQzO1x0cnVuX2NtZCBcJiMzNDskQlJJREdFIGZkYiBhcHBlbmQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgZHN0IDIwMDE6ZGI4OjkxOjoxMSBzZWxmIGR5bmFtaWNcJiMzNDtcbiYjNDM7XHRsb2dfdGVzdCAkPyAyNTUgXCYjMzQ7RmRiIG1hYyBhcHBlbmQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlXCYjMzQ7XG4mIzQzO1xuIFx0cnVuX2NtZCBcJiMzNDskSVAgLTYgcm8gYWRkIDIwMDE6ZGI4OjEwMTo6MS8xMjggbmhpZCA2NlwmIzM0O1xuIFx0bG9nX3Rlc3QgJD8gMiBcJiMzNDtSb3V0ZSBhZGQgd2l0aCBmZGIgbmV4dGhvcFwmIzM0O1xuIFxuQEAgLTY2OSw2ICYjNDM7NjgzLDIwIEBAIGlwdjRfZmRiX2dycF9mY25hbCgpXG4gXHRydW5fY21kIFwmIzM0OyRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNCBkZXYgdngxMCBuaGlkIDEyIHNlbGZcJiMzNDtcbiBcdGxvZ190ZXN0ICQ/IDI1NSBcJiMzNDtGZGIgbWFjIGFkZCB3aXRoIG5leHRob3BcJiMzNDtcbiBcbiYjNDM7XHQjIGZkYiBlbnRyaWVzIHdpdGggYSBuZXh0aG9wIGdyb3VwIGNhbm5vdCBiZSBhZ2VkIG91dFxuJiM0MztcdHJ1bl9jbWQgXCYjMzQ7JEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE1IGRldiB2eDEwIG5oaWQgMTAyIHNlbGYgc3RhdGljXCYjMzQ7XG4mIzQzO1x0bG9nX3Rlc3QgJD8gMCBcJiMzNDtGZGIgbWFjIGFkZCB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIHN0YXRpYyBzdGF0ZVwmIzM0O1xuJiM0MztcbiYjNDM7XHRydW5fY21kIFwmIzM0OyRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNiBkZXYgdngxMCBuaGlkIDEwMiBzZWxmIGR5bmFtaWNcJiMzNDtcbiYjNDM7XHRsb2dfdGVzdCAkPyAyNTUgXCYjMzQ7RmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlXCYjMzQ7XG4mIzQzO1xuJiM0MztcdHJ1bl9jbWQgXCYjMzQ7JEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIG5oaWQgMTAyIHNlbGZcJiMzNDtcbiYjNDM7XHRydW5fY21kIFwmIzM0OyRCUklER0UgZmRiIHJlcGxhY2UgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgZHN0IDEwLjAuMC4zIHNlbGYgZHluYW1pY1wmIzM0O1xuJiM0MztcdGxvZ190ZXN0ICQ/IDI1NSBcJiMzNDtGZGIgbWFjIHJlcGxhY2Ugd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlXCYjMzQ7XG4mIzQzO1xuJiM0MztcdHJ1bl9jbWQgXCYjMzQ7JEJSSURHRSBmZGIgYXBwZW5kIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIGRzdCAxMC4wLjAuMyBzZWxmIGR5bmFtaWNcJiMzNDtcbiYjNDM7XHRsb2dfdGVzdCAkPyAyNTUgXCYjMzQ7RmRiIG1hYyBhcHBlbmQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlXCYjMzQ7XG4mIzQzO1xuIFx0cnVuX2NtZCBcJiMzNDskSVAgcm8gYWRkIDE3Mi4xNi4wLjAvMjIgbmhpZCAxNlwmIzM0O1xuIFx0bG9nX3Rlc3QgJD8gMiBcJiMzNDtSb3V0ZSBhZGQgd2l0aCBmZGIgbmV4dGhvcFwmIzM0O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZYTEFOJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2eGxhbl9mZGJfYWRkJiMzNDssCiAgICAmIzM0O3Z4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcmIzM0OywKICAgICYjMzQ7dnhsYW5fZmRiX3VwZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIHByZXZlbnRpbmcgbmV4dGhvcCBGREIgZW50cmllcyBmcm9tIGJlaW5nIGNvbmZpZ3VyZWQgb3IgdXBkYXRlZCB3aXRoIGEgZHluYW1pYyBzdGF0ZSBpbiB0aGUgVlhMQU4gZHJpdmVyLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIG5ldHdvcmsgbmV0bGluay9GREIgaGFuZGxpbmcgY29kZSBpbiB2eGxhbl9jb3JlLmMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxNDNhZWRlNzIyMjY3ZjQ0OWVlYzQwZDI3M2ZmZWQyNmUyYjBlMTViCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBTZXAgMyAxMjozMDo1NCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYwppbmRleCBhYzg4ZDFjODViZWE2Li45M2JmN2M1MzVlNjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jCkBAIC05OTYsNiAmIzQzOzk5NiwxMiBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKJiM0MzsJaWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihmLSZndDtuaCkgJmFtcDsmYW1wOwomIzQzOwkgICAgIShzdGF0ZSAmYW1wOyAoTlVEX1BFUk1BTkVOVCB8IE5VRF9OT0FSUCkpKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7Q2Fubm90IG1ha2UgYSBuZXh0aG9wIGZkYiBkeW5hbWljJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiAJLyogRG8gbm90IGFsbG93IGFuIGV4dGVybmFsbHkgbGVhcm5lZCBlbnRyeSB0byB0YWtlIG92ZXIgYW4gZW50cnkgYWRkZWQKIAkgKiBieSB0aGUgdXNlci4KIAkgKi8KQEAgLTEyNTcsNiAmIzQzOzEyNjMsMTEgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfYWRkKHN0cnVjdCBuZG1zZyAqbmRtLCBzdHJ1Y3QgbmxhdHRyICp0YltdLAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKJiM0MzsJaWYgKG5oaWQgJmFtcDsmYW1wOyAhKG5kbS0mZ3Q7bmRtX3N0YXRlICZhbXA7IChOVURfUEVSTUFORU5UIHwgTlVEX05PQVJQKSkpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDtBIG5leHRob3AgZmRiIGNhbm5vdCBiZSBkeW5hbWljJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKIAlpZiAodnhsYW4tJmd0O2RlZmF1bHRfZHN0LnJlbW90ZV9pcC5zYS5zYV9mYW1pbHkgIT0gaXAuc2Euc2FfZmFtaWx5KQogCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZpYl9uZXh0aG9wcy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9maWJfbmV4dGhvcHMuc2gKaW5kZXggM2QzNDcxMjY3MzBhOS4uNDMxZDdiZWQ3NjIyNCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZpYl9uZXh0aG9wcy5zaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmliX25leHRob3BzLnNoCkBAIC01MzMsNiAmIzQzOzUzMywyMCBAQCBpcHY2X2ZkYl9ncnBfZmNuYWwoKQogCXJ1bl9jbWQgJiMzNDskQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTQgZGV2IHZ4MTAgbmhpZCA2MSBzZWxmJiMzNDsKIAlsb2dfdGVzdCAkPyAyNTUgJiMzNDtGZGIgbWFjIGFkZCB3aXRoIG5leHRob3AmIzM0OwogCiYjNDM7CSMgZmRiIGVudHJpZXMgd2l0aCBhIG5leHRob3AgZ3JvdXAgY2Fubm90IGJlIGFnZWQgb3V0CiYjNDM7CXJ1bl9jbWQgJiMzNDskQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTUgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZiBzdGF0aWMmIzM0OwomIzQzOwlsb2dfdGVzdCAkPyAwICYjMzQ7RmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBzdGF0aWMgc3RhdGUmIzM0OwomIzQzOwomIzQzOwlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE2IGRldiB2eDEwIG5oaWQgMTAyIHNlbGYgZHluYW1pYyYjMzQ7CiYjNDM7CWxvZ190ZXN0ICQ/IDI1NSAmIzM0O0ZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZSYjMzQ7CiYjNDM7CiYjNDM7CXJ1bl9jbWQgJiMzNDskQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZiYjMzQ7CiYjNDM7CXJ1bl9jbWQgJiMzNDskQlJJREdFIGZkYiByZXBsYWNlIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIGRzdCAyMDAxOmRiODo5MTo6MTEgc2VsZiBkeW5hbWljJiMzNDsKJiM0MzsJbG9nX3Rlc3QgJD8gMjU1ICYjMzQ7RmRiIG1hYyByZXBsYWNlIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZSYjMzQ7CiYjNDM7CiYjNDM7CXJ1bl9jbWQgJiMzNDskQlJJREdFIGZkYiBhcHBlbmQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgZHN0IDIwMDE6ZGI4OjkxOjoxMSBzZWxmIGR5bmFtaWMmIzM0OwomIzQzOwlsb2dfdGVzdCAkPyAyNTUgJiMzNDtGZGIgbWFjIGFwcGVuZCB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGUmIzM0OwomIzQzOwogCXJ1bl9jbWQgJiMzNDskSVAgLTYgcm8gYWRkIDIwMDE6ZGI4OjEwMTo6MS8xMjggbmhpZCA2NiYjMzQ7CiAJbG9nX3Rlc3QgJD8gMiAmIzM0O1JvdXRlIGFkZCB3aXRoIGZkYiBuZXh0aG9wJiMzNDsKIApAQCAtNjY5LDYgJiM0Mzs2ODMsMjAgQEAgaXB2NF9mZGJfZ3JwX2ZjbmFsKCkKIAlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE0IGRldiB2eDEwIG5oaWQgMTIgc2VsZiYjMzQ7CiAJbG9nX3Rlc3QgJD8gMjU1ICYjMzQ7RmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wJiMzNDsKIAomIzQzOwkjIGZkYiBlbnRyaWVzIHdpdGggYSBuZXh0aG9wIGdyb3VwIGNhbm5vdCBiZSBhZ2VkIG91dAomIzQzOwlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE1IGRldiB2eDEwIG5oaWQgMTAyIHNlbGYgc3RhdGljJiMzNDsKJiM0MzsJbG9nX3Rlc3QgJD8gMCAmIzM0O0ZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCBncm91cCBhbmQgc3RhdGljIHN0YXRlJiMzNDsKJiM0MzsKJiM0MzsJcnVuX2NtZCAmIzM0OyRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNiBkZXYgdngxMCBuaGlkIDEwMiBzZWxmIGR5bmFtaWMmIzM0OwomIzQzOwlsb2dfdGVzdCAkPyAyNTUgJiMzNDtGZGIgbWFjIGFkZCB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGUmIzM0OwomIzQzOwomIzQzOwlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIG5oaWQgMTAyIHNlbGYmIzM0OwomIzQzOwlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgcmVwbGFjZSAwMjowMjowMDowMDowMDoxNyBkZXYgdngxMCBkc3QgMTAuMC4wLjMgc2VsZiBkeW5hbWljJiMzNDsKJiM0MzsJbG9nX3Rlc3QgJD8gMjU1ICYjMzQ7RmRiIG1hYyByZXBsYWNlIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZSYjMzQ7CiYjNDM7CiYjNDM7CXJ1bl9jbWQgJiMzNDskQlJJREdFIGZkYiBhcHBlbmQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgZHN0IDEwLjAuMC4zIHNlbGYgZHluYW1pYyYjMzQ7CiYjNDM7CWxvZ190ZXN0ICQ/IDI1NSAmIzM0O0ZkYiBtYWMgYXBwZW5kIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZSYjMzQ7CiYjNDM7CiAJcnVuX2NtZCAmIzM0OyRJUCBybyBhZGQgMTcyLjE2LjAuMC8yMiBuaGlkIDE2JiMzNDsKIAlsb2dfdGVzdCAkPyAyICYjMzQ7Um91dGUgYWRkIHdpdGggZmRiIG5leHRob3AmIzM0OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBWWExBTiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNgIGFuZCBhIHNlbGYtdGVzdCBzY3JpcHQsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmliX25leHRob3BzLnNoYC4gSW50ZXJlc3RpbmcuIExldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvcmUgY2hhbmdlcyBpbiBgdnhsYW5fY29yZS5jYCBmaXJzdC4KCkl0IGxvb2tzIGxpa2UgdGhlIGZvY3VzIGlzIG9uIGhvdyBWWExBTiBGREIgZW50cmllcyBpbnRlcmFjdCB3aXRoIG5leHQgaG9wcy4gSW4gYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgLCB0aGVyZSYjMzk7cyBhIG5ldyBjaGVjazogaWYgYSBuZXh0IGhvcCAoYGYtJmd0O25oYCkgYWxyZWFkeSBleGlzdHMgYW5kIGlzbiYjMzk7dCBtYXJrZWQgYXMgcGVybWFuZW50IG9yIGRvZXNuJiMzOTt0IHVzZSBBUlAsIHdlJiMzOTtyZSBub3cgcHJldmVudGluZyB1cGRhdGVzIHRoYXQgd291bGQgbWFrZSBpdCBkeW5hbWljLiBUaGUgZXJyb3IgbWVzc2FnZSBleHBsaWNpdGx5IHN0YXRlcywgJiMzNDtDYW5ub3QgbWFrZSBhIG5leHRob3AgZmRiIGR5bmFtaWMuJiMzNDsgVGhpcyBzdWdnZXN0cyB0aGVyZSBpcyBhIG5ldyByZXN0cmljdGlvbiBvbiB0aGUgc3RhdGUgb2YgYSBGREIgZW50cnkuCgpTaW1pbGFybHksIHdpdGhpbiBgdnhsYW5fZmRiX2FkZGAsIGEgc2ltaWxhciByZXN0cmljdGlvbiBleGlzdHMuIElmIGEgbmV4dCBob3AgaWRlbnRpZmllciAoYG5oaWRgKSBpcyBwcmVzZW50IGFuZCB0aGUgY29ycmVzcG9uZGluZyBuZXh0IGhvcCBlbnRyeSAoYG5kbS0mZ3Q7bmRtX3N0YXRlYCkgaXMgbm90IHBlcm1hbmVudCwgaXQgcmVzdWx0cyBpbiBhbiBlcnJvcjogJiMzNDtBIG5leHRob3AgZmRiIGNhbm5vdCBiZSBkeW5hbWljLiYjMzQ7IFRoZSBlcnJvciBjb2RlIGJlaW5nIHJldHVybmVkIGhlcmUgaXMgYSBsaXR0bGUgZGlmZmVyZW50LCBgLUVJTlZBTGAgdmVyc3VzIGAtRU9QTk9UU1VQUGAuIFRoaXMgY2hhbmdlIGNsZWFybHkgYWltcyB0byBlbmZvcmNlIHN0YXRpYywgbm9uLWR5bmFtaWMgbmV4dCBob3AgY29uZmlndXJhdGlvbnMgaW4gdGhlc2Ugc3BlY2lmaWMgRkRCIG9wZXJhdGlvbnMuIEkgd29uZGVyIGlmIHRoZXJlIGhhdmUgYmVlbiBpc3N1ZXMgd2l0aCB0aGUgb3JpZ2luYWwgZHluYW1pYyBpbXBsZW1lbnRhdGlvbiwgb3IgcGVyaGFwcywgZm9yIHNlY3VyaXR5IHJlYXNvbnMuCgpOb3csIGxldCBtZSBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgZm9yIFZYTEFOLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGNoYW5nZSBtaWdodCBiZSBpbXBhY3RpbmcgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgb3IgZmVhdHVyZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgYW5kIGVuYWJsaW5nIGNvbmRpdGlvbnMgd2lsbCBiZSBjcnVjaWFsIGZvciBhIGZ1bGwgYXNzZXNzbWVudCBvZiB0aGUgcGF0Y2gmIzM5O3MgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWWExBTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTIxNj1jb25maWcgSVBWVEFQXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMjktXG5kcml2ZXJzL25ldC9LY29uZmlnOjIzMDpjb25maWcgVlhMQU5cbmRyaXZlcnMvbmV0L0tjb25maWctMjMxLVx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBlWHRlbnNpYmxlIExvY2FsIEFyZWEgTmV0d29yayAoVlhMQU4pXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDk1NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIHRoZSBOZXR3b3JrIERyaXZlciBLY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNvbWV0aGluZyByZWxhdGVkIHRvIG5ldHdvcmsgZHJpdmVycywgcHJvYmFibHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggdGhlIHN0YW5kYXJkIGxvY2F0aW9uOiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AuIEFuZCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciBjb25maWcgZmlsZSBpcyBzdHJ1Y3R1cmVkLCBJJiMzOTtkIGJldCB0aGUgcmVsZXZhbnQgZW50cnkgaXMgZ29pbmcgdG8gYmUgc29tZXdoZXJlIGFyb3VuZCBsaW5lIDIzMC4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZSBtb3JlIGNvcmUgYW5kIGdlbmVyaWMgZmVhdHVyZXMgYXJlIGRlZmluZWQsIG9yIHBlcmhhcHMgd2hlcmUgdGhleSYjMzk7cmUgZ3JvdXBpbmcgcmVsYXRlZCBkZXZpY2Utc3BlY2lmaWMgb3B0aW9ucy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHRoZXJlLi4uIGxpa2VseSBkZWFsaW5nIHdpdGggdGhlIHNwZWNpZmljIHBhcmFtZXRlcnMuIEkgZXhwZWN0IHRoZXJlIHRvIGJlIGEgbmVzdGVkIGBjb25maWdgIGJsb2NrIHdpdGggcG90ZW50aWFsbHkgc2V2ZXJhbCBkZXBlbmRlbmNpZXMgYW5kIGhlbHAgdGV4dC4gSSBob3BlIGl0JiMzOTtzIHdlbGwtZG9jdW1lbnRlZCEgVGltZSB0byBkaXZlIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjI1Olx0XHQgIGlwdnRhcCYjMzk7LCBhbmQgdGhlbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSB0YXAgdXNlciBzcGFjZSBpbnRlcmZhY2UuXG4gMjI2Olx0XG4gMjI3Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAyMjg6XHRcdCAgd2lsbCBiZSBjYWxsZWQgaXB2dGFwLlxuIDIyOTpcdFxuIDIzMDpcdGNvbmZpZyBWWExBTlxuIDIzMTpcdFx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBlWHRlbnNpYmxlIExvY2FsIEFyZWEgTmV0d29yayAoVlhMQU4pXCYjMzQ7XG4gMjMyOlx0XHRkZXBlbmRzIG9uIElORVRcbiAyMzM6XHRcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuIDIzNDpcdFx0c2VsZWN0IEdST19DRUxMU1xuIDIzNTpcdFx0aGVscFxuIDIzNjpcdFx0ICBUaGlzIGFsbG93cyBvbmUgdG8gY3JlYXRlIHZ4bGFuIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHByb3ZpZGVcbiAyMzc6XHRcdCAgTGF5ZXIgMiBOZXR3b3JrcyBvdmVyIExheWVyIDMgTmV0d29ya3MuIFZYTEFOIGlzIG9mdGVuIHVzZWRcbiAyMzg6XHRcdCAgdG8gdHVubmVsIHZpcnR1YWwgbmV0d29yayBpbmZyYXN0cnVjdHVyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG4gMjM5Olx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTpcbiAyNDA6XHRcdCAgICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1tYWhhbGluZ2FtLWR1dHQtZGNvcHMtdnhsYW4tMDJcbiAyNDE6XHRcbiAyNDI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuIDI0MzpcdFx0ICB3aWxsIGJlIGNhbGxlZCB2eGxhbi5cbiAyNDQ6XHRcbiAyNDU6XHRjb25maWcgR0VORVZFXG4gMjQ2Olx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIE5ldHdvcmsgVmlydHVhbGl6YXRpb24gRW5jYXBzdWxhdGlvblwmIzM0O1xuIDI0NzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gMjQ4Olx0XHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbiAyNDk6XHRcdHNlbGVjdCBHUk9fQ0VMTFNcbiAyNTA6XHRcdGhlbHBcbiAyNTE6XHRcdCAgVGhpcyBhbGxvd3Mgb25lIHRvIGNyZWF0ZSBnZW5ldmUgdmlydHVhbCBpbnRlcmZhY2VzIHRoYXQgcHJvdmlkZVxuIDI1MjpcdFx0ICBMYXllciAyIE5ldHdvcmtzIG92ZXIgTGF5ZXIgMyBOZXR3b3Jrcy4gR0VORVZFIGlzIG9mdGVuIHVzZWRcbiAyNTM6XHRcdCAgdG8gdHVubmVsIHZpcnR1YWwgbmV0d29yayBpbmZyYXN0cnVjdHVyZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG4gMjU0Olx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjYyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBWWExBTiBGREIgVXBkYXRlIExvZ2ljKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIFZYTEFOIEZEQiB1cGRhdGVzLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgaW5pdGlhbCBmb2N1cyB3aWxsIGJlIG9uIHRoZSBgdnhsYW5fY29yZS5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGJlIGhvbWluZyBpbiBvbiB0aGUgZnVuY3Rpb25zIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCBhbmQgYHZ4bGFuX2ZkYl9hZGRgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaGFuZGxpbmcgdGhlIGNyZWF0aW9uIGFuZCBtb2RpZmljYXRpb24gb2YgZm9yd2FyZGluZyBkYXRhYmFzZSBlbnRyaWVzIGZvciBWWExBTi4gSSBuZWVkIHRvIGRpc3NlY3QgdGhlIGxvZ2ljIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzLiBJIG5lZWQgdG8gZ3Jhc3AgaG93IHRoZSBleGlzdGluZyBlbnRyaWVzIGFyZSBoYW5kbGVkIGFuZCwgY29udmVyc2VseSwgaG93IG5ldyBlbnRyaWVzIGFyZSBhZGRlZCB0byB0aGUgRkRCLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIG15IGludmVzdGlnYXRpb24gbGllcy4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgdHJ5IHRvIGRldGVybWluZSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgaXNzdWUgSSYjMzk7bSBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk4NTpcdFx0aW50IGVycjtcbiA5ODY6XHRcbiA5ODc6XHRcdGlmIChuaGlkIFx1MDAyNlx1MDAyNiAhcmN1X2FjY2Vzc19wb2ludGVyKGYtXHUwMDNlbmgpKSB7XG4gOTg4Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiA5ODk6XHRcdFx0XHQgICAgICAgXCYjMzQ7Q2Fubm90IHJlcGxhY2UgYW4gZXhpc3Rpbmcgbm9uIG5leHRob3AgZmRiIHdpdGggYSBuZXh0aG9wXCYjMzQ7KTtcbiA5OTA6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDk5MTpcdFx0fVxuIDk5MjpcdFxuIDk5MzpcdFx0aWYgKG5oaWQgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgTkxNX0ZfQVBQRU5EKSkge1xuIDk5NDpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4gOTk1Olx0XHRcdFx0ICAgICAgIFwmIzM0O0Nhbm5vdCBhcHBlbmQgdG8gYSBuZXh0aG9wIGZkYlwmIzM0Oyk7XG4gOTk2Olx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiA5OTc6XHRcdH1cbiA5OTg6XHRcbiA5OTk6XHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cdTAwM2VuaCkgXHUwMDI2XHUwMDI2XG4xMDAwOlx0XHQgICAgIShzdGF0ZSBcdTAwMjYgKE5VRF9QRVJNQU5FTlQgfCBOVURfTk9BUlApKSkge1xuMTAwMTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0Nhbm5vdCBtYWtlIGEgbmV4dGhvcCBmZGIgZHluYW1pY1wmIzM0Oyk7XG4xMDAyOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjEwMDM6XHRcdH1cbjEwMDQ6XHRcbjEwMDU6XHRcdC8qIERvIG5vdCBhbGxvdyBhbiBleHRlcm5hbGx5IGxlYXJuZWQgZW50cnkgdG8gdGFrZSBvdmVyIGFuIGVudHJ5IGFkZGVkXG4xMDA2Olx0XHQgKiBieSB0aGUgdXNlci5cbjEwMDc6XHRcdCAqL1xuMTAwODpcdFx0aWYgKCEoZmRiX2ZsYWdzIFx1MDAyNiBOVEZfRVhUX0xFQVJORUQpIHx8XG4xMDA5Olx0XHQgICAgIShmLVx1MDAzZWZsYWdzIFx1MDAyNiBOVEZfVlhMQU5fQURERURfQllfVVNFUikpIHtcbjEwMTA6XHRcdFx0aWYgKGYtXHUwMDNlc3RhdGUgIT0gc3RhdGUpIHtcbjEwMTE6XHRcdFx0XHRmLVx1MDAzZXN0YXRlID0gc3RhdGU7XG4xMDEyOlx0XHRcdFx0bm90aWZ5ID0gMTtcbjEwMTM6XHRcdFx0fVxuMTAxNDpcdFx0XHRpZiAoZi1cdTAwM2VmbGFncyAhPSBmZGJfZmxhZ3MpIHtcbjEwMTU6XHRcdFx0XHRmLVx1MDAzZWZsYWdzID0gZmRiX2ZsYWdzO1xuMTAxNjpcdFx0XHRcdG5vdGlmeSA9IDE7XG4xMDE3Olx0XHRcdH1cbjEwMTg6XHRcdH1cbjEwMTk6XHRcbjEwMjA6XHRcdGlmICgoZmxhZ3MgXHUwMDI2IE5MTV9GX1JFUExBQ0UpKSB7XG4xMDIxOlx0XHRcdC8qIE9ubHkgY2hhbmdlIHVuaWNhc3RzICovXG4xMDIyOlx0XHRcdGlmICghKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGYtXHUwMDNla2V5LmV0aF9hZGRyKSB8fFxuMTAyMzpcdFx0XHQgICAgICBpc196ZXJvX2V0aGVyX2FkZHIoZi1cdTAwM2VrZXkuZXRoX2FkZHIpKSkge1xuMTAyNDpcdFx0XHRcdGlmIChuaGlkKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjU2OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkludmVzdGlnYXRpbmcgdGhlIFZYTEFOIEZvcndhcmRpbmcgRGF0YWJhc2UgQWRkaXRpb24qKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgVlhMQU4sIGFuZCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgZm9yd2FyZGluZyBkYXRhYmFzZS4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3Mgem9vbSBpbiBvbiBgdnhsYW5fZmRiX2FkZGAuIEl0JiMzOTtzIGhvdXNlZCBpbiBgdnhsYW5fY29yZS5jYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCYjMzk7cyB0aGUgY3JpdGljYWwgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIGFkZGluZyBlbnRyaWVzIHRvIHRoZSBGREIuIFVuZGVyc3RhbmRpbmcgaXRzIG9wZXJhdGlvbiBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgVlhMQU4gaGFuZGxlcyBpdHMgTUFDIGFkZHJlc3MgbGVhcm5pbmcgYW5kIGZvcndhcmRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjUwOlx0XHRpbnQgZXJyO1xuMTI1MTpcdFxuMTI1MjpcdFx0aWYgKCEobmRtLVx1MDAzZW5kbV9zdGF0ZSBcdTAwMjYgKE5VRF9QRVJNQU5FTlR8TlVEX1JFQUNIQUJMRSkpKSB7XG4xMjUzOlx0XHRcdHByX2luZm8oXCYjMzQ7UlRNX05FV05FSUdIIHdpdGggaW52YWxpZCBzdGF0ZSAlI3hcXG5cJiMzNDssXG4xMjU0Olx0XHRcdFx0bmRtLVx1MDAzZW5kbV9zdGF0ZSk7XG4xMjU1Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI1NjpcdFx0fVxuMTI1NzpcdFxuMTI1ODpcdFx0aWYgKCF0YiB8fCAoIXRiW05EQV9EU1RdIFx1MDAyNlx1MDAyNiAhdGJbTkRBX05IX0lEXSkpXG4xMjU5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI2MDpcdFxuMTI2MTpcdFx0ZXJyID0gdnhsYW5fZmRiX3BhcnNlKHRiLCB2eGxhbiwgXHUwMDI2aXAsIFx1MDAyNnBvcnQsIFx1MDAyNnNyY192bmksIFx1MDAyNnZuaSwgXHUwMDI2aWZpbmRleCxcbjEyNjI6XHRcdFx0XHQgICAgICBcdTAwMjZuaGlkLCBleHRhY2spO1xuMTI2MzpcdFx0aWYgKGVycilcbjEyNjQ6XHRcdFx0cmV0dXJuIGVycjtcbjEyNjU6XHRcbjEyNjY6XHRcdGlmIChuaGlkIFx1MDAyNlx1MDAyNiAhKG5kbS1cdTAwM2VuZG1fc3RhdGUgXHUwMDI2IChOVURfUEVSTUFORU5UIHwgTlVEX05PQVJQKSkpIHtcbjEyNjc6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtBIG5leHRob3AgZmRiIGNhbm5vdCBiZSBkeW5hbWljXCYjMzQ7KTtcbjEyNjg6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjY5Olx0XHR9XG4xMjcwOlx0XG4xMjcxOlx0XHRpZiAodnhsYW4tXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX2lwLnNhLnNhX2ZhbWlseSAhPSBpcC5zYS5zYV9mYW1pbHkpXG4xMjcyOlx0XHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuMTI3MzpcdFxuMTI3NDpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4xMjc1Olx0XHRlcnIgPSB2eGxhbl9mZGJfdXBkYXRlKHZ4bGFuLCBhZGRyLCBcdTAwMjZpcCwgbmRtLVx1MDAzZW5kbV9zdGF0ZSwgZmxhZ3MsXG4xMjc2Olx0XHRcdFx0ICAgICAgIHBvcnQsIHNyY192bmksIHZuaSwgaWZpbmRleCxcbjEyNzc6XHRcdFx0XHQgICAgICAgbmRtLVx1MDAzZW5kbV9mbGFncyB8IE5URl9WWExBTl9BRERFRF9CWV9VU0VSLFxuMTI3ODpcdFx0XHRcdCAgICAgICBuaGlkLCB0cnVlLCBleHRhY2spO1xuMTI3OTpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbjEyODA6XHRcbjEyODE6XHRcdGlmICghZXJyKVxuMTI4MjpcdFx0XHQqbm90aWZpZWQgPSB0cnVlO1xuMTI4MzpcdFxuMTI4NDpcdFx0cmV0dXJuIGVycjtcbjEyODU6XHR9XG4xMjg2Olx0XG4xMjg3Olx0aW50IF9fdnhsYW5fZmRiX2RlbGV0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbjEyODg6XHRcdFx0ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHVuaW9uIHZ4bGFuX2FkZHIgaXAsXG4xMjg5Olx0XHRcdCAgICAgICBfX2JlMTYgcG9ydCwgX19iZTMyIHNyY192bmksIF9fYmUzMiB2bmksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NDUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBWWExBTjogQSBUYXJnZXRlZCBBcHByb2FjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBmdXp6aW5nIFZYTEFOIGlzIGEgdmlhYmxlIHRhcmdldC4gRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBzb21ldGhpbmcgSSBjYW4gYWN0dWFsbHkgcmVhY2ggaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCDigJMgYW5kIHRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcy4gVlhMQU4gaXMgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGRyaXZlciwgZW5hYmxlZCBieSBgQ09ORklHX1ZYTEFOYCwgYW5kIGxldmVyYWdlcyBgcnRuZXRsaW5rYCBpbnRlcmZhY2VzLiBUaGlzIGlzIHByaW1lIHRlcnJpdG9yeSBmb3IgU3l6a2FsbGVyLCB3aGljaCBmcmVxdWVudGx5IHRhcmdldHMgdGhvc2UgYXJlYXMuCgpOZXh0LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIHRoaXMgY29kZSAqZXhlY3V0YWJsZSo/IFllcywgZGVmaW5pdGVseS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGhvbmluZyBpbiBvbiBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AgYW5kIGB2eGxhbl9mZGJfYWRkYCB3aXRoaW4gYGRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY2AuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLgoKVGhlIHF1ZXN0aW9uIG9mIHdvcnRoaW5lc3MsIGdpdmVuIG15IGluaXRpYWwgYW5hbHlzaXMsIGlzIHNldHRsZWQ6IFdvcnRoRnV6emluZz10cnVlLgoKTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiBgdnhsYW5fZmRiX2FkZGAgYW5kIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCwgYW5kIHBvc3NpYmx5IGB2eGxhbl9mZGJfdXBkYXRlYCAuIEkmIzM5O2xsIHByaW9yaXRpemUgdGhlc2Ugc3ltYm9scyBmb3IgZnV6emluZy4KCk15IG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBhcmUgYFZYTEFOYCBhbmQgYElORVRgLgoKQW5kIGZpbmFsbHksIHRvIG1ha2Ugc3VyZSwgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIGNvbXBpbGF0aW9uOiBgdnhsYW5fY29yZS5jYCBpcyBpbmRlZWQgY29tcGlsZWQgd2hlbiBgQ09ORklHX1ZYTEFOYCBpcyBlbmFibGVkLiBMZXQmIzM5O3MgZG91YmxlIGNoZWNrIHRoYXQgTWFrZWZpbGUgaW4gYGRyaXZlcnMvbmV0L3Z4bGFuYCB0byBiZSBjZXJ0YWluLiBOb3csIGxldCYjMzk7cyBnZXQgdG8gd29yayEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCNcbiAgIDI6XHQjIE1ha2VmaWxlIGZvciB0aGUgdnhsYW4gZHJpdmVyXG4gICAzOlx0I1xuICAgNDpcdFxuICAgNTpcdG9iai0kKENPTkZJR19WWExBTikgJiM0Mzs9IHZ4bGFuLm9cbiAgIDY6XHRcbiAgIDc6XHR2eGxhbi1vYmpzIDo9IHZ4bGFuX2NvcmUubyB2eGxhbl9tdWx0aWNhc3QubyB2eGxhbl92bmlmaWx0ZXIubyB2eGxhbl9tZGIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTU5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBWWExBTiBGREIgVXBkYXRlIE1lY2hhbmlzbXMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIFZYTEFOIEZEQiB1cGRhdGUgc2l0dWF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIGdldCBhIGxheSBvZiB0aGUgbGFuZDsgYXJlIHRoZXJlIG90aGVyIHN5bWJvbHMgYXQgcGxheSBoZXJlIGJleW9uZCB0aGUgb25lcyBJJiMzOTttIGluaXRpYWxseSBhd2FyZSBvZj8gT2theSwgSSBzZWU6IGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCwgYHZ4bGFuX2ZkYl9hZGRgLCBhbmQgYHZ4bGFuX2ZkYl91cGRhdGVgLiBHb29kLiBOb3csIEkgd2FudCB0byBjb25maXJtIHRoZSBzY29wZSBvZiBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AuIElzIGl0IGEgc3RhdGljIGlubGluZSwgb3IganVzdCBhIHN0YXRpYyBmdW5jdGlvbj8gQWxyaWdodCwgaXQmIzM5O3MgZGVmaW5lZCBvbiBsaW5lIDk5NiBhcyBgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKC4uLilgLiBTbywgaXTigJlzIGEgc3RhdGljLCBub24taW5saW5lIGZ1bmN0aW9uIHJlc2lkaW5nIHdpdGhpbiBgdnhsYW5fY29yZS5jYC4gVGhpcyByZXN0cmljdHMgaXRzIHZpc2liaWxpdHksIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgaW50ZWdyYXRpb24gaW50byB0aGUgYnJvYWRlciBWWExBTiBmcmFtZXdvcmsuIE5vdywgYHZ4bGFuX2ZkYl9hZGRgIGlzIGFsc28gc3RhdGljLCBgc3RhdGljIGludCB2eGxhbl9mZGJfYWRkKC4uLilgLCBhbmQgZnJvbSBleHBlcmllbmNlLCBJIHJlY2FsbCB0aGF0IHRoaXMgb25lIGlzIGNvbm5lY3RlZCB0byBgLm5kb19mZGJfYWRkYCBvciBydG5ldGxpbmsgbmVpZ2hib3Igb3BlcmF0aW9ucy4gTXkgbmV4dCBzdGVwIGhlcmUgaXMgdG8gYW5hbHl6ZSB0aGUgY2FsbGVycyBvZiBgdnhsYW5fZmRiX2FkZGAgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGZkYi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnhsYW5fZmRiX2FkZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MTE1Mj1zdGF0aWMgaW50IHZ4bGFuX2ZkYl9wYXJzZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTIzOC0vKiBBZGQgc3RhdGljIGVudHJ5ICh2aWEgbmV0bGluaykgKi9cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoxMjM5OnN0YXRpYyBpbnQgdnhsYW5fZmRiX2FkZChzdHJ1Y3QgbmRtc2cgKm5kbSwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMjQwLVx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0zMjk2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdnhsYW5fbmV0ZGV2X2V0aGVyX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzMwNS1cdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGV0aF9tYWNfYWRkcixcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzozMzA2Olx0Lm5kb19mZGJfYWRkXHRcdD0gdnhsYW5fZmRiX2FkZCxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zMzA3LVx0Lm5kb19mZGJfZGVsXHRcdD0gdnhsYW5fZmRiX2RlbGV0ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk1NAoJCQkJCQkJb3V0cHV0OiAxMTcKCQkJCQkJCXRob3VnaHRzOiAxMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVlhMQU4gRkRCIEVudHJ5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBWWExBTiBGREIgbWFuYWdlbWVudCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYHZ4bGFuX2ZkYl9hZGRgIGlzIHRoZSBjb3JlIGhhbmRsZXIgZm9yIGFkZGluZyBuZXcgZW50cmllcywgYWN0aW5nIGFzIHRoZSBgbmRvX2ZkYl9hZGRgIGNhbGxiYWNrIGZvciBWWExBTiBuZXR3b3JrIGRldmljZXMuIEkgc2VlIHRoYXQgYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgIGFuZCBgdnhsYW5fZmRiX3VwZGF0ZWAgYXJlIGludGVybmFsIGhlbHBlcnMgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yIHRoZSBhY3R1YWwgcHJvY2VzcyBvZiB1cGRhdGluZyBleGlzdGluZyBGREIgZW50cmllcywgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGUgY29uZmlndXJhdGlvbnMgaW4gdXNlIGFyZSBgVlhMQU5gIGFuZCBgSU5FVGAuIE5vdGhpbmcgY29tcGxpY2F0ZWQgaGVyZSwgSSB0aGluayBJJiMzOTtsbCBiZSBhYmxlIHRvIHF1aWNrbHkgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VlhMQU4mIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Z4bGFuX2ZkYl9hZGQmIzM0OywKICAgICYjMzQ7dnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyYjMzQ7LAogICAgJiMzNDt2eGxhbl9mZGJfdXBkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgcHJldmVudGluZyBuZXh0aG9wIEZEQiBlbnRyaWVzIGZyb20gYmVpbmcgY29uZmlndXJlZCBvciB1cGRhdGVkIHdpdGggYSBkeW5hbWljIHN0YXRlIGluIHRoZSBWWExBTiBkcml2ZXIuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgbmV0d29yayBuZXRsaW5rL0ZEQiBoYW5kbGluZyBjb2RlIGluIHZ4bGFuX2NvcmUuYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VlhMQU4mIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Z4bGFuX2ZkYl9hZGQmIzM0OywKICAgICYjMzQ7dnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyYjMzQ7LAogICAgJiMzNDt2eGxhbl9mZGJfdXBkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgcHJldmVudGluZyBuZXh0aG9wIEZEQiBlbnRyaWVzIGZyb20gYmVpbmcgY29uZmlndXJlZCBvciB1cGRhdGVkIHdpdGggYSBkeW5hbWljIHN0YXRlIGluIHRoZSBWWExBTiBkcml2ZXIuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgbmV0d29yayBuZXRsaW5rL0ZEQiBoYW5kbGluZyBjb2RlIGluIHZ4bGFuX2NvcmUuYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgaW4gdnhsYW5fZmRiX2FkZCgpIGFuZCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKCkgdG8gcHJldmVudCBjb25maWd1cmluZyBvciB1cGRhdGluZyBuZXh0aG9wLWJhc2VkIFZYTEFOIEZEQiBlbnRyaWVzIHdpdGggZHluYW1pYyAoYWdpbmcpIHN0YXRlcy4gSXQgb25seSBpbnRyb2R1Y2VzIGNvbmRpdGlvbmFsIGNoZWNrcyBvbiBleGlzdGluZyB2YWxpZGF0ZWQgaW5wdXQgYXJndW1lbnRzIGFuZCByZXR1cm5zIHN0YW5kYXJkIGVycm9yIGNvZGVzIHdpdGggc3RhdGljIG5ldGxpbmsgZXJyb3IgbWVzc2FnZXMuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIG9yIGRhdGEgdHJhbnNmZXJzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMTQzYWVkZTcyMjI2N2Y0NDllZWM0MGQyNzNmZmVkMjZlMmIwZTE1YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTI6MzA6NTQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMKaW5kZXggYWM4OGQxYzg1YmVhNi4uOTNiZjdjNTM1ZTY5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYwpAQCAtOTk2LDYgJiM0Mzs5OTYsMTIgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCiYjNDM7CWlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi0mZ3Q7bmgpICZhbXA7JmFtcDsKJiM0MzsJICAgICEoc3RhdGUgJmFtcDsgKE5VRF9QRVJNQU5FTlQgfCBOVURfTk9BUlApKSkgewomIzQzOwkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O0Nhbm5vdCBtYWtlIGEgbmV4dGhvcCBmZGIgZHluYW1pYyYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwogCS8qIERvIG5vdCBhbGxvdyBhbiBleHRlcm5hbGx5IGxlYXJuZWQgZW50cnkgdG8gdGFrZSBvdmVyIGFuIGVudHJ5IGFkZGVkCiAJICogYnkgdGhlIHVzZXIuCiAJICovCkBAIC0xMjU3LDYgJiM0MzsxMjYzLDExIEBAIHN0YXRpYyBpbnQgdnhsYW5fZmRiX2FkZChzdHJ1Y3QgbmRtc2cgKm5kbSwgc3RydWN0IG5sYXR0ciAqdGJbXSwKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiYjNDM7CWlmIChuaGlkICZhbXA7JmFtcDsgIShuZG0tJmd0O25kbV9zdGF0ZSAmYW1wOyAoTlVEX1BFUk1BTkVOVCB8IE5VRF9OT0FSUCkpKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7QSBuZXh0aG9wIGZkYiBjYW5ub3QgYmUgZHluYW1pYyYjMzQ7KTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiAJaWYgKHZ4bGFuLSZndDtkZWZhdWx0X2RzdC5yZW1vdGVfaXAuc2Euc2FfZmFtaWx5ICE9IGlwLnNhLnNhX2ZhbWlseSkKIAkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9maWJfbmV4dGhvcHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmliX25leHRob3BzLnNoCmluZGV4IDNkMzQ3MTI2NzMwYTkuLjQzMWQ3YmVkNzYyMjQgMTAwNzU1Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9maWJfbmV4dGhvcHMuc2gKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZpYl9uZXh0aG9wcy5zaApAQCAtNTMzLDYgJiM0Mzs1MzMsMjAgQEAgaXB2Nl9mZGJfZ3JwX2ZjbmFsKCkKIAlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE0IGRldiB2eDEwIG5oaWQgNjEgc2VsZiYjMzQ7CiAJbG9nX3Rlc3QgJD8gMjU1ICYjMzQ7RmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wJiMzNDsKIAomIzQzOwkjIGZkYiBlbnRyaWVzIHdpdGggYSBuZXh0aG9wIGdyb3VwIGNhbm5vdCBiZSBhZ2VkIG91dAomIzQzOwlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE1IGRldiB2eDEwIG5oaWQgMTAyIHNlbGYgc3RhdGljJiMzNDsKJiM0MzsJbG9nX3Rlc3QgJD8gMCAmIzM0O0ZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCBncm91cCBhbmQgc3RhdGljIHN0YXRlJiMzNDsKJiM0MzsKJiM0MzsJcnVuX2NtZCAmIzM0OyRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNiBkZXYgdngxMCBuaGlkIDEwMiBzZWxmIGR5bmFtaWMmIzM0OwomIzQzOwlsb2dfdGVzdCAkPyAyNTUgJiMzNDtGZGIgbWFjIGFkZCB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGUmIzM0OwomIzQzOwomIzQzOwlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIG5oaWQgMTAyIHNlbGYmIzM0OwomIzQzOwlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgcmVwbGFjZSAwMjowMjowMDowMDowMDoxNyBkZXYgdngxMCBkc3QgMjAwMTpkYjg6OTE6OjExIHNlbGYgZHluYW1pYyYjMzQ7CiYjNDM7CWxvZ190ZXN0ICQ/IDI1NSAmIzM0O0ZkYiBtYWMgcmVwbGFjZSB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGUmIzM0OwomIzQzOwomIzQzOwlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgYXBwZW5kIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIGRzdCAyMDAxOmRiODo5MTo6MTEgc2VsZiBkeW5hbWljJiMzNDsKJiM0MzsJbG9nX3Rlc3QgJD8gMjU1ICYjMzQ7RmRiIG1hYyBhcHBlbmQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlJiMzNDsKJiM0MzsKIAlydW5fY21kICYjMzQ7JElQIC02IHJvIGFkZCAyMDAxOmRiODoxMDE6OjEvMTI4IG5oaWQgNjYmIzM0OwogCWxvZ190ZXN0ICQ/IDIgJiMzNDtSb3V0ZSBhZGQgd2l0aCBmZGIgbmV4dGhvcCYjMzQ7CiAKQEAgLTY2OSw2ICYjNDM7NjgzLDIwIEBAIGlwdjRfZmRiX2dycF9mY25hbCgpCiAJcnVuX2NtZCAmIzM0OyRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNCBkZXYgdngxMCBuaGlkIDEyIHNlbGYmIzM0OwogCWxvZ190ZXN0ICQ/IDI1NSAmIzM0O0ZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCYjMzQ7CiAKJiM0MzsJIyBmZGIgZW50cmllcyB3aXRoIGEgbmV4dGhvcCBncm91cCBjYW5ub3QgYmUgYWdlZCBvdXQKJiM0MzsJcnVuX2NtZCAmIzM0OyRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNSBkZXYgdngxMCBuaGlkIDEwMiBzZWxmIHN0YXRpYyYjMzQ7CiYjNDM7CWxvZ190ZXN0ICQ/IDAgJiMzNDtGZGIgbWFjIGFkZCB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIHN0YXRpYyBzdGF0ZSYjMzQ7CiYjNDM7CiYjNDM7CXJ1bl9jbWQgJiMzNDskQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTYgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZiBkeW5hbWljJiMzNDsKJiM0MzsJbG9nX3Rlc3QgJD8gMjU1ICYjMzQ7RmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlJiMzNDsKJiM0MzsKJiM0MzsJcnVuX2NtZCAmIzM0OyRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNyBkZXYgdngxMCBuaGlkIDEwMiBzZWxmJiMzNDsKJiM0MzsJcnVuX2NtZCAmIzM0OyRCUklER0UgZmRiIHJlcGxhY2UgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgZHN0IDEwLjAuMC4zIHNlbGYgZHluYW1pYyYjMzQ7CiYjNDM7CWxvZ190ZXN0ICQ/IDI1NSAmIzM0O0ZkYiBtYWMgcmVwbGFjZSB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGUmIzM0OwomIzQzOwomIzQzOwlydW5fY21kICYjMzQ7JEJSSURHRSBmZGIgYXBwZW5kIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIGRzdCAxMC4wLjAuMyBzZWxmIGR5bmFtaWMmIzM0OwomIzQzOwlsb2dfdGVzdCAkPyAyNTUgJiMzNDtGZGIgbWFjIGFwcGVuZCB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGUmIzM0OwomIzQzOwogCXJ1bl9jbWQgJiMzNDskSVAgcm8gYWRkIDE3Mi4xNi4wLjAvMjIgbmhpZCAxNiYjMzQ7CiAJbG9nX3Rlc3QgJD8gMiAmIzM0O1JvdXRlIGFkZCB3aXRoIGZkYiBuZXh0aG9wJiMzNDsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQzMQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZYTEFOIEZEQiBVcGRhdGUqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIGRpZmYgc2hvd3MgY2hhbmdlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY2AuIFNwZWNpZmljYWxseSwgdGhlIGZvY3VzIGlzIG9uIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCBhbmQgYHZ4bGFuX2ZkYl9hZGRgLiBJIHNlZSBhIG5ld2x5IGludHJvZHVjZWQgY2hlY2sgaW4gYm90aCBmdW5jdGlvbnMgdGhhdCBzZWVtcyB0byBiZSByZWxhdGVkIHRvIHRoZSBzdGF0ZSBvZiBhIG5leHQgaG9wLgoKSW4gYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgLCB0aGUgY29kZSBub3cgZXhwbGljaXRseSBwcm9oaWJpdHMgdXBkYXRpbmcgYW4gZXhpc3RpbmcgRkRCIGVudHJ5JiMzOTtzIG5leHQgaG9wIHRvIGEgZHluYW1pYyBzdGF0ZSBpZiB0aGUgY3VycmVudCBuZXh0IGhvcCBgZi0mZ3Q7bmhgIGV4aXN0cyBhbmQgaXNuJiMzOTt0IG1hcmtlZCBhcyBgTlVEX1BFUk1BTkVOVGAgb3IgYE5VRF9OT0FSUGAuIFRoZSBzYW1lIGxvZ2ljIGlzIGFwcGxpZWQgaW4gYHZ4bGFuX2ZkYl9hZGRgLCB3aGVyZSB0aGUgcHJlc2VuY2Ugb2YgYSBuZXh0IGhvcCBJRCBgbmhpZGAgYWxvbmcgd2l0aCB0aGUgYG5kbV9zdGF0ZWAgbm90IGJlaW5nIGBOVURfUEVSTUFORU5UYCBvciBgTlVEX05PQVJQYCByZXN1bHRzIGluIGFuIGVycm9yLiBUaGUgZXJyb3IgbWVzc2FnZXMgc3VnZ2VzdCB0aGlzIGNoYW5nZSBwcmV2ZW50cyBtYWtpbmcgYSAmIzM0O25leHRob3AgZmRiIGR5bmFtaWMsJiMzNDsgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHJlc3RyaWN0aW9uLiBUbyBkbyB0aGF0LCBJJiMzOTtsbCBuZWVkIHRvIHJlYWQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgIGFuZCBgdnhsYW5fZmRiX2FkZGAgdG8gZ3Jhc3AgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBhZGRlZCBjb25zdHJhaW50IGFuZCB3aGF0IGl0JiMzOTtzIHRyeWluZyB0byBwcmV2ZW50LiBUaGUgZmFjdCB0aGF0IHRoaXMgaW1wYWN0cyBib3RoIHVwZGF0ZXMgYW5kIGFkZGl0aW9ucyBtZWFucyB0aGVyZSBpcyBhbiBpbXBvcnRhbnQgZGV0YWlsIGF0IGhhbmQgdGhhdCBjb3VsZCBoYXZlIGltcGFjdHMgZm9yIHRoZSB1c2VyLiBBbHNvLCBJIHNob3VsZCBjaGVjayB0aGUgcmVsYXRlZCB0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZpYl9uZXh0aG9wcy5zaGAgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTg1Olx0XHRpbnQgZXJyO1xuIDk4NjpcdFxuIDk4NzpcdFx0aWYgKG5oaWQgXHUwMDI2XHUwMDI2ICFyY3VfYWNjZXNzX3BvaW50ZXIoZi1cdTAwM2VuaCkpIHtcbiA5ODg6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxuIDk4OTpcdFx0XHRcdCAgICAgICBcJiMzNDtDYW5ub3QgcmVwbGFjZSBhbiBleGlzdGluZyBub24gbmV4dGhvcCBmZGIgd2l0aCBhIG5leHRob3BcJiMzNDspO1xuIDk5MDpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gOTkxOlx0XHR9XG4gOTkyOlx0XG4gOTkzOlx0XHRpZiAobmhpZCBcdTAwMjZcdTAwMjYgKGZsYWdzIFx1MDAyNiBOTE1fRl9BUFBFTkQpKSB7XG4gOTk0Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjayxcbiA5OTU6XHRcdFx0XHQgICAgICAgXCYjMzQ7Q2Fubm90IGFwcGVuZCB0byBhIG5leHRob3AgZmRiXCYjMzQ7KTtcbiA5OTY6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIDk5NzpcdFx0fVxuIDk5ODpcdFxuIDk5OTpcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihmLVx1MDAzZW5oKSBcdTAwMjZcdTAwMjZcbjEwMDA6XHRcdCAgICAhKHN0YXRlIFx1MDAyNiAoTlVEX1BFUk1BTkVOVCB8IE5VRF9OT0FSUCkpKSB7XG4xMDAxOlx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q2Fubm90IG1ha2UgYSBuZXh0aG9wIGZkYiBkeW5hbWljXCYjMzQ7KTtcbjEwMDI6XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuMTAwMzpcdFx0fVxuMTAwNDpcdFxuMTAwNTpcdFx0LyogRG8gbm90IGFsbG93IGFuIGV4dGVybmFsbHkgbGVhcm5lZCBlbnRyeSB0byB0YWtlIG92ZXIgYW4gZW50cnkgYWRkZWRcbjEwMDY6XHRcdCAqIGJ5IHRoZSB1c2VyLlxuMTAwNzpcdFx0ICovXG4xMDA4Olx0XHRpZiAoIShmZGJfZmxhZ3MgXHUwMDI2IE5URl9FWFRfTEVBUk5FRCkgfHxcbjEwMDk6XHRcdCAgICAhKGYtXHUwMDNlZmxhZ3MgXHUwMDI2IE5URl9WWExBTl9BRERFRF9CWV9VU0VSKSkge1xuMTAxMDpcdFx0XHRpZiAoZi1cdTAwM2VzdGF0ZSAhPSBzdGF0ZSkge1xuMTAxMTpcdFx0XHRcdGYtXHUwMDNlc3RhdGUgPSBzdGF0ZTtcbjEwMTI6XHRcdFx0XHRub3RpZnkgPSAxO1xuMTAxMzpcdFx0XHR9XG4xMDE0Olx0XHRcdGlmIChmLVx1MDAzZWZsYWdzICE9IGZkYl9mbGFncykge1xuMTAxNTpcdFx0XHRcdGYtXHUwMDNlZmxhZ3MgPSBmZGJfZmxhZ3M7XG4xMDE2Olx0XHRcdFx0bm90aWZ5ID0gMTtcbjEwMTc6XHRcdFx0fVxuMTAxODpcdFx0fVxuMTAxOTpcdFxuMTAyMDpcdFx0aWYgKChmbGFncyBcdTAwMjYgTkxNX0ZfUkVQTEFDRSkpIHtcbjEwMjE6XHRcdFx0LyogT25seSBjaGFuZ2UgdW5pY2FzdHMgKi9cbjEwMjI6XHRcdFx0aWYgKCEoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZi1cdTAwM2VrZXkuZXRoX2FkZHIpIHx8XG4xMDIzOlx0XHRcdCAgICAgIGlzX3plcm9fZXRoZXJfYWRkcihmLVx1MDAzZWtleS5ldGhfYWRkcikpKSB7XG4xMDI0Olx0XHRcdFx0aWYgKG5oaWQpIHtcbjEwMjU6XHRcdFx0XHRcdHJjID0gdnhsYW5fZmRiX25oX3VwZGF0ZSh2eGxhbiwgZiwgbmhpZCwgZXh0YWNrKTtcbjEwMjY6XHRcdFx0XHRcdGlmIChyYyBcdTAwM2MgMClcbjEwMjc6XHRcdFx0XHRcdFx0cmV0dXJuIHJjO1xuMTAyODpcdFx0XHRcdH0gZWxzZSB7XG4xMDI5Olx0XHRcdFx0XHRyYyA9IHZ4bGFuX2ZkYl9yZXBsYWNlKGYsIGlwLCBwb3J0LCB2bmksXG4xMDMwOlx0XHRcdFx0XHRcdFx0ICAgICAgIGlmaW5kZXgsIFx1MDAyNm9sZHJkKTtcbjEwMzE6XHRcdFx0XHR9XG4xMDMyOlx0XHRcdFx0bm90aWZ5IHw9IHJjO1xuMTAzMzpcdFx0XHR9IGVsc2Uge1xuMTAzNDpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q2Fubm90IHJlcGxhY2Ugbm9uLXVuaWNhc3QgZmRiIGVudHJpZXNcJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxMjozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTEwCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRoaW5raW5nLCBleHByZXNzZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIFZYTEFOIEZEQiBBZGRpdGlvbioqCgpPa2F5LCBsZXQmIzM5O3Mgem9vbSBpbiBhIGJpdCBmdXJ0aGVyLiBJIHdhbnQgdG8gc2hpZnQgbXkgZm9jdXMgdG8gdGhlIGB2eGxhbl9mZGJfYWRkYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmVzIDEyNTAgdGhyb3VnaCAxMjgwLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhhdCBwYXJ0IG9mIHRoZSBjb2RlLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBsZWFybmluZyB0aGUgTUFDIGFkZHJlc3NlcyBhc3NvY2lhdGVkIHdpdGggYSBWWExBTiBuZXR3b3JrLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGVkZ2UgY2FzZXMgaXMgcGFyYW1vdW50LiBJJiMzOTttIGhvcGluZyB0byBwaW5wb2ludCBob3cgaXQgaGFuZGxlcyBuZXcgZW50cmllcywgYWdpbmcsIGFuZCBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2VjdGlvbiB0byBwcm92aWRlIHNvbWUgY3JpdGljYWwgY2x1ZXMgYXMgdG8gd2hlcmUgcHJvYmxlbXMgYXJlIG9jY3VycmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNDA6XHRcdFx0XHQgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbjEyNDE6XHRcdFx0XHQgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZCwgdTE2IGZsYWdzLFxuMTI0MjpcdFx0XHRcdCBib29sICpub3RpZmllZCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMTI0MzpcdHtcbjEyNDQ6XHRcdHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTtcbjEyNDU6XHRcdC8qIHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQodnhsYW4tXHUwMDNlZGV2KTsgKi9cbjEyNDY6XHRcdHVuaW9uIHZ4bGFuX2FkZHIgaXA7XG4xMjQ3Olx0XHRfX2JlMTYgcG9ydDtcbjEyNDg6XHRcdF9fYmUzMiBzcmNfdm5pLCB2bmk7XG4xMjQ5Olx0XHR1MzIgaWZpbmRleCwgbmhpZDtcbjEyNTA6XHRcdGludCBlcnI7XG4xMjUxOlx0XG4xMjUyOlx0XHRpZiAoIShuZG0tXHUwMDNlbmRtX3N0YXRlIFx1MDAyNiAoTlVEX1BFUk1BTkVOVHxOVURfUkVBQ0hBQkxFKSkpIHtcbjEyNTM6XHRcdFx0cHJfaW5mbyhcJiMzNDtSVE1fTkVXTkVJR0ggd2l0aCBpbnZhbGlkIHN0YXRlICUjeFxcblwmIzM0OyxcbjEyNTQ6XHRcdFx0XHRuZG0tXHUwMDNlbmRtX3N0YXRlKTtcbjEyNTU6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjU2Olx0XHR9XG4xMjU3Olx0XG4xMjU4Olx0XHRpZiAoIXRiIHx8ICghdGJbTkRBX0RTVF0gXHUwMDI2XHUwMDI2ICF0YltOREFfTkhfSURdKSlcbjEyNTk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjYwOlx0XG4xMjYxOlx0XHRlcnIgPSB2eGxhbl9mZGJfcGFyc2UodGIsIHZ4bGFuLCBcdTAwMjZpcCwgXHUwMDI2cG9ydCwgXHUwMDI2c3JjX3ZuaSwgXHUwMDI2dm5pLCBcdTAwMjZpZmluZGV4LFxuMTI2MjpcdFx0XHRcdCAgICAgIFx1MDAyNm5oaWQsIGV4dGFjayk7XG4xMjYzOlx0XHRpZiAoZXJyKVxuMTI2NDpcdFx0XHRyZXR1cm4gZXJyO1xuMTI2NTpcdFxuMTI2NjpcdFx0aWYgKG5oaWQgXHUwMDI2XHUwMDI2ICEobmRtLVx1MDAzZW5kbV9zdGF0ZSBcdTAwMjYgKE5VRF9QRVJNQU5FTlQgfCBOVURfTk9BUlApKSkge1xuMTI2NzpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0EgbmV4dGhvcCBmZGIgY2Fubm90IGJlIGR5bmFtaWNcJiMzNDspO1xuMTI2ODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyNjk6XHRcdH1cbjEyNzA6XHRcbjEyNzE6XHRcdGlmICh2eGxhbi1cdTAwM2VkZWZhdWx0X2RzdC5yZW1vdGVfaXAuc2Euc2FfZmFtaWx5ICE9IGlwLnNhLnNhX2ZhbWlseSlcbjEyNzI6XHRcdFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XG4xMjczOlx0XG4xMjc0Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2dnhsYW4tXHUwMDNlaGFzaF9sb2NrKTtcbjEyNzU6XHRcdGVyciA9IHZ4bGFuX2ZkYl91cGRhdGUodnhsYW4sIGFkZHIsIFx1MDAyNmlwLCBuZG0tXHUwMDNlbmRtX3N0YXRlLCBmbGFncyxcbjEyNzY6XHRcdFx0XHQgICAgICAgcG9ydCwgc3JjX3ZuaSwgdm5pLCBpZmluZGV4LFxuMTI3NzpcdFx0XHRcdCAgICAgICBuZG0tXHUwMDNlbmRtX2ZsYWdzIHwgTlRGX1ZYTEFOX0FEREVEX0JZX1VTRVIsXG4xMjc4Olx0XHRcdFx0ICAgICAgIG5oaWQsIHRydWUsIGV4dGFjayk7XG4xMjc5Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ2eGxhbi1cdTAwM2VoYXNoX2xvY2spO1xuMTI4MDpcdFxuMTI4MTpcdFx0aWYgKCFlcnIpXG4xMjgyOlx0XHRcdCpub3RpZmllZCA9IHRydWU7XG4xMjgzOlx0XG4xMjg0Olx0XHRyZXR1cm4gZXJyO1xuMTI4NTpcdH1cbjEyODY6XHRcbjEyODc6XHRpbnQgX192eGxhbl9mZGJfZGVsZXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuMTI4ODpcdFx0XHQgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdW5pb24gdnhsYW5fYWRkciBpcCxcbjEyODk6XHRcdFx0ICAgICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAxNgoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBwcm9ibGVtOgoKKipBbmFseXppbmcgdGhlIER5bmFtaWMgTmV4dGhvcCBGREIgSXNzdWVzKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB3aHkgZHluYW1pYyBuZXh0aG9wIEZEQnMgYXJlIGNhdXNpbmcgcHJvYmxlbXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBkaXJlY3RseSBpbnRvIHRoZSBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBncmVwLiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIHdoZXJlIHRoZSAmIzM0O2YtJmd0O25oJiMzNDsgKHByZXN1bWFibHksIGEgcG9pbnRlciB0byB0aGUgbmV4dCBob3AgaW5mb3JtYXRpb24pIGlzIHVzZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYHZ4bGFuX2NvcmUuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgVlhMQU4gZnVuY3Rpb25hbGl0eSBsaWtlbHkgcmVzaWRlcy4gSXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGR5bmFtaWMgbmV4dGhvcHMgYXJlIGJlaW5nIGhhbmRsZWQuIEFsdGVybmF0aXZlbHksIEkgY2FuIHNlZSB3aGF0IHRoZSBhZ2luZyBtZWNoYW5pc21zIGluIHRoZSBjb2RlYmFzZSBkbyB3aXRoIHRoaXMgdmFyaWFibGUuIEkgd2lsbCBnZXQgaXQgYnkgZG9pbmcgYSBzZWFyY2gsIHRvby4gSSB0aGluayBhIGRlZXAgZGl2ZSBpbnRvIHRoZSBjb2RlIHdpbGwgdGVsbCB1cyB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTI6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dnhsYW5fZmRiX2NsZWFudXB8dnhsYW5fZmRiX2Rlc3Ryb3l8Zi1cdTAwM2VuaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3Z4bGFuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9Nzc0PXN0YXRpYyBzdHJ1Y3QgdnhsYW5fZmRiICp2eGxhbl9mZGJfYWxsb2Moc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sIGNvbnN0IHU4ICptYWMsXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTc4Ny1cdGYtXHUwMDNla2V5LnZuaSA9IHNyY192bmk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6Nzg4Olx0Zi1cdTAwM2VuaCA9IE5VTEw7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNzg5LVx0UkNVX0lOSVRfUE9JTlRFUihmLVx1MDAzZXZkZXYsIHZ4bGFuKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo3OTA6XHRJTklUX0xJU1RfSEVBRChcdTAwMjZmLVx1MDAzZW5oX2xpc3QpO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTc5MS1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmYtXHUwMDNlcmVtb3Rlcyk7XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTg1OT1pbnQgdnhsYW5fZmRiX2NyZWF0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtODk4LWRlc3Ryb3lfcmVtb3RlOlxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjg5OTpcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cdTAwM2VuaCkpIHtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo5MDA6XHRcdGxpc3RfZGVsX3JjdShcdTAwMjZmLVx1MDAzZW5oX2xpc3QpO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjkwMTpcdFx0bmV4dGhvcF9wdXQocnRubF9kZXJlZmVyZW5jZShmLVx1MDAzZW5oKSk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTAyLVx0fSBlbHNlIHtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9OTEyPXN0YXRpYyB2b2lkIF9fdnhsYW5fZmRiX2ZyZWUoc3RydWN0IHZ4bGFuX2ZkYiAqZilcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTE2LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjkxNzpcdG5oID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhmLVx1MDAzZW5oKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy05MTgtXHRpZiAobmgpIHtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo5MTk6XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihmLVx1MDAzZW5oLCBOVUxMKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy05MjAtXHRcdHJjdV9hc3NpZ25fcG9pbnRlcihmLVx1MDAzZXZkZXYsIE5VTEwpO1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz05MzE9c3RhdGljIHZvaWQgdnhsYW5fZmRiX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy05MzctXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6OTM4OnN0YXRpYyB2b2lkIHZ4bGFuX2ZkYl9kZXN0cm95KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBzdHJ1Y3QgdnhsYW5fZmRiICpmLFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTkzOS1cdFx0XHQgICAgICBib29sIGRvX25vdGlmeSwgYm9vbCBzd2Rldl9ub3RpZnkpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTk0Ni1cdGlmIChkb19ub3RpZnkpIHtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo5NDc6XHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cdTAwM2VuaCkpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTQ4LVx0XHRcdHZ4bGFuX2ZkYl9ub3RpZnkodnhsYW4sIGYsIE5VTEwsIFJUTV9ERUxORUlHSCxcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTU4LVx0XHRcdCAgICAgICB2eGxhbl9mZGJfcmh0X3BhcmFtcyk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6OTU5Olx0bGlzdF9kZWxfcmN1KFx1MDAyNmYtXHUwMDNlbmhfbGlzdCk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTYwLVx0Y2FsbF9yY3UoXHUwMDI2Zi1cdTAwM2VyY3UsIHZ4bGFuX2ZkYl9mcmVlKTtcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9OTcxPXN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTg2LVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjk4NzpcdGlmIChuaGlkIFx1MDAyNlx1MDAyNiAhcmN1X2FjY2Vzc19wb2ludGVyKGYtXHUwMDNlbmgpKSB7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTg4LVx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTk5OC1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo5OTk6XHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGYtXHUwMDNlbmgpIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTEwMDAtXHQgICAgIShzdGF0ZSBcdTAwMjYgKE5VRF9QRVJNQU5FTlQgfCBOVURfTk9BUlApKSkge1xuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xMDc2PXN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9jcmVhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTExMDYtZXJyX25vdGlmeTpcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoxMTA3Olx0dnhsYW5fZmRiX2Rlc3Ryb3kodnhsYW4sIGYsIGZhbHNlLCBmYWxzZSk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTEwOC1cdHJldHVybiByYztcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MTI4Nz1pbnQgX192eGxhbl9mZGJfZGVsZXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMzEzLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjEzMTQ6XHR2eGxhbl9mZGJfZGVzdHJveSh2eGxhbiwgZiwgdHJ1ZSwgc3dkZXZfbm90aWZ5KTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMzE1LVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xMzUwPXN0YXRpYyBpbnQgdnhsYW5fZmRiX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMzYyLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjEzNjM6XHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cdTAwM2VuaCkpIHtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMzY0LVx0XHRcdGlmICgqaWR4IFx1MDAzYyBjdHgtXHUwMDNlZmRiX2lkeClcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MTQzNj1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gdnhsYW5fc25vb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTQ2My1cdFx0LyogRG9uJiMzOTt0IG92ZXJyaWRlIGFuIGZkYiB3aXRoIG5leHRob3Agd2l0aCBhIGxlYXJudCBlbnRyeSAqL1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjE0NjQ6XHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cdTAwM2VuaCkpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTQ2NS1cdFx0XHRyZXR1cm4gU0tCX0RST1BfUkVBU09OX1ZYTEFOX0VOVFJZX0VYSVNUUztcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MjY2Nz1zdGF0aWMgdm9pZCB2eGxhbl94bWl0X25oKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI2NzctXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MjY3ODpcdG5oID0gcmN1X2RlcmVmZXJlbmNlKGYtXHUwMDNlbmgpO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI2NzktXHRpZiAoIW5oKVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0yNzQyPXN0YXRpYyBuZXRkZXZfdHhfdCB2eGxhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI4MzUtXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MjgzNjpcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cdTAwM2VuaCkpIHtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yODM3LVx0XHR2eGxhbl94bWl0X25oKHNrYiwgZGV2LCBmLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0yODYzPXN0YXRpYyB2b2lkIHZ4bGFuX2NsZWFudXAoc3RydWN0IHRpbWVyX2xpc3QgKnQpXG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI4ODgtXHRcdFx0XHRmLVx1MDAzZXN0YXRlID0gTlVEX1NUQUxFO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjI4ODk6XHRcdFx0XHR2eGxhbl9mZGJfZGVzdHJveSh2eGxhbiwgZiwgdHJ1ZSwgdHJ1ZSk7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjg5MC1cdFx0XHR9XG4tLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTMwMTU9c3RhdGljIGJvb2wgdnhsYW5fZmRiX25oaWRfbWF0Y2hlcyhjb25zdCBzdHJ1Y3QgdnhsYW5fZmRiICpmLCB1MzIgbmhpZClcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zMDE2LXtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzozMDE3Olx0c3RydWN0IG5leHRob3AgKm5oID0gcnRubF9kZXJlZmVyZW5jZShmLVx1MDAzZW5oKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zMDE4LVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0zMDg4PXN0YXRpYyB2b2lkIHZ4bGFuX2ZsdXNoKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zMTEyLVxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjMxMTM6XHRcdHZ4bGFuX2ZkYl9kZXN0cm95KHZ4bGFuLCBmLCB0cnVlLCB0cnVlKTtcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zMTE0LXVubG9jazpcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9NDg3Nj1zdGF0aWMgdm9pZCB2eGxhbl9mZGJfbmhfZmx1c2goc3RydWN0IG5leHRob3AgKm5oKVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy00ODg2LVx0XHRpZiAoIWhsaXN0X3VuaGFzaGVkKFx1MDAyNmZkYi1cdTAwM2VmZGJfbm9kZSkpXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6NDg4NzpcdFx0XHR2eGxhbl9mZGJfZGVzdHJveSh2eGxhbiwgZmRiLCBmYWxzZSwgZmFsc2UpO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTQ4ODgtXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnZ4bGFuLVx1MDAzZWhhc2hfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4MjIKCQkJCQkJCW91dHB1dDogMTM2CgkJCQkJCQl0aG91Z2h0czogNDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZYTEFOIEZEQiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQmIzM5O3MgYWxsIGFib3V0IGJvbHN0ZXJpbmcgdGhlIGlucHV0IHZhbGlkYXRpb24gZm9yIFZYTEFOIEZEQiBlbnRyaWVzLiBTcGVjaWZpY2FsbHksIGl0IGludHJvZHVjZXMgdHdvIGtleSBjaGVja3Mgd2l0aGluIHRoZSBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AgYW5kIGB2eGxhbl9mZGJfYWRkYCBmdW5jdGlvbnMuIEZpcnN0LCBpZiBhIG5leHQgaG9wIChgZi0mZ3Q7bmhgKSBpcyBzZXQgZHVyaW5nIGFuIHVwZGF0ZSwgYW5kIHRoZSByZXF1ZXN0ZWQgc3RhdGUgaXNuJiMzOTt0IGBOVURfUEVSTUFORU5UYCBvciBgTlVEX05PQVJQYCwgd2UgcmVqZWN0IHRoZSB1cGRhdGUgd2l0aCBgLUVPUE5PVFNVUFBgLiBTZWNvbmQsIGluIHRoZSBgYWRkYCBvcGVyYXRpb24sIGlmIGEgYG5oaWRgIGlzIHNwZWNpZmllZCBhbmQgdGhlIGRlc2lyZWQgc3RhdGUgaXNuJiMzOTt0IGBOVURfUEVSTUFORU5UYCBvciBgTlVEX05PQVJQYCwgd2UgcmV0dXJuIGAtRUlOVkFMYC4gRXNzZW50aWFsbHksIGl0IGJsb2NrcyBhZ2luZy9keW5hbWljIHRyYW5zaXRpb25zIGZvciBGREJzIGJvdW5kIHRvIGEgbmV4dCBob3AuCgpOb3csIGxldCYjMzk7cyBhZGRyZXNzIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGFsd2F5cyBteSBwcmltYXJ5IGNvbmNlcm4uIEkmIzM5O3ZlIHdhbGtlZCB0aHJvdWdoIHRoaXMgY2FyZWZ1bGx5LiBUaGVyZSBhcmUgbm8gbmV3IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQsIHNvIHRoYXQmIzM5O3MgZ29vZC4gV2UgYXJlbiYjMzk7dCBjb3B5aW5nIGFueSBidWZmZXJzIHRvIHVzZXIgc3BhY2Ug4oCTIG9ubHkgbmV0bGluayBlcnJvciBtZXNzYWdlcywgd2hpY2ggYXJlIHN0cmluZyBsaXRlcmFscyBhbmQgdGh1cyBzYWZlLiBUaGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBoYW5kbGluZyBvZiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBtZW1vcnksIGVpdGhlci4gVGhlIHBhdGNoIGRvZXMgcHJldmVudCBhZ2luZyBmb3IgbmV4dGhvcCBGREJzLCBidXQgdGhpcyBpcyBhICpzZW1hbnRpYyogdmFsaWRhdGlvbiwgbm90IGEgbWVtb3J5IHNhZmV0eSBpc3N1ZS4KClRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgaXMgKnB1cmVseSogYSBjb250cm9sLWZsb3cgdmFsaWRhdGlvbiwgYSBtYXR0ZXIgb2YgaW5wdXQgY2hlY2tpbmcgb24gdGhlIG5ldGxpbmsgY29tbWFuZHMuIFRoZXJlJiMzOTtzIHplcm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIG5vIHBvc3NpYmlsaXR5IG9mIGluZm9ybWF0aW9uIGxlYWtzLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBwYXRjaC4KCkdpdmVuIHRoaXMsIEkgZG9uJiMzOTt0IHNlZSBhbnkgbmVlZCBmb3IgS01TQU4uIFRoZSBnb2FsIG9mIEtNU0FOIGlzIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgbGVha3MgdG8gdXNlcnNwYWNlLCBidXQgdGhpcyBkb2VzbuKAmXQgdG91Y2ggYW55IG9mIHRob3NlIGFyZWFzLiBUaGUgcGF0Y2ggaXMgYWxsIGFib3V0IHZhbGlkYXRpbmcgcHJvdmlkZWQgcGFyYW1ldGVycyBhbmQgcmV0dXJuaW5nIGFwcHJvcHJpYXRlIGVycm9yIGNvZGVzOyBzdGFuZGFyZCBzYW5pdGl6ZXJzIGxpa2UgS0FTQU4gYW5kIG91ciBleGlzdGluZyBmdW5jdGlvbmFsIHRlc3Rpbmcgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIEtNU0FOJiMzOTtzIHJlc291cmNlIHJlcXVpcmVtZW50cyBhcmUgaGlnaCwgYW5kIHRoZSBwb3RlbnRpYWwgYmVuZWZpdCBoZXJlIGlzbiYjMzk7dCBlbm91Z2ggdG8ganVzdGlmeSBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uLgoKSW4gc3VtbWFyeTogVGhpcyBwYXRjaCByZXN0cmljdHMgdGhlIGR5bmFtaWMgc3RhdGUgZm9yIEZEQiBlbnRyaWVzIGNvbmZpZ3VyZWQgd2l0aCBuZXh0aG9wcyBieSB2YWxpZGF0aW5nIG5ldGxpbmsgaW5wdXQuIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnksIGFzIHRoZSBjb2RlIGNoYW5nZXMgZG8gbm90IGRlYWwgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeS4gV2UgY2FuIGNhbGwgc2V0LXJlc3VsdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDEyOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgaW4gdnhsYW5fZmRiX2FkZCgpIGFuZCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKCkgdG8gcHJldmVudCBjb25maWd1cmluZyBvciB1cGRhdGluZyBuZXh0aG9wLWJhc2VkIFZYTEFOIEZEQiBlbnRyaWVzIHdpdGggZHluYW1pYyAoYWdpbmcpIHN0YXRlcy4gSXQgb25seSBpbnRyb2R1Y2VzIGNvbmRpdGlvbmFsIGNoZWNrcyBvbiBleGlzdGluZyB2YWxpZGF0ZWQgaW5wdXQgYXJndW1lbnRzIGFuZCByZXR1cm5zIHN0YW5kYXJkIGVycm9yIGNvZGVzIHdpdGggc3RhdGljIG5ldGxpbmsgZXJyb3IgbWVzc2FnZXMuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIG9yIGRhdGEgdHJhbnNmZXJzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBpbiB2eGxhbl9mZGJfYWRkKCkgYW5kIHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcoKSB0byBwcmV2ZW50IGNvbmZpZ3VyaW5nIG9yIHVwZGF0aW5nIG5leHRob3AtYmFzZWQgVlhMQU4gRkRCIGVudHJpZXMgd2l0aCBkeW5hbWljIChhZ2luZykgc3RhdGVzLiBJdCBvbmx5IGludHJvZHVjZXMgY29uZGl0aW9uYWwgY2hlY2tzIG9uIGV4aXN0aW5nIHZhbGlkYXRlZCBpbnB1dCBhcmd1bWVudHMgYW5kIHJldHVybnMgc3RhbmRhcmQgZXJyb3IgY29kZXMgd2l0aCBzdGF0aWMgbmV0bGluayBlcnJvciBtZXNzYWdlcy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgb3IgZGF0YSB0cmFuc2ZlcnMgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBkZXRlY3Rpb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjMwOjU2LjA3NjY1ODY2OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MzYzODUzNjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZYTEFOXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnhsYW5fZmRiX2FkZFwiLFxuICAgIFwidnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ1wiLFxuICAgIFwidnhsYW5fZmRiX3VwZGF0ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBpbiB2eGxhbl9mZGJfYWRkKCkgYW5kIHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcoKSB0byBwcmV2ZW50IGNvbmZpZ3VyaW5nIG9yIHVwZGF0aW5nIG5leHRob3AtYmFzZWQgVlhMQU4gRkRCIGVudHJpZXMgd2l0aCBkeW5hbWljIChhZ2luZykgc3RhdGVzLiBJdCBvbmx5IGludHJvZHVjZXMgY29uZGl0aW9uYWwgY2hlY2tzIG9uIGV4aXN0aW5nIHZhbGlkYXRlZCBpbnB1dCBhcmd1bWVudHMgYW5kIHJldHVybnMgc3RhbmRhcmQgZXJyb3IgY29kZXMgd2l0aCBzdGF0aWMgbmV0bGluayBlcnJvciBtZXNzYWdlcy4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgc3RydWN0dXJlIGluaXRpYWxpemF0aW9ucywgb3IgZGF0YSB0cmFuc2ZlcnMgdG8gdXNlciBzcGFjZSBhcmUgaW50cm9kdWNlZCBvciBhbHRlcmVkLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiBkZXRlY3Rpb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBwcmV2ZW50aW5nIG5leHRob3AgRkRCIGVudHJpZXMgZnJvbSBiZWluZyBjb25maWd1cmVkIG9yIHVwZGF0ZWQgd2l0aCBhIGR5bmFtaWMgc3RhdGUgaW4gdGhlIFZYTEFOIGRyaXZlci4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBuZXR3b3JrIG5ldGxpbmsvRkRCIGhhbmRsaW5nIGNvZGUgaW4gdnhsYW5fY29yZS5jLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMDo1Ni4wNzY2NjM3NTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTMzOTE3NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxNDNhZWRlNzIyMjY3ZjQ0OWVlYzQwZDI3M2ZmZWQyNmUyYjBlMTViXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMTI6MzA6NTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jIGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jXFxuaW5kZXggYWM4OGQxYzg1YmVhNi4uOTNiZjdjNTM1ZTY5OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcXG5AQCAtOTk2LDYgKzk5NiwxMiBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihmLVxcdTAwM2VuaCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICEoc3RhdGUgXFx1MDAyNiAoTlVEX1BFUk1BTkVOVCB8IE5VRF9OT0FSUCkpKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkNhbm5vdCBtYWtlIGEgbmV4dGhvcCBmZGIgZHluYW1pY1xcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIERvIG5vdCBhbGxvdyBhbiBleHRlcm5hbGx5IGxlYXJuZWQgZW50cnkgdG8gdGFrZSBvdmVyIGFuIGVudHJ5IGFkZGVkXFxuIFxcdCAqIGJ5IHRoZSB1c2VyLlxcbiBcXHQgKi9cXG5AQCAtMTI1Nyw2ICsxMjYzLDExIEBAIHN0YXRpYyBpbnQgdnhsYW5fZmRiX2FkZChzdHJ1Y3QgbmRtc2cgKm5kbSwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuK1xcdGlmIChuaGlkIFxcdTAwMjZcXHUwMDI2ICEobmRtLVxcdTAwM2VuZG1fc3RhdGUgXFx1MDAyNiAoTlVEX1BFUk1BTkVOVCB8IE5VRF9OT0FSUCkpKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkEgbmV4dGhvcCBmZGIgY2Fubm90IGJlIGR5bmFtaWNcXFwiKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuIFxcdGlmICh2eGxhbi1cXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX2lwLnNhLnNhX2ZhbWlseSAhPSBpcC5zYS5zYV9mYW1pbHkpXFxuIFxcdFxcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZpYl9uZXh0aG9wcy5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9maWJfbmV4dGhvcHMuc2hcXG5pbmRleCAzZDM0NzEyNjczMGE5Li40MzFkN2JlZDc2MjI0IDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9maWJfbmV4dGhvcHMuc2hcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmliX25leHRob3BzLnNoXFxuQEAgLTUzMyw2ICs1MzMsMjAgQEAgaXB2Nl9mZGJfZ3JwX2ZjbmFsKClcXG4gXFx0cnVuX2NtZCBcXFwiJEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE0IGRldiB2eDEwIG5oaWQgNjEgc2VsZlxcXCJcXG4gXFx0bG9nX3Rlc3QgJD8gMjU1IFxcXCJGZGIgbWFjIGFkZCB3aXRoIG5leHRob3BcXFwiXFxuIFxcbitcXHQjIGZkYiBlbnRyaWVzIHdpdGggYSBuZXh0aG9wIGdyb3VwIGNhbm5vdCBiZSBhZ2VkIG91dFxcbitcXHRydW5fY21kIFxcXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTUgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZiBzdGF0aWNcXFwiXFxuK1xcdGxvZ190ZXN0ICQ/IDAgXFxcIkZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCBncm91cCBhbmQgc3RhdGljIHN0YXRlXFxcIlxcbitcXG4rXFx0cnVuX2NtZCBcXFwiJEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE2IGRldiB2eDEwIG5oaWQgMTAyIHNlbGYgZHluYW1pY1xcXCJcXG4rXFx0bG9nX3Rlc3QgJD8gMjU1IFxcXCJGZGIgbWFjIGFkZCB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGVcXFwiXFxuK1xcbitcXHRydW5fY21kIFxcXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZlxcXCJcXG4rXFx0cnVuX2NtZCBcXFwiJEJSSURHRSBmZGIgcmVwbGFjZSAwMjowMjowMDowMDowMDoxNyBkZXYgdngxMCBkc3QgMjAwMTpkYjg6OTE6OjExIHNlbGYgZHluYW1pY1xcXCJcXG4rXFx0bG9nX3Rlc3QgJD8gMjU1IFxcXCJGZGIgbWFjIHJlcGxhY2Ugd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlXFxcIlxcbitcXG4rXFx0cnVuX2NtZCBcXFwiJEJSSURHRSBmZGIgYXBwZW5kIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIGRzdCAyMDAxOmRiODo5MTo6MTEgc2VsZiBkeW5hbWljXFxcIlxcbitcXHRsb2dfdGVzdCAkPyAyNTUgXFxcIkZkYiBtYWMgYXBwZW5kIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZVxcXCJcXG4rXFxuIFxcdHJ1bl9jbWQgXFxcIiRJUCAtNiBybyBhZGQgMjAwMTpkYjg6MTAxOjoxLzEyOCBuaGlkIDY2XFxcIlxcbiBcXHRsb2dfdGVzdCAkPyAyIFxcXCJSb3V0ZSBhZGQgd2l0aCBmZGIgbmV4dGhvcFxcXCJcXG4gXFxuQEAgLTY2OSw2ICs2ODMsMjAgQEAgaXB2NF9mZGJfZ3JwX2ZjbmFsKClcXG4gXFx0cnVuX2NtZCBcXFwiJEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE0IGRldiB2eDEwIG5oaWQgMTIgc2VsZlxcXCJcXG4gXFx0bG9nX3Rlc3QgJD8gMjU1IFxcXCJGZGIgbWFjIGFkZCB3aXRoIG5leHRob3BcXFwiXFxuIFxcbitcXHQjIGZkYiBlbnRyaWVzIHdpdGggYSBuZXh0aG9wIGdyb3VwIGNhbm5vdCBiZSBhZ2VkIG91dFxcbitcXHRydW5fY21kIFxcXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTUgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZiBzdGF0aWNcXFwiXFxuK1xcdGxvZ190ZXN0ICQ/IDAgXFxcIkZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCBncm91cCBhbmQgc3RhdGljIHN0YXRlXFxcIlxcbitcXG4rXFx0cnVuX2NtZCBcXFwiJEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE2IGRldiB2eDEwIG5oaWQgMTAyIHNlbGYgZHluYW1pY1xcXCJcXG4rXFx0bG9nX3Rlc3QgJD8gMjU1IFxcXCJGZGIgbWFjIGFkZCB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGVcXFwiXFxuK1xcbitcXHRydW5fY21kIFxcXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZlxcXCJcXG4rXFx0cnVuX2NtZCBcXFwiJEJSSURHRSBmZGIgcmVwbGFjZSAwMjowMjowMDowMDowMDoxNyBkZXYgdngxMCBkc3QgMTAuMC4wLjMgc2VsZiBkeW5hbWljXFxcIlxcbitcXHRsb2dfdGVzdCAkPyAyNTUgXFxcIkZkYiBtYWMgcmVwbGFjZSB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGVcXFwiXFxuK1xcbitcXHRydW5fY21kIFxcXCIkQlJJREdFIGZkYiBhcHBlbmQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgZHN0IDEwLjAuMC4zIHNlbGYgZHluYW1pY1xcXCJcXG4rXFx0bG9nX3Rlc3QgJD8gMjU1IFxcXCJGZGIgbWFjIGFwcGVuZCB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGVcXFwiXFxuK1xcbiBcXHRydW5fY21kIFxcXCIkSVAgcm8gYWRkIDE3Mi4xNi4wLjAvMjIgbmhpZCAxNlxcXCJcXG4gXFx0bG9nX3Rlc3QgJD8gMiBcXFwiUm91dGUgYWRkIHdpdGggZmRiIG5leHRob3BcXFwiXFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMDo1Ny4zOTA2ODg0MThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxMzk1MDY4MzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZYTEFOXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidnhsYW5fZmRiX2FkZFwiLFxuICAgIFwidnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ1wiLFxuICAgIFwidnhsYW5fZmRiX3VwZGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgcHJldmVudGluZyBuZXh0aG9wIEZEQiBlbnRyaWVzIGZyb20gYmVpbmcgY29uZmlndXJlZCBvciB1cGRhdGVkIHdpdGggYSBkeW5hbWljIHN0YXRlIGluIHRoZSBWWExBTiBkcml2ZXIuIFRoaXMgdG91Y2hlcyByZWFjaGFibGUgbmV0d29yayBuZXRsaW5rL0ZEQiBoYW5kbGluZyBjb2RlIGluIHZ4bGFuX2NvcmUuYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxNDNhZWRlNzIyMjY3ZjQ0OWVlYzQwZDI3M2ZmZWQyNmUyYjBlMTViXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxMjozMDo1NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY1xuaW5kZXggYWM4OGQxYzg1YmVhNi4uOTNiZjdjNTM1ZTY5OCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuY1xuKysrIGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jXG5AQCAtOTk2LDYgKzk5NiwxMiBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3Rpbmcoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbiBcbitcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cdTAwM2VuaCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgIShzdGF0ZSBcdTAwMjYgKE5VRF9QRVJNQU5FTlQgfCBOVURfTk9BUlApKSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiQ2Fubm90IG1ha2UgYSBuZXh0aG9wIGZkYiBkeW5hbWljXCIpO1xuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4rXG4gXHQvKiBEbyBub3QgYWxsb3cgYW4gZXh0ZXJuYWxseSBsZWFybmVkIGVudHJ5IHRvIHRha2Ugb3ZlciBhbiBlbnRyeSBhZGRlZFxuIFx0ICogYnkgdGhlIHVzZXIuXG4gXHQgKi9cbkBAIC0xMjU3LDYgKzEyNjMsMTEgQEAgc3RhdGljIGludCB2eGxhbl9mZGJfYWRkKHN0cnVjdCBuZG1zZyAqbmRtLCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbitcdGlmIChuaGlkIFx1MDAyNlx1MDAyNiAhKG5kbS1cdTAwM2VuZG1fc3RhdGUgXHUwMDI2IChOVURfUEVSTUFORU5UIHwgTlVEX05PQVJQKSkpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIkEgbmV4dGhvcCBmZGIgY2Fubm90IGJlIGR5bmFtaWNcIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuIFx0aWYgKHZ4bGFuLVx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pcC5zYS5zYV9mYW1pbHkgIT0gaXAuc2Euc2FfZmFtaWx5KVxuIFx0XHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmliX25leHRob3BzLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZpYl9uZXh0aG9wcy5zaFxuaW5kZXggM2QzNDcxMjY3MzBhOS4uNDMxZDdiZWQ3NjIyNCAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9maWJfbmV4dGhvcHMuc2hcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9maWJfbmV4dGhvcHMuc2hcbkBAIC01MzMsNiArNTMzLDIwIEBAIGlwdjZfZmRiX2dycF9mY25hbCgpXG4gXHRydW5fY21kIFwiJEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE0IGRldiB2eDEwIG5oaWQgNjEgc2VsZlwiXG4gXHRsb2dfdGVzdCAkPyAyNTUgXCJGZGIgbWFjIGFkZCB3aXRoIG5leHRob3BcIlxuIFxuK1x0IyBmZGIgZW50cmllcyB3aXRoIGEgbmV4dGhvcCBncm91cCBjYW5ub3QgYmUgYWdlZCBvdXRcbitcdHJ1bl9jbWQgXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTUgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZiBzdGF0aWNcIlxuK1x0bG9nX3Rlc3QgJD8gMCBcIkZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCBncm91cCBhbmQgc3RhdGljIHN0YXRlXCJcbitcbitcdHJ1bl9jbWQgXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTYgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZiBkeW5hbWljXCJcbitcdGxvZ190ZXN0ICQ/IDI1NSBcIkZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZVwiXG4rXG4rXHRydW5fY21kIFwiJEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIG5oaWQgMTAyIHNlbGZcIlxuK1x0cnVuX2NtZCBcIiRCUklER0UgZmRiIHJlcGxhY2UgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgZHN0IDIwMDE6ZGI4OjkxOjoxMSBzZWxmIGR5bmFtaWNcIlxuK1x0bG9nX3Rlc3QgJD8gMjU1IFwiRmRiIG1hYyByZXBsYWNlIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZVwiXG4rXG4rXHRydW5fY21kIFwiJEJSSURHRSBmZGIgYXBwZW5kIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIGRzdCAyMDAxOmRiODo5MTo6MTEgc2VsZiBkeW5hbWljXCJcbitcdGxvZ190ZXN0ICQ/IDI1NSBcIkZkYiBtYWMgYXBwZW5kIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZVwiXG4rXG4gXHRydW5fY21kIFwiJElQIC02IHJvIGFkZCAyMDAxOmRiODoxMDE6OjEvMTI4IG5oaWQgNjZcIlxuIFx0bG9nX3Rlc3QgJD8gMiBcIlJvdXRlIGFkZCB3aXRoIGZkYiBuZXh0aG9wXCJcbiBcbkBAIC02NjksNiArNjgzLDIwIEBAIGlwdjRfZmRiX2dycF9mY25hbCgpXG4gXHRydW5fY21kIFwiJEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE0IGRldiB2eDEwIG5oaWQgMTIgc2VsZlwiXG4gXHRsb2dfdGVzdCAkPyAyNTUgXCJGZGIgbWFjIGFkZCB3aXRoIG5leHRob3BcIlxuIFxuK1x0IyBmZGIgZW50cmllcyB3aXRoIGEgbmV4dGhvcCBncm91cCBjYW5ub3QgYmUgYWdlZCBvdXRcbitcdHJ1bl9jbWQgXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTUgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZiBzdGF0aWNcIlxuK1x0bG9nX3Rlc3QgJD8gMCBcIkZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCBncm91cCBhbmQgc3RhdGljIHN0YXRlXCJcbitcbitcdHJ1bl9jbWQgXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTYgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZiBkeW5hbWljXCJcbitcdGxvZ190ZXN0ICQ/IDI1NSBcIkZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZVwiXG4rXG4rXHRydW5fY21kIFwiJEJSSURHRSBmZGIgYWRkIDAyOjAyOjAwOjAwOjAwOjE3IGRldiB2eDEwIG5oaWQgMTAyIHNlbGZcIlxuK1x0cnVuX2NtZCBcIiRCUklER0UgZmRiIHJlcGxhY2UgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgZHN0IDEwLjAuMC4zIHNlbGYgZHluYW1pY1wiXG4rXHRsb2dfdGVzdCAkPyAyNTUgXCJGZGIgbWFjIHJlcGxhY2Ugd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlXCJcbitcbitcdHJ1bl9jbWQgXCIkQlJJREdFIGZkYiBhcHBlbmQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgZHN0IDEwLjAuMC4zIHNlbGYgZHluYW1pY1wiXG4rXHRsb2dfdGVzdCAkPyAyNTUgXCJGZGIgbWFjIGFwcGVuZCB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGVcIlxuK1xuIFx0cnVuX2NtZCBcIiRJUCBybyBhZGQgMTcyLjE2LjAuMC8yMiBuaGlkIDE2XCJcbiBcdGxvZ190ZXN0ICQ/IDIgXCJSb3V0ZSBhZGQgd2l0aCBmZGIgbmV4dGhvcFwiXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMDo1Ny4zOTA2ODk4ODhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDQ1NzM5OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVlhMQU4gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNgIGFuZCBhIHNlbGYtdGVzdCBzY3JpcHQsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmliX25leHRob3BzLnNoYC4gSW50ZXJlc3RpbmcuIExldCdzIGRpdmUgaW50byB0aGUgY29yZSBjaGFuZ2VzIGluIGB2eGxhbl9jb3JlLmNgIGZpcnN0LlxuXG5JdCBsb29rcyBsaWtlIHRoZSBmb2N1cyBpcyBvbiBob3cgVlhMQU4gRkRCIGVudHJpZXMgaW50ZXJhY3Qgd2l0aCBuZXh0IGhvcHMuIEluIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCwgdGhlcmUncyBhIG5ldyBjaGVjazogaWYgYSBuZXh0IGhvcCAoYGYtXHUwMDNlbmhgKSBhbHJlYWR5IGV4aXN0cyBhbmQgaXNuJ3QgbWFya2VkIGFzIHBlcm1hbmVudCBvciBkb2Vzbid0IHVzZSBBUlAsIHdlJ3JlIG5vdyBwcmV2ZW50aW5nIHVwZGF0ZXMgdGhhdCB3b3VsZCBtYWtlIGl0IGR5bmFtaWMuIFRoZSBlcnJvciBtZXNzYWdlIGV4cGxpY2l0bHkgc3RhdGVzLCBcIkNhbm5vdCBtYWtlIGEgbmV4dGhvcCBmZGIgZHluYW1pYy5cIiBUaGlzIHN1Z2dlc3RzIHRoZXJlIGlzIGEgbmV3IHJlc3RyaWN0aW9uIG9uIHRoZSBzdGF0ZSBvZiBhIEZEQiBlbnRyeS5cblxuU2ltaWxhcmx5LCB3aXRoaW4gYHZ4bGFuX2ZkYl9hZGRgLCBhIHNpbWlsYXIgcmVzdHJpY3Rpb24gZXhpc3RzLiBJZiBhIG5leHQgaG9wIGlkZW50aWZpZXIgKGBuaGlkYCkgaXMgcHJlc2VudCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgbmV4dCBob3AgZW50cnkgKGBuZG0tXHUwMDNlbmRtX3N0YXRlYCkgaXMgbm90IHBlcm1hbmVudCwgaXQgcmVzdWx0cyBpbiBhbiBlcnJvcjogXCJBIG5leHRob3AgZmRiIGNhbm5vdCBiZSBkeW5hbWljLlwiIFRoZSBlcnJvciBjb2RlIGJlaW5nIHJldHVybmVkIGhlcmUgaXMgYSBsaXR0bGUgZGlmZmVyZW50LCBgLUVJTlZBTGAgdmVyc3VzIGAtRU9QTk9UU1VQUGAuIFRoaXMgY2hhbmdlIGNsZWFybHkgYWltcyB0byBlbmZvcmNlIHN0YXRpYywgbm9uLWR5bmFtaWMgbmV4dCBob3AgY29uZmlndXJhdGlvbnMgaW4gdGhlc2Ugc3BlY2lmaWMgRkRCIG9wZXJhdGlvbnMuIEkgd29uZGVyIGlmIHRoZXJlIGhhdmUgYmVlbiBpc3N1ZXMgd2l0aCB0aGUgb3JpZ2luYWwgZHluYW1pYyBpbXBsZW1lbnRhdGlvbiwgb3IgcGVyaGFwcywgZm9yIHNlY3VyaXR5IHJlYXNvbnMuXG5cbk5vdywgbGV0IG1lIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyBmb3IgVlhMQU4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgY2hhbmdlIG1pZ2h0IGJlIGltcGFjdGluZyBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBvciBmZWF0dXJlcy4gVW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhbmQgZW5hYmxpbmcgY29uZGl0aW9ucyB3aWxsIGJlIGNydWNpYWwgZm9yIGEgZnVsbCBhc3Nlc3NtZW50IG9mIHRoZSBwYXRjaCdzIGltcGFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxOSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjMxOjA2LjQzNjQzMTYxNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUwODI0MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFZYTEFOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTIxNj1jb25maWcgSVBWVEFQXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTIyOS1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjIzMDpjb25maWcgVlhMQU5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzMS1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBlWHRlbnNpYmxlIExvY2FsIEFyZWEgTmV0d29yayAoVlhMQU4pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMTowNi41OTE1MTg2MDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MDExNTQzODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgTmV0d29yayBEcml2ZXIgS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB6ZXJvIGluIG9uIHNvbWV0aGluZyByZWxhdGVkIHRvIG5ldHdvcmsgZHJpdmVycywgcHJvYmFibHkgYSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgc3RhbmRhcmQgbG9jYXRpb246IGBkcml2ZXJzL25ldC9LY29uZmlnYC4gQW5kLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIGNvbmZpZyBmaWxlIGlzIHN0cnVjdHVyZWQsIEknZCBiZXQgdGhlIHJlbGV2YW50IGVudHJ5IGlzIGdvaW5nIHRvIGJlIHNvbWV3aGVyZSBhcm91bmQgbGluZSAyMzAuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZSBtb3JlIGNvcmUgYW5kIGdlbmVyaWMgZmVhdHVyZXMgYXJlIGRlZmluZWQsIG9yIHBlcmhhcHMgd2hlcmUgdGhleSdyZSBncm91cGluZyByZWxhdGVkIGRldmljZS1zcGVjaWZpYyBvcHRpb25zLiBMZXQncyBzZWUgd2hhdCdzIHRoZXJlLi4uIGxpa2VseSBkZWFsaW5nIHdpdGggdGhlIHNwZWNpZmljIHBhcmFtZXRlcnMuIEkgZXhwZWN0IHRoZXJlIHRvIGJlIGEgbmVzdGVkIGBjb25maWdgIGJsb2NrIHdpdGggcG90ZW50aWFsbHkgc2V2ZXJhbCBkZXBlbmRlbmNpZXMgYW5kIGhlbHAgdGV4dC4gSSBob3BlIGl0J3Mgd2VsbC1kb2N1bWVudGVkISBUaW1lIHRvIGRpdmUgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NTUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMToxMS42MDMwNjQ2OTJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYzMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMjU6XFx0XFx0ICBpcHZ0YXAnLCBhbmQgdGhlbiBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSB0YXAgdXNlciBzcGFjZSBpbnRlcmZhY2UuXFxuIDIyNjpcXHRcXG4gMjI3OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxcbiAyMjg6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBpcHZ0YXAuXFxuIDIyOTpcXHRcXG4gMjMwOlxcdGNvbmZpZyBWWExBTlxcbiAyMzE6XFx0XFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgZVh0ZW5zaWJsZSBMb2NhbCBBcmVhIE5ldHdvcmsgKFZYTEFOKVxcXCJcXG4gMjMyOlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAyMzM6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuIDIzNDpcXHRcXHRzZWxlY3QgR1JPX0NFTExTXFxuIDIzNTpcXHRcXHRoZWxwXFxuIDIzNjpcXHRcXHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgdnhsYW4gdmlydHVhbCBpbnRlcmZhY2VzIHRoYXQgcHJvdmlkZVxcbiAyMzc6XFx0XFx0ICBMYXllciAyIE5ldHdvcmtzIG92ZXIgTGF5ZXIgMyBOZXR3b3Jrcy4gVlhMQU4gaXMgb2Z0ZW4gdXNlZFxcbiAyMzg6XFx0XFx0ICB0byB0dW5uZWwgdmlydHVhbCBuZXR3b3JrIGluZnJhc3RydWN0dXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cXG4gMjM5OlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlOlxcbiAyNDA6XFx0XFx0ICAgIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LW1haGFsaW5nYW0tZHV0dC1kY29wcy12eGxhbi0wMlxcbiAyNDE6XFx0XFxuIDI0MjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMjQzOlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgdnhsYW4uXFxuIDI0NDpcXHRcXG4gMjQ1OlxcdGNvbmZpZyBHRU5FVkVcXG4gMjQ2OlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIE5ldHdvcmsgVmlydHVhbGl6YXRpb24gRW5jYXBzdWxhdGlvblxcXCJcXG4gMjQ3OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAyNDg6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuIDI0OTpcXHRcXHRzZWxlY3QgR1JPX0NFTExTXFxuIDI1MDpcXHRcXHRoZWxwXFxuIDI1MTpcXHRcXHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgZ2VuZXZlIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHByb3ZpZGVcXG4gMjUyOlxcdFxcdCAgTGF5ZXIgMiBOZXR3b3JrcyBvdmVyIExheWVyIDMgTmV0d29ya3MuIEdFTkVWRSBpcyBvZnRlbiB1c2VkXFxuIDI1MzpcXHRcXHQgIHRvIHR1bm5lbCB2aXJ0dWFsIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxcbiAyNTQ6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWU6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjMxOjExLjYwMzE3Mjg1MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0MTI4NTYxODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBWWExBTiBGREIgVXBkYXRlIExvZ2ljKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSBWWExBTiBGREIgdXBkYXRlcy4gR2l2ZW4gdGhlIGNvbnRleHQsIG15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB0aGUgYHZ4bGFuX2NvcmUuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGhvbWluZyBpbiBvbiB0aGUgZnVuY3Rpb25zIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCBhbmQgYHZ4bGFuX2ZkYl9hZGRgLiBUaGVzZSBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaGFuZGxpbmcgdGhlIGNyZWF0aW9uIGFuZCBtb2RpZmljYXRpb24gb2YgZm9yd2FyZGluZyBkYXRhYmFzZSBlbnRyaWVzIGZvciBWWExBTi4gSSBuZWVkIHRvIGRpc3NlY3QgdGhlIGxvZ2ljIHdpdGhpbiB0aGVzZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzLiBJIG5lZWQgdG8gZ3Jhc3AgaG93IHRoZSBleGlzdGluZyBlbnRyaWVzIGFyZSBoYW5kbGVkIGFuZCwgY29udmVyc2VseSwgaG93IG5ldyBlbnRyaWVzIGFyZSBhZGRlZCB0byB0aGUgRkRCLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG9mIG15IGludmVzdGlnYXRpb24gbGllcy4gRnJvbSB0aGVyZSwgSSdsbCB0cnkgdG8gZGV0ZXJtaW5lIHRoZSByb290IGNhdXNlIG9mIHRoZSBpc3N1ZSBJJ20gZGVidWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjYyLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMToxNC4wMTYwMzA4OTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDk4NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk4NTpcXHRcXHRpbnQgZXJyO1xcbiA5ODY6XFx0XFxuIDk4NzpcXHRcXHRpZiAobmhpZCBcXHUwMDI2XFx1MDAyNiAhcmN1X2FjY2Vzc19wb2ludGVyKGYtXFx1MDAzZW5oKSkge1xcbiA5ODg6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbiA5ODk6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJDYW5ub3QgcmVwbGFjZSBhbiBleGlzdGluZyBub24gbmV4dGhvcCBmZGIgd2l0aCBhIG5leHRob3BcXFwiKTtcXG4gOTkwOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gOTkxOlxcdFxcdH1cXG4gOTkyOlxcdFxcbiA5OTM6XFx0XFx0aWYgKG5oaWQgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgTkxNX0ZfQVBQRU5EKSkge1xcbiA5OTQ6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbiA5OTU6XFx0XFx0XFx0XFx0ICAgICAgIFxcXCJDYW5ub3QgYXBwZW5kIHRvIGEgbmV4dGhvcCBmZGJcXFwiKTtcXG4gOTk2OlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gOTk3OlxcdFxcdH1cXG4gOTk4OlxcdFxcbiA5OTk6XFx0XFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihmLVxcdTAwM2VuaCkgXFx1MDAyNlxcdTAwMjZcXG4xMDAwOlxcdFxcdCAgICAhKHN0YXRlIFxcdTAwMjYgKE5VRF9QRVJNQU5FTlQgfCBOVURfTk9BUlApKSkge1xcbjEwMDE6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQ2Fubm90IG1ha2UgYSBuZXh0aG9wIGZkYiBkeW5hbWljXFxcIik7XFxuMTAwMjpcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuMTAwMzpcXHRcXHR9XFxuMTAwNDpcXHRcXG4xMDA1OlxcdFxcdC8qIERvIG5vdCBhbGxvdyBhbiBleHRlcm5hbGx5IGxlYXJuZWQgZW50cnkgdG8gdGFrZSBvdmVyIGFuIGVudHJ5IGFkZGVkXFxuMTAwNjpcXHRcXHQgKiBieSB0aGUgdXNlci5cXG4xMDA3OlxcdFxcdCAqL1xcbjEwMDg6XFx0XFx0aWYgKCEoZmRiX2ZsYWdzIFxcdTAwMjYgTlRGX0VYVF9MRUFSTkVEKSB8fFxcbjEwMDk6XFx0XFx0ICAgICEoZi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBOVEZfVlhMQU5fQURERURfQllfVVNFUikpIHtcXG4xMDEwOlxcdFxcdFxcdGlmIChmLVxcdTAwM2VzdGF0ZSAhPSBzdGF0ZSkge1xcbjEwMTE6XFx0XFx0XFx0XFx0Zi1cXHUwMDNlc3RhdGUgPSBzdGF0ZTtcXG4xMDEyOlxcdFxcdFxcdFxcdG5vdGlmeSA9IDE7XFxuMTAxMzpcXHRcXHRcXHR9XFxuMTAxNDpcXHRcXHRcXHRpZiAoZi1cXHUwMDNlZmxhZ3MgIT0gZmRiX2ZsYWdzKSB7XFxuMTAxNTpcXHRcXHRcXHRcXHRmLVxcdTAwM2VmbGFncyA9IGZkYl9mbGFncztcXG4xMDE2OlxcdFxcdFxcdFxcdG5vdGlmeSA9IDE7XFxuMTAxNzpcXHRcXHRcXHR9XFxuMTAxODpcXHRcXHR9XFxuMTAxOTpcXHRcXG4xMDIwOlxcdFxcdGlmICgoZmxhZ3MgXFx1MDAyNiBOTE1fRl9SRVBMQUNFKSkge1xcbjEwMjE6XFx0XFx0XFx0LyogT25seSBjaGFuZ2UgdW5pY2FzdHMgKi9cXG4xMDIyOlxcdFxcdFxcdGlmICghKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGYtXFx1MDAzZWtleS5ldGhfYWRkcikgfHxcXG4xMDIzOlxcdFxcdFxcdCAgICAgIGlzX3plcm9fZXRoZXJfYWRkcihmLVxcdTAwM2VrZXkuZXRoX2FkZHIpKSkge1xcbjEwMjQ6XFx0XFx0XFx0XFx0aWYgKG5oaWQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzE6MTQuMDE2MjMxNzAzWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU3Mzg0NDgxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVlhMQU4gRm9yd2FyZGluZyBEYXRhYmFzZSBBZGRpdGlvbioqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgVlhMQU4sIGFuZCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgZm9yd2FyZGluZyBkYXRhYmFzZS4gU3BlY2lmaWNhbGx5LCBsZXQncyB6b29tIGluIG9uIGB2eGxhbl9mZGJfYWRkYC4gSXQncyBob3VzZWQgaW4gYHZ4bGFuX2NvcmUuY2AsIHNvIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCdzIHRoZSBjcml0aWNhbCBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgYWRkaW5nIGVudHJpZXMgdG8gdGhlIEZEQi4gVW5kZXJzdGFuZGluZyBpdHMgb3BlcmF0aW9uIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBWWExBTiBoYW5kbGVzIGl0cyBNQUMgYWRkcmVzcyBsZWFybmluZyBhbmQgZm9yd2FyZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU2OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzE6MTUuNTkwMDc5NTA3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI1MDpcXHRcXHRpbnQgZXJyO1xcbjEyNTE6XFx0XFxuMTI1MjpcXHRcXHRpZiAoIShuZG0tXFx1MDAzZW5kbV9zdGF0ZSBcXHUwMDI2IChOVURfUEVSTUFORU5UfE5VRF9SRUFDSEFCTEUpKSkge1xcbjEyNTM6XFx0XFx0XFx0cHJfaW5mbyhcXFwiUlRNX05FV05FSUdIIHdpdGggaW52YWxpZCBzdGF0ZSAlI3hcXFxcblxcXCIsXFxuMTI1NDpcXHRcXHRcXHRcXHRuZG0tXFx1MDAzZW5kbV9zdGF0ZSk7XFxuMTI1NTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjU2OlxcdFxcdH1cXG4xMjU3OlxcdFxcbjEyNTg6XFx0XFx0aWYgKCF0YiB8fCAoIXRiW05EQV9EU1RdIFxcdTAwMjZcXHUwMDI2ICF0YltOREFfTkhfSURdKSlcXG4xMjU5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyNjA6XFx0XFxuMTI2MTpcXHRcXHRlcnIgPSB2eGxhbl9mZGJfcGFyc2UodGIsIHZ4bGFuLCBcXHUwMDI2aXAsIFxcdTAwMjZwb3J0LCBcXHUwMDI2c3JjX3ZuaSwgXFx1MDAyNnZuaSwgXFx1MDAyNmlmaW5kZXgsXFxuMTI2MjpcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2bmhpZCwgZXh0YWNrKTtcXG4xMjYzOlxcdFxcdGlmIChlcnIpXFxuMTI2NDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjEyNjU6XFx0XFxuMTI2NjpcXHRcXHRpZiAobmhpZCBcXHUwMDI2XFx1MDAyNiAhKG5kbS1cXHUwMDNlbmRtX3N0YXRlIFxcdTAwMjYgKE5VRF9QRVJNQU5FTlQgfCBOVURfTk9BUlApKSkge1xcbjEyNjc6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQSBuZXh0aG9wIGZkYiBjYW5ub3QgYmUgZHluYW1pY1xcXCIpO1xcbjEyNjg6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTI2OTpcXHRcXHR9XFxuMTI3MDpcXHRcXG4xMjcxOlxcdFxcdGlmICh2eGxhbi1cXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX2lwLnNhLnNhX2ZhbWlseSAhPSBpcC5zYS5zYV9mYW1pbHkpXFxuMTI3MjpcXHRcXHRcXHRyZXR1cm4gLUVBRk5PU1VQUE9SVDtcXG4xMjczOlxcdFxcbjEyNzQ6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ2eGxhbi1cXHUwMDNlaGFzaF9sb2NrKTtcXG4xMjc1OlxcdFxcdGVyciA9IHZ4bGFuX2ZkYl91cGRhdGUodnhsYW4sIGFkZHIsIFxcdTAwMjZpcCwgbmRtLVxcdTAwM2VuZG1fc3RhdGUsIGZsYWdzLFxcbjEyNzY6XFx0XFx0XFx0XFx0ICAgICAgIHBvcnQsIHNyY192bmksIHZuaSwgaWZpbmRleCxcXG4xMjc3OlxcdFxcdFxcdFxcdCAgICAgICBuZG0tXFx1MDAzZW5kbV9mbGFncyB8IE5URl9WWExBTl9BRERFRF9CWV9VU0VSLFxcbjEyNzg6XFx0XFx0XFx0XFx0ICAgICAgIG5oaWQsIHRydWUsIGV4dGFjayk7XFxuMTI3OTpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dnhsYW4tXFx1MDAzZWhhc2hfbG9jayk7XFxuMTI4MDpcXHRcXG4xMjgxOlxcdFxcdGlmICghZXJyKVxcbjEyODI6XFx0XFx0XFx0Km5vdGlmaWVkID0gdHJ1ZTtcXG4xMjgzOlxcdFxcbjEyODQ6XFx0XFx0cmV0dXJuIGVycjtcXG4xMjg1OlxcdH1cXG4xMjg2OlxcdFxcbjEyODc6XFx0aW50IF9fdnhsYW5fZmRiX2RlbGV0ZShzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4xMjg4OlxcdFxcdFxcdCAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1bmlvbiB2eGxhbl9hZGRyIGlwLFxcbjEyODk6XFx0XFx0XFx0ICAgICAgIF9fYmUxNiBwb3J0LCBfX2JlMzIgc3JjX3ZuaSwgX19iZTMyIHZuaSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzE6MTUuNTkwMjY2MTA3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU4ODU0NTE2OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBWWExBTjogQSBUYXJnZXRlZCBBcHByb2FjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgZnV6emluZyBWWExBTiBpcyBhIHZpYWJsZSB0YXJnZXQuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgc29tZXRoaW5nIEkgY2FuIGFjdHVhbGx5IHJlYWNoIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQg4oCTIGFuZCB0aGUgYW5zd2VyIGlzIGEgcmVzb3VuZGluZyB5ZXMuIFZYTEFOIGlzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSBkcml2ZXIsIGVuYWJsZWQgYnkgYENPTkZJR19WWExBTmAsIGFuZCBsZXZlcmFnZXMgYHJ0bmV0bGlua2AgaW50ZXJmYWNlcy4gVGhpcyBpcyBwcmltZSB0ZXJyaXRvcnkgZm9yIFN5emthbGxlciwgd2hpY2ggZnJlcXVlbnRseSB0YXJnZXRzIHRob3NlIGFyZWFzLlxuXG5OZXh0LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIHRoaXMgY29kZSAqZXhlY3V0YWJsZSo/IFllcywgZGVmaW5pdGVseS4gU3BlY2lmaWNhbGx5LCBJJ20gaG9uaW5nIGluIG9uIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCBhbmQgYHZ4bGFuX2ZkYl9hZGRgIHdpdGhpbiBgZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jYC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uXG5cblRoZSBxdWVzdGlvbiBvZiB3b3J0aGluZXNzLCBnaXZlbiBteSBpbml0aWFsIGFuYWx5c2lzLCBpcyBzZXR0bGVkOiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiBgdnhsYW5fZmRiX2FkZGAgYW5kIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCwgYW5kIHBvc3NpYmx5IGB2eGxhbl9mZGJfdXBkYXRlYCAuIEknbGwgcHJpb3JpdGl6ZSB0aGVzZSBzeW1ib2xzIGZvciBmdXp6aW5nLlxuXG5NeSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgYXJlIGBWWExBTmAgYW5kIGBJTkVUYC5cblxuQW5kIGZpbmFsbHksIHRvIG1ha2Ugc3VyZSwgbGV0J3MgY29uZmlybSB0aGUgY29tcGlsYXRpb246IGB2eGxhbl9jb3JlLmNgIGlzIGluZGVlZCBjb21waWxlZCB3aGVuIGBDT05GSUdfVlhMQU5gIGlzIGVuYWJsZWQuIExldCdzIGRvdWJsZSBjaGVjayB0aGF0IE1ha2VmaWxlIGluIGBkcml2ZXJzL25ldC92eGxhbmAgdG8gYmUgY2VydGFpbi4gTm93LCBsZXQncyBnZXQgdG8gd29yayFcblxuXG4iLCJJbnB1dFRva2VucyI6NzQ0NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjMxOjIxLjQ3NTcyMDM0MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC92eGxhbi9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCNcXG4gICAyOlxcdCMgTWFrZWZpbGUgZm9yIHRoZSB2eGxhbiBkcml2ZXJcXG4gICAzOlxcdCNcXG4gICA0OlxcdFxcbiAgIDU6XFx0b2JqLSQoQ09ORklHX1ZYTEFOKSArPSB2eGxhbi5vXFxuICAgNjpcXHRcXG4gICA3OlxcdHZ4bGFuLW9ianMgOj0gdnhsYW5fY29yZS5vIHZ4bGFuX211bHRpY2FzdC5vIHZ4bGFuX3ZuaWZpbHRlci5vIHZ4bGFuX21kYi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjMxOjIxLjQ3NTc3NzcxM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTI3Mzc0MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBWWExBTiBGREIgVXBkYXRlIE1lY2hhbmlzbXMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBWWExBTiBGREIgdXBkYXRlIHNpdHVhdGlvbi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQ7IGFyZSB0aGVyZSBvdGhlciBzeW1ib2xzIGF0IHBsYXkgaGVyZSBiZXlvbmQgdGhlIG9uZXMgSSdtIGluaXRpYWxseSBhd2FyZSBvZj8gT2theSwgSSBzZWU6IGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCwgYHZ4bGFuX2ZkYl9hZGRgLCBhbmQgYHZ4bGFuX2ZkYl91cGRhdGVgLiBHb29kLiBOb3csIEkgd2FudCB0byBjb25maXJtIHRoZSBzY29wZSBvZiBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AuIElzIGl0IGEgc3RhdGljIGlubGluZSwgb3IganVzdCBhIHN0YXRpYyBmdW5jdGlvbj8gQWxyaWdodCwgaXQncyBkZWZpbmVkIG9uIGxpbmUgOTk2IGFzIGBzdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmcoLi4uKWAuIFNvLCBpdOKAmXMgYSBzdGF0aWMsIG5vbi1pbmxpbmUgZnVuY3Rpb24gcmVzaWRpbmcgd2l0aGluIGB2eGxhbl9jb3JlLmNgLiBUaGlzIHJlc3RyaWN0cyBpdHMgdmlzaWJpbGl0eSwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbnRlZ3JhdGlvbiBpbnRvIHRoZSBicm9hZGVyIFZYTEFOIGZyYW1ld29yay4gTm93LCBgdnhsYW5fZmRiX2FkZGAgaXMgYWxzbyBzdGF0aWMsIGBzdGF0aWMgaW50IHZ4bGFuX2ZkYl9hZGQoLi4uKWAsIGFuZCBmcm9tIGV4cGVyaWVuY2UsIEkgcmVjYWxsIHRoYXQgdGhpcyBvbmUgaXMgY29ubmVjdGVkIHRvIGAubmRvX2ZkYl9hZGRgIG9yIHJ0bmV0bGluayBuZWlnaGJvciBvcGVyYXRpb25zLiBNeSBuZXh0IHN0ZXAgaGVyZSBpcyB0byBhbmFseXplIHRoZSBjYWxsZXJzIG9mIGB2eGxhbl9mZGJfYWRkYCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBmZGIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMToyNC42MDMxNTQ4MjJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTU3MTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZ4bGFuX2ZkYl9hZGRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xMTUyPXN0YXRpYyBpbnQgdnhsYW5fZmRiX3BhcnNlKHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTEyMzgtLyogQWRkIHN0YXRpYyBlbnRyeSAodmlhIG5ldGxpbmspICovXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjEyMzk6c3RhdGljIGludCB2eGxhbl9mZGJfYWRkKHN0cnVjdCBuZG1zZyAqbmRtLCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMjQwLVxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTMyOTY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyB2eGxhbl9uZXRkZXZfZXRoZXJfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTMzMDUtXFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcXHQ9IGV0aF9tYWNfYWRkcixcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MzMwNjpcXHQubmRvX2ZkYl9hZGRcXHRcXHQ9IHZ4bGFuX2ZkYl9hZGQsXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTMzMDctXFx0Lm5kb19mZGJfZGVsXFx0XFx0PSB2eGxhbl9mZGJfZGVsZXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMToyNC42NDY3MTY5MzFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDA2NDQzNDYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipWWExBTiBGREIgRW50cnkgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBWWExBTiBGREIgbWFuYWdlbWVudCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgYHZ4bGFuX2ZkYl9hZGRgIGlzIHRoZSBjb3JlIGhhbmRsZXIgZm9yIGFkZGluZyBuZXcgZW50cmllcywgYWN0aW5nIGFzIHRoZSBgbmRvX2ZkYl9hZGRgIGNhbGxiYWNrIGZvciBWWExBTiBuZXR3b3JrIGRldmljZXMuIEkgc2VlIHRoYXQgYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgIGFuZCBgdnhsYW5fZmRiX3VwZGF0ZWAgYXJlIGludGVybmFsIGhlbHBlcnMgdGhhdCBhcmUgcmVzcG9uc2libGUgZm9yIHRoZSBhY3R1YWwgcHJvY2VzcyBvZiB1cGRhdGluZyBleGlzdGluZyBGREIgZW50cmllcywgd2hpY2ggbWFrZXMgcGVyZmVjdCBzZW5zZS4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGUgY29uZmlndXJhdGlvbnMgaW4gdXNlIGFyZSBgVlhMQU5gIGFuZCBgSU5FVGAuIE5vdGhpbmcgY29tcGxpY2F0ZWQgaGVyZSwgSSB0aGluayBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NTQsIk91dHB1dFRva2VucyI6MTE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjMxOjI4LjcxMTE1MzUyNloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0NjAwOTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWWExBTlwiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZ4bGFuX2ZkYl9hZGRcIixcbiAgICBcInZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdcIixcbiAgICBcInZ4bGFuX2ZkYl91cGRhdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gY2hlY2tzIHByZXZlbnRpbmcgbmV4dGhvcCBGREIgZW50cmllcyBmcm9tIGJlaW5nIGNvbmZpZ3VyZWQgb3IgdXBkYXRlZCB3aXRoIGEgZHluYW1pYyBzdGF0ZSBpbiB0aGUgVlhMQU4gZHJpdmVyLiBUaGlzIHRvdWNoZXMgcmVhY2hhYmxlIG5ldHdvcmsgbmV0bGluay9GREIgaGFuZGxpbmcgY29kZSBpbiB2eGxhbl9jb3JlLmMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVlhMQU5cIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2eGxhbl9mZGJfYWRkXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nXCIsXG4gICAgXCJ2eGxhbl9mZGJfdXBkYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIGNoZWNrcyBwcmV2ZW50aW5nIG5leHRob3AgRkRCIGVudHJpZXMgZnJvbSBiZWluZyBjb25maWd1cmVkIG9yIHVwZGF0ZWQgd2l0aCBhIGR5bmFtaWMgc3RhdGUgaW4gdGhlIFZYTEFOIGRyaXZlci4gVGhpcyB0b3VjaGVzIHJlYWNoYWJsZSBuZXR3b3JrIG5ldGxpbmsvRkRCIGhhbmRsaW5nIGNvZGUgaW4gdnhsYW5fY29yZS5jLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMToyOC43ODU3NTk4MzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NjU0NzQyODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzE6MjguNzg2MjE0Nzc1WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQ2NTQyODMyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgaW4gdnhsYW5fZmRiX2FkZCgpIGFuZCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKCkgdG8gcHJldmVudCBjb25maWd1cmluZyBvciB1cGRhdGluZyBuZXh0aG9wLWJhc2VkIFZYTEFOIEZEQiBlbnRyaWVzIHdpdGggZHluYW1pYyAoYWdpbmcpIHN0YXRlcy4gSXQgb25seSBpbnRyb2R1Y2VzIGNvbmRpdGlvbmFsIGNoZWNrcyBvbiBleGlzdGluZyB2YWxpZGF0ZWQgaW5wdXQgYXJndW1lbnRzIGFuZCByZXR1cm5zIHN0YW5kYXJkIGVycm9yIGNvZGVzIHdpdGggc3RhdGljIG5ldGxpbmsgZXJyb3IgbWVzc2FnZXMuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIG9yIGRhdGEgdHJhbnNmZXJzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDE0M2FlZGU3MjIyNjdmNDQ5ZWVjNDBkMjczZmZlZDI2ZTJiMGUxNWJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDEyOjMwOjU0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jIGIvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jXG5pbmRleCBhYzg4ZDFjODViZWE2Li45M2JmN2M1MzVlNjk4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jXG4rKysgYi9kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcbkBAIC05OTYsNiArOTk2LDEyIEBAIHN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuIFxuK1x0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihmLVx1MDAzZW5oKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhKHN0YXRlIFx1MDAyNiAoTlVEX1BFUk1BTkVOVCB8IE5VRF9OT0FSUCkpKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJDYW5ub3QgbWFrZSBhIG5leHRob3AgZmRiIGR5bmFtaWNcIik7XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbiBcdC8qIERvIG5vdCBhbGxvdyBhbiBleHRlcm5hbGx5IGxlYXJuZWQgZW50cnkgdG8gdGFrZSBvdmVyIGFuIGVudHJ5IGFkZGVkXG4gXHQgKiBieSB0aGUgdXNlci5cbiBcdCAqL1xuQEAgLTEyNTcsNiArMTI2MywxMSBAQCBzdGF0aWMgaW50IHZ4bGFuX2ZkYl9hZGQoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuK1x0aWYgKG5oaWQgXHUwMDI2XHUwMDI2ICEobmRtLVx1MDAzZW5kbV9zdGF0ZSBcdTAwMjYgKE5VRF9QRVJNQU5FTlQgfCBOVURfTk9BUlApKSkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiQSBuZXh0aG9wIGZkYiBjYW5ub3QgYmUgZHluYW1pY1wiKTtcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4gXHRpZiAodnhsYW4tXHUwMDNlZGVmYXVsdF9kc3QucmVtb3RlX2lwLnNhLnNhX2ZhbWlseSAhPSBpcC5zYS5zYV9mYW1pbHkpXG4gXHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuIFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9maWJfbmV4dGhvcHMuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZmliX25leHRob3BzLnNoXG5pbmRleCAzZDM0NzEyNjczMGE5Li40MzFkN2JlZDc2MjI0IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZpYl9uZXh0aG9wcy5zaFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZpYl9uZXh0aG9wcy5zaFxuQEAgLTUzMyw2ICs1MzMsMjAgQEAgaXB2Nl9mZGJfZ3JwX2ZjbmFsKClcbiBcdHJ1bl9jbWQgXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTQgZGV2IHZ4MTAgbmhpZCA2MSBzZWxmXCJcbiBcdGxvZ190ZXN0ICQ/IDI1NSBcIkZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcFwiXG4gXG4rXHQjIGZkYiBlbnRyaWVzIHdpdGggYSBuZXh0aG9wIGdyb3VwIGNhbm5vdCBiZSBhZ2VkIG91dFxuK1x0cnVuX2NtZCBcIiRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNSBkZXYgdngxMCBuaGlkIDEwMiBzZWxmIHN0YXRpY1wiXG4rXHRsb2dfdGVzdCAkPyAwIFwiRmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBzdGF0aWMgc3RhdGVcIlxuK1xuK1x0cnVuX2NtZCBcIiRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNiBkZXYgdngxMCBuaGlkIDEwMiBzZWxmIGR5bmFtaWNcIlxuK1x0bG9nX3Rlc3QgJD8gMjU1IFwiRmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlXCJcbitcbitcdHJ1bl9jbWQgXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZlwiXG4rXHRydW5fY21kIFwiJEJSSURHRSBmZGIgcmVwbGFjZSAwMjowMjowMDowMDowMDoxNyBkZXYgdngxMCBkc3QgMjAwMTpkYjg6OTE6OjExIHNlbGYgZHluYW1pY1wiXG4rXHRsb2dfdGVzdCAkPyAyNTUgXCJGZGIgbWFjIHJlcGxhY2Ugd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlXCJcbitcbitcdHJ1bl9jbWQgXCIkQlJJREdFIGZkYiBhcHBlbmQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgZHN0IDIwMDE6ZGI4OjkxOjoxMSBzZWxmIGR5bmFtaWNcIlxuK1x0bG9nX3Rlc3QgJD8gMjU1IFwiRmRiIG1hYyBhcHBlbmQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlXCJcbitcbiBcdHJ1bl9jbWQgXCIkSVAgLTYgcm8gYWRkIDIwMDE6ZGI4OjEwMTo6MS8xMjggbmhpZCA2NlwiXG4gXHRsb2dfdGVzdCAkPyAyIFwiUm91dGUgYWRkIHdpdGggZmRiIG5leHRob3BcIlxuIFxuQEAgLTY2OSw2ICs2ODMsMjAgQEAgaXB2NF9mZGJfZ3JwX2ZjbmFsKClcbiBcdHJ1bl9jbWQgXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTQgZGV2IHZ4MTAgbmhpZCAxMiBzZWxmXCJcbiBcdGxvZ190ZXN0ICQ/IDI1NSBcIkZkYiBtYWMgYWRkIHdpdGggbmV4dGhvcFwiXG4gXG4rXHQjIGZkYiBlbnRyaWVzIHdpdGggYSBuZXh0aG9wIGdyb3VwIGNhbm5vdCBiZSBhZ2VkIG91dFxuK1x0cnVuX2NtZCBcIiRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNSBkZXYgdngxMCBuaGlkIDEwMiBzZWxmIHN0YXRpY1wiXG4rXHRsb2dfdGVzdCAkPyAwIFwiRmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBzdGF0aWMgc3RhdGVcIlxuK1xuK1x0cnVuX2NtZCBcIiRCUklER0UgZmRiIGFkZCAwMjowMjowMDowMDowMDoxNiBkZXYgdngxMCBuaGlkIDEwMiBzZWxmIGR5bmFtaWNcIlxuK1x0bG9nX3Rlc3QgJD8gMjU1IFwiRmRiIG1hYyBhZGQgd2l0aCBuZXh0aG9wIGdyb3VwIGFuZCBkeW5hbWljIHN0YXRlXCJcbitcbitcdHJ1bl9jbWQgXCIkQlJJREdFIGZkYiBhZGQgMDI6MDI6MDA6MDA6MDA6MTcgZGV2IHZ4MTAgbmhpZCAxMDIgc2VsZlwiXG4rXHRydW5fY21kIFwiJEJSSURHRSBmZGIgcmVwbGFjZSAwMjowMjowMDowMDowMDoxNyBkZXYgdngxMCBkc3QgMTAuMC4wLjMgc2VsZiBkeW5hbWljXCJcbitcdGxvZ190ZXN0ICQ/IDI1NSBcIkZkYiBtYWMgcmVwbGFjZSB3aXRoIG5leHRob3AgZ3JvdXAgYW5kIGR5bmFtaWMgc3RhdGVcIlxuK1xuK1x0cnVuX2NtZCBcIiRCUklER0UgZmRiIGFwcGVuZCAwMjowMjowMDowMDowMDoxNyBkZXYgdngxMCBkc3QgMTAuMC4wLjMgc2VsZiBkeW5hbWljXCJcbitcdGxvZ190ZXN0ICQ/IDI1NSBcIkZkYiBtYWMgYXBwZW5kIHdpdGggbmV4dGhvcCBncm91cCBhbmQgZHluYW1pYyBzdGF0ZVwiXG4rXG4gXHRydW5fY21kIFwiJElQIHJvIGFkZCAxNzIuMTYuMC4wLzIyIG5oaWQgMTZcIlxuIFx0bG9nX3Rlc3QgJD8gMiBcIlJvdXRlIGFkZCB3aXRoIGZkYiBuZXh0aG9wXCJcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjMxOjI4Ljc4NjIxNTYyNVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNTkyNDMyNjI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFZYTEFOIEZEQiBVcGRhdGUqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBkaWZmIHNob3dzIGNoYW5nZXMgd2l0aGluIGBkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBmb2N1cyBpcyBvbiBgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZ2AgYW5kIGB2eGxhbl9mZGJfYWRkYC4gSSBzZWUgYSBuZXdseSBpbnRyb2R1Y2VkIGNoZWNrIGluIGJvdGggZnVuY3Rpb25zIHRoYXQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byB0aGUgc3RhdGUgb2YgYSBuZXh0IGhvcC5cblxuSW4gYHZ4bGFuX2ZkYl91cGRhdGVfZXhpc3RpbmdgLCB0aGUgY29kZSBub3cgZXhwbGljaXRseSBwcm9oaWJpdHMgdXBkYXRpbmcgYW4gZXhpc3RpbmcgRkRCIGVudHJ5J3MgbmV4dCBob3AgdG8gYSBkeW5hbWljIHN0YXRlIGlmIHRoZSBjdXJyZW50IG5leHQgaG9wIGBmLVx1MDAzZW5oYCBleGlzdHMgYW5kIGlzbid0IG1hcmtlZCBhcyBgTlVEX1BFUk1BTkVOVGAgb3IgYE5VRF9OT0FSUGAuIFRoZSBzYW1lIGxvZ2ljIGlzIGFwcGxpZWQgaW4gYHZ4bGFuX2ZkYl9hZGRgLCB3aGVyZSB0aGUgcHJlc2VuY2Ugb2YgYSBuZXh0IGhvcCBJRCBgbmhpZGAgYWxvbmcgd2l0aCB0aGUgYG5kbV9zdGF0ZWAgbm90IGJlaW5nIGBOVURfUEVSTUFORU5UYCBvciBgTlVEX05PQVJQYCByZXN1bHRzIGluIGFuIGVycm9yLiBUaGUgZXJyb3IgbWVzc2FnZXMgc3VnZ2VzdCB0aGlzIGNoYW5nZSBwcmV2ZW50cyBtYWtpbmcgYSBcIm5leHRob3AgZmRiIGR5bmFtaWMsXCIgd2hpY2ggaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgcmVzdHJpY3Rpb24uIFRvIGRvIHRoYXQsIEknbGwgbmVlZCB0byByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCBhbmQgYHZ4bGFuX2ZkYl9hZGRgIHRvIGdyYXNwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgYWRkZWQgY29uc3RyYWludCBhbmQgd2hhdCBpdCdzIHRyeWluZyB0byBwcmV2ZW50LiBUaGUgZmFjdCB0aGF0IHRoaXMgaW1wYWN0cyBib3RoIHVwZGF0ZXMgYW5kIGFkZGl0aW9ucyBtZWFucyB0aGVyZSBpcyBhbiBpbXBvcnRhbnQgZGV0YWlsIGF0IGhhbmQgdGhhdCBjb3VsZCBoYXZlIGltcGFjdHMgZm9yIHRoZSB1c2VyLiBBbHNvLCBJIHNob3VsZCBjaGVjayB0aGUgcmVsYXRlZCB0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZpYl9uZXh0aG9wcy5zaGAgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDMxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzE6NDQuNzEwNTQ0NTY5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTg1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTg1OlxcdFxcdGludCBlcnI7XFxuIDk4NjpcXHRcXG4gOTg3OlxcdFxcdGlmIChuaGlkIFxcdTAwMjZcXHUwMDI2ICFyY3VfYWNjZXNzX3BvaW50ZXIoZi1cXHUwMDNlbmgpKSB7XFxuIDk4ODpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuIDk4OTpcXHRcXHRcXHRcXHQgICAgICAgXFxcIkNhbm5vdCByZXBsYWNlIGFuIGV4aXN0aW5nIG5vbiBuZXh0aG9wIGZkYiB3aXRoIGEgbmV4dGhvcFxcXCIpO1xcbiA5OTA6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA5OTE6XFx0XFx0fVxcbiA5OTI6XFx0XFxuIDk5MzpcXHRcXHRpZiAobmhpZCBcXHUwMDI2XFx1MDAyNiAoZmxhZ3MgXFx1MDAyNiBOTE1fRl9BUFBFTkQpKSB7XFxuIDk5NDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssXFxuIDk5NTpcXHRcXHRcXHRcXHQgICAgICAgXFxcIkNhbm5vdCBhcHBlbmQgdG8gYSBuZXh0aG9wIGZkYlxcXCIpO1xcbiA5OTY6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiA5OTc6XFx0XFx0fVxcbiA5OTg6XFx0XFxuIDk5OTpcXHRcXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGYtXFx1MDAzZW5oKSBcXHUwMDI2XFx1MDAyNlxcbjEwMDA6XFx0XFx0ICAgICEoc3RhdGUgXFx1MDAyNiAoTlVEX1BFUk1BTkVOVCB8IE5VRF9OT0FSUCkpKSB7XFxuMTAwMTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJDYW5ub3QgbWFrZSBhIG5leHRob3AgZmRiIGR5bmFtaWNcXFwiKTtcXG4xMDAyOlxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4xMDAzOlxcdFxcdH1cXG4xMDA0OlxcdFxcbjEwMDU6XFx0XFx0LyogRG8gbm90IGFsbG93IGFuIGV4dGVybmFsbHkgbGVhcm5lZCBlbnRyeSB0byB0YWtlIG92ZXIgYW4gZW50cnkgYWRkZWRcXG4xMDA2OlxcdFxcdCAqIGJ5IHRoZSB1c2VyLlxcbjEwMDc6XFx0XFx0ICovXFxuMTAwODpcXHRcXHRpZiAoIShmZGJfZmxhZ3MgXFx1MDAyNiBOVEZfRVhUX0xFQVJORUQpIHx8XFxuMTAwOTpcXHRcXHQgICAgIShmLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5URl9WWExBTl9BRERFRF9CWV9VU0VSKSkge1xcbjEwMTA6XFx0XFx0XFx0aWYgKGYtXFx1MDAzZXN0YXRlICE9IHN0YXRlKSB7XFxuMTAxMTpcXHRcXHRcXHRcXHRmLVxcdTAwM2VzdGF0ZSA9IHN0YXRlO1xcbjEwMTI6XFx0XFx0XFx0XFx0bm90aWZ5ID0gMTtcXG4xMDEzOlxcdFxcdFxcdH1cXG4xMDE0OlxcdFxcdFxcdGlmIChmLVxcdTAwM2VmbGFncyAhPSBmZGJfZmxhZ3MpIHtcXG4xMDE1OlxcdFxcdFxcdFxcdGYtXFx1MDAzZWZsYWdzID0gZmRiX2ZsYWdzO1xcbjEwMTY6XFx0XFx0XFx0XFx0bm90aWZ5ID0gMTtcXG4xMDE3OlxcdFxcdFxcdH1cXG4xMDE4OlxcdFxcdH1cXG4xMDE5OlxcdFxcbjEwMjA6XFx0XFx0aWYgKChmbGFncyBcXHUwMDI2IE5MTV9GX1JFUExBQ0UpKSB7XFxuMTAyMTpcXHRcXHRcXHQvKiBPbmx5IGNoYW5nZSB1bmljYXN0cyAqL1xcbjEwMjI6XFx0XFx0XFx0aWYgKCEoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZi1cXHUwMDNla2V5LmV0aF9hZGRyKSB8fFxcbjEwMjM6XFx0XFx0XFx0ICAgICAgaXNfemVyb19ldGhlcl9hZGRyKGYtXFx1MDAzZWtleS5ldGhfYWRkcikpKSB7XFxuMTAyNDpcXHRcXHRcXHRcXHRpZiAobmhpZCkge1xcbjEwMjU6XFx0XFx0XFx0XFx0XFx0cmMgPSB2eGxhbl9mZGJfbmhfdXBkYXRlKHZ4bGFuLCBmLCBuaGlkLCBleHRhY2spO1xcbjEwMjY6XFx0XFx0XFx0XFx0XFx0aWYgKHJjIFxcdTAwM2MgMClcXG4xMDI3OlxcdFxcdFxcdFxcdFxcdFxcdHJldHVybiByYztcXG4xMDI4OlxcdFxcdFxcdFxcdH0gZWxzZSB7XFxuMTAyOTpcXHRcXHRcXHRcXHRcXHRyYyA9IHZ4bGFuX2ZkYl9yZXBsYWNlKGYsIGlwLCBwb3J0LCB2bmksXFxuMTAzMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgaWZpbmRleCwgXFx1MDAyNm9sZHJkKTtcXG4xMDMxOlxcdFxcdFxcdFxcdH1cXG4xMDMyOlxcdFxcdFxcdFxcdG5vdGlmeSB8PSByYztcXG4xMDMzOlxcdFxcdFxcdH0gZWxzZSB7XFxuMTAzNDpcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJDYW5ub3QgcmVwbGFjZSBub24tdW5pY2FzdCBmZGIgZW50cmllc1xcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMTo0NC43MTA3MTc1OTlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU4MDQ5ODQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgZXhwcmVzc2VkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIFZYTEFOIEZEQiBBZGRpdGlvbioqXG5cbk9rYXksIGxldCdzIHpvb20gaW4gYSBiaXQgZnVydGhlci4gSSB3YW50IHRvIHNoaWZ0IG15IGZvY3VzIHRvIHRoZSBgdnhsYW5fZmRiX2FkZGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmVzIDEyNTAgdGhyb3VnaCAxMjgwLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rIGF0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhhdCBwYXJ0IG9mIHRoZSBjb2RlLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBsZWFybmluZyB0aGUgTUFDIGFkZHJlc3NlcyBhc3NvY2lhdGVkIHdpdGggYSBWWExBTiBuZXR3b3JrLCBzbyB1bmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGVkZ2UgY2FzZXMgaXMgcGFyYW1vdW50LiBJJ20gaG9waW5nIHRvIHBpbnBvaW50IGhvdyBpdCBoYW5kbGVzIG5ldyBlbnRyaWVzLCBhZ2luZywgYW5kIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gSSdtIGV4cGVjdGluZyB0aGlzIHNlY3Rpb24gdG8gcHJvdmlkZSBzb21lIGNyaXRpY2FsIGNsdWVzIGFzIHRvIHdoZXJlIHByb2JsZW1zIGFyZSBvY2N1cnJpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MTAsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjMxOjQ4LjI5MTIxOTg1MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzAyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNDA6XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuMTI0MTpcXHRcXHRcXHRcXHQgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZCwgdTE2IGZsYWdzLFxcbjEyNDI6XFx0XFx0XFx0XFx0IGJvb2wgKm5vdGlmaWVkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMTI0MzpcXHR7XFxuMTI0NDpcXHRcXHRzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiA9IG5ldGRldl9wcml2KGRldik7XFxuMTI0NTpcXHRcXHQvKiBzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHZ4bGFuLVxcdTAwM2VkZXYpOyAqL1xcbjEyNDY6XFx0XFx0dW5pb24gdnhsYW5fYWRkciBpcDtcXG4xMjQ3OlxcdFxcdF9fYmUxNiBwb3J0O1xcbjEyNDg6XFx0XFx0X19iZTMyIHNyY192bmksIHZuaTtcXG4xMjQ5OlxcdFxcdHUzMiBpZmluZGV4LCBuaGlkO1xcbjEyNTA6XFx0XFx0aW50IGVycjtcXG4xMjUxOlxcdFxcbjEyNTI6XFx0XFx0aWYgKCEobmRtLVxcdTAwM2VuZG1fc3RhdGUgXFx1MDAyNiAoTlVEX1BFUk1BTkVOVHxOVURfUkVBQ0hBQkxFKSkpIHtcXG4xMjUzOlxcdFxcdFxcdHByX2luZm8oXFxcIlJUTV9ORVdORUlHSCB3aXRoIGludmFsaWQgc3RhdGUgJSN4XFxcXG5cXFwiLFxcbjEyNTQ6XFx0XFx0XFx0XFx0bmRtLVxcdTAwM2VuZG1fc3RhdGUpO1xcbjEyNTU6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTI1NjpcXHRcXHR9XFxuMTI1NzpcXHRcXG4xMjU4OlxcdFxcdGlmICghdGIgfHwgKCF0YltOREFfRFNUXSBcXHUwMDI2XFx1MDAyNiAhdGJbTkRBX05IX0lEXSkpXFxuMTI1OTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjYwOlxcdFxcbjEyNjE6XFx0XFx0ZXJyID0gdnhsYW5fZmRiX3BhcnNlKHRiLCB2eGxhbiwgXFx1MDAyNmlwLCBcXHUwMDI2cG9ydCwgXFx1MDAyNnNyY192bmksIFxcdTAwMjZ2bmksIFxcdTAwMjZpZmluZGV4LFxcbjEyNjI6XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm5oaWQsIGV4dGFjayk7XFxuMTI2MzpcXHRcXHRpZiAoZXJyKVxcbjEyNjQ6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMjY1OlxcdFxcbjEyNjY6XFx0XFx0aWYgKG5oaWQgXFx1MDAyNlxcdTAwMjYgIShuZG0tXFx1MDAzZW5kbV9zdGF0ZSBcXHUwMDI2IChOVURfUEVSTUFORU5UIHwgTlVEX05PQVJQKSkpIHtcXG4xMjY3OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkEgbmV4dGhvcCBmZGIgY2Fubm90IGJlIGR5bmFtaWNcXFwiKTtcXG4xMjY4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyNjk6XFx0XFx0fVxcbjEyNzA6XFx0XFxuMTI3MTpcXHRcXHRpZiAodnhsYW4tXFx1MDAzZWRlZmF1bHRfZHN0LnJlbW90ZV9pcC5zYS5zYV9mYW1pbHkgIT0gaXAuc2Euc2FfZmFtaWx5KVxcbjEyNzI6XFx0XFx0XFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XFxuMTI3MzpcXHRcXG4xMjc0OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dnhsYW4tXFx1MDAzZWhhc2hfbG9jayk7XFxuMTI3NTpcXHRcXHRlcnIgPSB2eGxhbl9mZGJfdXBkYXRlKHZ4bGFuLCBhZGRyLCBcXHUwMDI2aXAsIG5kbS1cXHUwMDNlbmRtX3N0YXRlLCBmbGFncyxcXG4xMjc2OlxcdFxcdFxcdFxcdCAgICAgICBwb3J0LCBzcmNfdm5pLCB2bmksIGlmaW5kZXgsXFxuMTI3NzpcXHRcXHRcXHRcXHQgICAgICAgbmRtLVxcdTAwM2VuZG1fZmxhZ3MgfCBOVEZfVlhMQU5fQURERURfQllfVVNFUixcXG4xMjc4OlxcdFxcdFxcdFxcdCAgICAgICBuaGlkLCB0cnVlLCBleHRhY2spO1xcbjEyNzk6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnZ4bGFuLVxcdTAwM2VoYXNoX2xvY2spO1xcbjEyODA6XFx0XFxuMTI4MTpcXHRcXHRpZiAoIWVycilcXG4xMjgyOlxcdFxcdFxcdCpub3RpZmllZCA9IHRydWU7XFxuMTI4MzpcXHRcXG4xMjg0OlxcdFxcdHJldHVybiBlcnI7XFxuMTI4NTpcXHR9XFxuMTI4NjpcXHRcXG4xMjg3OlxcdGludCBfX3Z4bGFuX2ZkYl9kZWxldGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuMTI4ODpcXHRcXHRcXHQgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdW5pb24gdnhsYW5fYWRkciBpcCxcXG4xMjg5OlxcdFxcdFxcdCAgICAgICBfX2JlMTYgcG9ydCwgX19iZTMyIHNyY192bmksIF9fYmUzMiB2bmksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjMxOjQ4LjI5MTM5MTQ2MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NzI0OTI5MDczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyBwcm9ibGVtOlxuXG4qKkFuYWx5emluZyB0aGUgRHluYW1pYyBOZXh0aG9wIEZEQiBJc3N1ZXMqKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCB3aHkgZHluYW1pYyBuZXh0aG9wIEZEQnMgYXJlIGNhdXNpbmcgcHJvYmxlbXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpZyBkaXJlY3RseSBpbnRvIHRoZSBjb2RlLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGdyZXAuIEknbGwgbmVlZCB0byBmb2N1cyBvbiB3aGVyZSB0aGUgXCJmLVx1MDAzZW5oXCIgKHByZXN1bWFibHksIGEgcG9pbnRlciB0byB0aGUgbmV4dCBob3AgaW5mb3JtYXRpb24pIGlzIHVzZWQsIHNwZWNpZmljYWxseSB3aXRoaW4gYHZ4bGFuX2NvcmUuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgVlhMQU4gZnVuY3Rpb25hbGl0eSBsaWtlbHkgcmVzaWRlcy4gSXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZHluYW1pYyBuZXh0aG9wcyBhcmUgYmVpbmcgaGFuZGxlZC4gQWx0ZXJuYXRpdmVseSwgSSBjYW4gc2VlIHdoYXQgdGhlIGFnaW5nIG1lY2hhbmlzbXMgaW4gdGhlIGNvZGViYXNlIGRvIHdpdGggdGhpcyB2YXJpYWJsZS4gSSB3aWxsIGdldCBpdCBieSBkb2luZyBhIHNlYXJjaCwgdG9vLiBJIHRoaW5rIGEgZGVlcCBkaXZlIGludG8gdGhlIGNvZGUgd2lsbCB0ZWxsIHVzIHdoYXQncyBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwMTYsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDEyOjMxOjU4LjAxNjMyMjc0NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2Mzk2NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidnhsYW5fZmRiX2NsZWFudXB8dnhsYW5fZmRiX2Rlc3Ryb3l8Zi1cXHUwMDNlbmhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdnhsYW4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz03NzQ9c3RhdGljIHN0cnVjdCB2eGxhbl9mZGIgKnZ4bGFuX2ZkYl9hbGxvYyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbiwgY29uc3QgdTggKm1hYyxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy03ODctXFx0Zi1cXHUwMDNla2V5LnZuaSA9IHNyY192bmk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjc4ODpcXHRmLVxcdTAwM2VuaCA9IE5VTEw7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTc4OS1cXHRSQ1VfSU5JVF9QT0lOVEVSKGYtXFx1MDAzZXZkZXYsIHZ4bGFuKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6NzkwOlxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZmLVxcdTAwM2VuaF9saXN0KTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNzkxLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZmLVxcdTAwM2VyZW1vdGVzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz04NTk9aW50IHZ4bGFuX2ZkYl9jcmVhdGUoc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4sXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtODk4LWRlc3Ryb3lfcmVtb3RlOlxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo4OTk6XFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihmLVxcdTAwM2VuaCkpIHtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6OTAwOlxcdFxcdGxpc3RfZGVsX3JjdShcXHUwMDI2Zi1cXHUwMDNlbmhfbGlzdCk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjkwMTpcXHRcXHRuZXh0aG9wX3B1dChydG5sX2RlcmVmZXJlbmNlKGYtXFx1MDAzZW5oKSk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTkwMi1cXHR9IGVsc2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTkxMj1zdGF0aWMgdm9pZCBfX3Z4bGFuX2ZkYl9mcmVlKHN0cnVjdCB2eGxhbl9mZGIgKmYpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTE2LVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo5MTc6XFx0bmggPSByY3VfZGVyZWZlcmVuY2VfcmF3KGYtXFx1MDAzZW5oKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTE4LVxcdGlmIChuaCkge1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzo5MTk6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGYtXFx1MDAzZW5oLCBOVUxMKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTIwLVxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihmLVxcdTAwM2V2ZGV2LCBOVUxMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz05MzE9c3RhdGljIHZvaWQgdnhsYW5fZmRiX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTkzNy1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6OTM4OnN0YXRpYyB2b2lkIHZ4bGFuX2ZkYl9kZXN0cm95KHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLCBzdHJ1Y3QgdnhsYW5fZmRiICpmLFxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy05MzktXFx0XFx0XFx0ICAgICAgYm9vbCBkb19ub3RpZnksIGJvb2wgc3dkZXZfbm90aWZ5KVxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTk0Ni1cXHRpZiAoZG9fbm90aWZ5KSB7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjk0NzpcXHRcXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGYtXFx1MDAzZW5oKSlcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtOTQ4LVxcdFxcdFxcdHZ4bGFuX2ZkYl9ub3RpZnkodnhsYW4sIGYsIE5VTEwsIFJUTV9ERUxORUlHSCxcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy05NTgtXFx0XFx0XFx0ICAgICAgIHZ4bGFuX2ZkYl9yaHRfcGFyYW1zKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6OTU5OlxcdGxpc3RfZGVsX3JjdShcXHUwMDI2Zi1cXHUwMDNlbmhfbGlzdCk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTk2MC1cXHRjYWxsX3JjdShcXHUwMDI2Zi1cXHUwMDNlcmN1LCB2eGxhbl9mZGJfZnJlZSk7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9OTcxPXN0YXRpYyBpbnQgdnhsYW5fZmRiX3VwZGF0ZV9leGlzdGluZyhzdHJ1Y3QgdnhsYW5fZGV2ICp2eGxhbixcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy05ODYtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjk4NzpcXHRpZiAobmhpZCBcXHUwMDI2XFx1MDAyNiAhcmN1X2FjY2Vzc19wb2ludGVyKGYtXFx1MDAzZW5oKSkge1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy05ODgtXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTk5OC1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6OTk5OlxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cXHUwMDNlbmgpIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTEwMDAtXFx0ICAgICEoc3RhdGUgXFx1MDAyNiAoTlVEX1BFUk1BTkVOVCB8IE5VRF9OT0FSUCkpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MTA3Nj1zdGF0aWMgaW50IHZ4bGFuX2ZkYl91cGRhdGVfY3JlYXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTExMDYtZXJyX25vdGlmeTpcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTEwNzpcXHR2eGxhbl9mZGJfZGVzdHJveSh2eGxhbiwgZiwgZmFsc2UsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTEwOC1cXHRyZXR1cm4gcmM7XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MTI4Nz1pbnQgX192eGxhbl9mZGJfZGVsZXRlKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTEzMTMtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjEzMTQ6XFx0dnhsYW5fZmRiX2Rlc3Ryb3kodnhsYW4sIGYsIHRydWUsIHN3ZGV2X25vdGlmeSk7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTEzMTUtXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MTM1MD1zdGF0aWMgaW50IHZ4bGFuX2ZkYl9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xMzYyLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoxMzYzOlxcdFxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cXHUwMDNlbmgpKSB7XFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTEzNjQtXFx0XFx0XFx0aWYgKCppZHggXFx1MDAzYyBjdHgtXFx1MDAzZWZkYl9pZHgpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MTQzNj1zdGF0aWMgZW51bSBza2JfZHJvcF9yZWFzb24gdnhsYW5fc25vb3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNDYzLVxcdFxcdC8qIERvbid0IG92ZXJyaWRlIGFuIGZkYiB3aXRoIG5leHRob3Agd2l0aCBhIGxlYXJudCBlbnRyeSAqL1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoxNDY0OlxcdFxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZi1cXHUwMDNlbmgpKVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xNDY1LVxcdFxcdFxcdHJldHVybiBTS0JfRFJPUF9SRUFTT05fVlhMQU5fRU5UUllfRVhJU1RTO1xcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTI2Njc9c3RhdGljIHZvaWQgdnhsYW5feG1pdF9uaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI2NzctXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjI2Nzg6XFx0bmggPSByY3VfZGVyZWZlcmVuY2UoZi1cXHUwMDNlbmgpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yNjc5LVxcdGlmICghbmgpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9Mjc0Mj1zdGF0aWMgbmV0ZGV2X3R4X3QgdnhsYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTI4MzUtXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjI4MzY6XFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihmLVxcdTAwM2VuaCkpIHtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjgzNy1cXHRcXHR2eGxhbl94bWl0X25oKHNrYiwgZGV2LCBmLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jPTI4NjM9c3RhdGljIHZvaWQgdnhsYW5fY2xlYW51cChzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0yODg4LVxcdFxcdFxcdFxcdGYtXFx1MDAzZXN0YXRlID0gTlVEX1NUQUxFO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYzoyODg5OlxcdFxcdFxcdFxcdHZ4bGFuX2ZkYl9kZXN0cm95KHZ4bGFuLCBmLCB0cnVlLCB0cnVlKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMjg5MC1cXHRcXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM9MzAxNT1zdGF0aWMgYm9vbCB2eGxhbl9mZGJfbmhpZF9tYXRjaGVzKGNvbnN0IHN0cnVjdCB2eGxhbl9mZGIgKmYsIHUzMiBuaGlkKVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zMDE2LXtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MzAxNzpcXHRzdHJ1Y3QgbmV4dGhvcCAqbmggPSBydG5sX2RlcmVmZXJlbmNlKGYtXFx1MDAzZW5oKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMzAxOC1cXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0zMDg4PXN0YXRpYyB2b2lkIHZ4bGFuX2ZsdXNoKHN0cnVjdCB2eGxhbl9kZXYgKnZ4bGFuLFxcbi0tXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jLTMxMTItXFxuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjMxMTM6XFx0XFx0dnhsYW5fZmRiX2Rlc3Ryb3kodnhsYW4sIGYsIHRydWUsIHRydWUpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0zMTE0LXVubG9jazpcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz00ODc2PXN0YXRpYyB2b2lkIHZ4bGFuX2ZkYl9uaF9mbHVzaChzdHJ1Y3QgbmV4dGhvcCAqbmgpXFxuLS1cXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtNDg4Ni1cXHRcXHRpZiAoIWhsaXN0X3VuaGFzaGVkKFxcdTAwMjZmZGItXFx1MDAzZWZkYl9ub2RlKSlcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6NDg4NzpcXHRcXHRcXHR2eGxhbl9mZGJfZGVzdHJveSh2eGxhbiwgZmRiLCBmYWxzZSwgZmFsc2UpO1xcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy00ODg4LVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ2eGxhbi1cXHUwMDNlaGFzaF9sb2NrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTI6MzE6NTguMDYyOTY1OTM0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUzNzc1MDI4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVlhMQU4gRkRCIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHN0cmFpZ2h0Zm9yd2FyZCDigJMgaXQncyBhbGwgYWJvdXQgYm9sc3RlcmluZyB0aGUgaW5wdXQgdmFsaWRhdGlvbiBmb3IgVlhMQU4gRkRCIGVudHJpZXMuIFNwZWNpZmljYWxseSwgaXQgaW50cm9kdWNlcyB0d28ga2V5IGNoZWNrcyB3aXRoaW4gdGhlIGB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nYCBhbmQgYHZ4bGFuX2ZkYl9hZGRgIGZ1bmN0aW9ucy4gRmlyc3QsIGlmIGEgbmV4dCBob3AgKGBmLVx1MDAzZW5oYCkgaXMgc2V0IGR1cmluZyBhbiB1cGRhdGUsIGFuZCB0aGUgcmVxdWVzdGVkIHN0YXRlIGlzbid0IGBOVURfUEVSTUFORU5UYCBvciBgTlVEX05PQVJQYCwgd2UgcmVqZWN0IHRoZSB1cGRhdGUgd2l0aCBgLUVPUE5PVFNVUFBgLiBTZWNvbmQsIGluIHRoZSBgYWRkYCBvcGVyYXRpb24sIGlmIGEgYG5oaWRgIGlzIHNwZWNpZmllZCBhbmQgdGhlIGRlc2lyZWQgc3RhdGUgaXNuJ3QgYE5VRF9QRVJNQU5FTlRgIG9yIGBOVURfTk9BUlBgLCB3ZSByZXR1cm4gYC1FSU5WQUxgLiBFc3NlbnRpYWxseSwgaXQgYmxvY2tzIGFnaW5nL2R5bmFtaWMgdHJhbnNpdGlvbnMgZm9yIEZEQnMgYm91bmQgdG8gYSBuZXh0IGhvcC5cblxuTm93LCBsZXQncyBhZGRyZXNzIGFueSBwb3RlbnRpYWwgc2VjdXJpdHkgaW1wbGljYXRpb25zLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGFsd2F5cyBteSBwcmltYXJ5IGNvbmNlcm4uIEkndmUgd2Fsa2VkIHRocm91Z2ggdGhpcyBjYXJlZnVsbHkuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGFsbG9jYXRlZCwgc28gdGhhdCdzIGdvb2QuIFdlIGFyZW4ndCBjb3B5aW5nIGFueSBidWZmZXJzIHRvIHVzZXIgc3BhY2Ug4oCTIG9ubHkgbmV0bGluayBlcnJvciBtZXNzYWdlcywgd2hpY2ggYXJlIHN0cmluZyBsaXRlcmFscyBhbmQgdGh1cyBzYWZlLiBUaGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGhhbmRsaW5nIG9mIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIG1lbW9yeSwgZWl0aGVyLiBUaGUgcGF0Y2ggZG9lcyBwcmV2ZW50IGFnaW5nIGZvciBuZXh0aG9wIEZEQnMsIGJ1dCB0aGlzIGlzIGEgKnNlbWFudGljKiB2YWxpZGF0aW9uLCBub3QgYSBtZW1vcnkgc2FmZXR5IGlzc3VlLlxuXG5UaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCB0aGlzIGlzICpwdXJlbHkqIGEgY29udHJvbC1mbG93IHZhbGlkYXRpb24sIGEgbWF0dGVyIG9mIGlucHV0IGNoZWNraW5nIG9uIHRoZSBuZXRsaW5rIGNvbW1hbmRzLiBUaGVyZSdzIHplcm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgYW5kIG5vIHBvc3NpYmlsaXR5IG9mIGluZm9ybWF0aW9uIGxlYWtzLiBUaGlzIGlzIGEgdmVyeSB0YXJnZXRlZCBwYXRjaC5cblxuR2l2ZW4gdGhpcywgSSBkb24ndCBzZWUgYW55IG5lZWQgZm9yIEtNU0FOLiBUaGUgZ29hbCBvZiBLTVNBTiBpcyB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGxlYWtzIHRvIHVzZXJzcGFjZSwgYnV0IHRoaXMgZG9lc27igJl0IHRvdWNoIGFueSBvZiB0aG9zZSBhcmVhcy4gVGhlIHBhdGNoIGlzIGFsbCBhYm91dCB2YWxpZGF0aW5nIHByb3ZpZGVkIHBhcmFtZXRlcnMgYW5kIHJldHVybmluZyBhcHByb3ByaWF0ZSBlcnJvciBjb2Rlczsgc3RhbmRhcmQgc2FuaXRpemVycyBsaWtlIEtBU0FOIGFuZCBvdXIgZXhpc3RpbmcgZnVuY3Rpb25hbCB0ZXN0aW5nIHNob3VsZCBiZSBzdWZmaWNpZW50LiBLTVNBTidzIHJlc291cmNlIHJlcXVpcmVtZW50cyBhcmUgaGlnaCwgYW5kIHRoZSBwb3RlbnRpYWwgYmVuZWZpdCBoZXJlIGlzbid0IGVub3VnaCB0byBqdXN0aWZ5IGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uXG5cbkluIHN1bW1hcnk6IFRoaXMgcGF0Y2ggcmVzdHJpY3RzIHRoZSBkeW5hbWljIHN0YXRlIGZvciBGREIgZW50cmllcyBjb25maWd1cmVkIHdpdGggbmV4dGhvcHMgYnkgdmFsaWRhdGluZyBuZXRsaW5rIGlucHV0LiBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LCBhcyB0aGUgY29kZSBjaGFuZ2VzIGRvIG5vdCBkZWFsIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkuIFdlIGNhbiBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODIyLCJPdXRwdXRUb2tlbnMiOjEzNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxMjozMjowMy40NDA0NzA2MTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgaW4gdnhsYW5fZmRiX2FkZCgpIGFuZCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKCkgdG8gcHJldmVudCBjb25maWd1cmluZyBvciB1cGRhdGluZyBuZXh0aG9wLWJhc2VkIFZYTEFOIEZEQiBlbnRyaWVzIHdpdGggZHluYW1pYyAoYWdpbmcpIHN0YXRlcy4gSXQgb25seSBpbnRyb2R1Y2VzIGNvbmRpdGlvbmFsIGNoZWNrcyBvbiBleGlzdGluZyB2YWxpZGF0ZWQgaW5wdXQgYXJndW1lbnRzIGFuZCByZXR1cm5zIHN0YW5kYXJkIGVycm9yIGNvZGVzIHdpdGggc3RhdGljIG5ldGxpbmsgZXJyb3IgbWVzc2FnZXMuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIG9yIGRhdGEgdHJhbnNmZXJzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiBjaGVja3MgaW4gdnhsYW5fZmRiX2FkZCgpIGFuZCB2eGxhbl9mZGJfdXBkYXRlX2V4aXN0aW5nKCkgdG8gcHJldmVudCBjb25maWd1cmluZyBvciB1cGRhdGluZyBuZXh0aG9wLWJhc2VkIFZYTEFOIEZEQiBlbnRyaWVzIHdpdGggZHluYW1pYyAoYWdpbmcpIHN0YXRlcy4gSXQgb25seSBpbnRyb2R1Y2VzIGNvbmRpdGlvbmFsIGNoZWNrcyBvbiBleGlzdGluZyB2YWxpZGF0ZWQgaW5wdXQgYXJndW1lbnRzIGFuZCByZXR1cm5zIHN0YW5kYXJkIGVycm9yIGNvZGVzIHdpdGggc3RhdGljIG5ldGxpbmsgZXJyb3IgbWVzc2FnZXMuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbnMsIG9yIGRhdGEgdHJhbnNmZXJzIHRvIHVzZXIgc3BhY2UgYXJlIGludHJvZHVjZWQgb3IgYWx0ZXJlZCwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gZGV0ZWN0aW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow4fvhb[1] Phase: Succeeded StartedAt: 2026-09-03 12:32:35 +0000 UTC FinishedAt: 2026-09-03 12:32:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 12:32:35 +0000 UTC FinishedAt: 2026-09-03 12:32:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[2] Phase: Succeeded StartedAt: 2026-09-03 12:32:35 +0000 UTC FinishedAt: 2026-09-03 16:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 12:32:35 +0000 UTC FinishedAt: 2026-09-03 16:12:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 12:32:35 +0000 UTC FinishedAt: 2026-09-03 12:32:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 12:32:35 +0000 UTC FinishedAt: 2026-09-03 12:32:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4fvhb/series-workflow4fvhb-convert-artifact-3801447407/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 12:32:45 +0000 UTC FinishedAt: 2026-09-03 12:48:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 12:32:45 +0000 UTC FinishedAt: 2026-09-03 12:48:56 +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:*7cf1e63d-4902-4313-8864-2abc18af2b90,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-workflow4fvhb/series-workflow4fvhb-convert-artifact-3801447407/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": "10a0015d-9a50-4225-bde1-0244615ebf02", "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-workflow4fvhb/series-workflow4fvhb-build-action-1519663285/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 12:32:45 +0000 UTC FinishedAt: 2026-09-03 12:48:46 +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:*7cf1e63d-4902-4313-8864-2abc18af2b90,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-workflow4fvhb/series-workflow4fvhb-convert-artifact-3801447407/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": "10a0015d-9a50-4225-bde1-0244615ebf02", "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-workflow4fvhb/series-workflow4fvhb-build-action-1519663285/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 12:48:56 +0000 UTC FinishedAt: 2026-09-03 12:48:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 12:48:56 +0000 UTC FinishedAt: 2026-09-03 12:48:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 12:48:56 +0000 UTC FinishedAt: 2026-09-03 12:49:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 12:48:56 +0000 UTC FinishedAt: 2026-09-03 12:49:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow4fvhb/series-workflow4fvhb-convert-artifact-3597901118/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 12:49:06 +0000 UTC FinishedAt: 2026-09-03 12:51:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 12:49:06 +0000 UTC FinishedAt: 2026-09-03 12:50:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*10a0015d-9a50-4225-bde1-0244615ebf02,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-workflow4fvhb/series-workflow4fvhb-build-action-1519663285/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-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 12:51:03 +0000 UTC FinishedAt: 2026-09-03 12:51:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 12:51:03 +0000 UTC FinishedAt: 2026-09-03 12:51:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 12:51:03 +0000 UTC FinishedAt: 2026-09-03 13:07:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 12:51:03 +0000 UTC FinishedAt: 2026-09-03 13:07:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7cf1e63d-4902-4313-8864-2abc18af2b90,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-workflow4fvhb/series-workflow4fvhb-convert-artifact-3597901118/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": "620e2125-70e8-416b-a422-baeaedcff66a", "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-workflow4fvhb/series-workflow4fvhb-build-action-1355699858/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 12:51:03 +0000 UTC FinishedAt: 2026-09-03 13:06:50 +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:*7cf1e63d-4902-4313-8864-2abc18af2b90,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-workflow4fvhb/series-workflow4fvhb-convert-artifact-3597901118/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": "620e2125-70e8-416b-a422-baeaedcff66a", "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-workflow4fvhb/series-workflow4fvhb-build-action-1355699858/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 13:07:00 +0000 UTC FinishedAt: 2026-09-03 13:07:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 13:07:00 +0000 UTC FinishedAt: 2026-09-03 13:07:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 13:07:00 +0000 UTC FinishedAt: 2026-09-03 13:08:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 13:07:00 +0000 UTC FinishedAt: 2026-09-03 13:08:44 +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:*620e2125-70e8-416b-a422-baeaedcff66a,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-workflow4fvhb/series-workflow4fvhb-build-action-1355699858/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-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 13:08:54 +0000 UTC FinishedAt: 2026-09-03 16:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 13:08:54 +0000 UTC FinishedAt: 2026-09-03 16:12:03 +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":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"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:*10a0015d-9a50-4225-bde1-0244615ebf02,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*620e2125-70e8-416b-a422-baeaedcff66a,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-workflow4fvhb/series-workflow4fvhb-build-action-1519663285/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-workflow4fvhb/series-workflow4fvhb-build-action-1355699858/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 13:08:54 +0000 UTC FinishedAt: 2026-09-03 13:09:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 13:08:54 +0000 UTC FinishedAt: 2026-09-03 13:08:59 +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":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"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-workflow4fvhb/series-workflow4fvhb-convert-artifact-3686035011/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 13:08:54 +0000 UTC FinishedAt: 2026-09-03 13:08:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 13:08:54 +0000 UTC FinishedAt: 2026-09-03 13:08:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 13:08:54 +0000 UTC FinishedAt: 2026-09-03 13:08:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 13:09:04 +0000 UTC FinishedAt: 2026-09-03 16:12:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow4fvhb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["vxlan_fdb_add","vxlan_fdb_update_existing","vxlan_fdb_update"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3ba13f5e7180c034b0a1ef7e052fb780856b134e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VXLAN","INET"],"series_id":"e376c573-d1e8-4314-a062-e24befa19fdc","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 13:09:04 +0000 UTC FinishedAt: 2026-09-03 16:11:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*10a0015d-9a50-4225-bde1-0244615ebf02,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*620e2125-70e8-416b-a422-baeaedcff66a,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-workflow4fvhb/series-workflow4fvhb-build-action-1519663285/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-workflow4fvhb/series-workflow4fvhb-build-action-1355699858/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-workflow4fvhb/series-workflow4fvhb-convert-artifact-3686035011/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,}