Name: series-workflowx5m5v Phase: Succeeded StartedAt: 2026-08-21 09:21:26 +0000 UTC FinishedAt: 2026-08-21 13:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[0] Phase: Succeeded StartedAt: 2026-08-21 09:21:26 +0000 UTC FinishedAt: 2026-08-21 10:07:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 09:21:26 +0000 UTC FinishedAt: 2026-08-21 10:07:21 +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": "746fc0787f616da418ffc04a110296fe95d53491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "746fc0787f616da418ffc04a110296fe95d53491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "c12b4e49-f7b3-44e2-9807-538b74cd0986" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sctp_send_reset_streams", "sctp_send_reset_assoc", "sctp_send_add_streams", "sctp_process_strreset_outreq", "sctp_process_strreset_inreq", "sctp_process_strreset_addstrm_out", "sctp_process_strreset_addstrm_in", "sctp_process_strreset_resp" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX3NlbmRfcmVzZXRfc3RyZWFtcyYjMzQ7LAogICAgJiMzNDtzY3RwX3NlbmRfcmVzZXRfYXNzb2MmIzM0OywKICAgICYjMzQ7c2N0cF9zZW5kX2FkZF9zdHJlYW1zJiMzNDssCiAgICAmIzM0O3NjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXEmIzM0OywKICAgICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X2lucmVxJiMzNDssCiAgICAmIzM0O3NjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX291dCYjMzQ7LAogICAgJiMzNDtzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9pbiYjMzQ7LAogICAgJiMzNDtzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBzdGF0ZSB0cmFja2luZyBvZiBTQ1RQIHN0cmVhbSByZXNldCByZXF1ZXN0cyBieSByZXBsYWNpbmcgYSBjb3VudGVyIChgc3RycmVzZXRfb3V0c3RhbmRpbmdgKSB3aXRoIGEgYml0bWFzay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgbWVtb3J5IGFsbG9jYXRpb25zLCBpbml0aWFsaXphdGlvbnMsIG9yIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlKSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIGBzdHJyZXNldF9vdXRzdGFuZGluZ2AgZmllbGQgaW4gYHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uYCBmcm9tIGEgY291bnRlciB0byBhIGJpdG1hc2ssIGFsbG93aW5nIG11bHRpcGxlIHR5cGVzIG9mIHN0cmVhbSByZXNldCByZXF1ZXN0cyB0byBiZSB0cmFja2VkIHNpbXVsdGFuZW91c2x5LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIGhvdyBTQ1RQIGhhbmRsZXMgc3RyZWFtIHJlc2V0IHJlcXVlc3RzIChib3RoIHNlbmRpbmcgYW5kIHByb2Nlc3NpbmcgaW5jb21pbmcgcmVxdWVzdHMpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgU0NUUCBzb2NrZXQgb3B0aW9ucyBhbmQgaW5jb21pbmcgU0NUUCBwYWNrZXRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGEzY2M0MWZmM2U1NzZlZDY4YWYyZDIzYWNiOWIyOTlkODczNmFhMzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMDowNjowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oXG5pbmRleCBjY2NjNjYyNTYxYWFjLi5iMjFmMjNiNzM2ZmQyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oXG5AQCAtMjA1Nyw3ICYjNDM7MjA1Nyw3IEBAIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uIHtcbiBcdCAgICAgZm9yY2VfZGVsYXk6MTtcbiBcbiBcdF9fdTggc3RycmVzZXRfZW5hYmxlO1xuLVx0X191OCBzdHJyZXNldF9vdXRzdGFuZGluZzsgLyogcmVxdWVzdCBwYXJhbSBjb3VudCBvbiB0aGUgZmx5ICovXG4mIzQzO1x0X191OCBzdHJyZXNldF9vdXRzdGFuZGluZzsgLyogcmVxdWVzdCBwYXJhbSBiaXRtYXNrIG9uIHRoZSBmbHkgKi9cbiBcbiBcdF9fdTMyIHN0cnJlc2V0X291dHNlcTsgLyogVXBkYXRlIGFmdGVyIHJlY2VpdmluZyByZXNwb25zZSAqL1xuIFx0X191MzIgc3RycmVzZXRfaW5zZXE7IC8qIFVwZGF0ZSBhZnRlciByZWNlaXZpbmcgcmVxdWVzdCAqL1xuZGlmZiAtLWdpdCBhL25ldC9zY3RwL3N0cmVhbS5jIGIvbmV0L3NjdHAvc3RyZWFtLmNcbmluZGV4IDM0ZmZlNmM5NDVhNGIuLmUxYTIxNWRiNjFlMWMgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9zdHJlYW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvc3RyZWFtLmNcbkBAIC0yMiw2ICYjNDM7MjIsOSBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9zY3RwL3NtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc2N0cC9zdHJlYW1fc2NoZWQuaFx1MDAzZVxuIFxuJiM0MzsjZGVmaW5lIFNDVFBfU1RSUkVTRVRfQklUKHR5cGUpIFxcXG4mIzQzO1x0QklUKG50b2hzKHR5cGUpIC0gbnRvaHMoU0NUUF9QQVJBTV9SRVNFVF9PVVRfUkVRVUVTVCkpXG4mIzQzO1xuIHN0YXRpYyB2b2lkIHNjdHBfc3RyZWFtX3Nocmlua19vdXQoc3RydWN0IHNjdHBfc3RyZWFtICpzdHJlYW0sIF9fdTE2IG91dGNudClcbiB7XG4gXHRzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYztcbkBAIC0zNzIsNyAmIzQzOzM3NSw5IEBAIGludCBzY3RwX3NlbmRfcmVzZXRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID0gb3V0ICYjNDM7IGluO1xuJiM0MztcdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgPVxuJiM0MztcdFx0KG91dCA/IFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfT1VUX1JFUVVFU1QpIDogMCkgfFxuJiM0MztcdFx0KGluID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSA6IDApO1xuIFxuIG91dDpcbiBcdHJldHVybiByZXR2YWw7XG5AQCAtNDE3LDcgJiM0Mzs0MjIsOCBAQCBpbnQgc2N0cF9zZW5kX3Jlc2V0X2Fzc29jKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxuIFx0XHRyZXR1cm4gcmV0dmFsO1xuIFx0fVxuIFxuLVx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9IDE7XG4mIzQzO1x0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9XG4mIzQzO1x0XHRTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX1RTTl9SRVFVRVNUKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC00NzQsNyAmIzQzOzQ4MCw5IEBAIGludCBzY3RwX3NlbmRfYWRkX3N0cmVhbXMoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9ICEhb3V0ICYjNDM7ICEhaW47XG4mIzQzO1x0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9XG4mIzQzO1x0XHQob3V0ID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfT1VUX1NUUkVBTVMpIDogMCkgfFxuJiM0MztcdFx0KGluID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUykgOiAwKTtcbiBcbiBvdXQ6XG4gXHRyZXR1cm4gcmV0dmFsO1xuQEAgLTQ4Miw3ICYjNDM7NDkwLDcgQEAgaW50IHNjdHBfc2VuZF9hZGRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiBcbiBzdGF0aWMgc3RydWN0IHNjdHBfcGFyYW1oZHIgKnNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxuIFx0XHRcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBfX2JlMzIgcmVzcF9zZXEsXG4tXHRcdFx0X19iZTE2IHR5cGUpXG4mIzQzO1x0XHRcdF9fYmUxNiB0eXBlLCBib29sIG1hdGNoX3NlcSlcbiB7XG4gXHRzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmsgPSBhc29jLVx1MDAzZXN0cnJlc2V0X2NodW5rO1xuIFx0c3RydWN0IHNjdHBfcmVjb25mX2NodW5rICpoZHI7XG5AQCAtNDk5LDcgJiM0Mzs1MDcsNyBAQCBzdGF0aWMgc3RydWN0IHNjdHBfcGFyYW1oZHIgKnNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxuIFx0XHQgKi9cbiBcdFx0c3RydWN0IHNjdHBfc3RycmVzZXRfdHNucmVxICpyZXEgPSBwYXJhbS52O1xuIFxuLVx0XHRpZiAoKCFyZXNwX3NlcSB8fCByZXEtXHUwMDNlcmVxdWVzdF9zZXEgPT0gcmVzcF9zZXEpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0aWYgKCghbWF0Y2hfc2VxIHx8IHJlcS1cdTAwM2VyZXF1ZXN0X3NlcSA9PSByZXNwX3NlcSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAoIXR5cGUgfHwgdHlwZSA9PSByZXEtXHUwMDNlcGFyYW1faGRyLnR5cGUpKVxuIFx0XHRcdHJldHVybiBwYXJhbS52O1xuIFx0fVxuQEAgLTU2NCwxMyAmIzQzOzU3MiwxNiBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X291dHJlcShcbiBcdGlmIChhc29jLVx1MDAzZXN0cnJlc2V0X2NodW5rKSB7XG4gXHRcdGlmICghc2N0cF9jaHVua19sb29rdXBfc3RycmVzZXRfcGFyYW0oXG4gXHRcdFx0XHRhc29jLCBvdXRyZXEtXHUwMDNlcmVzcG9uc2Vfc2VxLFxuLVx0XHRcdFx0U0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSkge1xuJiM0MztcdFx0XHRcdFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCwgdHJ1ZSkgfHxcbiYjNDM7XHRcdCAgICAhKGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgXHUwMDI2XG4mIzQzO1x0XHQgICAgICBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpKSkge1xuIFx0XHRcdC8qIHNhbWUgcHJvY2VzcyB3aXRoIG91dHN0YW5kaW5nIGlzbiYjMzk7dCAwICovXG4gXHRcdFx0cmVzdWx0ID0gU0NUUF9TVFJSRVNFVF9FUlJfSU5fUFJPR1JFU1M7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZy0tO1xuJiM0MztcdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyBcdTAwMjY9XG4mIzQzO1x0XHRcdH5TQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpO1xuIFx0XHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHNlcSYjNDM7JiM0Mzs7XG4gXG4gXHRcdGlmICghYXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZykge1xuQEAgLTY2OSw3ICYjNDM7NjgwLDggQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9pbnJlcShcbiBcdFx0XHRTQ1RQX1NPKHN0cmVhbSwgaSktXHUwMDNlc3RhdGUgPSBTQ1RQX1NUUkVBTV9DTE9TRUQ7XG4gXG4gXHRhc29jLVx1MDAzZXN0cnJlc2V0X2NodW5rID0gY2h1bms7XG4tXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID0gMTtcbiYjNDM7XHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cbiYjNDM7XHRcdFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfT1VUX1JFUVVFU1QpO1xuIFx0c2N0cF9jaHVua19ob2xkKGFzb2MtXHUwMDNlc3RycmVzZXRfY2h1bmspO1xuIFxuIFx0cmVzdWx0ID0gU0NUUF9TVFJSRVNFVF9QRVJGT1JNRUQ7XG5AQCAtODE2LDEzICYjNDM7ODI4LDE2IEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9vdXQoXG4gXG4gXHRpZiAoYXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuaykge1xuIFx0XHRpZiAoIXNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxuLVx0XHRcdGFzb2MsIDAsIFNDVFBfUEFSQU1fUkVTRVRfQUREX0lOX1NUUkVBTVMpKSB7XG4mIzQzO1x0XHRcdGFzb2MsIDAsIFNDVFBfUEFSQU1fUkVTRVRfQUREX0lOX1NUUkVBTVMsIGZhbHNlKSB8fFxuJiM0MztcdFx0ICAgICEoYXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyBcdTAwMjZcbiYjNDM7XHRcdCAgICAgIFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfQUREX0lOX1NUUkVBTVMpKSkge1xuIFx0XHRcdC8qIHNhbWUgcHJvY2VzcyB3aXRoIG91dHN0YW5kaW5nIGlzbiYjMzk7dCAwICovXG4gXHRcdFx0cmVzdWx0ID0gU0NUUF9TVFJSRVNFVF9FUlJfSU5fUFJPR1JFU1M7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZy0tO1xuJiM0MztcdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyBcdTAwMjY9XG4mIzQzO1x0XHRcdH5TQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKTtcbiBcdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzZXEmIzQzOyYjNDM7O1xuIFxuIFx0XHRpZiAoIWFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcpIHtcbkBAIC04OTksNyAmIzQzOzkxNCw4IEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9pbihcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRhc29jLVx1MDAzZXN0cnJlc2V0X2NodW5rID0gY2h1bms7XG4tXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID0gMTtcbiYjNDM7XHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cbiYjNDM7XHRcdFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfQUREX09VVF9TVFJFQU1TKTtcbiBcdHNjdHBfY2h1bmtfaG9sZChhc29jLVx1MDAzZXN0cnJlc2V0X2NodW5rKTtcbiBcbiBcdHN0cmVhbS1cdTAwM2VvdXRjbnQgPSBvdXRjbnQ7XG5AQCAtOTI3LDggJiM0Mzs5NDMsMTAgQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwKFxuIFx0c3RydWN0IHNjdHBfcGFyYW1oZHIgKnJlcTtcbiBcdF9fdTMyIHJlc3VsdDtcbiBcbi1cdHJlcSA9IHNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKGFzb2MsIHJlc3AtXHUwMDNlcmVzcG9uc2Vfc2VxLCAwKTtcbi1cdGlmICghcmVxKVxuJiM0MztcdHJlcSA9IHNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKGFzb2MsIHJlc3AtXHUwMDNlcmVzcG9uc2Vfc2VxLCAwLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHRydWUpO1xuJiM0MztcdGlmICghcmVxIHx8ICEoYXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyBcdTAwMjZcbiYjNDM7XHRcdCAgICAgIFNDVFBfU1RSUkVTRVRfQklUKHJlcS1cdTAwM2V0eXBlKSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0cmVzdWx0ID0gbnRvaGwocmVzcC1cdTAwM2VyZXN1bHQpO1xuQEAgLTEwNzgsNyAmIzQzOzEwOTYsNyBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X3Jlc3AoXG4gXHRcdFx0bnVtcywgMCwgR0ZQX0FUT01JQyk7XG4gXHR9XG4gXG4tXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nLS07XG4mIzQzO1x0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyBcdTAwMjY9IH5TQ1RQX1NUUlJFU0VUX0JJVChyZXEtXHUwMDNldHlwZSk7XG4gXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHNlcSYjNDM7JiM0Mzs7XG4gXG4gXHQvKiByZW1vdmUgZXZlcnl0aGluZyBmb3IgdGhpcyByZWNvbmYgcmVxdWVzdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N0cF9zZW5kX3Jlc2V0X3N0cmVhbXMmIzM0OywKICAgICYjMzQ7c2N0cF9zZW5kX3Jlc2V0X2Fzc29jJiMzNDssCiAgICAmIzM0O3NjdHBfc2VuZF9hZGRfc3RyZWFtcyYjMzQ7LAogICAgJiMzNDtzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfb3V0cmVxJiMzNDssCiAgICAmIzM0O3NjdHBfcHJvY2Vzc19zdHJyZXNldF9pbnJlcSYjMzQ7LAogICAgJiMzNDtzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9vdXQmIzM0OywKICAgICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW4mIzM0OywKICAgICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X3Jlc3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgYHN0cnJlc2V0X291dHN0YW5kaW5nYCBmaWVsZCBpbiBgc3RydWN0IHNjdHBfYXNzb2NpYXRpb25gIGZyb20gYSBjb3VudGVyIHRvIGEgYml0bWFzaywgYWxsb3dpbmcgbXVsdGlwbGUgdHlwZXMgb2Ygc3RyZWFtIHJlc2V0IHJlcXVlc3RzIHRvIGJlIHRyYWNrZWQgc2ltdWx0YW5lb3VzbHkuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgaG93IFNDVFAgaGFuZGxlcyBzdHJlYW0gcmVzZXQgcmVxdWVzdHMgKGJvdGggc2VuZGluZyBhbmQgcHJvY2Vzc2luZyBpbmNvbWluZyByZXF1ZXN0cykuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBTQ1RQIHNvY2tldCBvcHRpb25zIGFuZCBpbmNvbWluZyBTQ1RQIHBhY2tldHMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTNjYzQxZmYzZTU3NmVkNjhhZjJkMjNhY2I5YjI5OWQ4NzM2YWEzOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDEwOjA2OjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAppbmRleCBjY2NjNjYyNTYxYWFjLi5iMjFmMjNiNzM2ZmQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaApAQCAtMjA1Nyw3ICYjNDM7MjA1Nyw3IEBAIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uIHsKIAkgICAgIGZvcmNlX2RlbGF5OjE7CiAKIAlfX3U4IHN0cnJlc2V0X2VuYWJsZTsKLQlfX3U4IHN0cnJlc2V0X291dHN0YW5kaW5nOyAvKiByZXF1ZXN0IHBhcmFtIGNvdW50IG9uIHRoZSBmbHkgKi8KJiM0MzsJX191OCBzdHJyZXNldF9vdXRzdGFuZGluZzsgLyogcmVxdWVzdCBwYXJhbSBiaXRtYXNrIG9uIHRoZSBmbHkgKi8KIAogCV9fdTMyIHN0cnJlc2V0X291dHNlcTsgLyogVXBkYXRlIGFmdGVyIHJlY2VpdmluZyByZXNwb25zZSAqLwogCV9fdTMyIHN0cnJlc2V0X2luc2VxOyAvKiBVcGRhdGUgYWZ0ZXIgcmVjZWl2aW5nIHJlcXVlc3QgKi8KZGlmZiAtLWdpdCBhL25ldC9zY3RwL3N0cmVhbS5jIGIvbmV0L3NjdHAvc3RyZWFtLmMKaW5kZXggMzRmZmU2Yzk0NWE0Yi4uZTFhMjE1ZGI2MWUxYyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc3RyZWFtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvc3RyZWFtLmMKQEAgLTIyLDYgJiM0MzsyMiw5IEBACiAjaW5jbHVkZSAmbHQ7bmV0L3NjdHAvc20uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvc2N0cC9zdHJlYW1fc2NoZWQuaCZndDsKIAomIzQzOyNkZWZpbmUgU0NUUF9TVFJSRVNFVF9CSVQodHlwZSkgXAomIzQzOwlCSVQobnRvaHModHlwZSkgLSBudG9ocyhTQ1RQX1BBUkFNX1JFU0VUX09VVF9SRVFVRVNUKSkKJiM0MzsKIHN0YXRpYyB2b2lkIHNjdHBfc3RyZWFtX3Nocmlua19vdXQoc3RydWN0IHNjdHBfc3RyZWFtICpzdHJlYW0sIF9fdTE2IG91dGNudCkKIHsKIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKQEAgLTM3Miw3ICYjNDM7Mzc1LDkgQEAgaW50IHNjdHBfc2VuZF9yZXNldF9zdHJlYW1zKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQlnb3RvIG91dDsKIAl9CiAKLQlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyA9IG91dCAmIzQzOyBpbjsKJiM0MzsJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgPQomIzQzOwkJKG91dCA/IFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfT1VUX1JFUVVFU1QpIDogMCkgfAomIzQzOwkJKGluID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSA6IDApOwogCiBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKQEAgLTQxNyw3ICYjNDM7NDIyLDggQEAgaW50IHNjdHBfc2VuZF9yZXNldF9hc3NvYyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyA9IDE7CiYjNDM7CWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nID0KJiM0MzsJCVNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfVFNOX1JFUVVFU1QpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NzQsNyAmIzQzOzQ4MCw5IEBAIGludCBzY3RwX3NlbmRfYWRkX3N0cmVhbXMoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJCWdvdG8gb3V0OwogCX0KIAotCWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nID0gISFvdXQgJiM0MzsgISFpbjsKJiM0MzsJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgPQomIzQzOwkJKG91dCA/IFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfQUREX09VVF9TVFJFQU1TKSA6IDApIHwKJiM0MzsJCShpbiA/IFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfQUREX0lOX1NUUkVBTVMpIDogMCk7CiAKIG91dDoKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNDgyLDcgJiM0Mzs0OTAsNyBAQCBpbnQgc2N0cF9zZW5kX2FkZF9zdHJlYW1zKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCiBzdGF0aWMgc3RydWN0IHNjdHBfcGFyYW1oZHIgKnNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKAogCQkJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIF9fYmUzMiByZXNwX3NlcSwKLQkJCV9fYmUxNiB0eXBlKQomIzQzOwkJCV9fYmUxNiB0eXBlLCBib29sIG1hdGNoX3NlcSkKIHsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmsgPSBhc29jLSZndDtzdHJyZXNldF9jaHVuazsKIAlzdHJ1Y3Qgc2N0cF9yZWNvbmZfY2h1bmsgKmhkcjsKQEAgLTQ5OSw3ICYjNDM7NTA3LDcgQEAgc3RhdGljIHN0cnVjdCBzY3RwX3BhcmFtaGRyICpzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbSgKIAkJICovCiAJCXN0cnVjdCBzY3RwX3N0cnJlc2V0X3RzbnJlcSAqcmVxID0gcGFyYW0udjsKIAotCQlpZiAoKCFyZXNwX3NlcSB8fCByZXEtJmd0O3JlcXVlc3Rfc2VxID09IHJlc3Bfc2VxKSAmYW1wOyZhbXA7CiYjNDM7CQlpZiAoKCFtYXRjaF9zZXEgfHwgcmVxLSZndDtyZXF1ZXN0X3NlcSA9PSByZXNwX3NlcSkgJmFtcDsmYW1wOwogCQkgICAgKCF0eXBlIHx8IHR5cGUgPT0gcmVxLSZndDtwYXJhbV9oZHIudHlwZSkpCiAJCQlyZXR1cm4gcGFyYW0udjsKIAl9CkBAIC01NjQsMTMgJiM0Mzs1NzIsMTYgQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXEoCiAJaWYgKGFzb2MtJmd0O3N0cnJlc2V0X2NodW5rKSB7CiAJCWlmICghc2N0cF9jaHVua19sb29rdXBfc3RycmVzZXRfcGFyYW0oCiAJCQkJYXNvYywgb3V0cmVxLSZndDtyZXNwb25zZV9zZXEsCi0JCQkJU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSkgewomIzQzOwkJCQlTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QsIHRydWUpIHx8CiYjNDM7CQkgICAgIShhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyAmYW1wOwomIzQzOwkJICAgICAgU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSkpIHsKIAkJCS8qIHNhbWUgcHJvY2VzcyB3aXRoIG91dHN0YW5kaW5nIGlzbiYjMzk7dCAwICovCiAJCQlyZXN1bHQgPSBTQ1RQX1NUUlJFU0VUX0VSUl9JTl9QUk9HUkVTUzsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmctLTsKJiM0MzsJCWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nICZhbXA7PQomIzQzOwkJCX5TQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpOwogCQlhc29jLSZndDtzdHJyZXNldF9vdXRzZXEmIzQzOyYjNDM7OwogCiAJCWlmICghYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcpIHsKQEAgLTY2OSw3ICYjNDM7NjgwLDggQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9pbnJlcSgKIAkJCVNDVFBfU08oc3RyZWFtLCBpKS0mZ3Q7c3RhdGUgPSBTQ1RQX1NUUkVBTV9DTE9TRUQ7CiAKIAlhc29jLSZndDtzdHJyZXNldF9jaHVuayA9IGNodW5rOwotCWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nID0gMTsKJiM0MzsJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgPQomIzQzOwkJU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9PVVRfUkVRVUVTVCk7CiAJc2N0cF9jaHVua19ob2xkKGFzb2MtJmd0O3N0cnJlc2V0X2NodW5rKTsKIAogCXJlc3VsdCA9IFNDVFBfU1RSUkVTRVRfUEVSRk9STUVEOwpAQCAtODE2LDEzICYjNDM7ODI4LDE2IEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9vdXQoCiAKIAlpZiAoYXNvYy0mZ3Q7c3RycmVzZXRfY2h1bmspIHsKIAkJaWYgKCFzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbSgKLQkJCWFzb2MsIDAsIFNDVFBfUEFSQU1fUkVTRVRfQUREX0lOX1NUUkVBTVMpKSB7CiYjNDM7CQkJYXNvYywgMCwgU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUywgZmFsc2UpIHx8CiYjNDM7CQkgICAgIShhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyAmYW1wOwomIzQzOwkJICAgICAgU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUykpKSB7CiAJCQkvKiBzYW1lIHByb2Nlc3Mgd2l0aCBvdXRzdGFuZGluZyBpc24mIzM5O3QgMCAqLwogCQkJcmVzdWx0ID0gU0NUUF9TVFJSRVNFVF9FUlJfSU5fUFJPR1JFU1M7CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nLS07CiYjNDM7CQlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyAmYW1wOz0KJiM0MzsJCQl+U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUyk7CiAJCWFzb2MtJmd0O3N0cnJlc2V0X291dHNlcSYjNDM7JiM0Mzs7CiAKIAkJaWYgKCFhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZykgewpAQCAtODk5LDcgJiM0Mzs5MTQsOCBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW4oCiAJCWdvdG8gb3V0OwogCiAJYXNvYy0mZ3Q7c3RycmVzZXRfY2h1bmsgPSBjaHVuazsKLQlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyA9IDE7CiYjNDM7CWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nID0KJiM0MzsJCVNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfQUREX09VVF9TVFJFQU1TKTsKIAlzY3RwX2NodW5rX2hvbGQoYXNvYy0mZ3Q7c3RycmVzZXRfY2h1bmspOwogCiAJc3RyZWFtLSZndDtvdXRjbnQgPSBvdXRjbnQ7CkBAIC05MjcsOCAmIzQzOzk0MywxMCBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X3Jlc3AoCiAJc3RydWN0IHNjdHBfcGFyYW1oZHIgKnJlcTsKIAlfX3UzMiByZXN1bHQ7CiAKLQlyZXEgPSBzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbShhc29jLCByZXNwLSZndDtyZXNwb25zZV9zZXEsIDApOwotCWlmICghcmVxKQomIzQzOwlyZXEgPSBzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbShhc29jLCByZXNwLSZndDtyZXNwb25zZV9zZXEsIDAsCiYjNDM7CQkJCQkgICAgICAgdHJ1ZSk7CiYjNDM7CWlmICghcmVxIHx8ICEoYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgJmFtcDsKJiM0MzsJCSAgICAgIFNDVFBfU1RSUkVTRVRfQklUKHJlcS0mZ3Q7dHlwZSkpKQogCQlyZXR1cm4gTlVMTDsKIAogCXJlc3VsdCA9IG50b2hsKHJlc3AtJmd0O3Jlc3VsdCk7CkBAIC0xMDc4LDcgJiM0MzsxMDk2LDcgQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwKAogCQkJbnVtcywgMCwgR0ZQX0FUT01JQyk7CiAJfQogCi0JYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmctLTsKJiM0MzsJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgJmFtcDs9IH5TQ1RQX1NUUlJFU0VUX0JJVChyZXEtJmd0O3R5cGUpOwogCWFzb2MtJmd0O3N0cnJlc2V0X291dHNlcSYjNDM7JiM0Mzs7CiAKIAkvKiByZW1vdmUgZXZlcnl0aGluZyBmb3IgdGhpcyByZWNvbmYgcmVxdWVzdCAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDY1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBTQ1RQIFN0cmVhbSBSZXNldCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcsIGFuZCBpdCBsb29rcyBsaWtlIGl0IGFic29sdXRlbHkgZG9lcy4gSXQmIzM5O3MgbW9kaWZ5aW5nIGNvcmUgU0NUUCBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgYG5ldC9zY3RwL3N0cmVhbS5jYCBhbmQgYGluY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oYC4gVGhpcyBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2ssIGFuZCB0aGUgY2hhbmdlIGZyb20gYSBjb3VudGVyIChgc3RycmVzZXRfb3V0c3RhbmRpbmdgKSB0byBhIGJpdG1hc2sgaW4gYHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uYCBmb3IgdHJhY2tpbmcgU0NUUCBzdHJlYW0gcmVzZXQgcmVxdWVzdHMgaXMgc2lnbmlmaWNhbnQuIFRoYXQgc2NyZWFtcyBmdW5jdGlvbmFsIGNoYW5nZSBhbmQsIHRoZXJlZm9yZSwgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHRoYXQgYSBmdXp6ZXIgKnNob3VsZCogdW5jb3Zlci4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgYWZmZWN0ZWQsIGFuZCBmaWd1cmUgb3V0IGhvdyB0aGV5IGFyZSByZWFjaGVkLiAgVGhlIHByaW1hcnkgZnVuY3Rpb25zIGFsdGVyZWQgYXJlOiBgc2N0cF9zZW5kX3Jlc2V0X3N0cmVhbXNgLCBgc2N0cF9zZW5kX3Jlc2V0X2Fzc29jYCwgYHNjdHBfc2VuZF9hZGRfc3RyZWFtc2AsIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfb3V0cmVxYCwgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9pbnJlcWAsIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9vdXRgLCBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW5gLCBhbmQgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwYC4KCk5vdywgaG93IGFyZSB0aGVzZSBmdW5jdGlvbnMgcmVhY2hhYmxlPyBMb29raW5nIGF0IGhvdyBpdCYjMzk7cyB1c2VkLCBJIGNhbiBzZWUgdGhhdCBgc2N0cF9zZW5kX3Jlc2V0X3N0cmVhbXNgLCBgc2N0cF9zZW5kX3Jlc2V0X2Fzc29jYCwgYW5kIGBzY3RwX3NlbmRfYWRkX3N0cmVhbXNgIGFyZSBhbGwgaW52b2tlZCB2aWEgYHNldHNvY2tvcHRgIGNhbGxzOiBgc2N0cF9zZXRzb2Nrb3B0X3Jlc2V0X3N0cmVhbXNgLCBgc2N0cF9zZXRzb2Nrb3B0X3Jlc2V0X2Fzc29jYCwgYW5kIGBzY3RwX3NldHNvY2tvcHRfYWRkX3N0cmVhbXNgLCByZXNwZWN0aXZlbHkuIEV4Y2VsbGVudC4gVGhlc2UgYXJlIGVhc2lseSBhY2Nlc3NpYmxlIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gVGhlbiB0aGUgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF8qYCBmdW5jdGlvbnMgYXJlIGludm9rZWQgd2hlbiBwcm9jZXNzaW5nIGluY29taW5nIFNDVFAgY2h1bmtzLCBzcGVjaWZpY2FsbHkgUkVDT05GIGNodW5rcy4gU28sIHdlJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHRyaWdnZXIgdGhvc2UgY2h1bmtzLgoKVG8gZW5zdXJlIHRoZSBTQ1RQIHN0YWNrIGlzIGVuYWJsZWQsIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfSVBfU0NUUGAgaXMgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4KCk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgYWxsIHRoZSBsaXN0ZWQgZnVuY3Rpb25zIGFnYWluIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZnVuY3Rpb25zIGFmZmVjdGVkLgoKQWxyaWdodCwgc2VlbXMgbGlrZSBhIGdvb2QgcGxhbi4gVGhpcyBpcyBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX3NlbmRfcmVzZXRfc3RyZWFtcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9zb2NrZXQuYz00MTA1PXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3Jlc2V0X3N0cmVhbXMoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9zY3RwL3NvY2tldC5jLTQxMjUtXG5uZXQvc2N0cC9zb2NrZXQuYzo0MTI2Olx0cmV0dXJuIHNjdHBfc2VuZF9yZXNldF9zdHJlYW1zKGFzb2MsIHBhcmFtcyk7XG5uZXQvc2N0cC9zb2NrZXQuYy00MTI3LX1cbi0tXG5uZXQvc2N0cC9zdHJlYW0uYz0yNDQ9c3RhdGljIGJvb2wgc2N0cF9zdHJlYW1fb3V0cV9pc19lbXB0eShzdHJ1Y3Qgc2N0cF9zdHJlYW0gKnN0cmVhbSxcbi0tXG5uZXQvc2N0cC9zdHJlYW0uYy0yNjctXG5uZXQvc2N0cC9zdHJlYW0uYzoyNjg6aW50IHNjdHBfc2VuZF9yZXNldF9zdHJlYW1zKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxubmV0L3NjdHAvc3RyZWFtLmMtMjY5LVx0XHRcdCAgICBzdHJ1Y3Qgc2N0cF9yZXNldF9zdHJlYW1zICpwYXJhbXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQwMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0NUUCBTdHJlYW0gUmVzZXQgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGVzZSBTQ1RQIHN0cmVhbSByZXNldCBmdW5jdGlvbnMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIHNjb3BlIGFuZCBob3cgdGhleSYjMzk7cmUgaW1wbGVtZW50ZWQuIFRoZSBsaXN0IGlzOiBgc2N0cF9zZW5kX3Jlc2V0X3N0cmVhbXNgLCBgc2N0cF9zZW5kX3Jlc2V0X2Fzc29jYCwgYHNjdHBfc2VuZF9hZGRfc3RyZWFtc2AsIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfb3V0cmVxYCwgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9pbnJlcWAsIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9vdXRgLCBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW5gLCBhbmQgZmluYWxseSBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X3Jlc3BgLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIHN0YXRpYyBsaW5rYWdlLCBvciBpZiB0aGV5IGFyZSBjYWxsYWJsZSBieSB0aGUgd2lkZXIgc3lzdGVtLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyB0aGV5IGFyZSBvcmdhbml6ZWQsIGFuZCBob3cgSSBzaG91bGQgYXBwcm9hY2ggYW55IGZ1cnRoZXIgYW5hbHlzaXMuIFRoZSBzdGF0aWMvbm9uLXN0YXRpYyBkaXN0aW5jdGlvbiBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDE3MD1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19yZWNvbmYoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQyMDItXHRcdGlmIChwYXJhbS5wLVx1MDAzZXR5cGUgPT0gU0NUUF9QQVJBTV9SRVNFVF9PVVRfUkVRVUVTVClcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjQyMDM6XHRcdFx0cmVwbHkgPSBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfb3V0cmVxKFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDIwNC1cdFx0XHRcdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKWFzb2MsIHBhcmFtLCBcdTAwMjZldik7XG4tLVxubmV0L3NjdHAvc3RyZWFtLmM9NTE4PXN0YXRpYyB2b2lkIHNjdHBfdXBkYXRlX3N0cnJlc2V0X3Jlc3VsdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi0tXG5uZXQvc2N0cC9zdHJlYW0uYy01MjQtXG5uZXQvc2N0cC9zdHJlYW0uYzo1MjU6c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXEoXG5uZXQvc2N0cC9zdHJlYW0uYy01MjYtXHRcdFx0XHRzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDczCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipOYXZpZ2F0aW5nIHRoZSBEeW5hbWljIExhbmRzY2FwZSoqCgpUaGVzZSBzeXN0ZW1z4oCmIHRoZXnigJlyZSBuZXZlciBzdGF0aWMuIE5ldmVyLiBUaGUgc2l0dWF0aW9uIGlzIGFsd2F5cyBpbiBmbHV4LCBhbmQgYXNzdW1wdGlvbnMgbmVlZCBjb25zdGFudCByZWV2YWx1YXRpb24uIEkgY2FuJiMzOTt0IGp1c3Qgb3BlcmF0ZSBiYXNlZCBvbiBhIHNuYXBzaG90OyBJIGhhdmUgdG8gdW5kZXJzdGFuZCB0aGUgZXZvbHV0aW9uIG9mIHRoZSBzeXN0ZW0uCgpPa2F5LCB0aW1lIHRvIGdldCB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2lucmVxYC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB0aGUgYXNzdW1wdGlvbnMgYWJvdXQgc3lzdGVtIHN0YXRlIGFyZSB2YWxpZGF0ZWQsIG9yIHBvdGVudGlhbGx5IHNoYXR0ZXJlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X2lucmVxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTQxNzA9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcmVjb25mKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00MjA1LVx0XHRlbHNlIGlmIChwYXJhbS5wLVx1MDAzZXR5cGUgPT0gU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NDIwNjpcdFx0XHRyZXBseSA9IHNjdHBfcHJvY2Vzc19zdHJyZXNldF9pbnJlcShcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQyMDctXHRcdFx0XHQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKilhc29jLCBwYXJhbSwgXHUwMDI2ZXYpO1xuLS1cbm5ldC9zY3RwL3N0cmVhbS5jPTUyNT1zdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X291dHJlcShcbi0tXG5uZXQvc2N0cC9zdHJlYW0uYy02MTYtXG5uZXQvc2N0cC9zdHJlYW0uYzo2MTc6c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9pbnJlcShcbm5ldC9zY3RwL3N0cmVhbS5jLTYxOC1cdFx0XHRcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipGb2N1cyBTeW1ib2wgQ2FuZGlkYXRlcyBhbmQgU0NUUCBLY29uZmlnKioKClJpZ2h0LCB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkganVtcGluZyBvdXQgYXQgbWUgYXMgcG90ZW50aWFsIGNhbmRpZGF0ZXMgZm9yIEZvY3VzU3ltYm9scy4gSSYjMzk7bSBzZWVpbmcgYSBjbGVhciBwYXR0ZXJuIGhlcmUsIGFuZCBteSBpbml0aWFsIGludHVpdGlvbiBzYXlzIHdlIGNvdWxkIGxldmVyYWdlIHRob3NlIHN5bWJvbHMgdG8gc2lnbmlmaWNhbnRseSBpbXByb3ZlIGFuYWx5c2lzLiBUaW1lIHRvIGRpZyBpbiBhIGJpdCBmdXJ0aGVyLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGhlYWQgb3ZlciB0byBLY29uZmlnIGFuZCBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBTQ1RQLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHJlbGV2YW50IGZsYWdzIGFuZCBkZXBlbmRlbmNpZXMuIFdoYXQgYXJlIHRoZSBidWlsZCBvcHRpb25zPyBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGltcGFjdCBvdXIgYWJpbGl0eSB0byBwcm9wZXJseSBkZWZpbmUgdGhlIEZvY3VzU3ltYm9scyBmb3IgdGhpcyBhcmVhPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBmdWxseSBiZWZvcmUgY29tbWl0dGluZyB0byBhbnl0aGluZy4gVGhpcyBLY29uZmlnIGNoZWNrIGlzIGNydWNpYWw7IEkgZG9uJiMzOTt0IHdhbnQgdG8gbWFrZSBhc3N1bXB0aW9ucyB0aGF0IGFyZSBwcm92ZW4gd3JvbmcgYnkgdGhlIGFjdHVhbCBidWlsZCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfU0NUUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnLTUtXG5uZXQvc2N0cC9LY29uZmlnOjY6bWVudWNvbmZpZyBJUF9TQ1RQXG5uZXQvc2N0cC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtUaGUgU0NUUCBQcm90b2NvbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODU0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFNDVFAgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYElQX1NDVFBgIGNvbmZpZ3VyYXRpb24gaGVyZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGEgZ3JvdXAgb2YgU0NUUCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzdHJlYW0gcmVzZXRzLCBhZGRpdGlvbnMsIGFuZCB0aGVpciBhc3NvY2lhdGVkIHByb2Nlc3NpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQ6CgoqICAgYHNjdHBfc2VuZF9yZXNldF9zdHJlYW1zYAoqICAgYHNjdHBfc2VuZF9yZXNldF9hc3NvY2AKKiAgIGBzY3RwX3NlbmRfYWRkX3N0cmVhbXNgCiogICBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X291dHJlcWAKKiAgIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXFgCiogICBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0YAoqICAgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX2luYAoqICAgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwYAoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZC4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgdGhleSBhcmUgbm90IHN0YXRpYywgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBhcmUgY2FsbGVkIGZyb20gb3RoZXIgZmlsZXMgd2l0aGluIHRoZSBgbmV0L3NjdHAvYCBkaXJlY3RvcnksIHdoaWNoIGNvbmZpcm1zIHRoZWlyIGV4dGVybmFsIGFjY2Vzc2liaWxpdHkuCgpMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBzY3RwX3NlbmRfcmVzZXRfYXNzb2NgIGFuZCBzZWUgd2hhdCBpdCB0ZWxscyB1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9zZW5kX3Jlc2V0X2Fzc29jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL3NvY2tldC5jPTQxMjk9c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfcmVzZXRfYXNzb2Moc3RydWN0IHNvY2sgKnNrLCBzY3RwX2Fzc29jX3QgKmFzc29jaWQsXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtNDE0MC1cbm5ldC9zY3RwL3NvY2tldC5jOjQxNDE6XHRyZXR1cm4gc2N0cF9zZW5kX3Jlc2V0X2Fzc29jKGFzb2MpO1xubmV0L3NjdHAvc29ja2V0LmMtNDE0Mi19XG4tLVxubmV0L3NjdHAvc3RyZWFtLmM9MjY4PWludCBzY3RwX3NlbmRfcmVzZXRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi0tXG5uZXQvc2N0cC9zdHJlYW0uYy0zODUtXG5uZXQvc2N0cC9zdHJlYW0uYzozODY6aW50IHNjdHBfc2VuZF9yZXNldF9hc3NvYyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbm5ldC9zY3RwL3N0cmVhbS5jLTM4Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgRHluYW1pYyBTdHJlYW0gQmVoYXZpb3IgaW4gU0NUUCoqCgpBbHJpZ2h0LCBzbyB0aGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgdGhlc2Ugc3RyZWFtcyBhcmUgKmRlZmluaXRlbHkqIG5vbi1zdGF0aWMuIFRoaXMgaXNuJiMzOTt0IGEgZml4ZWQgY29uZmlndXJhdGlvbiwgYW5kIHRoYXQgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSB0aGF0IGNhbiBjaGFuZ2UgZHluYW1pY2FsbHksIGFuZCB0aGF0IHJlcXVpcmVzIGEgZGlmZmVyZW50IGFwcHJvYWNoIHRvIGl0cyB1c2UuIFRoaXMgdW5kZXJzdGFuZGluZyBhZmZlY3RzIGhvdyBJIG5lZWQgdG8gaGFuZGxlLCBvYnNlcnZlLCBhbmQgbWFuaXB1bGF0ZSB0aGVzZSB0aGluZ3MuCgpOb3csIHdpdGggdGhpcyBpbiBtaW5kLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHNjdHBfc2VuZF9hZGRfc3RyZWFtc2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBpbnZvbHZlZCB0aGVyZSwgYmVjYXVzZSAqdGhhdCogaXMgd2hlcmUgdGhlIGR5bmFtaXNtIGlzIGxpa2VseSBjb250cm9sbGVkLiBJIG5lZWQgdG8gZGlzc2VjdCB0aGlzIGZ1bmN0aW9uIHRvIGZpbmQgb3V0IGhvdyB0aGVzZSBzdHJlYW0gYWRkaXRpb25zIGFyZSBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX3NlbmRfYWRkX3N0cmVhbXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc29ja2V0LmM9NDE0ND1zdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9hZGRfc3RyZWFtcyhzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtNDE1Ni1cbm5ldC9zY3RwL3NvY2tldC5jOjQxNTc6XHRyZXR1cm4gc2N0cF9zZW5kX2FkZF9zdHJlYW1zKGFzb2MsIHBhcmFtcyk7XG5uZXQvc2N0cC9zb2NrZXQuYy00MTU4LX1cbi0tXG5uZXQvc2N0cC9zdHJlYW0uYz0zODY9aW50IHNjdHBfc2VuZF9yZXNldF9hc3NvYyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbi0tXG5uZXQvc2N0cC9zdHJlYW0uYy00MzAtXG5uZXQvc2N0cC9zdHJlYW0uYzo0MzE6aW50IHNjdHBfc2VuZF9hZGRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbm5ldC9zY3RwL3N0cmVhbS5jLTQzMi1cdFx0XHQgIHN0cnVjdCBzY3RwX2FkZF9zdHJlYW1zICpwYXJhbXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMjQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBTdHJlYW0gUmVzZXQgYW5kIEFkZGl0aW9uKioKCk9rYXksIEkmIzM5O20gY29uZmlybWluZyBpdCwgdGhlc2UgZWxlbWVudHMgKmFyZSogZHluYW1pYy4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byB0aGUgc3RyZWFtIHJlc2V0IGFuZCBhZGRpdGlvbiBwcm9jZXNzLiBNeSBuZXh0IG1vdmUgaXMgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9vdXRgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBoYW5kbGluZyB0aGUgb3V0Ym91bmQgc3RyZWFtIHJlc2V0cyBhbmQgYWRkaXRpb25zIGxpa2VseSByZXNpZGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN0YXRlIHRyYW5zaXRpb25zIHdvcmsgaGVyZSBhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgU0NUUCBzdGF0ZS4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgbnVhbmNlcyBvZiB0aGlzIGZ1bmN0aW9uJiMzOTtzIGxvZ2ljIGFuZCBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzdGFjayB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTQxNzA9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcmVjb25mKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00MjExLVx0XHRlbHNlIGlmIChwYXJhbS5wLVx1MDAzZXR5cGUgPT0gU0NUUF9QQVJBTV9SRVNFVF9BRERfT1VUX1NUUkVBTVMpXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo0MjEyOlx0XHRcdHJlcGx5ID0gc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0KFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDIxMy1cdFx0XHRcdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKWFzb2MsIHBhcmFtLCBcdTAwMjZldik7XG4tLVxubmV0L3NjdHAvc3RyZWFtLmM9Njk4PXN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfdHNucmVxKFxuLS1cbm5ldC9zY3RwL3N0cmVhbS5jLTc5NC1cbm5ldC9zY3RwL3N0cmVhbS5jOjc5NTpzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0KFxubmV0L3NjdHAvc3RyZWFtLmMtNzk2LVx0XHRcdFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MzMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQXNzZXNzaW5nIHRoZSBEeW5hbWljIE5hdHVyZSoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gVGhpcyBpbXBsaWVzIHBvdGVudGlhbCB2YXJpYWJpbGl0eSBvciBzdGF0ZSBjaGFuZ2VzIHRoYXQgbmVlZCBjYXJlZnVsIGhhbmRsaW5nLiBUaGUgbmF0dXJlIG9mIG5vbi1zdGF0aWMgaW5mb3JtYXRpb24gbWVhbnMgaXQgcmVxdWlyZXMgc3BlY2lmaWMgYW5hbHlzaXMuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhlIGZ1bmN0aW9uLCB0aGUgbGluY2hwaW4sIGFuZCBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9pbmAuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhlIHNpdHVhdGlvbiBleGlzdHMuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNpdHVhdGlvbiwgYW5kIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBlZGdlLWNhc2VzIGFuZCB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDE3MD1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19yZWNvbmYoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQyMTQtXHRcdGVsc2UgaWYgKHBhcmFtLnAtXHUwMDNldHlwZSA9PSBTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NDIxNTpcdFx0XHRyZXBseSA9IHNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX2luKFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDIxNi1cdFx0XHRcdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKWFzb2MsIHBhcmFtLCBcdTAwMjZldik7XG4tLVxubmV0L3NjdHAvc3RyZWFtLmM9Nzk1PXN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9vdXQoXG4tLVxubmV0L3NjdHAvc3RyZWFtLmMtODY3LVxubmV0L3NjdHAvc3RyZWFtLmM6ODY4OnN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9pbihcbm5ldC9zY3RwL3N0cmVhbS5jLTg2OS1cdFx0XHRcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDUwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE5vbi1TdGF0aWMgTmF0dXJlKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgY29uZmlybXMgaXQ6IHRoZSBjaGFyYWN0ZXJpc3RpY3MgaW4gcXVlc3Rpb24gYXJlIGluZGVlZCBub24tc3RhdGljLiBUaGlzIGlzbiYjMzk7dCB1bmV4cGVjdGVkLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIHZlcmlmeS4gTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byBhIHNwZWNpZmljIGFyZWEgd2hlcmUgdGhpcyBub24tc3RhdGljIGJlaGF2aW9yIG1pZ2h0IGJlIG1vc3QgaW1wYWN0ZnVsLCBvciBtb3N0IGxpa2VseSB0byBiZSBlbmNvdW50ZXJlZC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBpbiBvbiBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X3Jlc3BgLiBFeGFtaW5pbmcgdGhpcyBmdW5jdGlvbiBub3cgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X3Jlc3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDE3MD1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19yZWNvbmYoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQyMTctXHRcdGVsc2UgaWYgKHBhcmFtLnAtXHUwMDNldHlwZSA9PSBTQ1RQX1BBUkFNX1JFU0VUX1JFU1BPTlNFKVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NDIxODpcdFx0XHRyZXBseSA9IHNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwKFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDIxOS1cdFx0XHRcdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKWFzb2MsIHBhcmFtLCBcdTAwMjZldik7XG4tLVxubmV0L3NjdHAvc3RyZWFtLmM9ODY4PXN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9pbihcbi0tXG5uZXQvc2N0cC9zdHJlYW0uYy05MzMtXG5uZXQvc2N0cC9zdHJlYW0uYzo5MzQ6c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwKFxubmV0L3NjdHAvc3RyZWFtLmMtOTM1LVx0XHRcdFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MTUKCQkJCQkJCW91dHB1dDogMjM0CgkJCQkJCQl0aG91Z2h0czogMzE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNDVFAgU3RyZWFtIFJlc2V0IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBpbnRyb2R1Y2luZyBhIGNoYW5nZSB0aGF0JiMzOTtzICpub3QqIHN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIHRvIHBheSBhdHRlbnRpb24gdG8uIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgaW4gaG93IFNDVFAgdHJhY2tzIG91dHN0YW5kaW5nIHN0cmVhbSByZXNldCByZXF1ZXN0cy4gSW5zdGVhZCBvZiBhIHNpbXBsZSBjb3VudGVyLCB0aGV5JiMzOTtyZSBzd2l0Y2hpbmcgdG8gYSBiaXRtYXNrIGZvciBgc3RycmVzZXRfb3V0c3RhbmRpbmdgIHdpdGhpbiB0aGUgYHNjdHBfYXNzb2NpYXRpb25gIHN0cnVjdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBzaWduaWZpY2FudCBvbmUgcmVhbGx5LCBiZWNhdXNlIGl0IGFsbG93cyB0aGUgc3lzdGVtIHRvIHRyYWNrICptdWx0aXBsZSogdHlwZXMgb2YgcmVzZXQgcmVxdWVzdHMgYXQgdGhlIHNhbWUgdGltZS4KCkFuZCB0aGUgYmVzdCBwYXJ0IGlzIGl0JiMzOTtzIHRvdWNoaW5nIHRoZSBTQ1RQIHN0YWNrJiMzOTtzIGNvcmUgbG9naWMuIFRoZSBmdW5jdGlvbnMgaGFuZGxpbmcgc2VuZCBhbmQgcHJvY2Vzc2luZyByZXF1ZXN0cyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBlaXRoZXIgdGhyb3VnaCB0aGUgc29ja2V0IG9wdGlvbnMgb3IgdmlhIGluY29taW5nIFNDVFAgcGFja2V0cy4gVGhhdCYjMzk7cyBhIGh1Z2UgZ3JlZW4gbGlnaHQhIFRoYXQgbWVhbnMgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIGZhY3QgdGhhdCB0aGUgY2hhbmdlIGlzIGluIGBzY3RwX3NlbmRfcmVzZXRfc3RyZWFtc2AsIGBzY3RwX3NlbmRfcmVzZXRfYXNzb2NgLCBgc2N0cF9zZW5kX2FkZF9zdHJlYW1zYCwgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXFgLCBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2lucmVxYCwgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX291dGAsIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9pbmAgYW5kIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcGAgaXMgZXhjZWxsZW50LiBUaGlzIGNvdmVycyB0aGUgc2VuZGluZyBhbmQgcmVjZWl2aW5nIHBhdGhzLCBhbmQgYWxzbyB0aGUgYWRkaXRpb24gb2Ygc3RyZWFtcy4gSSB3aWxsIGVuYWJsZSBgSVBfU0NUUGAgYW5kIHVzZSB0aGVzZSBmdW5jdGlvbnMgYXMgZm9jdXMgc3ltYm9scy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBydW5uaW5nIGZ1enogdGVzdHMgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIHJldmVhbHMgYW55IHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBjb3VsZCBiZSBhbiBpbnRlcmVzdGluZyBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfc2VuZF9yZXNldF9zdHJlYW1zJiMzNDssCiAgICAmIzM0O3NjdHBfc2VuZF9yZXNldF9hc3NvYyYjMzQ7LAogICAgJiMzNDtzY3RwX3NlbmRfYWRkX3N0cmVhbXMmIzM0OywKICAgICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X291dHJlcSYjMzQ7LAogICAgJiMzNDtzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXEmIzM0OywKICAgICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0JiMzNDssCiAgICAmIzM0O3NjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX2luJiMzNDssCiAgICAmIzM0O3NjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIGBzdHJyZXNldF9vdXRzdGFuZGluZ2AgZmllbGQgaW4gYHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uYCBmcm9tIGEgY291bnRlciB0byBhIGJpdG1hc2ssIGFsbG93aW5nIG11bHRpcGxlIHR5cGVzIG9mIHN0cmVhbSByZXNldCByZXF1ZXN0cyB0byBiZSB0cmFja2VkIHNpbXVsdGFuZW91c2x5LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIGhvdyBTQ1RQIGhhbmRsZXMgc3RyZWFtIHJlc2V0IHJlcXVlc3RzIChib3RoIHNlbmRpbmcgYW5kIHByb2Nlc3NpbmcgaW5jb21pbmcgcmVxdWVzdHMpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgU0NUUCBzb2NrZXQgb3B0aW9ucyBhbmQgaW5jb21pbmcgU0NUUCBwYWNrZXRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfc2VuZF9yZXNldF9zdHJlYW1zJiMzNDssCiAgICAmIzM0O3NjdHBfc2VuZF9yZXNldF9hc3NvYyYjMzQ7LAogICAgJiMzNDtzY3RwX3NlbmRfYWRkX3N0cmVhbXMmIzM0OywKICAgICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X291dHJlcSYjMzQ7LAogICAgJiMzNDtzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXEmIzM0OywKICAgICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0JiMzNDssCiAgICAmIzM0O3NjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX2luJiMzNDssCiAgICAmIzM0O3NjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIGBzdHJyZXNldF9vdXRzdGFuZGluZ2AgZmllbGQgaW4gYHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uYCBmcm9tIGEgY291bnRlciB0byBhIGJpdG1hc2ssIGFsbG93aW5nIG11bHRpcGxlIHR5cGVzIG9mIHN0cmVhbSByZXNldCByZXF1ZXN0cyB0byBiZSB0cmFja2VkIHNpbXVsdGFuZW91c2x5LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIGhvdyBTQ1RQIGhhbmRsZXMgc3RyZWFtIHJlc2V0IHJlcXVlc3RzIChib3RoIHNlbmRpbmcgYW5kIHByb2Nlc3NpbmcgaW5jb21pbmcgcmVxdWVzdHMpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgU0NUUCBzb2NrZXQgb3B0aW9ucyBhbmQgaW5jb21pbmcgU0NUUCBwYWNrZXRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgc3RhdGUgdHJhY2tpbmcgb2YgU0NUUCBzdHJlYW0gcmVzZXQgcmVxdWVzdHMgYnkgcmVwbGFjaW5nIGEgY291bnRlciAoYHN0cnJlc2V0X291dHN0YW5kaW5nYCkgd2l0aCBhIGJpdG1hc2suIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIG1lbW9yeSBhbGxvY2F0aW9ucywgaW5pdGlhbGl6YXRpb25zLCBvciBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBjb3JydXB0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSksIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhM2NjNDFmZjNlNTc2ZWQ2OGFmMmQyM2FjYjliMjk5ZDg3MzZhYTM4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTA6MDY6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCmluZGV4IGNjY2M2NjI1NjFhYWMuLmIyMWYyM2I3MzZmZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCkBAIC0yMDU3LDcgJiM0MzsyMDU3LDcgQEAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gewogCSAgICAgZm9yY2VfZGVsYXk6MTsKIAogCV9fdTggc3RycmVzZXRfZW5hYmxlOwotCV9fdTggc3RycmVzZXRfb3V0c3RhbmRpbmc7IC8qIHJlcXVlc3QgcGFyYW0gY291bnQgb24gdGhlIGZseSAqLwomIzQzOwlfX3U4IHN0cnJlc2V0X291dHN0YW5kaW5nOyAvKiByZXF1ZXN0IHBhcmFtIGJpdG1hc2sgb24gdGhlIGZseSAqLwogCiAJX191MzIgc3RycmVzZXRfb3V0c2VxOyAvKiBVcGRhdGUgYWZ0ZXIgcmVjZWl2aW5nIHJlc3BvbnNlICovCiAJX191MzIgc3RycmVzZXRfaW5zZXE7IC8qIFVwZGF0ZSBhZnRlciByZWNlaXZpbmcgcmVxdWVzdCAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc3RyZWFtLmMgYi9uZXQvc2N0cC9zdHJlYW0uYwppbmRleCAzNGZmZTZjOTQ1YTRiLi5lMWEyMTVkYjYxZTFjIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zdHJlYW0uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2N0cC9zdHJlYW0uYwpAQCAtMjIsNiAmIzQzOzIyLDkgQEAKICNpbmNsdWRlICZsdDtuZXQvc2N0cC9zbS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zY3RwL3N0cmVhbV9zY2hlZC5oJmd0OwogCiYjNDM7I2RlZmluZSBTQ1RQX1NUUlJFU0VUX0JJVCh0eXBlKSBcCiYjNDM7CUJJVChudG9ocyh0eXBlKSAtIG50b2hzKFNDVFBfUEFSQU1fUkVTRVRfT1VUX1JFUVVFU1QpKQomIzQzOwogc3RhdGljIHZvaWQgc2N0cF9zdHJlYW1fc2hyaW5rX291dChzdHJ1Y3Qgc2N0cF9zdHJlYW0gKnN0cmVhbSwgX191MTYgb3V0Y250KQogewogCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwpAQCAtMzcyLDcgJiM0MzszNzUsOSBAQCBpbnQgc2N0cF9zZW5kX3Jlc2V0X3N0cmVhbXMoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJCWdvdG8gb3V0OwogCX0KIAotCWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nID0gb3V0ICYjNDM7IGluOwomIzQzOwlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyA9CiYjNDM7CQkob3V0ID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9PVVRfUkVRVUVTVCkgOiAwKSB8CiYjNDM7CQkoaW4gPyBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpIDogMCk7CiAKIG91dDoKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNDE3LDcgJiM0Mzs0MjIsOCBAQCBpbnQgc2N0cF9zZW5kX3Jlc2V0X2Fzc29jKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nID0gMTsKJiM0MzsJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgPQomIzQzOwkJU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9UU05fUkVRVUVTVCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ3NCw3ICYjNDM7NDgwLDkgQEAgaW50IHNjdHBfc2VuZF9hZGRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJZ290byBvdXQ7CiAJfQogCi0JYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgPSAhIW91dCAmIzQzOyAhIWluOwomIzQzOwlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyA9CiYjNDM7CQkob3V0ID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfT1VUX1NUUkVBTVMpIDogMCkgfAomIzQzOwkJKGluID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUykgOiAwKTsKIAogb3V0OgogCXJldHVybiByZXR2YWw7CkBAIC00ODIsNyAmIzQzOzQ5MCw3IEBAIGludCBzY3RwX3NlbmRfYWRkX3N0cmVhbXMoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAKIHN0YXRpYyBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqc2N0cF9jaHVua19sb29rdXBfc3RycmVzZXRfcGFyYW0oCiAJCQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgX19iZTMyIHJlc3Bfc2VxLAotCQkJX19iZTE2IHR5cGUpCiYjNDM7CQkJX19iZTE2IHR5cGUsIGJvb2wgbWF0Y2hfc2VxKQogewogCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuayA9IGFzb2MtJmd0O3N0cnJlc2V0X2NodW5rOwogCXN0cnVjdCBzY3RwX3JlY29uZl9jaHVuayAqaGRyOwpAQCAtNDk5LDcgJiM0Mzs1MDcsNyBAQCBzdGF0aWMgc3RydWN0IHNjdHBfcGFyYW1oZHIgKnNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKAogCQkgKi8KIAkJc3RydWN0IHNjdHBfc3RycmVzZXRfdHNucmVxICpyZXEgPSBwYXJhbS52OwogCi0JCWlmICgoIXJlc3Bfc2VxIHx8IHJlcS0mZ3Q7cmVxdWVzdF9zZXEgPT0gcmVzcF9zZXEpICZhbXA7JmFtcDsKJiM0MzsJCWlmICgoIW1hdGNoX3NlcSB8fCByZXEtJmd0O3JlcXVlc3Rfc2VxID09IHJlc3Bfc2VxKSAmYW1wOyZhbXA7CiAJCSAgICAoIXR5cGUgfHwgdHlwZSA9PSByZXEtJmd0O3BhcmFtX2hkci50eXBlKSkKIAkJCXJldHVybiBwYXJhbS52OwogCX0KQEAgLTU2NCwxMyAmIzQzOzU3MiwxNiBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X291dHJlcSgKIAlpZiAoYXNvYy0mZ3Q7c3RycmVzZXRfY2h1bmspIHsKIAkJaWYgKCFzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbSgKIAkJCQlhc29jLCBvdXRyZXEtJmd0O3Jlc3BvbnNlX3NlcSwKLQkJCQlTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpKSB7CiYjNDM7CQkJCVNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCwgdHJ1ZSkgfHwKJiM0MzsJCSAgICAhKGFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nICZhbXA7CiYjNDM7CQkgICAgICBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpKSkgewogCQkJLyogc2FtZSBwcm9jZXNzIHdpdGggb3V0c3RhbmRpbmcgaXNuJiMzOTt0IDAgKi8KIAkJCXJlc3VsdCA9IFNDVFBfU1RSUkVTRVRfRVJSX0lOX1BST0dSRVNTOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZy0tOwomIzQzOwkJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgJmFtcDs9CiYjNDM7CQkJflNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCk7CiAJCWFzb2MtJmd0O3N0cnJlc2V0X291dHNlcSYjNDM7JiM0Mzs7CiAKIAkJaWYgKCFhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZykgewpAQCAtNjY5LDcgJiM0Mzs2ODAsOCBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2lucmVxKAogCQkJU0NUUF9TTyhzdHJlYW0sIGkpLSZndDtzdGF0ZSA9IFNDVFBfU1RSRUFNX0NMT1NFRDsKIAogCWFzb2MtJmd0O3N0cnJlc2V0X2NodW5rID0gY2h1bms7Ci0JYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgPSAxOwomIzQzOwlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyA9CiYjNDM7CQlTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX09VVF9SRVFVRVNUKTsKIAlzY3RwX2NodW5rX2hvbGQoYXNvYy0mZ3Q7c3RycmVzZXRfY2h1bmspOwogCiAJcmVzdWx0ID0gU0NUUF9TVFJSRVNFVF9QRVJGT1JNRUQ7CkBAIC04MTYsMTMgJiM0Mzs4MjgsMTYgQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX291dCgKIAogCWlmIChhc29jLSZndDtzdHJyZXNldF9jaHVuaykgewogCQlpZiAoIXNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKAotCQkJYXNvYywgMCwgU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUykpIHsKJiM0MzsJCQlhc29jLCAwLCBTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TLCBmYWxzZSkgfHwKJiM0MzsJCSAgICAhKGFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nICZhbXA7CiYjNDM7CQkgICAgICBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKSkpIHsKIAkJCS8qIHNhbWUgcHJvY2VzcyB3aXRoIG91dHN0YW5kaW5nIGlzbiYjMzk7dCAwICovCiAJCQlyZXN1bHQgPSBTQ1RQX1NUUlJFU0VUX0VSUl9JTl9QUk9HUkVTUzsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmctLTsKJiM0MzsJCWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nICZhbXA7PQomIzQzOwkJCX5TQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKTsKIAkJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c2VxJiM0MzsmIzQzOzsKIAogCQlpZiAoIWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nKSB7CkBAIC04OTksNyAmIzQzOzkxNCw4IEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9pbigKIAkJZ290byBvdXQ7CiAKIAlhc29jLSZndDtzdHJyZXNldF9jaHVuayA9IGNodW5rOwotCWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nID0gMTsKJiM0MzsJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgPQomIzQzOwkJU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfT1VUX1NUUkVBTVMpOwogCXNjdHBfY2h1bmtfaG9sZChhc29jLSZndDtzdHJyZXNldF9jaHVuayk7CiAKIAlzdHJlYW0tJmd0O291dGNudCA9IG91dGNudDsKQEAgLTkyNyw4ICYjNDM7OTQzLDEwIEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcCgKIAlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcmVxOwogCV9fdTMyIHJlc3VsdDsKIAotCXJlcSA9IHNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKGFzb2MsIHJlc3AtJmd0O3Jlc3BvbnNlX3NlcSwgMCk7Ci0JaWYgKCFyZXEpCiYjNDM7CXJlcSA9IHNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKGFzb2MsIHJlc3AtJmd0O3Jlc3BvbnNlX3NlcSwgMCwKJiM0MzsJCQkJCSAgICAgICB0cnVlKTsKJiM0MzsJaWYgKCFyZXEgfHwgIShhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyAmYW1wOwomIzQzOwkJICAgICAgU0NUUF9TVFJSRVNFVF9CSVQocmVxLSZndDt0eXBlKSkpCiAJCXJldHVybiBOVUxMOwogCiAJcmVzdWx0ID0gbnRvaGwocmVzcC0mZ3Q7cmVzdWx0KTsKQEAgLTEwNzgsNyAmIzQzOzEwOTYsNyBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X3Jlc3AoCiAJCQludW1zLCAwLCBHRlBfQVRPTUlDKTsKIAl9CiAKLQlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZy0tOwomIzQzOwlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyAmYW1wOz0gflNDVFBfU1RSUkVTRVRfQklUKHJlcS0mZ3Q7dHlwZSk7CiAJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c2VxJiM0MzsmIzQzOzsKIAogCS8qIHJlbW92ZSBldmVyeXRoaW5nIGZvciB0aGlzIHJlY29uZiByZXF1ZXN0ICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDYyCgkJCQkJCQlvdXRwdXQ6IDEyNQoJCQkJCQkJdGhvdWdodHM6IDk1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNDVFAgU3RyZWFtIFJlc2V0IFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWJvdXQgdHdlYWtpbmcgdGhlIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCAoU0NUUCkgc3RyZWFtIHJlc2V0IGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGNoYW5naW5nIGhvdyBgc3RycmVzZXRfb3V0c3RhbmRpbmdgIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBjb2RlLiBJbnN0ZWFkIG9mIGtlZXBpbmcgYSBjb3VudCBvZiBvdXRzdGFuZGluZyByZXF1ZXN0cywgaXQmIzM5O3MgYmVpbmcgY29udmVydGVkIGludG8gYSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgKnR5cGVzKiBvZiBvdXRzdGFuZGluZyByZXF1ZXN0cy4gU28sIGluc3RlYWQgb2YgYSBzaW1wbGUgaW50ZWdlciwgd2Ugbm93IGhhdmUgYSBieXRlIChgX191OGApIHdoZXJlIGVhY2ggYml0IHNpZ25pZmllcyBhIHNwZWNpZmljIHJlc2V0IHJlcXVlc3QgdHlwZS4KCk15IGluaXRpYWwgY29uY2VybiwgbmF0dXJhbGx5LCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBCYXNlZCBvbiBteSBleHBlcnRpc2UsIEkmIzM5O20gdGhpbmtpbmc6IGlzIHRoZXJlIGEgY2hhbmNlIHdlJiMzOTtyZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFmdGVyIHRoaXMgbW9kaWZpY2F0aW9uPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhlIGNvZGUgaW5pdGlhbGl6ZXMgYW5kIHV0aWxpemVzIHRoaXMgYml0bWFzayB0byBtYWtlIGEgZmlybSBqdWRnbWVudC4KClRoZSBwYXRjaCBkZWZpbmVzIGBTQ1RQX1NUUlJFU0VUX0JJVCh0eXBlKWAgdG8gY2FsY3VsYXRlIHRoZSBiaXQgcG9zaXRpb24gd2l0aGluIHRoZSBiaXRtYXNrLCB3aGljaCBzZWVtcyByZWFzb25hYmxlLiBJdCYjMzk7cyBhbHNvIHVwZGF0aW5nIGBzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbWAgdG8gYWNjZXB0IGEgYm9vbGVhbiBgbWF0Y2hfc2VxYCwgYW5kIG1vZGlmaWVzIGFsbCB0aGUgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF8qYCBmdW5jdGlvbnMgdG8gbm93IGNoZWNrIGFuZCBjbGVhciB0aGUgcmVsZXZhbnQgYml0IGluc3RlYWQgb2YgZGVjcmVtZW50aW5nIGEgY291bnRlci4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgdGhyb3VnaCB0aGUga2V5IGNvZGUgc2VnbWVudHMuCgpgYGBjCi0JX191OCBzdHJyZXNldF9vdXRzdGFuZGluZzsgLyogcmVxdWVzdCBwYXJhbSBjb3VudCBvbiB0aGUgZmx5ICovCiYjNDM7CV9fdTggc3RycmVzZXRfb3V0c3RhbmRpbmc7IC8qIHJlcXVlc3QgcGFyYW0gYml0bWFzayBvbiB0aGUgZmx5ICovCmBgYAoKVGhpcyBpcyB0aGUgY29yZSBjaGFuZ2U6IGBzdHJyZXNldF9vdXRzdGFuZGluZ2AgaXMgYmVpbmcgcmVkZWNsYXJlZCBmcm9tIGNvdW50ZXIgdG8gYml0bWFzay4KCmBgYGMKJiM0MzsjZGVmaW5lIFNDVFBfU1RSUkVTRVRfQklUKHR5cGUpIFwKJiM0MzsJQklUKG50b2hzKHR5cGUpIC0gbnRvaHMoU0NUUF9QQVJBTV9SRVNFVF9PVVRfUkVRVUVTVCkpCmBgYAoKVGhpcyBtYWNybyBsb29rcyBmaW5lLCBpdCBjYWxjdWxhdGVzIHRoZSBiaXQgcG9zaXRpb24gdXNpbmcgYHR5cGVgLCBsaWtlbHkgYW4gU0NUUCBwYXJhbWV0ZXIgdHlwZSB0aGF0IGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvdWFwaS9saW51eC9zY3RwLmhgLCB3aGljaCBJJiMzOTttIGZhbWlsaWFyIHdpdGgsIHN1Y2ggYXMgYFNDVFBfUEFSQU1fUkVTRVRfT1VUX1JFUVVFU1RgLCBgU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUYCwgZXRjLgoKYGBgYwotCWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nID0gb3V0ICYjNDM7IGluOwomIzQzOwlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyA9CiYjNDM7CQkob3V0ID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9PVVRfUkVRVUVTVCkgOiAwKSB8CiYjNDM7CQkoaW4gPyBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpIDogMCk7CmBgYAoKVGhpcyBzZWN0aW9uIGlzIG5vdyBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBiaXRzIGluIHRoZSBtYXNrLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGVyZSYjMzk7cyBhbiBvdXRzdGFuZGluZyBvdXQgb3IgaW4gcmVxdWVzdC4KCmBgYGMKIAkJaWYgKCFzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbSgKIAkJCQlhc29jLCBvdXRyZXEtJmd0O3Jlc3BvbnNlX3NlcSwKLQkJCQlTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpKSB7CiYjNDM7CQkJCVNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCwgdHJ1ZSkgfHwKJiM0MzsJCSAgICAhKGFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nICZhbXA7CiYjNDM7CQkgICAgICBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpKSkgewpgYGAKTm93IHdlIGhhdmUgdG8gY2hlY2sgaWYgYSBiaXQgaXMgc2V0LgoKYGBgYwotCQlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZy0tOwomIzQzOwkJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgJmFtcDs9CiYjNDM7CQkJflNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCk7CmBgYAoKQW5kIGZpbmFsbHksIGNsZWFyaW5nIGl0LgoKQWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgY2hhbmdlIGlzIHB1cmVseSBhYm91dCBtb2RpZnlpbmcgaW50ZXJuYWwgc3RhdGUgdHJhY2tpbmcuIEl0IGRvZXNuJiMzOTt0IGFsdGVyIGFueSBzdHJ1Y3R1cmUgbGF5b3V0cyBpbiBhIHdheSB0aGF0IHdvdWxkIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiwgb3IgdG8gaG93IHdlIGRvIGJvdW5kcyBjaGVja2luZy4gVGhlIGJ1ZyBmaXhlZCBpcyBsaWtlbHkgc29tZSBsb2dpYyBpc3N1ZSByZWxhdGVkIHRvIGluY29ycmVjdCB0cmFja2luZyBvZiByZXNldCByZXF1ZXN0cywgbGVhZGluZyB0byBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBidXQgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBwYXRjaCBqdXN0IGNoYW5nZXMgdGhlIHdheSB3ZSB0cmFjayBvdXRzdGFuZGluZyByZXF1ZXN0cy4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgdGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWNhdXNlIHRoZSBidWcgdGhpcyBmaXhlcyBpcyByZWxhdGVkIHRvIHN0YXRlLiBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhcmUgZW5vdWdoIHRvIGNoZWNrIGZvciB0aGUgYnVncyB0aGF0IGNvdWxkIGJlIGludHJvZHVjZWQsIGFuZCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgc3RhdGUgdHJhY2tpbmcgb2YgU0NUUCBzdHJlYW0gcmVzZXQgcmVxdWVzdHMgYnkgcmVwbGFjaW5nIGEgY291bnRlciAoYHN0cnJlc2V0X291dHN0YW5kaW5nYCkgd2l0aCBhIGJpdG1hc2suIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIG1lbW9yeSBhbGxvY2F0aW9ucywgaW5pdGlhbGl6YXRpb25zLCBvciBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBjb3JydXB0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSksIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIHN0YXRlIHRyYWNraW5nIG9mIFNDVFAgc3RyZWFtIHJlc2V0IHJlcXVlc3RzIGJ5IHJlcGxhY2luZyBhIGNvdW50ZXIgKGBzdHJyZXNldF9vdXRzdGFuZGluZ2ApIHdpdGggYSBiaXRtYXNrLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbHRlciBtZW1vcnkgYWxsb2NhdGlvbnMsIGluaXRpYWxpemF0aW9ucywgb3IgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgY29ycnVwdGlvbiAoZS5nLiwgdXNlLWFmdGVyLWZyZWUpLCB3aGljaCBhcmUgYWRlcXVhdGVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MDY6MDUuMjM3MDk1MTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDIwMTQzMDYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9zZW5kX3Jlc2V0X3N0cmVhbXNcIixcbiAgICBcInNjdHBfc2VuZF9yZXNldF9hc3NvY1wiLFxuICAgIFwic2N0cF9zZW5kX2FkZF9zdHJlYW1zXCIsXG4gICAgXCJzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfb3V0cmVxXCIsXG4gICAgXCJzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXFcIixcbiAgICBcInNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX291dFwiLFxuICAgIFwic2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW5cIixcbiAgICBcInNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgc3RhdGUgdHJhY2tpbmcgb2YgU0NUUCBzdHJlYW0gcmVzZXQgcmVxdWVzdHMgYnkgcmVwbGFjaW5nIGEgY291bnRlciAoYHN0cnJlc2V0X291dHN0YW5kaW5nYCkgd2l0aCBhIGJpdG1hc2suIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIG1lbW9yeSBhbGxvY2F0aW9ucywgaW5pdGlhbGl6YXRpb25zLCBvciBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBjb3JydXB0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSksIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIGBzdHJyZXNldF9vdXRzdGFuZGluZ2AgZmllbGQgaW4gYHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uYCBmcm9tIGEgY291bnRlciB0byBhIGJpdG1hc2ssIGFsbG93aW5nIG11bHRpcGxlIHR5cGVzIG9mIHN0cmVhbSByZXNldCByZXF1ZXN0cyB0byBiZSB0cmFja2VkIHNpbXVsdGFuZW91c2x5LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIGhvdyBTQ1RQIGhhbmRsZXMgc3RyZWFtIHJlc2V0IHJlcXVlc3RzIChib3RoIHNlbmRpbmcgYW5kIHByb2Nlc3NpbmcgaW5jb21pbmcgcmVxdWVzdHMpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgU0NUUCBzb2NrZXQgb3B0aW9ucyBhbmQgaW5jb21pbmcgU0NUUCBwYWNrZXRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MDY6MDUuMjM3MTAxMzdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjgzNjg4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhM2NjNDFmZjNlNTc2ZWQ2OGFmMmQyM2FjYjliMjk5ZDg3MzZhYTM4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDIxIDEwOjA2OjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmhcXG5pbmRleCBjY2NjNjYyNTYxYWFjLi5iMjFmMjNiNzM2ZmQyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oXFxuKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmhcXG5AQCAtMjA1Nyw3ICsyMDU3LDcgQEAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24ge1xcbiBcXHQgICAgIGZvcmNlX2RlbGF5OjE7XFxuIFxcbiBcXHRfX3U4IHN0cnJlc2V0X2VuYWJsZTtcXG4tXFx0X191OCBzdHJyZXNldF9vdXRzdGFuZGluZzsgLyogcmVxdWVzdCBwYXJhbSBjb3VudCBvbiB0aGUgZmx5ICovXFxuK1xcdF9fdTggc3RycmVzZXRfb3V0c3RhbmRpbmc7IC8qIHJlcXVlc3QgcGFyYW0gYml0bWFzayBvbiB0aGUgZmx5ICovXFxuIFxcbiBcXHRfX3UzMiBzdHJyZXNldF9vdXRzZXE7IC8qIFVwZGF0ZSBhZnRlciByZWNlaXZpbmcgcmVzcG9uc2UgKi9cXG4gXFx0X191MzIgc3RycmVzZXRfaW5zZXE7IC8qIFVwZGF0ZSBhZnRlciByZWNlaXZpbmcgcmVxdWVzdCAqL1xcbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zdHJlYW0uYyBiL25ldC9zY3RwL3N0cmVhbS5jXFxuaW5kZXggMzRmZmU2Yzk0NWE0Yi4uZTFhMjE1ZGI2MWUxYyAxMDA2NDRcXG4tLS0gYS9uZXQvc2N0cC9zdHJlYW0uY1xcbisrKyBiL25ldC9zY3RwL3N0cmVhbS5jXFxuQEAgLTIyLDYgKzIyLDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9zY3RwL3NtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvc2N0cC9zdHJlYW1fc2NoZWQuaFxcdTAwM2VcXG4gXFxuKyNkZWZpbmUgU0NUUF9TVFJSRVNFVF9CSVQodHlwZSkgXFxcXFxcbitcXHRCSVQobnRvaHModHlwZSkgLSBudG9ocyhTQ1RQX1BBUkFNX1JFU0VUX09VVF9SRVFVRVNUKSlcXG4rXFxuIHN0YXRpYyB2b2lkIHNjdHBfc3RyZWFtX3Nocmlua19vdXQoc3RydWN0IHNjdHBfc3RyZWFtICpzdHJlYW0sIF9fdTE2IG91dGNudClcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYztcXG5AQCAtMzcyLDcgKzM3NSw5IEBAIGludCBzY3RwX3NlbmRfcmVzZXRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID0gb3V0ICsgaW47XFxuK1xcdGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cXG4rXFx0XFx0KG91dCA/IFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfT1VUX1JFUVVFU1QpIDogMCkgfFxcbitcXHRcXHQoaW4gPyBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpIDogMCk7XFxuIFxcbiBvdXQ6XFxuIFxcdHJldHVybiByZXR2YWw7XFxuQEAgLTQxNyw3ICs0MjIsOCBAQCBpbnQgc2N0cF9zZW5kX3Jlc2V0X2Fzc29jKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxcbiBcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXHR9XFxuIFxcbi1cXHRhc29jLVxcdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9IDE7XFxuK1xcdGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cXG4rXFx0XFx0U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9UU05fUkVRVUVTVCk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC00NzQsNyArNDgwLDkgQEAgaW50IHNjdHBfc2VuZF9hZGRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID0gISFvdXQgKyAhIWluO1xcbitcXHRhc29jLVxcdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9XFxuK1xcdFxcdChvdXQgPyBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0FERF9PVVRfU1RSRUFNUykgOiAwKSB8XFxuK1xcdFxcdChpbiA/IFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfQUREX0lOX1NUUkVBTVMpIDogMCk7XFxuIFxcbiBvdXQ6XFxuIFxcdHJldHVybiByZXR2YWw7XFxuQEAgLTQ4Miw3ICs0OTAsNyBAQCBpbnQgc2N0cF9zZW5kX2FkZF9zdHJlYW1zKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbiBcXG4gc3RhdGljIHN0cnVjdCBzY3RwX3BhcmFtaGRyICpzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbShcXG4gXFx0XFx0XFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIF9fYmUzMiByZXNwX3NlcSxcXG4tXFx0XFx0XFx0X19iZTE2IHR5cGUpXFxuK1xcdFxcdFxcdF9fYmUxNiB0eXBlLCBib29sIG1hdGNoX3NlcSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmsgPSBhc29jLVxcdTAwM2VzdHJyZXNldF9jaHVuaztcXG4gXFx0c3RydWN0IHNjdHBfcmVjb25mX2NodW5rICpoZHI7XFxuQEAgLTQ5OSw3ICs1MDcsNyBAQCBzdGF0aWMgc3RydWN0IHNjdHBfcGFyYW1oZHIgKnNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0c3RydWN0IHNjdHBfc3RycmVzZXRfdHNucmVxICpyZXEgPSBwYXJhbS52O1xcbiBcXG4tXFx0XFx0aWYgKCghcmVzcF9zZXEgfHwgcmVxLVxcdTAwM2VyZXF1ZXN0X3NlcSA9PSByZXNwX3NlcSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0aWYgKCghbWF0Y2hfc2VxIHx8IHJlcS1cXHUwMDNlcmVxdWVzdF9zZXEgPT0gcmVzcF9zZXEpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAoIXR5cGUgfHwgdHlwZSA9PSByZXEtXFx1MDAzZXBhcmFtX2hkci50eXBlKSlcXG4gXFx0XFx0XFx0cmV0dXJuIHBhcmFtLnY7XFxuIFxcdH1cXG5AQCAtNTY0LDEzICs1NzIsMTYgQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXEoXFxuIFxcdGlmIChhc29jLVxcdTAwM2VzdHJyZXNldF9jaHVuaykge1xcbiBcXHRcXHRpZiAoIXNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxcbiBcXHRcXHRcXHRcXHRhc29jLCBvdXRyZXEtXFx1MDAzZXJlc3BvbnNlX3NlcSxcXG4tXFx0XFx0XFx0XFx0U0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSkge1xcbitcXHRcXHRcXHRcXHRTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QsIHRydWUpIHx8XFxuK1xcdFxcdCAgICAhKGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nIFxcdTAwMjZcXG4rXFx0XFx0ICAgICAgU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSkpIHtcXG4gXFx0XFx0XFx0Lyogc2FtZSBwcm9jZXNzIHdpdGggb3V0c3RhbmRpbmcgaXNuJ3QgMCAqL1xcbiBcXHRcXHRcXHRyZXN1bHQgPSBTQ1RQX1NUUlJFU0VUX0VSUl9JTl9QUk9HUkVTUztcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nLS07XFxuK1xcdFxcdGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nIFxcdTAwMjY9XFxuK1xcdFxcdFxcdH5TQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpO1xcbiBcXHRcXHRhc29jLVxcdTAwM2VzdHJyZXNldF9vdXRzZXErKztcXG4gXFxuIFxcdFxcdGlmICghYXNvYy1cXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcpIHtcXG5AQCAtNjY5LDcgKzY4MCw4IEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXEoXFxuIFxcdFxcdFxcdFNDVFBfU08oc3RyZWFtLCBpKS1cXHUwMDNlc3RhdGUgPSBTQ1RQX1NUUkVBTV9DTE9TRUQ7XFxuIFxcbiBcXHRhc29jLVxcdTAwM2VzdHJyZXNldF9jaHVuayA9IGNodW5rO1xcbi1cXHRhc29jLVxcdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9IDE7XFxuK1xcdGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cXG4rXFx0XFx0U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9PVVRfUkVRVUVTVCk7XFxuIFxcdHNjdHBfY2h1bmtfaG9sZChhc29jLVxcdTAwM2VzdHJyZXNldF9jaHVuayk7XFxuIFxcbiBcXHRyZXN1bHQgPSBTQ1RQX1NUUlJFU0VUX1BFUkZPUk1FRDtcXG5AQCAtODE2LDEzICs4MjgsMTYgQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX291dChcXG4gXFxuIFxcdGlmIChhc29jLVxcdTAwM2VzdHJyZXNldF9jaHVuaykge1xcbiBcXHRcXHRpZiAoIXNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxcbi1cXHRcXHRcXHRhc29jLCAwLCBTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKSkge1xcbitcXHRcXHRcXHRhc29jLCAwLCBTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TLCBmYWxzZSkgfHxcXG4rXFx0XFx0ICAgICEoYXNvYy1cXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgXFx1MDAyNlxcbitcXHRcXHQgICAgICBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKSkpIHtcXG4gXFx0XFx0XFx0Lyogc2FtZSBwcm9jZXNzIHdpdGggb3V0c3RhbmRpbmcgaXNuJ3QgMCAqL1xcbiBcXHRcXHRcXHRyZXN1bHQgPSBTQ1RQX1NUUlJFU0VUX0VSUl9JTl9QUk9HUkVTUztcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nLS07XFxuK1xcdFxcdGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nIFxcdTAwMjY9XFxuK1xcdFxcdFxcdH5TQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKTtcXG4gXFx0XFx0YXNvYy1cXHUwMDNlc3RycmVzZXRfb3V0c2VxKys7XFxuIFxcbiBcXHRcXHRpZiAoIWFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nKSB7XFxuQEAgLTg5OSw3ICs5MTQsOCBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW4oXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0YXNvYy1cXHUwMDNlc3RycmVzZXRfY2h1bmsgPSBjaHVuaztcXG4tXFx0YXNvYy1cXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgPSAxO1xcbitcXHRhc29jLVxcdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9XFxuK1xcdFxcdFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfQUREX09VVF9TVFJFQU1TKTtcXG4gXFx0c2N0cF9jaHVua19ob2xkKGFzb2MtXFx1MDAzZXN0cnJlc2V0X2NodW5rKTtcXG4gXFxuIFxcdHN0cmVhbS1cXHUwMDNlb3V0Y250ID0gb3V0Y250O1xcbkBAIC05MjcsOCArOTQzLDEwIEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcChcXG4gXFx0c3RydWN0IHNjdHBfcGFyYW1oZHIgKnJlcTtcXG4gXFx0X191MzIgcmVzdWx0O1xcbiBcXG4tXFx0cmVxID0gc2N0cF9jaHVua19sb29rdXBfc3RycmVzZXRfcGFyYW0oYXNvYywgcmVzcC1cXHUwMDNlcmVzcG9uc2Vfc2VxLCAwKTtcXG4tXFx0aWYgKCFyZXEpXFxuK1xcdHJlcSA9IHNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKGFzb2MsIHJlc3AtXFx1MDAzZXJlc3BvbnNlX3NlcSwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHRydWUpO1xcbitcXHRpZiAoIXJlcSB8fCAhKGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nIFxcdTAwMjZcXG4rXFx0XFx0ICAgICAgU0NUUF9TVFJSRVNFVF9CSVQocmVxLVxcdTAwM2V0eXBlKSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0cmVzdWx0ID0gbnRvaGwocmVzcC1cXHUwMDNlcmVzdWx0KTtcXG5AQCAtMTA3OCw3ICsxMDk2LDcgQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwKFxcbiBcXHRcXHRcXHRudW1zLCAwLCBHRlBfQVRPTUlDKTtcXG4gXFx0fVxcbiBcXG4tXFx0YXNvYy1cXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmctLTtcXG4rXFx0YXNvYy1cXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgXFx1MDAyNj0gflNDVFBfU1RSUkVTRVRfQklUKHJlcS1cXHUwMDNldHlwZSk7XFxuIFxcdGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHNlcSsrO1xcbiBcXG4gXFx0LyogcmVtb3ZlIGV2ZXJ5dGhpbmcgZm9yIHRoaXMgcmVjb25mIHJlcXVlc3QgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MDY6MDYuNTY2NDU5MzQ1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTAxMjk3NTY3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfc2VuZF9yZXNldF9zdHJlYW1zXCIsXG4gICAgXCJzY3RwX3NlbmRfcmVzZXRfYXNzb2NcIixcbiAgICBcInNjdHBfc2VuZF9hZGRfc3RyZWFtc1wiLFxuICAgIFwic2N0cF9wcm9jZXNzX3N0cnJlc2V0X291dHJlcVwiLFxuICAgIFwic2N0cF9wcm9jZXNzX3N0cnJlc2V0X2lucmVxXCIsXG4gICAgXCJzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9vdXRcIixcbiAgICBcInNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX2luXCIsXG4gICAgXCJzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIGBzdHJyZXNldF9vdXRzdGFuZGluZ2AgZmllbGQgaW4gYHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uYCBmcm9tIGEgY291bnRlciB0byBhIGJpdG1hc2ssIGFsbG93aW5nIG11bHRpcGxlIHR5cGVzIG9mIHN0cmVhbSByZXNldCByZXF1ZXN0cyB0byBiZSB0cmFja2VkIHNpbXVsdGFuZW91c2x5LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIGhvdyBTQ1RQIGhhbmRsZXMgc3RyZWFtIHJlc2V0IHJlcXVlc3RzIChib3RoIHNlbmRpbmcgYW5kIHByb2Nlc3NpbmcgaW5jb21pbmcgcmVxdWVzdHMpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgU0NUUCBzb2NrZXQgb3B0aW9ucyBhbmQgaW5jb21pbmcgU0NUUCBwYWNrZXRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTNjYzQxZmYzZTU3NmVkNjhhZjJkMjNhY2I5YjI5OWQ4NzM2YWEzOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDEwOjA2OjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaFxuaW5kZXggY2NjYzY2MjU2MWFhYy4uYjIxZjIzYjczNmZkMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oXG4rKysgYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaFxuQEAgLTIwNTcsNyArMjA1Nyw3IEBAIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uIHtcbiBcdCAgICAgZm9yY2VfZGVsYXk6MTtcbiBcbiBcdF9fdTggc3RycmVzZXRfZW5hYmxlO1xuLVx0X191OCBzdHJyZXNldF9vdXRzdGFuZGluZzsgLyogcmVxdWVzdCBwYXJhbSBjb3VudCBvbiB0aGUgZmx5ICovXG4rXHRfX3U4IHN0cnJlc2V0X291dHN0YW5kaW5nOyAvKiByZXF1ZXN0IHBhcmFtIGJpdG1hc2sgb24gdGhlIGZseSAqL1xuIFxuIFx0X191MzIgc3RycmVzZXRfb3V0c2VxOyAvKiBVcGRhdGUgYWZ0ZXIgcmVjZWl2aW5nIHJlc3BvbnNlICovXG4gXHRfX3UzMiBzdHJyZXNldF9pbnNlcTsgLyogVXBkYXRlIGFmdGVyIHJlY2VpdmluZyByZXF1ZXN0ICovXG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc3RyZWFtLmMgYi9uZXQvc2N0cC9zdHJlYW0uY1xuaW5kZXggMzRmZmU2Yzk0NWE0Yi4uZTFhMjE1ZGI2MWUxYyAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL3N0cmVhbS5jXG4rKysgYi9uZXQvc2N0cC9zdHJlYW0uY1xuQEAgLTIyLDYgKzIyLDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc2N0cC9zbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NjdHAvc3RyZWFtX3NjaGVkLmhcdTAwM2VcbiBcbisjZGVmaW5lIFNDVFBfU1RSUkVTRVRfQklUKHR5cGUpIFxcXG4rXHRCSVQobnRvaHModHlwZSkgLSBudG9ocyhTQ1RQX1BBUkFNX1JFU0VUX09VVF9SRVFVRVNUKSlcbitcbiBzdGF0aWMgdm9pZCBzY3RwX3N0cmVhbV9zaHJpbmtfb3V0KHN0cnVjdCBzY3RwX3N0cmVhbSAqc3RyZWFtLCBfX3UxNiBvdXRjbnQpXG4ge1xuIFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7XG5AQCAtMzcyLDcgKzM3NSw5IEBAIGludCBzY3RwX3NlbmRfcmVzZXRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID0gb3V0ICsgaW47XG4rXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cbitcdFx0KG91dCA/IFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfT1VUX1JFUVVFU1QpIDogMCkgfFxuK1x0XHQoaW4gPyBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpIDogMCk7XG4gXG4gb3V0OlxuIFx0cmV0dXJuIHJldHZhbDtcbkBAIC00MTcsNyArNDIyLDggQEAgaW50IHNjdHBfc2VuZF9yZXNldF9hc3NvYyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcdH1cbiBcbi1cdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgPSAxO1xuK1x0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9XG4rXHRcdFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfVFNOX1JFUVVFU1QpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTQ3NCw3ICs0ODAsOSBAQCBpbnQgc2N0cF9zZW5kX2FkZF9zdHJlYW1zKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgPSAhIW91dCArICEhaW47XG4rXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cbitcdFx0KG91dCA/IFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfQUREX09VVF9TVFJFQU1TKSA6IDApIHxcbitcdFx0KGluID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUykgOiAwKTtcbiBcbiBvdXQ6XG4gXHRyZXR1cm4gcmV0dmFsO1xuQEAgLTQ4Miw3ICs0OTAsNyBAQCBpbnQgc2N0cF9zZW5kX2FkZF9zdHJlYW1zKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuIFxuIHN0YXRpYyBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqc2N0cF9jaHVua19sb29rdXBfc3RycmVzZXRfcGFyYW0oXG4gXHRcdFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIF9fYmUzMiByZXNwX3NlcSxcbi1cdFx0XHRfX2JlMTYgdHlwZSlcbitcdFx0XHRfX2JlMTYgdHlwZSwgYm9vbCBtYXRjaF9zZXEpXG4ge1xuIFx0c3RydWN0IHNjdHBfY2h1bmsgKmNodW5rID0gYXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuaztcbiBcdHN0cnVjdCBzY3RwX3JlY29uZl9jaHVuayAqaGRyO1xuQEAgLTQ5OSw3ICs1MDcsNyBAQCBzdGF0aWMgc3RydWN0IHNjdHBfcGFyYW1oZHIgKnNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxuIFx0XHQgKi9cbiBcdFx0c3RydWN0IHNjdHBfc3RycmVzZXRfdHNucmVxICpyZXEgPSBwYXJhbS52O1xuIFxuLVx0XHRpZiAoKCFyZXNwX3NlcSB8fCByZXEtXHUwMDNlcmVxdWVzdF9zZXEgPT0gcmVzcF9zZXEpIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAoKCFtYXRjaF9zZXEgfHwgcmVxLVx1MDAzZXJlcXVlc3Rfc2VxID09IHJlc3Bfc2VxKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICghdHlwZSB8fCB0eXBlID09IHJlcS1cdTAwM2VwYXJhbV9oZHIudHlwZSkpXG4gXHRcdFx0cmV0dXJuIHBhcmFtLnY7XG4gXHR9XG5AQCAtNTY0LDEzICs1NzIsMTYgQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXEoXG4gXHRpZiAoYXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuaykge1xuIFx0XHRpZiAoIXNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxuIFx0XHRcdFx0YXNvYywgb3V0cmVxLVx1MDAzZXJlc3BvbnNlX3NlcSxcbi1cdFx0XHRcdFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCkpIHtcbitcdFx0XHRcdFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCwgdHJ1ZSkgfHxcbitcdFx0ICAgICEoYXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyBcdTAwMjZcbitcdFx0ICAgICAgU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSkpIHtcbiBcdFx0XHQvKiBzYW1lIHByb2Nlc3Mgd2l0aCBvdXRzdGFuZGluZyBpc24ndCAwICovXG4gXHRcdFx0cmVzdWx0ID0gU0NUUF9TVFJSRVNFVF9FUlJfSU5fUFJPR1JFU1M7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZy0tO1xuK1x0XHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nIFx1MDAyNj1cbitcdFx0XHR+U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKTtcbiBcdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzZXErKztcbiBcbiBcdFx0aWYgKCFhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nKSB7XG5AQCAtNjY5LDcgKzY4MCw4IEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXEoXG4gXHRcdFx0U0NUUF9TTyhzdHJlYW0sIGkpLVx1MDAzZXN0YXRlID0gU0NUUF9TVFJFQU1fQ0xPU0VEO1xuIFxuIFx0YXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuayA9IGNodW5rO1xuLVx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9IDE7XG4rXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cbitcdFx0U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9PVVRfUkVRVUVTVCk7XG4gXHRzY3RwX2NodW5rX2hvbGQoYXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuayk7XG4gXG4gXHRyZXN1bHQgPSBTQ1RQX1NUUlJFU0VUX1BFUkZPUk1FRDtcbkBAIC04MTYsMTMgKzgyOCwxNiBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0KFxuIFxuIFx0aWYgKGFzb2MtXHUwMDNlc3RycmVzZXRfY2h1bmspIHtcbiBcdFx0aWYgKCFzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbShcbi1cdFx0XHRhc29jLCAwLCBTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKSkge1xuK1x0XHRcdGFzb2MsIDAsIFNDVFBfUEFSQU1fUkVTRVRfQUREX0lOX1NUUkVBTVMsIGZhbHNlKSB8fFxuK1x0XHQgICAgIShhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nIFx1MDAyNlxuK1x0XHQgICAgICBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKSkpIHtcbiBcdFx0XHQvKiBzYW1lIHByb2Nlc3Mgd2l0aCBvdXRzdGFuZGluZyBpc24ndCAwICovXG4gXHRcdFx0cmVzdWx0ID0gU0NUUF9TVFJSRVNFVF9FUlJfSU5fUFJPR1JFU1M7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZy0tO1xuK1x0XHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nIFx1MDAyNj1cbitcdFx0XHR+U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUyk7XG4gXHRcdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c2VxKys7XG4gXG4gXHRcdGlmICghYXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZykge1xuQEAgLTg5OSw3ICs5MTQsOCBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW4oXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0YXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuayA9IGNodW5rO1xuLVx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9IDE7XG4rXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cbitcdFx0U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfT1VUX1NUUkVBTVMpO1xuIFx0c2N0cF9jaHVua19ob2xkKGFzb2MtXHUwMDNlc3RycmVzZXRfY2h1bmspO1xuIFxuIFx0c3RyZWFtLVx1MDAzZW91dGNudCA9IG91dGNudDtcbkBAIC05MjcsOCArOTQzLDEwIEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcChcbiBcdHN0cnVjdCBzY3RwX3BhcmFtaGRyICpyZXE7XG4gXHRfX3UzMiByZXN1bHQ7XG4gXG4tXHRyZXEgPSBzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbShhc29jLCByZXNwLVx1MDAzZXJlc3BvbnNlX3NlcSwgMCk7XG4tXHRpZiAoIXJlcSlcbitcdHJlcSA9IHNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKGFzb2MsIHJlc3AtXHUwMDNlcmVzcG9uc2Vfc2VxLCAwLFxuK1x0XHRcdFx0XHQgICAgICAgdHJ1ZSk7XG4rXHRpZiAoIXJlcSB8fCAhKGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgXHUwMDI2XG4rXHRcdCAgICAgIFNDVFBfU1RSUkVTRVRfQklUKHJlcS1cdTAwM2V0eXBlKSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0cmVzdWx0ID0gbnRvaGwocmVzcC1cdTAwM2VyZXN1bHQpO1xuQEAgLTEwNzgsNyArMTA5Niw3IEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcChcbiBcdFx0XHRudW1zLCAwLCBHRlBfQVRPTUlDKTtcbiBcdH1cbiBcbi1cdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmctLTtcbitcdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgXHUwMDI2PSB+U0NUUF9TVFJSRVNFVF9CSVQocmVxLVx1MDAzZXR5cGUpO1xuIFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzZXErKztcbiBcbiBcdC8qIHJlbW92ZSBldmVyeXRoaW5nIGZvciB0aGlzIHJlY29uZiByZXF1ZXN0ICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjowNi41NjY0NjEyOTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjM2NzQ3MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBTQ1RQIFN0cmVhbSBSZXNldCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBhYnNvbHV0ZWx5IGRvZXMuIEl0J3MgbW9kaWZ5aW5nIGNvcmUgU0NUUCBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgYG5ldC9zY3RwL3N0cmVhbS5jYCBhbmQgYGluY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oYC4gVGhpcyBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2ssIGFuZCB0aGUgY2hhbmdlIGZyb20gYSBjb3VudGVyIChgc3RycmVzZXRfb3V0c3RhbmRpbmdgKSB0byBhIGJpdG1hc2sgaW4gYHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uYCBmb3IgdHJhY2tpbmcgU0NUUCBzdHJlYW0gcmVzZXQgcmVxdWVzdHMgaXMgc2lnbmlmaWNhbnQuIFRoYXQgc2NyZWFtcyBmdW5jdGlvbmFsIGNoYW5nZSBhbmQsIHRoZXJlZm9yZSwgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHRoYXQgYSBmdXp6ZXIgKnNob3VsZCogdW5jb3Zlci5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGFmZmVjdGVkLCBhbmQgZmlndXJlIG91dCBob3cgdGhleSBhcmUgcmVhY2hlZC4gIFRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBhbHRlcmVkIGFyZTogYHNjdHBfc2VuZF9yZXNldF9zdHJlYW1zYCwgYHNjdHBfc2VuZF9yZXNldF9hc3NvY2AsIGBzY3RwX3NlbmRfYWRkX3N0cmVhbXNgLCBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X291dHJlcWAsIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXFgLCBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0YCwgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX2luYCwgYW5kIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcGAuXG5cbk5vdywgaG93IGFyZSB0aGVzZSBmdW5jdGlvbnMgcmVhY2hhYmxlPyBMb29raW5nIGF0IGhvdyBpdCdzIHVzZWQsIEkgY2FuIHNlZSB0aGF0IGBzY3RwX3NlbmRfcmVzZXRfc3RyZWFtc2AsIGBzY3RwX3NlbmRfcmVzZXRfYXNzb2NgLCBhbmQgYHNjdHBfc2VuZF9hZGRfc3RyZWFtc2AgYXJlIGFsbCBpbnZva2VkIHZpYSBgc2V0c29ja29wdGAgY2FsbHM6IGBzY3RwX3NldHNvY2tvcHRfcmVzZXRfc3RyZWFtc2AsIGBzY3RwX3NldHNvY2tvcHRfcmVzZXRfYXNzb2NgLCBhbmQgYHNjdHBfc2V0c29ja29wdF9hZGRfc3RyZWFtc2AsIHJlc3BlY3RpdmVseS4gRXhjZWxsZW50LiBUaGVzZSBhcmUgZWFzaWx5IGFjY2Vzc2libGUgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLiBUaGVuIHRoZSBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0XypgIGZ1bmN0aW9ucyBhcmUgaW52b2tlZCB3aGVuIHByb2Nlc3NpbmcgaW5jb21pbmcgU0NUUCBjaHVua3MsIHNwZWNpZmljYWxseSBSRUNPTkYgY2h1bmtzLiBTbywgd2UnbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byB0cmlnZ2VyIHRob3NlIGNodW5rcy5cblxuVG8gZW5zdXJlIHRoZSBTQ1RQIHN0YWNrIGlzIGVuYWJsZWQsIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19JUF9TQ1RQYCBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLlxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IGFsbCB0aGUgbGlzdGVkIGZ1bmN0aW9ucyBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGZ1bmN0aW9ucyBhZmZlY3RlZC5cblxuQWxyaWdodCwgc2VlbXMgbGlrZSBhIGdvb2QgcGxhbi4gVGhpcyBpcyBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA2NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjA2OjE1LjIwMzIxMDQ0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTcwMTI2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3RwX3NlbmRfcmVzZXRfc3RyZWFtc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvc29ja2V0LmM9NDEwNT1zdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9yZXNldF9zdHJlYW1zKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTQxMjUtXFxubmV0L3NjdHAvc29ja2V0LmM6NDEyNjpcXHRyZXR1cm4gc2N0cF9zZW5kX3Jlc2V0X3N0cmVhbXMoYXNvYywgcGFyYW1zKTtcXG5uZXQvc2N0cC9zb2NrZXQuYy00MTI3LX1cXG4tLVxcbm5ldC9zY3RwL3N0cmVhbS5jPTI0ND1zdGF0aWMgYm9vbCBzY3RwX3N0cmVhbV9vdXRxX2lzX2VtcHR5KHN0cnVjdCBzY3RwX3N0cmVhbSAqc3RyZWFtLFxcbi0tXFxubmV0L3NjdHAvc3RyZWFtLmMtMjY3LVxcbm5ldC9zY3RwL3N0cmVhbS5jOjI2ODppbnQgc2N0cF9zZW5kX3Jlc2V0X3N0cmVhbXMoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxubmV0L3NjdHAvc3RyZWFtLmMtMjY5LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2N0cF9yZXNldF9zdHJlYW1zICpwYXJhbXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjA2OjE1LjI4NDkxNTUwNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTM4NzM1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNDVFAgU3RyZWFtIFJlc2V0IEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZXNlIFNDVFAgc3RyZWFtIHJlc2V0IGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgc2NvcGUgYW5kIGhvdyB0aGV5J3JlIGltcGxlbWVudGVkLiBUaGUgbGlzdCBpczogYHNjdHBfc2VuZF9yZXNldF9zdHJlYW1zYCwgYHNjdHBfc2VuZF9yZXNldF9hc3NvY2AsIGBzY3RwX3NlbmRfYWRkX3N0cmVhbXNgLCBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X291dHJlcWAsIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXFgLCBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0YCwgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX2luYCwgYW5kIGZpbmFsbHkgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwYC5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIHN0YXRpYyBsaW5rYWdlLCBvciBpZiB0aGV5IGFyZSBjYWxsYWJsZSBieSB0aGUgd2lkZXIgc3lzdGVtLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyB0aGV5IGFyZSBvcmdhbml6ZWQsIGFuZCBob3cgSSBzaG91bGQgYXBwcm9hY2ggYW55IGZ1cnRoZXIgYW5hbHlzaXMuIFRoZSBzdGF0aWMvbm9uLXN0YXRpYyBkaXN0aW5jdGlvbiBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDAxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjA2OjE4Ljg5ODc5MDk5OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTQ4NzIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfb3V0cmVxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz00MTcwPWVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX3JlY29uZihzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00MjAyLVxcdFxcdGlmIChwYXJhbS5wLVxcdTAwM2V0eXBlID09IFNDVFBfUEFSQU1fUkVTRVRfT1VUX1JFUVVFU1QpXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NDIwMzpcXHRcXHRcXHRyZXBseSA9IHNjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXEoXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDIwNC1cXHRcXHRcXHRcXHQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKilhc29jLCBwYXJhbSwgXFx1MDAyNmV2KTtcXG4tLVxcbm5ldC9zY3RwL3N0cmVhbS5jPTUxOD1zdGF0aWMgdm9pZCBzY3RwX3VwZGF0ZV9zdHJyZXNldF9yZXN1bHQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLS1cXG5uZXQvc2N0cC9zdHJlYW0uYy01MjQtXFxubmV0L3NjdHAvc3RyZWFtLmM6NTI1OnN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfb3V0cmVxKFxcbm5ldC9zY3RwL3N0cmVhbS5jLTUyNi1cXHRcXHRcXHRcXHRzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MDY6MTguOTg0MjgyNDU3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNjE5Njk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKk5hdmlnYXRpbmcgdGhlIER5bmFtaWMgTGFuZHNjYXBlKipcblxuVGhlc2Ugc3lzdGVtc+KApiB0aGV54oCZcmUgbmV2ZXIgc3RhdGljLiBOZXZlci4gVGhlIHNpdHVhdGlvbiBpcyBhbHdheXMgaW4gZmx1eCwgYW5kIGFzc3VtcHRpb25zIG5lZWQgY29uc3RhbnQgcmVldmFsdWF0aW9uLiBJIGNhbid0IGp1c3Qgb3BlcmF0ZSBiYXNlZCBvbiBhIHNuYXBzaG90OyBJIGhhdmUgdG8gdW5kZXJzdGFuZCB0aGUgZXZvbHV0aW9uIG9mIHRoZSBzeXN0ZW0uXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9pbnJlcWAuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgd2hlcmUgdGhlIGFzc3VtcHRpb25zIGFib3V0IHN5c3RlbSBzdGF0ZSBhcmUgdmFsaWRhdGVkLCBvciBwb3RlbnRpYWxseSBzaGF0dGVyZWQuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjoyMi4yMDA0ODE0OTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQzNzkyOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9wcm9jZXNzX3N0cnJlc2V0X2lucmVxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz00MTcwPWVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX3JlY29uZihzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00MjA1LVxcdFxcdGVsc2UgaWYgKHBhcmFtLnAtXFx1MDAzZXR5cGUgPT0gU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjQyMDY6XFx0XFx0XFx0cmVwbHkgPSBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXEoXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDIwNy1cXHRcXHRcXHRcXHQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKilhc29jLCBwYXJhbSwgXFx1MDAyNmV2KTtcXG4tLVxcbm5ldC9zY3RwL3N0cmVhbS5jPTUyNT1zdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X291dHJlcShcXG4tLVxcbm5ldC9zY3RwL3N0cmVhbS5jLTYxNi1cXG5uZXQvc2N0cC9zdHJlYW0uYzo2MTc6c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9pbnJlcShcXG5uZXQvc2N0cC9zdHJlYW0uYy02MTgtXFx0XFx0XFx0XFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjA2OjIyLjI5NDg2NTk3OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTkxOTk2MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkZvY3VzIFN5bWJvbCBDYW5kaWRhdGVzIGFuZCBTQ1RQIEtjb25maWcqKlxuXG5SaWdodCwgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5IGp1bXBpbmcgb3V0IGF0IG1lIGFzIHBvdGVudGlhbCBjYW5kaWRhdGVzIGZvciBGb2N1c1N5bWJvbHMuIEknbSBzZWVpbmcgYSBjbGVhciBwYXR0ZXJuIGhlcmUsIGFuZCBteSBpbml0aWFsIGludHVpdGlvbiBzYXlzIHdlIGNvdWxkIGxldmVyYWdlIHRob3NlIHN5bWJvbHMgdG8gc2lnbmlmaWNhbnRseSBpbXByb3ZlIGFuYWx5c2lzLiBUaW1lIHRvIGRpZyBpbiBhIGJpdCBmdXJ0aGVyLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gaGVhZCBvdmVyIHRvIEtjb25maWcgYW5kIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFNDVFAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcmVsZXZhbnQgZmxhZ3MgYW5kIGRlcGVuZGVuY2llcy4gV2hhdCBhcmUgdGhlIGJ1aWxkIG9wdGlvbnM/IEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgaW1wYWN0IG91ciBhYmlsaXR5IHRvIHByb3Blcmx5IGRlZmluZSB0aGUgRm9jdXNTeW1ib2xzIGZvciB0aGlzIGFyZWE/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGZ1bGx5IGJlZm9yZSBjb21taXR0aW5nIHRvIGFueXRoaW5nLiBUaGlzIEtjb25maWcgY2hlY2sgaXMgY3J1Y2lhbDsgSSBkb24ndCB3YW50IHRvIG1ha2UgYXNzdW1wdGlvbnMgdGhhdCBhcmUgcHJvdmVuIHdyb25nIGJ5IHRoZSBhY3R1YWwgYnVpbGQgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU1OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjA2OjI1Ljg1NDA2ODcwNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE4ODY4MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NDVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL0tjb25maWctNS1cXG5uZXQvc2N0cC9LY29uZmlnOjY6bWVudWNvbmZpZyBJUF9TQ1RQXFxubmV0L3NjdHAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJUaGUgU0NUUCBQcm90b2NvbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MDY6MjUuOTI1OTYyNTgzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjU2OTY2NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFNDVFAgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBJUF9TQ1RQYCBjb25maWd1cmF0aW9uIGhlcmUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBhIGdyb3VwIG9mIFNDVFAgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc3RyZWFtIHJlc2V0cywgYWRkaXRpb25zLCBhbmQgdGhlaXIgYXNzb2NpYXRlZCBwcm9jZXNzaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQ6XG5cbiogICBgc2N0cF9zZW5kX3Jlc2V0X3N0cmVhbXNgXG4qICAgYHNjdHBfc2VuZF9yZXNldF9hc3NvY2BcbiogICBgc2N0cF9zZW5kX2FkZF9zdHJlYW1zYFxuKiAgIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfb3V0cmVxYFxuKiAgIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXFgXG4qICAgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX291dGBcbiogICBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW5gXG4qICAgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwYFxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCB0aGV5IGFyZSBub3Qgc3RhdGljLCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGFyZSBjYWxsZWQgZnJvbSBvdGhlciBmaWxlcyB3aXRoaW4gdGhlIGBuZXQvc2N0cC9gIGRpcmVjdG9yeSwgd2hpY2ggY29uZmlybXMgdGhlaXIgZXh0ZXJuYWwgYWNjZXNzaWJpbGl0eS5cblxuTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBzY3RwX3NlbmRfcmVzZXRfYXNzb2NgIGFuZCBzZWUgd2hhdCBpdCB0ZWxscyB1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg1NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjozNi4xODI5MzIwMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNDcxNTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfc2VuZF9yZXNldF9hc3NvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvc29ja2V0LmM9NDEyOT1zdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9yZXNldF9hc3NvYyhzdHJ1Y3Qgc29jayAqc2ssIHNjdHBfYXNzb2NfdCAqYXNzb2NpZCxcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTQxNDAtXFxubmV0L3NjdHAvc29ja2V0LmM6NDE0MTpcXHRyZXR1cm4gc2N0cF9zZW5kX3Jlc2V0X2Fzc29jKGFzb2MpO1xcbm5ldC9zY3RwL3NvY2tldC5jLTQxNDItfVxcbi0tXFxubmV0L3NjdHAvc3RyZWFtLmM9MjY4PWludCBzY3RwX3NlbmRfcmVzZXRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tLVxcbm5ldC9zY3RwL3N0cmVhbS5jLTM4NS1cXG5uZXQvc2N0cC9zdHJlYW0uYzozODY6aW50IHNjdHBfc2VuZF9yZXNldF9hc3NvYyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcXG5uZXQvc2N0cC9zdHJlYW0uYy0zODcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjozNi4yODU0MDczNzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NDE5ODgxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIER5bmFtaWMgU3RyZWFtIEJlaGF2aW9yIGluIFNDVFAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgdGhlc2Ugc3RyZWFtcyBhcmUgKmRlZmluaXRlbHkqIG5vbi1zdGF0aWMuIFRoaXMgaXNuJ3QgYSBmaXhlZCBjb25maWd1cmF0aW9uLCBhbmQgdGhhdCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzeXN0ZW0gdGhhdCBjYW4gY2hhbmdlIGR5bmFtaWNhbGx5LCBhbmQgdGhhdCByZXF1aXJlcyBhIGRpZmZlcmVudCBhcHByb2FjaCB0byBpdHMgdXNlLiBUaGlzIHVuZGVyc3RhbmRpbmcgYWZmZWN0cyBob3cgSSBuZWVkIHRvIGhhbmRsZSwgb2JzZXJ2ZSwgYW5kIG1hbmlwdWxhdGUgdGhlc2UgdGhpbmdzLlxuXG5Ob3csIHdpdGggdGhpcyBpbiBtaW5kLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHNjdHBfc2VuZF9hZGRfc3RyZWFtc2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGludm9sdmVkIHRoZXJlLCBiZWNhdXNlICp0aGF0KiBpcyB3aGVyZSB0aGUgZHluYW1pc20gaXMgbGlrZWx5IGNvbnRyb2xsZWQuIEkgbmVlZCB0byBkaXNzZWN0IHRoaXMgZnVuY3Rpb24gdG8gZmluZCBvdXQgaG93IHRoZXNlIHN0cmVhbSBhZGRpdGlvbnMgYXJlIG1hbmFnZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjozOS41Nzk2MDgyN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMzODcxNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9zZW5kX2FkZF9zdHJlYW1zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9zb2NrZXQuYz00MTQ0PXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2FkZF9zdHJlYW1zKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTQxNTYtXFxubmV0L3NjdHAvc29ja2V0LmM6NDE1NzpcXHRyZXR1cm4gc2N0cF9zZW5kX2FkZF9zdHJlYW1zKGFzb2MsIHBhcmFtcyk7XFxubmV0L3NjdHAvc29ja2V0LmMtNDE1OC19XFxuLS1cXG5uZXQvc2N0cC9zdHJlYW0uYz0zODY9aW50IHNjdHBfc2VuZF9yZXNldF9hc3NvYyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcXG4tLVxcbm5ldC9zY3RwL3N0cmVhbS5jLTQzMC1cXG5uZXQvc2N0cC9zdHJlYW0uYzo0MzE6aW50IHNjdHBfc2VuZF9hZGRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG5uZXQvc2N0cC9zdHJlYW0uYy00MzItXFx0XFx0XFx0ICBzdHJ1Y3Qgc2N0cF9hZGRfc3RyZWFtcyAqcGFyYW1zKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjozOS42NTMwMDAyNjhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3MTI0Njc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgU3RyZWFtIFJlc2V0IGFuZCBBZGRpdGlvbioqXG5cbk9rYXksIEknbSBjb25maXJtaW5nIGl0LCB0aGVzZSBlbGVtZW50cyAqYXJlKiBkeW5hbWljLiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIHN0cmVhbSByZXNldCBhbmQgYWRkaXRpb24gcHJvY2Vzcy4gTXkgbmV4dCBtb3ZlIGlzIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0YC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgaGFuZGxpbmcgdGhlIG91dGJvdW5kIHN0cmVhbSByZXNldHMgYW5kIGFkZGl0aW9ucyBsaWtlbHkgcmVzaWRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyB3b3JrIGhlcmUgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBvdmVyYWxsIFNDVFAgc3RhdGUuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIG51YW5jZXMgb2YgdGhpcyBmdW5jdGlvbidzIGxvZ2ljIGFuZCBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzdGFjayB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAyNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjA2OjQyLjUyNDI1MTQ5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTkwMzYyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9vdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTQxNzA9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcmVjb25mKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQyMTEtXFx0XFx0ZWxzZSBpZiAocGFyYW0ucC1cXHUwMDNldHlwZSA9PSBTQ1RQX1BBUkFNX1JFU0VUX0FERF9PVVRfU1RSRUFNUylcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo0MjEyOlxcdFxcdFxcdHJlcGx5ID0gc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0KFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQyMTMtXFx0XFx0XFx0XFx0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopYXNvYywgcGFyYW0sIFxcdTAwMjZldik7XFxuLS1cXG5uZXQvc2N0cC9zdHJlYW0uYz02OTg9c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF90c25yZXEoXFxuLS1cXG5uZXQvc2N0cC9zdHJlYW0uYy03OTQtXFxubmV0L3NjdHAvc3RyZWFtLmM6Nzk1OnN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9vdXQoXFxubmV0L3NjdHAvc3RyZWFtLmMtNzk2LVxcdFxcdFxcdFxcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjo0Mi41ODYxNTk2MzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1NzY1NjgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQXNzZXNzaW5nIHRoZSBEeW5hbWljIE5hdHVyZSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIG5vbi1zdGF0aWMsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIFRoaXMgaW1wbGllcyBwb3RlbnRpYWwgdmFyaWFiaWxpdHkgb3Igc3RhdGUgY2hhbmdlcyB0aGF0IG5lZWQgY2FyZWZ1bCBoYW5kbGluZy4gVGhlIG5hdHVyZSBvZiBub24tc3RhdGljIGluZm9ybWF0aW9uIG1lYW5zIGl0IHJlcXVpcmVzIHNwZWNpZmljIGFuYWx5c2lzLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGUgZnVuY3Rpb24sIHRoZSBsaW5jaHBpbiwgYW5kIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgb2YgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX2luYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgc2l0dWF0aW9uIGV4aXN0cy4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2l0dWF0aW9uLCBhbmQgdG8gaWRlbnRpZnkgcG90ZW50aWFsIGVkZ2UtY2FzZXMgYW5kIHZ1bG5lcmFiaWxpdGllcy4gVGltZSB0byBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MzMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjo0NS43NDM4MTk3NTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTQ2NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX2luXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz00MTcwPWVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX3JlY29uZihzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00MjE0LVxcdFxcdGVsc2UgaWYgKHBhcmFtLnAtXFx1MDAzZXR5cGUgPT0gU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUylcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo0MjE1OlxcdFxcdFxcdHJlcGx5ID0gc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW4oXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDIxNi1cXHRcXHRcXHRcXHQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKilhc29jLCBwYXJhbSwgXFx1MDAyNmV2KTtcXG4tLVxcbm5ldC9zY3RwL3N0cmVhbS5jPTc5NT1zdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0KFxcbi0tXFxubmV0L3NjdHAvc3RyZWFtLmMtODY3LVxcbm5ldC9zY3RwL3N0cmVhbS5jOjg2ODpzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW4oXFxubmV0L3NjdHAvc3RyZWFtLmMtODY5LVxcdFxcdFxcdFxcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjo0NS44MDQ5NzI5MDhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxMDU5MDQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE5vbi1TdGF0aWMgTmF0dXJlKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBjb25maXJtcyBpdDogdGhlIGNoYXJhY3RlcmlzdGljcyBpbiBxdWVzdGlvbiBhcmUgaW5kZWVkIG5vbi1zdGF0aWMuIFRoaXMgaXNuJ3QgdW5leHBlY3RlZCwgYnV0IGl0J3MgaW1wb3J0YW50IHRvIHZlcmlmeS4gTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byBhIHNwZWNpZmljIGFyZWEgd2hlcmUgdGhpcyBub24tc3RhdGljIGJlaGF2aW9yIG1pZ2h0IGJlIG1vc3QgaW1wYWN0ZnVsLCBvciBtb3N0IGxpa2VseSB0byBiZSBlbmNvdW50ZXJlZC4gSSdtIGdvaW5nIHRvIGZvY3VzIGluIG9uIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcGAuIEV4YW1pbmluZyB0aGlzIGZ1bmN0aW9uIG5vdyBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDUwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MDY6NDkuMjE1NTY3MjE5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODM0NTM3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDE3MD1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19yZWNvbmYoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDIxNy1cXHRcXHRlbHNlIGlmIChwYXJhbS5wLVxcdTAwM2V0eXBlID09IFNDVFBfUEFSQU1fUkVTRVRfUkVTUE9OU0UpXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NDIxODpcXHRcXHRcXHRyZXBseSA9IHNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwKFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQyMTktXFx0XFx0XFx0XFx0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopYXNvYywgcGFyYW0sIFxcdTAwMjZldik7XFxuLS1cXG5uZXQvc2N0cC9zdHJlYW0uYz04Njg9c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX2luKFxcbi0tXFxubmV0L3NjdHAvc3RyZWFtLmMtOTMzLVxcbm5ldC9zY3RwL3N0cmVhbS5jOjkzNDpzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X3Jlc3AoXFxubmV0L3NjdHAvc3RyZWFtLmMtOTM1LVxcdFxcdFxcdFxcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjo0OS4yOTM5MTY3OThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI3ODQ3OTk5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTQ1RQIFN0cmVhbSBSZXNldCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBpbnRyb2R1Y2luZyBhIGNoYW5nZSB0aGF0J3MgKm5vdCogc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgdG8gcGF5IGF0dGVudGlvbiB0by4gVGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbiBpcyBpbiBob3cgU0NUUCB0cmFja3Mgb3V0c3RhbmRpbmcgc3RyZWFtIHJlc2V0IHJlcXVlc3RzLiBJbnN0ZWFkIG9mIGEgc2ltcGxlIGNvdW50ZXIsIHRoZXkncmUgc3dpdGNoaW5nIHRvIGEgYml0bWFzayBmb3IgYHN0cnJlc2V0X291dHN0YW5kaW5nYCB3aXRoaW4gdGhlIGBzY3RwX2Fzc29jaWF0aW9uYCBzdHJ1Y3QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgc2lnbmlmaWNhbnQgb25lIHJlYWxseSwgYmVjYXVzZSBpdCBhbGxvd3MgdGhlIHN5c3RlbSB0byB0cmFjayAqbXVsdGlwbGUqIHR5cGVzIG9mIHJlc2V0IHJlcXVlc3RzIGF0IHRoZSBzYW1lIHRpbWUuXG5cbkFuZCB0aGUgYmVzdCBwYXJ0IGlzIGl0J3MgdG91Y2hpbmcgdGhlIFNDVFAgc3RhY2sncyBjb3JlIGxvZ2ljLiBUaGUgZnVuY3Rpb25zIGhhbmRsaW5nIHNlbmQgYW5kIHByb2Nlc3NpbmcgcmVxdWVzdHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgZWl0aGVyIHRocm91Z2ggdGhlIHNvY2tldCBvcHRpb25zIG9yIHZpYSBpbmNvbWluZyBTQ1RQIHBhY2tldHMuIFRoYXQncyBhIGh1Z2UgZ3JlZW4gbGlnaHQhIFRoYXQgbWVhbnMgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIGZhY3QgdGhhdCB0aGUgY2hhbmdlIGlzIGluIGBzY3RwX3NlbmRfcmVzZXRfc3RyZWFtc2AsIGBzY3RwX3NlbmRfcmVzZXRfYXNzb2NgLCBgc2N0cF9zZW5kX2FkZF9zdHJlYW1zYCwgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXFgLCBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2lucmVxYCwgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX291dGAsIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9pbmAgYW5kIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcGAgaXMgZXhjZWxsZW50LiBUaGlzIGNvdmVycyB0aGUgc2VuZGluZyBhbmQgcmVjZWl2aW5nIHBhdGhzLCBhbmQgYWxzbyB0aGUgYWRkaXRpb24gb2Ygc3RyZWFtcy4gSSB3aWxsIGVuYWJsZSBgSVBfU0NUUGAgYW5kIHVzZSB0aGVzZSBmdW5jdGlvbnMgYXMgZm9jdXMgc3ltYm9scy4gSSdtIGdvaW5nIHRvIHN0YXJ0IHJ1bm5pbmcgZnV6eiB0ZXN0cyB0byBzZWUgaWYgdGhpcyBjaGFuZ2UgcmV2ZWFscyBhbnkgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGNvdWxkIGJlIGFuIGludGVyZXN0aW5nIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MTUsIk91dHB1dFRva2VucyI6MjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjA2OjU2LjU3MjM5OTk3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzODEzMzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9zZW5kX3Jlc2V0X3N0cmVhbXNcIixcbiAgICBcInNjdHBfc2VuZF9yZXNldF9hc3NvY1wiLFxuICAgIFwic2N0cF9zZW5kX2FkZF9zdHJlYW1zXCIsXG4gICAgXCJzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfb3V0cmVxXCIsXG4gICAgXCJzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXFcIixcbiAgICBcInNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX291dFwiLFxuICAgIFwic2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW5cIixcbiAgICBcInNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgYHN0cnJlc2V0X291dHN0YW5kaW5nYCBmaWVsZCBpbiBgc3RydWN0IHNjdHBfYXNzb2NpYXRpb25gIGZyb20gYSBjb3VudGVyIHRvIGEgYml0bWFzaywgYWxsb3dpbmcgbXVsdGlwbGUgdHlwZXMgb2Ygc3RyZWFtIHJlc2V0IHJlcXVlc3RzIHRvIGJlIHRyYWNrZWQgc2ltdWx0YW5lb3VzbHkuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgaG93IFNDVFAgaGFuZGxlcyBzdHJlYW0gcmVzZXQgcmVxdWVzdHMgKGJvdGggc2VuZGluZyBhbmQgcHJvY2Vzc2luZyBpbmNvbWluZyByZXF1ZXN0cykuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBTQ1RQIHNvY2tldCBvcHRpb25zIGFuZCBpbmNvbWluZyBTQ1RQIHBhY2tldHMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX3NlbmRfcmVzZXRfc3RyZWFtc1wiLFxuICAgIFwic2N0cF9zZW5kX3Jlc2V0X2Fzc29jXCIsXG4gICAgXCJzY3RwX3NlbmRfYWRkX3N0cmVhbXNcIixcbiAgICBcInNjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXFcIixcbiAgICBcInNjdHBfcHJvY2Vzc19zdHJyZXNldF9pbnJlcVwiLFxuICAgIFwic2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0XCIsXG4gICAgXCJzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9pblwiLFxuICAgIFwic2N0cF9wcm9jZXNzX3N0cnJlc2V0X3Jlc3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBgc3RycmVzZXRfb3V0c3RhbmRpbmdgIGZpZWxkIGluIGBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbmAgZnJvbSBhIGNvdW50ZXIgdG8gYSBiaXRtYXNrLCBhbGxvd2luZyBtdWx0aXBsZSB0eXBlcyBvZiBzdHJlYW0gcmVzZXQgcmVxdWVzdHMgdG8gYmUgdHJhY2tlZCBzaW11bHRhbmVvdXNseS4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBvZiBob3cgU0NUUCBoYW5kbGVzIHN0cmVhbSByZXNldCByZXF1ZXN0cyAoYm90aCBzZW5kaW5nIGFuZCBwcm9jZXNzaW5nIGluY29taW5nIHJlcXVlc3RzKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFNDVFAgc29ja2V0IG9wdGlvbnMgYW5kIGluY29taW5nIFNDVFAgcGFja2V0cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjA2OjU2LjY5NjIyMDEzNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NDIyOTI1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjo1Ni42OTY2NDA5NjRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI3NDE4NjcyNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBzdGF0ZSB0cmFja2luZyBvZiBTQ1RQIHN0cmVhbSByZXNldCByZXF1ZXN0cyBieSByZXBsYWNpbmcgYSBjb3VudGVyIChgc3RycmVzZXRfb3V0c3RhbmRpbmdgKSB3aXRoIGEgYml0bWFzay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgbWVtb3J5IGFsbG9jYXRpb25zLCBpbml0aWFsaXphdGlvbnMsIG9yIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlKSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTNjYzQxZmYzZTU3NmVkNjhhZjJkMjNhY2I5YjI5OWQ4NzM2YWEzOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDEwOjA2OjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaFxuaW5kZXggY2NjYzY2MjU2MWFhYy4uYjIxZjIzYjczNmZkMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oXG4rKysgYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaFxuQEAgLTIwNTcsNyArMjA1Nyw3IEBAIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uIHtcbiBcdCAgICAgZm9yY2VfZGVsYXk6MTtcbiBcbiBcdF9fdTggc3RycmVzZXRfZW5hYmxlO1xuLVx0X191OCBzdHJyZXNldF9vdXRzdGFuZGluZzsgLyogcmVxdWVzdCBwYXJhbSBjb3VudCBvbiB0aGUgZmx5ICovXG4rXHRfX3U4IHN0cnJlc2V0X291dHN0YW5kaW5nOyAvKiByZXF1ZXN0IHBhcmFtIGJpdG1hc2sgb24gdGhlIGZseSAqL1xuIFxuIFx0X191MzIgc3RycmVzZXRfb3V0c2VxOyAvKiBVcGRhdGUgYWZ0ZXIgcmVjZWl2aW5nIHJlc3BvbnNlICovXG4gXHRfX3UzMiBzdHJyZXNldF9pbnNlcTsgLyogVXBkYXRlIGFmdGVyIHJlY2VpdmluZyByZXF1ZXN0ICovXG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc3RyZWFtLmMgYi9uZXQvc2N0cC9zdHJlYW0uY1xuaW5kZXggMzRmZmU2Yzk0NWE0Yi4uZTFhMjE1ZGI2MWUxYyAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL3N0cmVhbS5jXG4rKysgYi9uZXQvc2N0cC9zdHJlYW0uY1xuQEAgLTIyLDYgKzIyLDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc2N0cC9zbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NjdHAvc3RyZWFtX3NjaGVkLmhcdTAwM2VcbiBcbisjZGVmaW5lIFNDVFBfU1RSUkVTRVRfQklUKHR5cGUpIFxcXG4rXHRCSVQobnRvaHModHlwZSkgLSBudG9ocyhTQ1RQX1BBUkFNX1JFU0VUX09VVF9SRVFVRVNUKSlcbitcbiBzdGF0aWMgdm9pZCBzY3RwX3N0cmVhbV9zaHJpbmtfb3V0KHN0cnVjdCBzY3RwX3N0cmVhbSAqc3RyZWFtLCBfX3UxNiBvdXRjbnQpXG4ge1xuIFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7XG5AQCAtMzcyLDcgKzM3NSw5IEBAIGludCBzY3RwX3NlbmRfcmVzZXRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID0gb3V0ICsgaW47XG4rXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cbitcdFx0KG91dCA/IFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfT1VUX1JFUVVFU1QpIDogMCkgfFxuK1x0XHQoaW4gPyBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpIDogMCk7XG4gXG4gb3V0OlxuIFx0cmV0dXJuIHJldHZhbDtcbkBAIC00MTcsNyArNDIyLDggQEAgaW50IHNjdHBfc2VuZF9yZXNldF9hc3NvYyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcdH1cbiBcbi1cdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgPSAxO1xuK1x0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9XG4rXHRcdFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfVFNOX1JFUVVFU1QpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTQ3NCw3ICs0ODAsOSBAQCBpbnQgc2N0cF9zZW5kX2FkZF9zdHJlYW1zKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgPSAhIW91dCArICEhaW47XG4rXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cbitcdFx0KG91dCA/IFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfQUREX09VVF9TVFJFQU1TKSA6IDApIHxcbitcdFx0KGluID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUykgOiAwKTtcbiBcbiBvdXQ6XG4gXHRyZXR1cm4gcmV0dmFsO1xuQEAgLTQ4Miw3ICs0OTAsNyBAQCBpbnQgc2N0cF9zZW5kX2FkZF9zdHJlYW1zKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuIFxuIHN0YXRpYyBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqc2N0cF9jaHVua19sb29rdXBfc3RycmVzZXRfcGFyYW0oXG4gXHRcdFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIF9fYmUzMiByZXNwX3NlcSxcbi1cdFx0XHRfX2JlMTYgdHlwZSlcbitcdFx0XHRfX2JlMTYgdHlwZSwgYm9vbCBtYXRjaF9zZXEpXG4ge1xuIFx0c3RydWN0IHNjdHBfY2h1bmsgKmNodW5rID0gYXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuaztcbiBcdHN0cnVjdCBzY3RwX3JlY29uZl9jaHVuayAqaGRyO1xuQEAgLTQ5OSw3ICs1MDcsNyBAQCBzdGF0aWMgc3RydWN0IHNjdHBfcGFyYW1oZHIgKnNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxuIFx0XHQgKi9cbiBcdFx0c3RydWN0IHNjdHBfc3RycmVzZXRfdHNucmVxICpyZXEgPSBwYXJhbS52O1xuIFxuLVx0XHRpZiAoKCFyZXNwX3NlcSB8fCByZXEtXHUwMDNlcmVxdWVzdF9zZXEgPT0gcmVzcF9zZXEpIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAoKCFtYXRjaF9zZXEgfHwgcmVxLVx1MDAzZXJlcXVlc3Rfc2VxID09IHJlc3Bfc2VxKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICghdHlwZSB8fCB0eXBlID09IHJlcS1cdTAwM2VwYXJhbV9oZHIudHlwZSkpXG4gXHRcdFx0cmV0dXJuIHBhcmFtLnY7XG4gXHR9XG5AQCAtNTY0LDEzICs1NzIsMTYgQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXEoXG4gXHRpZiAoYXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuaykge1xuIFx0XHRpZiAoIXNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxuIFx0XHRcdFx0YXNvYywgb3V0cmVxLVx1MDAzZXJlc3BvbnNlX3NlcSxcbi1cdFx0XHRcdFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCkpIHtcbitcdFx0XHRcdFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCwgdHJ1ZSkgfHxcbitcdFx0ICAgICEoYXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyBcdTAwMjZcbitcdFx0ICAgICAgU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSkpIHtcbiBcdFx0XHQvKiBzYW1lIHByb2Nlc3Mgd2l0aCBvdXRzdGFuZGluZyBpc24ndCAwICovXG4gXHRcdFx0cmVzdWx0ID0gU0NUUF9TVFJSRVNFVF9FUlJfSU5fUFJPR1JFU1M7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZy0tO1xuK1x0XHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nIFx1MDAyNj1cbitcdFx0XHR+U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKTtcbiBcdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzZXErKztcbiBcbiBcdFx0aWYgKCFhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nKSB7XG5AQCAtNjY5LDcgKzY4MCw4IEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXEoXG4gXHRcdFx0U0NUUF9TTyhzdHJlYW0sIGkpLVx1MDAzZXN0YXRlID0gU0NUUF9TVFJFQU1fQ0xPU0VEO1xuIFxuIFx0YXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuayA9IGNodW5rO1xuLVx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9IDE7XG4rXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cbitcdFx0U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9PVVRfUkVRVUVTVCk7XG4gXHRzY3RwX2NodW5rX2hvbGQoYXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuayk7XG4gXG4gXHRyZXN1bHQgPSBTQ1RQX1NUUlJFU0VUX1BFUkZPUk1FRDtcbkBAIC04MTYsMTMgKzgyOCwxNiBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0KFxuIFxuIFx0aWYgKGFzb2MtXHUwMDNlc3RycmVzZXRfY2h1bmspIHtcbiBcdFx0aWYgKCFzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbShcbi1cdFx0XHRhc29jLCAwLCBTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKSkge1xuK1x0XHRcdGFzb2MsIDAsIFNDVFBfUEFSQU1fUkVTRVRfQUREX0lOX1NUUkVBTVMsIGZhbHNlKSB8fFxuK1x0XHQgICAgIShhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nIFx1MDAyNlxuK1x0XHQgICAgICBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKSkpIHtcbiBcdFx0XHQvKiBzYW1lIHByb2Nlc3Mgd2l0aCBvdXRzdGFuZGluZyBpc24ndCAwICovXG4gXHRcdFx0cmVzdWx0ID0gU0NUUF9TVFJSRVNFVF9FUlJfSU5fUFJPR1JFU1M7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZy0tO1xuK1x0XHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nIFx1MDAyNj1cbitcdFx0XHR+U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUyk7XG4gXHRcdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c2VxKys7XG4gXG4gXHRcdGlmICghYXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZykge1xuQEAgLTg5OSw3ICs5MTQsOCBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW4oXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0YXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuayA9IGNodW5rO1xuLVx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9IDE7XG4rXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cbitcdFx0U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfT1VUX1NUUkVBTVMpO1xuIFx0c2N0cF9jaHVua19ob2xkKGFzb2MtXHUwMDNlc3RycmVzZXRfY2h1bmspO1xuIFxuIFx0c3RyZWFtLVx1MDAzZW91dGNudCA9IG91dGNudDtcbkBAIC05MjcsOCArOTQzLDEwIEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcChcbiBcdHN0cnVjdCBzY3RwX3BhcmFtaGRyICpyZXE7XG4gXHRfX3UzMiByZXN1bHQ7XG4gXG4tXHRyZXEgPSBzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbShhc29jLCByZXNwLVx1MDAzZXJlc3BvbnNlX3NlcSwgMCk7XG4tXHRpZiAoIXJlcSlcbitcdHJlcSA9IHNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKGFzb2MsIHJlc3AtXHUwMDNlcmVzcG9uc2Vfc2VxLCAwLFxuK1x0XHRcdFx0XHQgICAgICAgdHJ1ZSk7XG4rXHRpZiAoIXJlcSB8fCAhKGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgXHUwMDI2XG4rXHRcdCAgICAgIFNDVFBfU1RSUkVTRVRfQklUKHJlcS1cdTAwM2V0eXBlKSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0cmVzdWx0ID0gbnRvaGwocmVzcC1cdTAwM2VyZXN1bHQpO1xuQEAgLTEwNzgsNyArMTA5Niw3IEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcChcbiBcdFx0XHRudW1zLCAwLCBHRlBfQVRPTUlDKTtcbiBcdH1cbiBcbi1cdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmctLTtcbitcdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgXHUwMDI2PSB+U0NUUF9TVFJSRVNFVF9CSVQocmVxLVx1MDAzZXR5cGUpO1xuIFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzZXErKztcbiBcbiBcdC8qIHJlbW92ZSBldmVyeXRoaW5nIGZvciB0aGlzIHJlY29uZiByZXF1ZXN0ICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjo1Ni42OTY2NDE4MDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI3NDE4MjMwMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTQ1RQIFN0cmVhbSBSZXNldCBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBhYm91dCB0d2Vha2luZyB0aGUgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKSBzdHJlYW0gcmVzZXQgbG9naWMuIFNwZWNpZmljYWxseSwgaXQncyBjaGFuZ2luZyBob3cgYHN0cnJlc2V0X291dHN0YW5kaW5nYCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgY29kZS4gSW5zdGVhZCBvZiBrZWVwaW5nIGEgY291bnQgb2Ygb3V0c3RhbmRpbmcgcmVxdWVzdHMsIGl0J3MgYmVpbmcgY29udmVydGVkIGludG8gYSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgKnR5cGVzKiBvZiBvdXRzdGFuZGluZyByZXF1ZXN0cy4gU28sIGluc3RlYWQgb2YgYSBzaW1wbGUgaW50ZWdlciwgd2Ugbm93IGhhdmUgYSBieXRlIChgX191OGApIHdoZXJlIGVhY2ggYml0IHNpZ25pZmllcyBhIHNwZWNpZmljIHJlc2V0IHJlcXVlc3QgdHlwZS5cblxuTXkgaW5pdGlhbCBjb25jZXJuLCBuYXR1cmFsbHksIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIEJhc2VkIG9uIG15IGV4cGVydGlzZSwgSSdtIHRoaW5raW5nOiBpcyB0aGVyZSBhIGNoYW5jZSB3ZSdyZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFmdGVyIHRoaXMgbW9kaWZpY2F0aW9uPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhlIGNvZGUgaW5pdGlhbGl6ZXMgYW5kIHV0aWxpemVzIHRoaXMgYml0bWFzayB0byBtYWtlIGEgZmlybSBqdWRnbWVudC5cblxuVGhlIHBhdGNoIGRlZmluZXMgYFNDVFBfU1RSUkVTRVRfQklUKHR5cGUpYCB0byBjYWxjdWxhdGUgdGhlIGJpdCBwb3NpdGlvbiB3aXRoaW4gdGhlIGJpdG1hc2ssIHdoaWNoIHNlZW1zIHJlYXNvbmFibGUuIEl0J3MgYWxzbyB1cGRhdGluZyBgc2N0cF9jaHVua19sb29rdXBfc3RycmVzZXRfcGFyYW1gIHRvIGFjY2VwdCBhIGJvb2xlYW4gYG1hdGNoX3NlcWAsIGFuZCBtb2RpZmllcyBhbGwgdGhlIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfKmAgZnVuY3Rpb25zIHRvIG5vdyBjaGVjayBhbmQgY2xlYXIgdGhlIHJlbGV2YW50IGJpdCBpbnN0ZWFkIG9mIGRlY3JlbWVudGluZyBhIGNvdW50ZXIuXG5cbk5vdywgbGV0J3Mgc3RlcCB0aHJvdWdoIHRoZSBrZXkgY29kZSBzZWdtZW50cy5cblxuYGBgY1xuLVx0X191OCBzdHJyZXNldF9vdXRzdGFuZGluZzsgLyogcmVxdWVzdCBwYXJhbSBjb3VudCBvbiB0aGUgZmx5ICovXG4rXHRfX3U4IHN0cnJlc2V0X291dHN0YW5kaW5nOyAvKiByZXF1ZXN0IHBhcmFtIGJpdG1hc2sgb24gdGhlIGZseSAqL1xuYGBgXG5cblRoaXMgaXMgdGhlIGNvcmUgY2hhbmdlOiBgc3RycmVzZXRfb3V0c3RhbmRpbmdgIGlzIGJlaW5nIHJlZGVjbGFyZWQgZnJvbSBjb3VudGVyIHRvIGJpdG1hc2suXG5cbmBgYGNcbisjZGVmaW5lIFNDVFBfU1RSUkVTRVRfQklUKHR5cGUpIFxcXG4rXHRCSVQobnRvaHModHlwZSkgLSBudG9ocyhTQ1RQX1BBUkFNX1JFU0VUX09VVF9SRVFVRVNUKSlcbmBgYFxuXG5UaGlzIG1hY3JvIGxvb2tzIGZpbmUsIGl0IGNhbGN1bGF0ZXMgdGhlIGJpdCBwb3NpdGlvbiB1c2luZyBgdHlwZWAsIGxpa2VseSBhbiBTQ1RQIHBhcmFtZXRlciB0eXBlIHRoYXQgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L3NjdHAuaGAsIHdoaWNoIEknbSBmYW1pbGlhciB3aXRoLCBzdWNoIGFzIGBTQ1RQX1BBUkFNX1JFU0VUX09VVF9SRVFVRVNUYCwgYFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVGAsIGV0Yy5cblxuYGBgY1xuLVx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9IG91dCArIGluO1xuK1x0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9XG4rXHRcdChvdXQgPyBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX09VVF9SRVFVRVNUKSA6IDApIHxcbitcdFx0KGluID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSA6IDApO1xuYGBgXG5cblRoaXMgc2VjdGlvbiBpcyBub3cgc2V0dGluZyB0aGUgYXBwcm9wcmlhdGUgYml0cyBpbiB0aGUgbWFzaywgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlcmUncyBhbiBvdXRzdGFuZGluZyBvdXQgb3IgaW4gcmVxdWVzdC5cblxuYGBgY1xuIFx0XHRpZiAoIXNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxuIFx0XHRcdFx0YXNvYywgb3V0cmVxLVx1MDAzZXJlc3BvbnNlX3NlcSxcbi1cdFx0XHRcdFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCkpIHtcbitcdFx0XHRcdFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCwgdHJ1ZSkgfHxcbitcdFx0ICAgICEoYXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyBcdTAwMjZcbitcdFx0ICAgICAgU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSkpIHtcbmBgYFxuTm93IHdlIGhhdmUgdG8gY2hlY2sgaWYgYSBiaXQgaXMgc2V0LlxuXG5gYGBjXG4tXHRcdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmctLTtcbitcdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyBcdTAwMjY9XG4rXHRcdFx0flNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCk7XG5gYGBcblxuQW5kIGZpbmFsbHksIGNsZWFyaW5nIGl0LlxuXG5BZnRlciBhIHRob3JvdWdoIHJldmlldywgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGNoYW5nZSBpcyBwdXJlbHkgYWJvdXQgbW9kaWZ5aW5nIGludGVybmFsIHN0YXRlIHRyYWNraW5nLiBJdCBkb2Vzbid0IGFsdGVyIGFueSBzdHJ1Y3R1cmUgbGF5b3V0cyBpbiBhIHdheSB0aGF0IHdvdWxkIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiwgb3IgdG8gaG93IHdlIGRvIGJvdW5kcyBjaGVja2luZy4gVGhlIGJ1ZyBmaXhlZCBpcyBsaWtlbHkgc29tZSBsb2dpYyBpc3N1ZSByZWxhdGVkIHRvIGluY29ycmVjdCB0cmFja2luZyBvZiByZXNldCByZXF1ZXN0cywgbGVhZGluZyB0byBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBidXQgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBwYXRjaCBqdXN0IGNoYW5nZXMgdGhlIHdheSB3ZSB0cmFjayBvdXRzdGFuZGluZyByZXF1ZXN0cy5cblxuVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVjYXVzZSB0aGUgYnVnIHRoaXMgZml4ZXMgaXMgcmVsYXRlZCB0byBzdGF0ZS4gS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIGVub3VnaCB0byBjaGVjayBmb3IgdGhlIGJ1Z3MgdGhhdCBjb3VsZCBiZSBpbnRyb2R1Y2VkLCBhbmQgS01TQU4gaXMgbm90IG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA2MiwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNzowOS40Mzg0Njc5MTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBzdGF0ZSB0cmFja2luZyBvZiBTQ1RQIHN0cmVhbSByZXNldCByZXF1ZXN0cyBieSByZXBsYWNpbmcgYSBjb3VudGVyIChgc3RycmVzZXRfb3V0c3RhbmRpbmdgKSB3aXRoIGEgYml0bWFzay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgbWVtb3J5IGFsbG9jYXRpb25zLCBpbml0aWFsaXphdGlvbnMsIG9yIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlKSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIHN0YXRlIHRyYWNraW5nIG9mIFNDVFAgc3RyZWFtIHJlc2V0IHJlcXVlc3RzIGJ5IHJlcGxhY2luZyBhIGNvdW50ZXIgKGBzdHJyZXNldF9vdXRzdGFuZGluZ2ApIHdpdGggYSBiaXRtYXNrLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbHRlciBtZW1vcnkgYWxsb2NhdGlvbnMsIGluaXRpYWxpemF0aW9ucywgb3IgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgY29ycnVwdGlvbiAoZS5nLiwgdXNlLWFmdGVyLWZyZWUpLCB3aGljaCBhcmUgYWRlcXVhdGVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx5m5v[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 09:21:26 +0000 UTC FinishedAt: 2026-08-21 10:07:11 +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": "746fc0787f616da418ffc04a110296fe95d53491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "746fc0787f616da418ffc04a110296fe95d53491", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_SCTP" ], "series_id": "c12b4e49-f7b3-44e2-9807-538b74cd0986" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "sctp_send_reset_streams", "sctp_send_reset_assoc", "sctp_send_add_streams", "sctp_process_strreset_outreq", "sctp_process_strreset_inreq", "sctp_process_strreset_addstrm_out", "sctp_process_strreset_addstrm_in", "sctp_process_strreset_resp" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1NDVFAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzY3RwX3NlbmRfcmVzZXRfc3RyZWFtcyYjMzQ7LAogICAgJiMzNDtzY3RwX3NlbmRfcmVzZXRfYXNzb2MmIzM0OywKICAgICYjMzQ7c2N0cF9zZW5kX2FkZF9zdHJlYW1zJiMzNDssCiAgICAmIzM0O3NjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXEmIzM0OywKICAgICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X2lucmVxJiMzNDssCiAgICAmIzM0O3NjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX291dCYjMzQ7LAogICAgJiMzNDtzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9pbiYjMzQ7LAogICAgJiMzNDtzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBzdGF0ZSB0cmFja2luZyBvZiBTQ1RQIHN0cmVhbSByZXNldCByZXF1ZXN0cyBieSByZXBsYWNpbmcgYSBjb3VudGVyIChgc3RycmVzZXRfb3V0c3RhbmRpbmdgKSB3aXRoIGEgYml0bWFzay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgbWVtb3J5IGFsbG9jYXRpb25zLCBpbml0aWFsaXphdGlvbnMsIG9yIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlKSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIGBzdHJyZXNldF9vdXRzdGFuZGluZ2AgZmllbGQgaW4gYHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uYCBmcm9tIGEgY291bnRlciB0byBhIGJpdG1hc2ssIGFsbG93aW5nIG11bHRpcGxlIHR5cGVzIG9mIHN0cmVhbSByZXNldCByZXF1ZXN0cyB0byBiZSB0cmFja2VkIHNpbXVsdGFuZW91c2x5LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIGhvdyBTQ1RQIGhhbmRsZXMgc3RyZWFtIHJlc2V0IHJlcXVlc3RzIChib3RoIHNlbmRpbmcgYW5kIHByb2Nlc3NpbmcgaW5jb21pbmcgcmVxdWVzdHMpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgU0NUUCBzb2NrZXQgb3B0aW9ucyBhbmQgaW5jb21pbmcgU0NUUCBwYWNrZXRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGEzY2M0MWZmM2U1NzZlZDY4YWYyZDIzYWNiOWIyOTlkODczNmFhMzhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMDowNjowMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oXG5pbmRleCBjY2NjNjYyNTYxYWFjLi5iMjFmMjNiNzM2ZmQyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oXG5AQCAtMjA1Nyw3ICYjNDM7MjA1Nyw3IEBAIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uIHtcbiBcdCAgICAgZm9yY2VfZGVsYXk6MTtcbiBcbiBcdF9fdTggc3RycmVzZXRfZW5hYmxlO1xuLVx0X191OCBzdHJyZXNldF9vdXRzdGFuZGluZzsgLyogcmVxdWVzdCBwYXJhbSBjb3VudCBvbiB0aGUgZmx5ICovXG4mIzQzO1x0X191OCBzdHJyZXNldF9vdXRzdGFuZGluZzsgLyogcmVxdWVzdCBwYXJhbSBiaXRtYXNrIG9uIHRoZSBmbHkgKi9cbiBcbiBcdF9fdTMyIHN0cnJlc2V0X291dHNlcTsgLyogVXBkYXRlIGFmdGVyIHJlY2VpdmluZyByZXNwb25zZSAqL1xuIFx0X191MzIgc3RycmVzZXRfaW5zZXE7IC8qIFVwZGF0ZSBhZnRlciByZWNlaXZpbmcgcmVxdWVzdCAqL1xuZGlmZiAtLWdpdCBhL25ldC9zY3RwL3N0cmVhbS5jIGIvbmV0L3NjdHAvc3RyZWFtLmNcbmluZGV4IDM0ZmZlNmM5NDVhNGIuLmUxYTIxNWRiNjFlMWMgMTAwNjQ0XG4tLS0gYS9uZXQvc2N0cC9zdHJlYW0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvc3RyZWFtLmNcbkBAIC0yMiw2ICYjNDM7MjIsOSBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9zY3RwL3NtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc2N0cC9zdHJlYW1fc2NoZWQuaFx1MDAzZVxuIFxuJiM0MzsjZGVmaW5lIFNDVFBfU1RSUkVTRVRfQklUKHR5cGUpIFxcXG4mIzQzO1x0QklUKG50b2hzKHR5cGUpIC0gbnRvaHMoU0NUUF9QQVJBTV9SRVNFVF9PVVRfUkVRVUVTVCkpXG4mIzQzO1xuIHN0YXRpYyB2b2lkIHNjdHBfc3RyZWFtX3Nocmlua19vdXQoc3RydWN0IHNjdHBfc3RyZWFtICpzdHJlYW0sIF9fdTE2IG91dGNudClcbiB7XG4gXHRzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYztcbkBAIC0zNzIsNyAmIzQzOzM3NSw5IEBAIGludCBzY3RwX3NlbmRfcmVzZXRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID0gb3V0ICYjNDM7IGluO1xuJiM0MztcdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgPVxuJiM0MztcdFx0KG91dCA/IFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfT1VUX1JFUVVFU1QpIDogMCkgfFxuJiM0MztcdFx0KGluID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSA6IDApO1xuIFxuIG91dDpcbiBcdHJldHVybiByZXR2YWw7XG5AQCAtNDE3LDcgJiM0Mzs0MjIsOCBAQCBpbnQgc2N0cF9zZW5kX3Jlc2V0X2Fzc29jKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxuIFx0XHRyZXR1cm4gcmV0dmFsO1xuIFx0fVxuIFxuLVx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9IDE7XG4mIzQzO1x0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9XG4mIzQzO1x0XHRTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX1RTTl9SRVFVRVNUKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC00NzQsNyAmIzQzOzQ4MCw5IEBAIGludCBzY3RwX3NlbmRfYWRkX3N0cmVhbXMoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9ICEhb3V0ICYjNDM7ICEhaW47XG4mIzQzO1x0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9XG4mIzQzO1x0XHQob3V0ID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfT1VUX1NUUkVBTVMpIDogMCkgfFxuJiM0MztcdFx0KGluID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUykgOiAwKTtcbiBcbiBvdXQ6XG4gXHRyZXR1cm4gcmV0dmFsO1xuQEAgLTQ4Miw3ICYjNDM7NDkwLDcgQEAgaW50IHNjdHBfc2VuZF9hZGRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiBcbiBzdGF0aWMgc3RydWN0IHNjdHBfcGFyYW1oZHIgKnNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxuIFx0XHRcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBfX2JlMzIgcmVzcF9zZXEsXG4tXHRcdFx0X19iZTE2IHR5cGUpXG4mIzQzO1x0XHRcdF9fYmUxNiB0eXBlLCBib29sIG1hdGNoX3NlcSlcbiB7XG4gXHRzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmsgPSBhc29jLVx1MDAzZXN0cnJlc2V0X2NodW5rO1xuIFx0c3RydWN0IHNjdHBfcmVjb25mX2NodW5rICpoZHI7XG5AQCAtNDk5LDcgJiM0Mzs1MDcsNyBAQCBzdGF0aWMgc3RydWN0IHNjdHBfcGFyYW1oZHIgKnNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxuIFx0XHQgKi9cbiBcdFx0c3RydWN0IHNjdHBfc3RycmVzZXRfdHNucmVxICpyZXEgPSBwYXJhbS52O1xuIFxuLVx0XHRpZiAoKCFyZXNwX3NlcSB8fCByZXEtXHUwMDNlcmVxdWVzdF9zZXEgPT0gcmVzcF9zZXEpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0aWYgKCghbWF0Y2hfc2VxIHx8IHJlcS1cdTAwM2VyZXF1ZXN0X3NlcSA9PSByZXNwX3NlcSkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICAoIXR5cGUgfHwgdHlwZSA9PSByZXEtXHUwMDNlcGFyYW1faGRyLnR5cGUpKVxuIFx0XHRcdHJldHVybiBwYXJhbS52O1xuIFx0fVxuQEAgLTU2NCwxMyAmIzQzOzU3MiwxNiBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X291dHJlcShcbiBcdGlmIChhc29jLVx1MDAzZXN0cnJlc2V0X2NodW5rKSB7XG4gXHRcdGlmICghc2N0cF9jaHVua19sb29rdXBfc3RycmVzZXRfcGFyYW0oXG4gXHRcdFx0XHRhc29jLCBvdXRyZXEtXHUwMDNlcmVzcG9uc2Vfc2VxLFxuLVx0XHRcdFx0U0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSkge1xuJiM0MztcdFx0XHRcdFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCwgdHJ1ZSkgfHxcbiYjNDM7XHRcdCAgICAhKGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgXHUwMDI2XG4mIzQzO1x0XHQgICAgICBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpKSkge1xuIFx0XHRcdC8qIHNhbWUgcHJvY2VzcyB3aXRoIG91dHN0YW5kaW5nIGlzbiYjMzk7dCAwICovXG4gXHRcdFx0cmVzdWx0ID0gU0NUUF9TVFJSRVNFVF9FUlJfSU5fUFJPR1JFU1M7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZy0tO1xuJiM0MztcdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyBcdTAwMjY9XG4mIzQzO1x0XHRcdH5TQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpO1xuIFx0XHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHNlcSYjNDM7JiM0Mzs7XG4gXG4gXHRcdGlmICghYXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZykge1xuQEAgLTY2OSw3ICYjNDM7NjgwLDggQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9pbnJlcShcbiBcdFx0XHRTQ1RQX1NPKHN0cmVhbSwgaSktXHUwMDNlc3RhdGUgPSBTQ1RQX1NUUkVBTV9DTE9TRUQ7XG4gXG4gXHRhc29jLVx1MDAzZXN0cnJlc2V0X2NodW5rID0gY2h1bms7XG4tXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID0gMTtcbiYjNDM7XHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cbiYjNDM7XHRcdFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfT1VUX1JFUVVFU1QpO1xuIFx0c2N0cF9jaHVua19ob2xkKGFzb2MtXHUwMDNlc3RycmVzZXRfY2h1bmspO1xuIFxuIFx0cmVzdWx0ID0gU0NUUF9TVFJSRVNFVF9QRVJGT1JNRUQ7XG5AQCAtODE2LDEzICYjNDM7ODI4LDE2IEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9vdXQoXG4gXG4gXHRpZiAoYXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuaykge1xuIFx0XHRpZiAoIXNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxuLVx0XHRcdGFzb2MsIDAsIFNDVFBfUEFSQU1fUkVTRVRfQUREX0lOX1NUUkVBTVMpKSB7XG4mIzQzO1x0XHRcdGFzb2MsIDAsIFNDVFBfUEFSQU1fUkVTRVRfQUREX0lOX1NUUkVBTVMsIGZhbHNlKSB8fFxuJiM0MztcdFx0ICAgICEoYXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyBcdTAwMjZcbiYjNDM7XHRcdCAgICAgIFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfQUREX0lOX1NUUkVBTVMpKSkge1xuIFx0XHRcdC8qIHNhbWUgcHJvY2VzcyB3aXRoIG91dHN0YW5kaW5nIGlzbiYjMzk7dCAwICovXG4gXHRcdFx0cmVzdWx0ID0gU0NUUF9TVFJSRVNFVF9FUlJfSU5fUFJPR1JFU1M7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZy0tO1xuJiM0MztcdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyBcdTAwMjY9XG4mIzQzO1x0XHRcdH5TQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKTtcbiBcdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzZXEmIzQzOyYjNDM7O1xuIFxuIFx0XHRpZiAoIWFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcpIHtcbkBAIC04OTksNyAmIzQzOzkxNCw4IEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9pbihcbiBcdFx0Z290byBvdXQ7XG4gXG4gXHRhc29jLVx1MDAzZXN0cnJlc2V0X2NodW5rID0gY2h1bms7XG4tXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID0gMTtcbiYjNDM7XHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cbiYjNDM7XHRcdFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfQUREX09VVF9TVFJFQU1TKTtcbiBcdHNjdHBfY2h1bmtfaG9sZChhc29jLVx1MDAzZXN0cnJlc2V0X2NodW5rKTtcbiBcbiBcdHN0cmVhbS1cdTAwM2VvdXRjbnQgPSBvdXRjbnQ7XG5AQCAtOTI3LDggJiM0Mzs5NDMsMTAgQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwKFxuIFx0c3RydWN0IHNjdHBfcGFyYW1oZHIgKnJlcTtcbiBcdF9fdTMyIHJlc3VsdDtcbiBcbi1cdHJlcSA9IHNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKGFzb2MsIHJlc3AtXHUwMDNlcmVzcG9uc2Vfc2VxLCAwKTtcbi1cdGlmICghcmVxKVxuJiM0MztcdHJlcSA9IHNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKGFzb2MsIHJlc3AtXHUwMDNlcmVzcG9uc2Vfc2VxLCAwLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHRydWUpO1xuJiM0MztcdGlmICghcmVxIHx8ICEoYXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyBcdTAwMjZcbiYjNDM7XHRcdCAgICAgIFNDVFBfU1RSUkVTRVRfQklUKHJlcS1cdTAwM2V0eXBlKSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0cmVzdWx0ID0gbnRvaGwocmVzcC1cdTAwM2VyZXN1bHQpO1xuQEAgLTEwNzgsNyAmIzQzOzEwOTYsNyBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X3Jlc3AoXG4gXHRcdFx0bnVtcywgMCwgR0ZQX0FUT01JQyk7XG4gXHR9XG4gXG4tXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nLS07XG4mIzQzO1x0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyBcdTAwMjY9IH5TQ1RQX1NUUlJFU0VUX0JJVChyZXEtXHUwMDNldHlwZSk7XG4gXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHNlcSYjNDM7JiM0Mzs7XG4gXG4gXHQvKiByZW1vdmUgZXZlcnl0aGluZyBmb3IgdGhpcyByZWNvbmYgcmVxdWVzdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9TQ1RQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2N0cF9zZW5kX3Jlc2V0X3N0cmVhbXMmIzM0OywKICAgICYjMzQ7c2N0cF9zZW5kX3Jlc2V0X2Fzc29jJiMzNDssCiAgICAmIzM0O3NjdHBfc2VuZF9hZGRfc3RyZWFtcyYjMzQ7LAogICAgJiMzNDtzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfb3V0cmVxJiMzNDssCiAgICAmIzM0O3NjdHBfcHJvY2Vzc19zdHJyZXNldF9pbnJlcSYjMzQ7LAogICAgJiMzNDtzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9vdXQmIzM0OywKICAgICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW4mIzM0OywKICAgICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X3Jlc3AmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgYHN0cnJlc2V0X291dHN0YW5kaW5nYCBmaWVsZCBpbiBgc3RydWN0IHNjdHBfYXNzb2NpYXRpb25gIGZyb20gYSBjb3VudGVyIHRvIGEgYml0bWFzaywgYWxsb3dpbmcgbXVsdGlwbGUgdHlwZXMgb2Ygc3RyZWFtIHJlc2V0IHJlcXVlc3RzIHRvIGJlIHRyYWNrZWQgc2ltdWx0YW5lb3VzbHkuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgaG93IFNDVFAgaGFuZGxlcyBzdHJlYW0gcmVzZXQgcmVxdWVzdHMgKGJvdGggc2VuZGluZyBhbmQgcHJvY2Vzc2luZyBpbmNvbWluZyByZXF1ZXN0cykuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBTQ1RQIHNvY2tldCBvcHRpb25zIGFuZCBpbmNvbWluZyBTQ1RQIHBhY2tldHMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTNjYzQxZmYzZTU3NmVkNjhhZjJkMjNhY2I5YjI5OWQ4NzM2YWEzOApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDEwOjA2OjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAppbmRleCBjY2NjNjYyNTYxYWFjLi5iMjFmMjNiNzM2ZmQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaApAQCAtMjA1Nyw3ICYjNDM7MjA1Nyw3IEBAIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uIHsKIAkgICAgIGZvcmNlX2RlbGF5OjE7CiAKIAlfX3U4IHN0cnJlc2V0X2VuYWJsZTsKLQlfX3U4IHN0cnJlc2V0X291dHN0YW5kaW5nOyAvKiByZXF1ZXN0IHBhcmFtIGNvdW50IG9uIHRoZSBmbHkgKi8KJiM0MzsJX191OCBzdHJyZXNldF9vdXRzdGFuZGluZzsgLyogcmVxdWVzdCBwYXJhbSBiaXRtYXNrIG9uIHRoZSBmbHkgKi8KIAogCV9fdTMyIHN0cnJlc2V0X291dHNlcTsgLyogVXBkYXRlIGFmdGVyIHJlY2VpdmluZyByZXNwb25zZSAqLwogCV9fdTMyIHN0cnJlc2V0X2luc2VxOyAvKiBVcGRhdGUgYWZ0ZXIgcmVjZWl2aW5nIHJlcXVlc3QgKi8KZGlmZiAtLWdpdCBhL25ldC9zY3RwL3N0cmVhbS5jIGIvbmV0L3NjdHAvc3RyZWFtLmMKaW5kZXggMzRmZmU2Yzk0NWE0Yi4uZTFhMjE1ZGI2MWUxYyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc3RyZWFtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjdHAvc3RyZWFtLmMKQEAgLTIyLDYgJiM0MzsyMiw5IEBACiAjaW5jbHVkZSAmbHQ7bmV0L3NjdHAvc20uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvc2N0cC9zdHJlYW1fc2NoZWQuaCZndDsKIAomIzQzOyNkZWZpbmUgU0NUUF9TVFJSRVNFVF9CSVQodHlwZSkgXAomIzQzOwlCSVQobnRvaHModHlwZSkgLSBudG9ocyhTQ1RQX1BBUkFNX1JFU0VUX09VVF9SRVFVRVNUKSkKJiM0MzsKIHN0YXRpYyB2b2lkIHNjdHBfc3RyZWFtX3Nocmlua19vdXQoc3RydWN0IHNjdHBfc3RyZWFtICpzdHJlYW0sIF9fdTE2IG91dGNudCkKIHsKIAlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKQEAgLTM3Miw3ICYjNDM7Mzc1LDkgQEAgaW50IHNjdHBfc2VuZF9yZXNldF9zdHJlYW1zKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCQlnb3RvIG91dDsKIAl9CiAKLQlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyA9IG91dCAmIzQzOyBpbjsKJiM0MzsJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgPQomIzQzOwkJKG91dCA/IFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfT1VUX1JFUVVFU1QpIDogMCkgfAomIzQzOwkJKGluID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSA6IDApOwogCiBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKQEAgLTQxNyw3ICYjNDM7NDIyLDggQEAgaW50IHNjdHBfc2VuZF9yZXNldF9hc3NvYyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyA9IDE7CiYjNDM7CWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nID0KJiM0MzsJCVNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfVFNOX1JFUVVFU1QpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NzQsNyAmIzQzOzQ4MCw5IEBAIGludCBzY3RwX3NlbmRfYWRkX3N0cmVhbXMoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJCWdvdG8gb3V0OwogCX0KIAotCWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nID0gISFvdXQgJiM0MzsgISFpbjsKJiM0MzsJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgPQomIzQzOwkJKG91dCA/IFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfQUREX09VVF9TVFJFQU1TKSA6IDApIHwKJiM0MzsJCShpbiA/IFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfQUREX0lOX1NUUkVBTVMpIDogMCk7CiAKIG91dDoKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNDgyLDcgJiM0Mzs0OTAsNyBAQCBpbnQgc2N0cF9zZW5kX2FkZF9zdHJlYW1zKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAogCiBzdGF0aWMgc3RydWN0IHNjdHBfcGFyYW1oZHIgKnNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKAogCQkJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIF9fYmUzMiByZXNwX3NlcSwKLQkJCV9fYmUxNiB0eXBlKQomIzQzOwkJCV9fYmUxNiB0eXBlLCBib29sIG1hdGNoX3NlcSkKIHsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmsgPSBhc29jLSZndDtzdHJyZXNldF9jaHVuazsKIAlzdHJ1Y3Qgc2N0cF9yZWNvbmZfY2h1bmsgKmhkcjsKQEAgLTQ5OSw3ICYjNDM7NTA3LDcgQEAgc3RhdGljIHN0cnVjdCBzY3RwX3BhcmFtaGRyICpzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbSgKIAkJICovCiAJCXN0cnVjdCBzY3RwX3N0cnJlc2V0X3RzbnJlcSAqcmVxID0gcGFyYW0udjsKIAotCQlpZiAoKCFyZXNwX3NlcSB8fCByZXEtJmd0O3JlcXVlc3Rfc2VxID09IHJlc3Bfc2VxKSAmYW1wOyZhbXA7CiYjNDM7CQlpZiAoKCFtYXRjaF9zZXEgfHwgcmVxLSZndDtyZXF1ZXN0X3NlcSA9PSByZXNwX3NlcSkgJmFtcDsmYW1wOwogCQkgICAgKCF0eXBlIHx8IHR5cGUgPT0gcmVxLSZndDtwYXJhbV9oZHIudHlwZSkpCiAJCQlyZXR1cm4gcGFyYW0udjsKIAl9CkBAIC01NjQsMTMgJiM0Mzs1NzIsMTYgQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXEoCiAJaWYgKGFzb2MtJmd0O3N0cnJlc2V0X2NodW5rKSB7CiAJCWlmICghc2N0cF9jaHVua19sb29rdXBfc3RycmVzZXRfcGFyYW0oCiAJCQkJYXNvYywgb3V0cmVxLSZndDtyZXNwb25zZV9zZXEsCi0JCQkJU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSkgewomIzQzOwkJCQlTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QsIHRydWUpIHx8CiYjNDM7CQkgICAgIShhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyAmYW1wOwomIzQzOwkJICAgICAgU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSkpIHsKIAkJCS8qIHNhbWUgcHJvY2VzcyB3aXRoIG91dHN0YW5kaW5nIGlzbiYjMzk7dCAwICovCiAJCQlyZXN1bHQgPSBTQ1RQX1NUUlJFU0VUX0VSUl9JTl9QUk9HUkVTUzsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmctLTsKJiM0MzsJCWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nICZhbXA7PQomIzQzOwkJCX5TQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpOwogCQlhc29jLSZndDtzdHJyZXNldF9vdXRzZXEmIzQzOyYjNDM7OwogCiAJCWlmICghYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcpIHsKQEAgLTY2OSw3ICYjNDM7NjgwLDggQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9pbnJlcSgKIAkJCVNDVFBfU08oc3RyZWFtLCBpKS0mZ3Q7c3RhdGUgPSBTQ1RQX1NUUkVBTV9DTE9TRUQ7CiAKIAlhc29jLSZndDtzdHJyZXNldF9jaHVuayA9IGNodW5rOwotCWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nID0gMTsKJiM0MzsJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgPQomIzQzOwkJU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9PVVRfUkVRVUVTVCk7CiAJc2N0cF9jaHVua19ob2xkKGFzb2MtJmd0O3N0cnJlc2V0X2NodW5rKTsKIAogCXJlc3VsdCA9IFNDVFBfU1RSUkVTRVRfUEVSRk9STUVEOwpAQCAtODE2LDEzICYjNDM7ODI4LDE2IEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9vdXQoCiAKIAlpZiAoYXNvYy0mZ3Q7c3RycmVzZXRfY2h1bmspIHsKIAkJaWYgKCFzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbSgKLQkJCWFzb2MsIDAsIFNDVFBfUEFSQU1fUkVTRVRfQUREX0lOX1NUUkVBTVMpKSB7CiYjNDM7CQkJYXNvYywgMCwgU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUywgZmFsc2UpIHx8CiYjNDM7CQkgICAgIShhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyAmYW1wOwomIzQzOwkJICAgICAgU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUykpKSB7CiAJCQkvKiBzYW1lIHByb2Nlc3Mgd2l0aCBvdXRzdGFuZGluZyBpc24mIzM5O3QgMCAqLwogCQkJcmVzdWx0ID0gU0NUUF9TVFJSRVNFVF9FUlJfSU5fUFJPR1JFU1M7CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nLS07CiYjNDM7CQlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyAmYW1wOz0KJiM0MzsJCQl+U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUyk7CiAJCWFzb2MtJmd0O3N0cnJlc2V0X291dHNlcSYjNDM7JiM0Mzs7CiAKIAkJaWYgKCFhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZykgewpAQCAtODk5LDcgJiM0Mzs5MTQsOCBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW4oCiAJCWdvdG8gb3V0OwogCiAJYXNvYy0mZ3Q7c3RycmVzZXRfY2h1bmsgPSBjaHVuazsKLQlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyA9IDE7CiYjNDM7CWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nID0KJiM0MzsJCVNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfQUREX09VVF9TVFJFQU1TKTsKIAlzY3RwX2NodW5rX2hvbGQoYXNvYy0mZ3Q7c3RycmVzZXRfY2h1bmspOwogCiAJc3RyZWFtLSZndDtvdXRjbnQgPSBvdXRjbnQ7CkBAIC05MjcsOCAmIzQzOzk0MywxMCBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X3Jlc3AoCiAJc3RydWN0IHNjdHBfcGFyYW1oZHIgKnJlcTsKIAlfX3UzMiByZXN1bHQ7CiAKLQlyZXEgPSBzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbShhc29jLCByZXNwLSZndDtyZXNwb25zZV9zZXEsIDApOwotCWlmICghcmVxKQomIzQzOwlyZXEgPSBzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbShhc29jLCByZXNwLSZndDtyZXNwb25zZV9zZXEsIDAsCiYjNDM7CQkJCQkgICAgICAgdHJ1ZSk7CiYjNDM7CWlmICghcmVxIHx8ICEoYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgJmFtcDsKJiM0MzsJCSAgICAgIFNDVFBfU1RSUkVTRVRfQklUKHJlcS0mZ3Q7dHlwZSkpKQogCQlyZXR1cm4gTlVMTDsKIAogCXJlc3VsdCA9IG50b2hsKHJlc3AtJmd0O3Jlc3VsdCk7CkBAIC0xMDc4LDcgJiM0MzsxMDk2LDcgQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwKAogCQkJbnVtcywgMCwgR0ZQX0FUT01JQyk7CiAJfQogCi0JYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmctLTsKJiM0MzsJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgJmFtcDs9IH5TQ1RQX1NUUlJFU0VUX0JJVChyZXEtJmd0O3R5cGUpOwogCWFzb2MtJmd0O3N0cnJlc2V0X291dHNlcSYjNDM7JiM0Mzs7CiAKIAkvKiByZW1vdmUgZXZlcnl0aGluZyBmb3IgdGhpcyByZWNvbmYgcmVxdWVzdCAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDY1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBTQ1RQIFN0cmVhbSBSZXNldCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcsIGFuZCBpdCBsb29rcyBsaWtlIGl0IGFic29sdXRlbHkgZG9lcy4gSXQmIzM5O3MgbW9kaWZ5aW5nIGNvcmUgU0NUUCBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgYG5ldC9zY3RwL3N0cmVhbS5jYCBhbmQgYGluY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oYC4gVGhpcyBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2ssIGFuZCB0aGUgY2hhbmdlIGZyb20gYSBjb3VudGVyIChgc3RycmVzZXRfb3V0c3RhbmRpbmdgKSB0byBhIGJpdG1hc2sgaW4gYHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uYCBmb3IgdHJhY2tpbmcgU0NUUCBzdHJlYW0gcmVzZXQgcmVxdWVzdHMgaXMgc2lnbmlmaWNhbnQuIFRoYXQgc2NyZWFtcyBmdW5jdGlvbmFsIGNoYW5nZSBhbmQsIHRoZXJlZm9yZSwgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHRoYXQgYSBmdXp6ZXIgKnNob3VsZCogdW5jb3Zlci4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgYWZmZWN0ZWQsIGFuZCBmaWd1cmUgb3V0IGhvdyB0aGV5IGFyZSByZWFjaGVkLiAgVGhlIHByaW1hcnkgZnVuY3Rpb25zIGFsdGVyZWQgYXJlOiBgc2N0cF9zZW5kX3Jlc2V0X3N0cmVhbXNgLCBgc2N0cF9zZW5kX3Jlc2V0X2Fzc29jYCwgYHNjdHBfc2VuZF9hZGRfc3RyZWFtc2AsIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfb3V0cmVxYCwgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9pbnJlcWAsIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9vdXRgLCBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW5gLCBhbmQgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwYC4KCk5vdywgaG93IGFyZSB0aGVzZSBmdW5jdGlvbnMgcmVhY2hhYmxlPyBMb29raW5nIGF0IGhvdyBpdCYjMzk7cyB1c2VkLCBJIGNhbiBzZWUgdGhhdCBgc2N0cF9zZW5kX3Jlc2V0X3N0cmVhbXNgLCBgc2N0cF9zZW5kX3Jlc2V0X2Fzc29jYCwgYW5kIGBzY3RwX3NlbmRfYWRkX3N0cmVhbXNgIGFyZSBhbGwgaW52b2tlZCB2aWEgYHNldHNvY2tvcHRgIGNhbGxzOiBgc2N0cF9zZXRzb2Nrb3B0X3Jlc2V0X3N0cmVhbXNgLCBgc2N0cF9zZXRzb2Nrb3B0X3Jlc2V0X2Fzc29jYCwgYW5kIGBzY3RwX3NldHNvY2tvcHRfYWRkX3N0cmVhbXNgLCByZXNwZWN0aXZlbHkuIEV4Y2VsbGVudC4gVGhlc2UgYXJlIGVhc2lseSBhY2Nlc3NpYmxlIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gVGhlbiB0aGUgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF8qYCBmdW5jdGlvbnMgYXJlIGludm9rZWQgd2hlbiBwcm9jZXNzaW5nIGluY29taW5nIFNDVFAgY2h1bmtzLCBzcGVjaWZpY2FsbHkgUkVDT05GIGNodW5rcy4gU28sIHdlJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIHRyaWdnZXIgdGhvc2UgY2h1bmtzLgoKVG8gZW5zdXJlIHRoZSBTQ1RQIHN0YWNrIGlzIGVuYWJsZWQsIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfSVBfU0NUUGAgaXMgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4KCk5leHQsIEkgbmVlZCB0byB2ZXJpZnkgYWxsIHRoZSBsaXN0ZWQgZnVuY3Rpb25zIGFnYWluIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgZnVuY3Rpb25zIGFmZmVjdGVkLgoKQWxyaWdodCwgc2VlbXMgbGlrZSBhIGdvb2QgcGxhbi4gVGhpcyBpcyBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX3NlbmRfcmVzZXRfc3RyZWFtcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9zb2NrZXQuYz00MTA1PXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X3Jlc2V0X3N0cmVhbXMoc3RydWN0IHNvY2sgKnNrLFxuLS1cbm5ldC9zY3RwL3NvY2tldC5jLTQxMjUtXG5uZXQvc2N0cC9zb2NrZXQuYzo0MTI2Olx0cmV0dXJuIHNjdHBfc2VuZF9yZXNldF9zdHJlYW1zKGFzb2MsIHBhcmFtcyk7XG5uZXQvc2N0cC9zb2NrZXQuYy00MTI3LX1cbi0tXG5uZXQvc2N0cC9zdHJlYW0uYz0yNDQ9c3RhdGljIGJvb2wgc2N0cF9zdHJlYW1fb3V0cV9pc19lbXB0eShzdHJ1Y3Qgc2N0cF9zdHJlYW0gKnN0cmVhbSxcbi0tXG5uZXQvc2N0cC9zdHJlYW0uYy0yNjctXG5uZXQvc2N0cC9zdHJlYW0uYzoyNjg6aW50IHNjdHBfc2VuZF9yZXNldF9zdHJlYW1zKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxubmV0L3NjdHAvc3RyZWFtLmMtMjY5LVx0XHRcdCAgICBzdHJ1Y3Qgc2N0cF9yZXNldF9zdHJlYW1zICpwYXJhbXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQwMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU0NUUCBTdHJlYW0gUmVzZXQgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGVzZSBTQ1RQIHN0cmVhbSByZXNldCBmdW5jdGlvbnMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIHNjb3BlIGFuZCBob3cgdGhleSYjMzk7cmUgaW1wbGVtZW50ZWQuIFRoZSBsaXN0IGlzOiBgc2N0cF9zZW5kX3Jlc2V0X3N0cmVhbXNgLCBgc2N0cF9zZW5kX3Jlc2V0X2Fzc29jYCwgYHNjdHBfc2VuZF9hZGRfc3RyZWFtc2AsIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfb3V0cmVxYCwgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9pbnJlcWAsIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9vdXRgLCBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW5gLCBhbmQgZmluYWxseSBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X3Jlc3BgLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIHN0YXRpYyBsaW5rYWdlLCBvciBpZiB0aGV5IGFyZSBjYWxsYWJsZSBieSB0aGUgd2lkZXIgc3lzdGVtLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyB0aGV5IGFyZSBvcmdhbml6ZWQsIGFuZCBob3cgSSBzaG91bGQgYXBwcm9hY2ggYW55IGZ1cnRoZXIgYW5hbHlzaXMuIFRoZSBzdGF0aWMvbm9uLXN0YXRpYyBkaXN0aW5jdGlvbiBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgY29udHJvbCBmbG93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDE3MD1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19yZWNvbmYoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQyMDItXHRcdGlmIChwYXJhbS5wLVx1MDAzZXR5cGUgPT0gU0NUUF9QQVJBTV9SRVNFVF9PVVRfUkVRVUVTVClcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjQyMDM6XHRcdFx0cmVwbHkgPSBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfb3V0cmVxKFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDIwNC1cdFx0XHRcdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKWFzb2MsIHBhcmFtLCBcdTAwMjZldik7XG4tLVxubmV0L3NjdHAvc3RyZWFtLmM9NTE4PXN0YXRpYyB2b2lkIHNjdHBfdXBkYXRlX3N0cnJlc2V0X3Jlc3VsdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi0tXG5uZXQvc2N0cC9zdHJlYW0uYy01MjQtXG5uZXQvc2N0cC9zdHJlYW0uYzo1MjU6c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXEoXG5uZXQvc2N0cC9zdHJlYW0uYy01MjYtXHRcdFx0XHRzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDczCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGNyYWZ0ZWQgd2l0aCB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipOYXZpZ2F0aW5nIHRoZSBEeW5hbWljIExhbmRzY2FwZSoqCgpUaGVzZSBzeXN0ZW1z4oCmIHRoZXnigJlyZSBuZXZlciBzdGF0aWMuIE5ldmVyLiBUaGUgc2l0dWF0aW9uIGlzIGFsd2F5cyBpbiBmbHV4LCBhbmQgYXNzdW1wdGlvbnMgbmVlZCBjb25zdGFudCByZWV2YWx1YXRpb24uIEkgY2FuJiMzOTt0IGp1c3Qgb3BlcmF0ZSBiYXNlZCBvbiBhIHNuYXBzaG90OyBJIGhhdmUgdG8gdW5kZXJzdGFuZCB0aGUgZXZvbHV0aW9uIG9mIHRoZSBzeXN0ZW0uCgpPa2F5LCB0aW1lIHRvIGdldCB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2lucmVxYC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB3aGVyZSB0aGUgYXNzdW1wdGlvbnMgYWJvdXQgc3lzdGVtIHN0YXRlIGFyZSB2YWxpZGF0ZWQsIG9yIHBvdGVudGlhbGx5IHNoYXR0ZXJlZC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X2lucmVxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTQxNzA9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcmVjb25mKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00MjA1LVx0XHRlbHNlIGlmIChwYXJhbS5wLVx1MDAzZXR5cGUgPT0gU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NDIwNjpcdFx0XHRyZXBseSA9IHNjdHBfcHJvY2Vzc19zdHJyZXNldF9pbnJlcShcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQyMDctXHRcdFx0XHQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKilhc29jLCBwYXJhbSwgXHUwMDI2ZXYpO1xuLS1cbm5ldC9zY3RwL3N0cmVhbS5jPTUyNT1zdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X291dHJlcShcbi0tXG5uZXQvc2N0cC9zdHJlYW0uYy02MTYtXG5uZXQvc2N0cC9zdHJlYW0uYzo2MTc6c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9pbnJlcShcbm5ldC9zY3RwL3N0cmVhbS5jLTYxOC1cdFx0XHRcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NTgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipGb2N1cyBTeW1ib2wgQ2FuZGlkYXRlcyBhbmQgU0NUUCBLY29uZmlnKioKClJpZ2h0LCB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluaXRlbHkganVtcGluZyBvdXQgYXQgbWUgYXMgcG90ZW50aWFsIGNhbmRpZGF0ZXMgZm9yIEZvY3VzU3ltYm9scy4gSSYjMzk7bSBzZWVpbmcgYSBjbGVhciBwYXR0ZXJuIGhlcmUsIGFuZCBteSBpbml0aWFsIGludHVpdGlvbiBzYXlzIHdlIGNvdWxkIGxldmVyYWdlIHRob3NlIHN5bWJvbHMgdG8gc2lnbmlmaWNhbnRseSBpbXByb3ZlIGFuYWx5c2lzLiBUaW1lIHRvIGRpZyBpbiBhIGJpdCBmdXJ0aGVyLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGhlYWQgb3ZlciB0byBLY29uZmlnIGFuZCBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBTQ1RQLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHJlbGV2YW50IGZsYWdzIGFuZCBkZXBlbmRlbmNpZXMuIFdoYXQgYXJlIHRoZSBidWlsZCBvcHRpb25zPyBBcmUgdGhlcmUgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGF0IG1pZ2h0IGltcGFjdCBvdXIgYWJpbGl0eSB0byBwcm9wZXJseSBkZWZpbmUgdGhlIEZvY3VzU3ltYm9scyBmb3IgdGhpcyBhcmVhPyBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCBmdWxseSBiZWZvcmUgY29tbWl0dGluZyB0byBhbnl0aGluZy4gVGhpcyBLY29uZmlnIGNoZWNrIGlzIGNydWNpYWw7IEkgZG9uJiMzOTt0IHdhbnQgdG8gbWFrZSBhc3N1bXB0aW9ucyB0aGF0IGFyZSBwcm92ZW4gd3JvbmcgYnkgdGhlIGFjdHVhbCBidWlsZCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVBfU0NUUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY3RwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2N0cC9LY29uZmlnLTUtXG5uZXQvc2N0cC9LY29uZmlnOjY6bWVudWNvbmZpZyBJUF9TQ1RQXG5uZXQvc2N0cC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtUaGUgU0NUUCBQcm90b2NvbFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODU0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFNDVFAgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYElQX1NDVFBgIGNvbmZpZ3VyYXRpb24gaGVyZS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGEgZ3JvdXAgb2YgU0NUUCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzdHJlYW0gcmVzZXRzLCBhZGRpdGlvbnMsIGFuZCB0aGVpciBhc3NvY2lhdGVkIHByb2Nlc3NpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQ6CgoqICAgYHNjdHBfc2VuZF9yZXNldF9zdHJlYW1zYAoqICAgYHNjdHBfc2VuZF9yZXNldF9hc3NvY2AKKiAgIGBzY3RwX3NlbmRfYWRkX3N0cmVhbXNgCiogICBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X291dHJlcWAKKiAgIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXFgCiogICBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0YAoqICAgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX2luYAoqICAgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwYAoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZC4gQSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgdGhleSBhcmUgbm90IHN0YXRpYywgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBhcmUgY2FsbGVkIGZyb20gb3RoZXIgZmlsZXMgd2l0aGluIHRoZSBgbmV0L3NjdHAvYCBkaXJlY3RvcnksIHdoaWNoIGNvbmZpcm1zIHRoZWlyIGV4dGVybmFsIGFjY2Vzc2liaWxpdHkuCgpMZXQmIzM5O3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBzY3RwX3NlbmRfcmVzZXRfYXNzb2NgIGFuZCBzZWUgd2hhdCBpdCB0ZWxscyB1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9zZW5kX3Jlc2V0X2Fzc29jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL3NvY2tldC5jPTQxMjk9c3RhdGljIGludCBzY3RwX3NldHNvY2tvcHRfcmVzZXRfYXNzb2Moc3RydWN0IHNvY2sgKnNrLCBzY3RwX2Fzc29jX3QgKmFzc29jaWQsXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtNDE0MC1cbm5ldC9zY3RwL3NvY2tldC5jOjQxNDE6XHRyZXR1cm4gc2N0cF9zZW5kX3Jlc2V0X2Fzc29jKGFzb2MpO1xubmV0L3NjdHAvc29ja2V0LmMtNDE0Mi19XG4tLVxubmV0L3NjdHAvc3RyZWFtLmM9MjY4PWludCBzY3RwX3NlbmRfcmVzZXRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbi0tXG5uZXQvc2N0cC9zdHJlYW0uYy0zODUtXG5uZXQvc2N0cC9zdHJlYW0uYzozODY6aW50IHNjdHBfc2VuZF9yZXNldF9hc3NvYyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbm5ldC9zY3RwL3N0cmVhbS5jLTM4Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgRHluYW1pYyBTdHJlYW0gQmVoYXZpb3IgaW4gU0NUUCoqCgpBbHJpZ2h0LCBzbyB0aGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgdGhlc2Ugc3RyZWFtcyBhcmUgKmRlZmluaXRlbHkqIG5vbi1zdGF0aWMuIFRoaXMgaXNuJiMzOTt0IGEgZml4ZWQgY29uZmlndXJhdGlvbiwgYW5kIHRoYXQgbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSB0aGF0IGNhbiBjaGFuZ2UgZHluYW1pY2FsbHksIGFuZCB0aGF0IHJlcXVpcmVzIGEgZGlmZmVyZW50IGFwcHJvYWNoIHRvIGl0cyB1c2UuIFRoaXMgdW5kZXJzdGFuZGluZyBhZmZlY3RzIGhvdyBJIG5lZWQgdG8gaGFuZGxlLCBvYnNlcnZlLCBhbmQgbWFuaXB1bGF0ZSB0aGVzZSB0aGluZ3MuCgpOb3csIHdpdGggdGhpcyBpbiBtaW5kLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHNjdHBfc2VuZF9hZGRfc3RyZWFtc2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCYjMzk7cyBpbnZvbHZlZCB0aGVyZSwgYmVjYXVzZSAqdGhhdCogaXMgd2hlcmUgdGhlIGR5bmFtaXNtIGlzIGxpa2VseSBjb250cm9sbGVkLiBJIG5lZWQgdG8gZGlzc2VjdCB0aGlzIGZ1bmN0aW9uIHRvIGZpbmQgb3V0IGhvdyB0aGVzZSBzdHJlYW0gYWRkaXRpb25zIGFyZSBtYW5hZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzY3RwX3NlbmRfYWRkX3N0cmVhbXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc29ja2V0LmM9NDE0ND1zdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9hZGRfc3RyZWFtcyhzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L3NjdHAvc29ja2V0LmMtNDE1Ni1cbm5ldC9zY3RwL3NvY2tldC5jOjQxNTc6XHRyZXR1cm4gc2N0cF9zZW5kX2FkZF9zdHJlYW1zKGFzb2MsIHBhcmFtcyk7XG5uZXQvc2N0cC9zb2NrZXQuYy00MTU4LX1cbi0tXG5uZXQvc2N0cC9zdHJlYW0uYz0zODY9aW50IHNjdHBfc2VuZF9yZXNldF9hc3NvYyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbi0tXG5uZXQvc2N0cC9zdHJlYW0uYy00MzAtXG5uZXQvc2N0cC9zdHJlYW0uYzo0MzE6aW50IHNjdHBfc2VuZF9hZGRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbm5ldC9zY3RwL3N0cmVhbS5jLTQzMi1cdFx0XHQgIHN0cnVjdCBzY3RwX2FkZF9zdHJlYW1zICpwYXJhbXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMjQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBTdHJlYW0gUmVzZXQgYW5kIEFkZGl0aW9uKioKCk9rYXksIEkmIzM5O20gY29uZmlybWluZyBpdCwgdGhlc2UgZWxlbWVudHMgKmFyZSogZHluYW1pYy4gTGV0JiMzOTtzIGRpZyBkZWVwZXIgaW50byB0aGUgc3RyZWFtIHJlc2V0IGFuZCBhZGRpdGlvbiBwcm9jZXNzLiBNeSBuZXh0IG1vdmUgaXMgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9vdXRgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIGZvciBoYW5kbGluZyB0aGUgb3V0Ym91bmQgc3RyZWFtIHJlc2V0cyBhbmQgYWRkaXRpb25zIGxpa2VseSByZXNpZGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN0YXRlIHRyYW5zaXRpb25zIHdvcmsgaGVyZSBhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIG92ZXJhbGwgU0NUUCBzdGF0ZS4gTXkgZm9jdXMgd2lsbCBiZSBvbiB0aGUgbnVhbmNlcyBvZiB0aGlzIGZ1bmN0aW9uJiMzOTtzIGxvZ2ljIGFuZCBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzdGFjayB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjdHAvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTQxNzA9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcmVjb25mKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00MjExLVx0XHRlbHNlIGlmIChwYXJhbS5wLVx1MDAzZXR5cGUgPT0gU0NUUF9QQVJBTV9SRVNFVF9BRERfT1VUX1NUUkVBTVMpXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo0MjEyOlx0XHRcdHJlcGx5ID0gc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0KFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDIxMy1cdFx0XHRcdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKWFzb2MsIHBhcmFtLCBcdTAwMjZldik7XG4tLVxubmV0L3NjdHAvc3RyZWFtLmM9Njk4PXN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfdHNucmVxKFxuLS1cbm5ldC9zY3RwL3N0cmVhbS5jLTc5NC1cbm5ldC9zY3RwL3N0cmVhbS5jOjc5NTpzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0KFxubmV0L3NjdHAvc3RyZWFtLmMtNzk2LVx0XHRcdFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg1MzMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqQXNzZXNzaW5nIHRoZSBEeW5hbWljIE5hdHVyZSoqCgpSaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCBJIHN1c3BlY3RlZC4gVGhpcyBpbXBsaWVzIHBvdGVudGlhbCB2YXJpYWJpbGl0eSBvciBzdGF0ZSBjaGFuZ2VzIHRoYXQgbmVlZCBjYXJlZnVsIGhhbmRsaW5nLiBUaGUgbmF0dXJlIG9mIG5vbi1zdGF0aWMgaW5mb3JtYXRpb24gbWVhbnMgaXQgcmVxdWlyZXMgc3BlY2lmaWMgYW5hbHlzaXMuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhlIGZ1bmN0aW9uLCB0aGUgbGluY2hwaW4sIGFuZCBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zIG9mIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9pbmAuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgdGhlIHNpdHVhdGlvbiBleGlzdHMuIFRoaXMgZnVuY3Rpb24gaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHNpdHVhdGlvbiwgYW5kIHRvIGlkZW50aWZ5IHBvdGVudGlhbCBlZGdlLWNhc2VzIGFuZCB2dWxuZXJhYmlsaXRpZXMuIFRpbWUgdG8gc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDE3MD1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19yZWNvbmYoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQyMTQtXHRcdGVsc2UgaWYgKHBhcmFtLnAtXHUwMDNldHlwZSA9PSBTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NDIxNTpcdFx0XHRyZXBseSA9IHNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX2luKFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDIxNi1cdFx0XHRcdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKWFzb2MsIHBhcmFtLCBcdTAwMjZldik7XG4tLVxubmV0L3NjdHAvc3RyZWFtLmM9Nzk1PXN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9vdXQoXG4tLVxubmV0L3NjdHAvc3RyZWFtLmMtODY3LVxubmV0L3NjdHAvc3RyZWFtLmM6ODY4OnN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9pbihcbm5ldC9zY3RwL3N0cmVhbS5jLTg2OS1cdFx0XHRcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDUwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIE5vbi1TdGF0aWMgTmF0dXJlKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgY29uZmlybXMgaXQ6IHRoZSBjaGFyYWN0ZXJpc3RpY3MgaW4gcXVlc3Rpb24gYXJlIGluZGVlZCBub24tc3RhdGljLiBUaGlzIGlzbiYjMzk7dCB1bmV4cGVjdGVkLCBidXQgaXQmIzM5O3MgaW1wb3J0YW50IHRvIHZlcmlmeS4gTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byBhIHNwZWNpZmljIGFyZWEgd2hlcmUgdGhpcyBub24tc3RhdGljIGJlaGF2aW9yIG1pZ2h0IGJlIG1vc3QgaW1wYWN0ZnVsLCBvciBtb3N0IGxpa2VseSB0byBiZSBlbmNvdW50ZXJlZC4gSSYjMzk7bSBnb2luZyB0byBmb2N1cyBpbiBvbiBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X3Jlc3BgLiBFeGFtaW5pbmcgdGhpcyBmdW5jdGlvbiBub3cgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X3Jlc3AmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2N0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDE3MD1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19yZWNvbmYoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQyMTctXHRcdGVsc2UgaWYgKHBhcmFtLnAtXHUwMDNldHlwZSA9PSBTQ1RQX1BBUkFNX1JFU0VUX1JFU1BPTlNFKVxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NDIxODpcdFx0XHRyZXBseSA9IHNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwKFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDIxOS1cdFx0XHRcdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKWFzb2MsIHBhcmFtLCBcdTAwMjZldik7XG4tLVxubmV0L3NjdHAvc3RyZWFtLmM9ODY4PXN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9pbihcbi0tXG5uZXQvc2N0cC9zdHJlYW0uYy05MzMtXG5uZXQvc2N0cC9zdHJlYW0uYzo5MzQ6c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwKFxubmV0L3NjdHAvc3RyZWFtLmMtOTM1LVx0XHRcdFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MTUKCQkJCQkJCW91dHB1dDogMjM0CgkJCQkJCQl0aG91Z2h0czogMzE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNDVFAgU3RyZWFtIFJlc2V0IFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBpbnRyb2R1Y2luZyBhIGNoYW5nZSB0aGF0JiMzOTtzICpub3QqIHN0YXRpYywgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIHRvIHBheSBhdHRlbnRpb24gdG8uIFRoZSBjb3JlIG9mIHRoZSBtb2RpZmljYXRpb24gaXMgaW4gaG93IFNDVFAgdHJhY2tzIG91dHN0YW5kaW5nIHN0cmVhbSByZXNldCByZXF1ZXN0cy4gSW5zdGVhZCBvZiBhIHNpbXBsZSBjb3VudGVyLCB0aGV5JiMzOTtyZSBzd2l0Y2hpbmcgdG8gYSBiaXRtYXNrIGZvciBgc3RycmVzZXRfb3V0c3RhbmRpbmdgIHdpdGhpbiB0aGUgYHNjdHBfYXNzb2NpYXRpb25gIHN0cnVjdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBzaWduaWZpY2FudCBvbmUgcmVhbGx5LCBiZWNhdXNlIGl0IGFsbG93cyB0aGUgc3lzdGVtIHRvIHRyYWNrICptdWx0aXBsZSogdHlwZXMgb2YgcmVzZXQgcmVxdWVzdHMgYXQgdGhlIHNhbWUgdGltZS4KCkFuZCB0aGUgYmVzdCBwYXJ0IGlzIGl0JiMzOTtzIHRvdWNoaW5nIHRoZSBTQ1RQIHN0YWNrJiMzOTtzIGNvcmUgbG9naWMuIFRoZSBmdW5jdGlvbnMgaGFuZGxpbmcgc2VuZCBhbmQgcHJvY2Vzc2luZyByZXF1ZXN0cyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlLCBlaXRoZXIgdGhyb3VnaCB0aGUgc29ja2V0IG9wdGlvbnMgb3IgdmlhIGluY29taW5nIFNDVFAgcGFja2V0cy4gVGhhdCYjMzk7cyBhIGh1Z2UgZ3JlZW4gbGlnaHQhIFRoYXQgbWVhbnMgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIGZhY3QgdGhhdCB0aGUgY2hhbmdlIGlzIGluIGBzY3RwX3NlbmRfcmVzZXRfc3RyZWFtc2AsIGBzY3RwX3NlbmRfcmVzZXRfYXNzb2NgLCBgc2N0cF9zZW5kX2FkZF9zdHJlYW1zYCwgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXFgLCBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2lucmVxYCwgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX291dGAsIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9pbmAgYW5kIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcGAgaXMgZXhjZWxsZW50LiBUaGlzIGNvdmVycyB0aGUgc2VuZGluZyBhbmQgcmVjZWl2aW5nIHBhdGhzLCBhbmQgYWxzbyB0aGUgYWRkaXRpb24gb2Ygc3RyZWFtcy4gSSB3aWxsIGVuYWJsZSBgSVBfU0NUUGAgYW5kIHVzZSB0aGVzZSBmdW5jdGlvbnMgYXMgZm9jdXMgc3ltYm9scy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBydW5uaW5nIGZ1enogdGVzdHMgdG8gc2VlIGlmIHRoaXMgY2hhbmdlIHJldmVhbHMgYW55IHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBjb3VsZCBiZSBhbiBpbnRlcmVzdGluZyBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfc2VuZF9yZXNldF9zdHJlYW1zJiMzNDssCiAgICAmIzM0O3NjdHBfc2VuZF9yZXNldF9hc3NvYyYjMzQ7LAogICAgJiMzNDtzY3RwX3NlbmRfYWRkX3N0cmVhbXMmIzM0OywKICAgICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X291dHJlcSYjMzQ7LAogICAgJiMzNDtzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXEmIzM0OywKICAgICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0JiMzNDssCiAgICAmIzM0O3NjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX2luJiMzNDssCiAgICAmIzM0O3NjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIGBzdHJyZXNldF9vdXRzdGFuZGluZ2AgZmllbGQgaW4gYHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uYCBmcm9tIGEgY291bnRlciB0byBhIGJpdG1hc2ssIGFsbG93aW5nIG11bHRpcGxlIHR5cGVzIG9mIHN0cmVhbSByZXNldCByZXF1ZXN0cyB0byBiZSB0cmFja2VkIHNpbXVsdGFuZW91c2x5LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIGhvdyBTQ1RQIGhhbmRsZXMgc3RyZWFtIHJlc2V0IHJlcXVlc3RzIChib3RoIHNlbmRpbmcgYW5kIHByb2Nlc3NpbmcgaW5jb21pbmcgcmVxdWVzdHMpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgU0NUUCBzb2NrZXQgb3B0aW9ucyBhbmQgaW5jb21pbmcgU0NUUCBwYWNrZXRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfU0NUUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3NjdHBfc2VuZF9yZXNldF9zdHJlYW1zJiMzNDssCiAgICAmIzM0O3NjdHBfc2VuZF9yZXNldF9hc3NvYyYjMzQ7LAogICAgJiMzNDtzY3RwX3NlbmRfYWRkX3N0cmVhbXMmIzM0OywKICAgICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X291dHJlcSYjMzQ7LAogICAgJiMzNDtzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXEmIzM0OywKICAgICYjMzQ7c2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0JiMzNDssCiAgICAmIzM0O3NjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX2luJiMzNDssCiAgICAmIzM0O3NjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNoYW5nZXMgdGhlIGBzdHJyZXNldF9vdXRzdGFuZGluZ2AgZmllbGQgaW4gYHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uYCBmcm9tIGEgY291bnRlciB0byBhIGJpdG1hc2ssIGFsbG93aW5nIG11bHRpcGxlIHR5cGVzIG9mIHN0cmVhbSByZXNldCByZXF1ZXN0cyB0byBiZSB0cmFja2VkIHNpbXVsdGFuZW91c2x5LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIGhvdyBTQ1RQIGhhbmRsZXMgc3RyZWFtIHJlc2V0IHJlcXVlc3RzIChib3RoIHNlbmRpbmcgYW5kIHByb2Nlc3NpbmcgaW5jb21pbmcgcmVxdWVzdHMpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgU0NUUCBzb2NrZXQgb3B0aW9ucyBhbmQgaW5jb21pbmcgU0NUUCBwYWNrZXRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTA6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgc3RhdGUgdHJhY2tpbmcgb2YgU0NUUCBzdHJlYW0gcmVzZXQgcmVxdWVzdHMgYnkgcmVwbGFjaW5nIGEgY291bnRlciAoYHN0cnJlc2V0X291dHN0YW5kaW5nYCkgd2l0aCBhIGJpdG1hc2suIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIG1lbW9yeSBhbGxvY2F0aW9ucywgaW5pdGlhbGl6YXRpb25zLCBvciBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBjb3JydXB0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSksIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhM2NjNDFmZjNlNTc2ZWQ2OGFmMmQyM2FjYjliMjk5ZDg3MzZhYTM4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTA6MDY6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaCBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCmluZGV4IGNjY2M2NjI1NjFhYWMuLmIyMWYyM2I3MzZmZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oCkBAIC0yMDU3LDcgJiM0MzsyMDU3LDcgQEAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gewogCSAgICAgZm9yY2VfZGVsYXk6MTsKIAogCV9fdTggc3RycmVzZXRfZW5hYmxlOwotCV9fdTggc3RycmVzZXRfb3V0c3RhbmRpbmc7IC8qIHJlcXVlc3QgcGFyYW0gY291bnQgb24gdGhlIGZseSAqLwomIzQzOwlfX3U4IHN0cnJlc2V0X291dHN0YW5kaW5nOyAvKiByZXF1ZXN0IHBhcmFtIGJpdG1hc2sgb24gdGhlIGZseSAqLwogCiAJX191MzIgc3RycmVzZXRfb3V0c2VxOyAvKiBVcGRhdGUgYWZ0ZXIgcmVjZWl2aW5nIHJlc3BvbnNlICovCiAJX191MzIgc3RycmVzZXRfaW5zZXE7IC8qIFVwZGF0ZSBhZnRlciByZWNlaXZpbmcgcmVxdWVzdCAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc3RyZWFtLmMgYi9uZXQvc2N0cC9zdHJlYW0uYwppbmRleCAzNGZmZTZjOTQ1YTRiLi5lMWEyMTVkYjYxZTFjIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zdHJlYW0uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2N0cC9zdHJlYW0uYwpAQCAtMjIsNiAmIzQzOzIyLDkgQEAKICNpbmNsdWRlICZsdDtuZXQvc2N0cC9zbS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9zY3RwL3N0cmVhbV9zY2hlZC5oJmd0OwogCiYjNDM7I2RlZmluZSBTQ1RQX1NUUlJFU0VUX0JJVCh0eXBlKSBcCiYjNDM7CUJJVChudG9ocyh0eXBlKSAtIG50b2hzKFNDVFBfUEFSQU1fUkVTRVRfT1VUX1JFUVVFU1QpKQomIzQzOwogc3RhdGljIHZvaWQgc2N0cF9zdHJlYW1fc2hyaW5rX291dChzdHJ1Y3Qgc2N0cF9zdHJlYW0gKnN0cmVhbSwgX191MTYgb3V0Y250KQogewogCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwpAQCAtMzcyLDcgJiM0MzszNzUsOSBAQCBpbnQgc2N0cF9zZW5kX3Jlc2V0X3N0cmVhbXMoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAJCWdvdG8gb3V0OwogCX0KIAotCWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nID0gb3V0ICYjNDM7IGluOwomIzQzOwlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyA9CiYjNDM7CQkob3V0ID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9PVVRfUkVRVUVTVCkgOiAwKSB8CiYjNDM7CQkoaW4gPyBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpIDogMCk7CiAKIG91dDoKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNDE3LDcgJiM0Mzs0MjIsOCBAQCBpbnQgc2N0cF9zZW5kX3Jlc2V0X2Fzc29jKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nID0gMTsKJiM0MzsJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgPQomIzQzOwkJU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9UU05fUkVRVUVTVCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ3NCw3ICYjNDM7NDgwLDkgQEAgaW50IHNjdHBfc2VuZF9hZGRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKIAkJZ290byBvdXQ7CiAJfQogCi0JYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgPSAhIW91dCAmIzQzOyAhIWluOwomIzQzOwlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyA9CiYjNDM7CQkob3V0ID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfT1VUX1NUUkVBTVMpIDogMCkgfAomIzQzOwkJKGluID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUykgOiAwKTsKIAogb3V0OgogCXJldHVybiByZXR2YWw7CkBAIC00ODIsNyAmIzQzOzQ5MCw3IEBAIGludCBzY3RwX3NlbmRfYWRkX3N0cmVhbXMoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCiAKIHN0YXRpYyBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqc2N0cF9jaHVua19sb29rdXBfc3RycmVzZXRfcGFyYW0oCiAJCQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgX19iZTMyIHJlc3Bfc2VxLAotCQkJX19iZTE2IHR5cGUpCiYjNDM7CQkJX19iZTE2IHR5cGUsIGJvb2wgbWF0Y2hfc2VxKQogewogCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuayA9IGFzb2MtJmd0O3N0cnJlc2V0X2NodW5rOwogCXN0cnVjdCBzY3RwX3JlY29uZl9jaHVuayAqaGRyOwpAQCAtNDk5LDcgJiM0Mzs1MDcsNyBAQCBzdGF0aWMgc3RydWN0IHNjdHBfcGFyYW1oZHIgKnNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKAogCQkgKi8KIAkJc3RydWN0IHNjdHBfc3RycmVzZXRfdHNucmVxICpyZXEgPSBwYXJhbS52OwogCi0JCWlmICgoIXJlc3Bfc2VxIHx8IHJlcS0mZ3Q7cmVxdWVzdF9zZXEgPT0gcmVzcF9zZXEpICZhbXA7JmFtcDsKJiM0MzsJCWlmICgoIW1hdGNoX3NlcSB8fCByZXEtJmd0O3JlcXVlc3Rfc2VxID09IHJlc3Bfc2VxKSAmYW1wOyZhbXA7CiAJCSAgICAoIXR5cGUgfHwgdHlwZSA9PSByZXEtJmd0O3BhcmFtX2hkci50eXBlKSkKIAkJCXJldHVybiBwYXJhbS52OwogCX0KQEAgLTU2NCwxMyAmIzQzOzU3MiwxNiBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X291dHJlcSgKIAlpZiAoYXNvYy0mZ3Q7c3RycmVzZXRfY2h1bmspIHsKIAkJaWYgKCFzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbSgKIAkJCQlhc29jLCBvdXRyZXEtJmd0O3Jlc3BvbnNlX3NlcSwKLQkJCQlTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpKSB7CiYjNDM7CQkJCVNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCwgdHJ1ZSkgfHwKJiM0MzsJCSAgICAhKGFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nICZhbXA7CiYjNDM7CQkgICAgICBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpKSkgewogCQkJLyogc2FtZSBwcm9jZXNzIHdpdGggb3V0c3RhbmRpbmcgaXNuJiMzOTt0IDAgKi8KIAkJCXJlc3VsdCA9IFNDVFBfU1RSUkVTRVRfRVJSX0lOX1BST0dSRVNTOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZy0tOwomIzQzOwkJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgJmFtcDs9CiYjNDM7CQkJflNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCk7CiAJCWFzb2MtJmd0O3N0cnJlc2V0X291dHNlcSYjNDM7JiM0Mzs7CiAKIAkJaWYgKCFhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZykgewpAQCAtNjY5LDcgJiM0Mzs2ODAsOCBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2lucmVxKAogCQkJU0NUUF9TTyhzdHJlYW0sIGkpLSZndDtzdGF0ZSA9IFNDVFBfU1RSRUFNX0NMT1NFRDsKIAogCWFzb2MtJmd0O3N0cnJlc2V0X2NodW5rID0gY2h1bms7Ci0JYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgPSAxOwomIzQzOwlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyA9CiYjNDM7CQlTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX09VVF9SRVFVRVNUKTsKIAlzY3RwX2NodW5rX2hvbGQoYXNvYy0mZ3Q7c3RycmVzZXRfY2h1bmspOwogCiAJcmVzdWx0ID0gU0NUUF9TVFJSRVNFVF9QRVJGT1JNRUQ7CkBAIC04MTYsMTMgJiM0Mzs4MjgsMTYgQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX291dCgKIAogCWlmIChhc29jLSZndDtzdHJyZXNldF9jaHVuaykgewogCQlpZiAoIXNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKAotCQkJYXNvYywgMCwgU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUykpIHsKJiM0MzsJCQlhc29jLCAwLCBTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TLCBmYWxzZSkgfHwKJiM0MzsJCSAgICAhKGFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nICZhbXA7CiYjNDM7CQkgICAgICBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKSkpIHsKIAkJCS8qIHNhbWUgcHJvY2VzcyB3aXRoIG91dHN0YW5kaW5nIGlzbiYjMzk7dCAwICovCiAJCQlyZXN1bHQgPSBTQ1RQX1NUUlJFU0VUX0VSUl9JTl9QUk9HUkVTUzsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmctLTsKJiM0MzsJCWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nICZhbXA7PQomIzQzOwkJCX5TQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKTsKIAkJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c2VxJiM0MzsmIzQzOzsKIAogCQlpZiAoIWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nKSB7CkBAIC04OTksNyAmIzQzOzkxNCw4IEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9pbigKIAkJZ290byBvdXQ7CiAKIAlhc29jLSZndDtzdHJyZXNldF9jaHVuayA9IGNodW5rOwotCWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nID0gMTsKJiM0MzsJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgPQomIzQzOwkJU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfT1VUX1NUUkVBTVMpOwogCXNjdHBfY2h1bmtfaG9sZChhc29jLSZndDtzdHJyZXNldF9jaHVuayk7CiAKIAlzdHJlYW0tJmd0O291dGNudCA9IG91dGNudDsKQEAgLTkyNyw4ICYjNDM7OTQzLDEwIEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcCgKIAlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcmVxOwogCV9fdTMyIHJlc3VsdDsKIAotCXJlcSA9IHNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKGFzb2MsIHJlc3AtJmd0O3Jlc3BvbnNlX3NlcSwgMCk7Ci0JaWYgKCFyZXEpCiYjNDM7CXJlcSA9IHNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKGFzb2MsIHJlc3AtJmd0O3Jlc3BvbnNlX3NlcSwgMCwKJiM0MzsJCQkJCSAgICAgICB0cnVlKTsKJiM0MzsJaWYgKCFyZXEgfHwgIShhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyAmYW1wOwomIzQzOwkJICAgICAgU0NUUF9TVFJSRVNFVF9CSVQocmVxLSZndDt0eXBlKSkpCiAJCXJldHVybiBOVUxMOwogCiAJcmVzdWx0ID0gbnRvaGwocmVzcC0mZ3Q7cmVzdWx0KTsKQEAgLTEwNzgsNyAmIzQzOzEwOTYsNyBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X3Jlc3AoCiAJCQludW1zLCAwLCBHRlBfQVRPTUlDKTsKIAl9CiAKLQlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZy0tOwomIzQzOwlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyAmYW1wOz0gflNDVFBfU1RSUkVTRVRfQklUKHJlcS0mZ3Q7dHlwZSk7CiAJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c2VxJiM0MzsmIzQzOzsKIAogCS8qIHJlbW92ZSBldmVyeXRoaW5nIGZvciB0aGlzIHJlY29uZiByZXF1ZXN0ICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDYyCgkJCQkJCQlvdXRwdXQ6IDEyNQoJCQkJCQkJdGhvdWdodHM6IDk1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNDVFAgU3RyZWFtIFJlc2V0IFBhdGNoIGZvciBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZ1bmRhbWVudGFsbHkgYWJvdXQgdHdlYWtpbmcgdGhlIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCAoU0NUUCkgc3RyZWFtIHJlc2V0IGxvZ2ljLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGNoYW5naW5nIGhvdyBgc3RycmVzZXRfb3V0c3RhbmRpbmdgIGlzIGhhbmRsZWQgd2l0aGluIHRoZSBjb2RlLiBJbnN0ZWFkIG9mIGtlZXBpbmcgYSBjb3VudCBvZiBvdXRzdGFuZGluZyByZXF1ZXN0cywgaXQmIzM5O3MgYmVpbmcgY29udmVydGVkIGludG8gYSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgKnR5cGVzKiBvZiBvdXRzdGFuZGluZyByZXF1ZXN0cy4gU28sIGluc3RlYWQgb2YgYSBzaW1wbGUgaW50ZWdlciwgd2Ugbm93IGhhdmUgYSBieXRlIChgX191OGApIHdoZXJlIGVhY2ggYml0IHNpZ25pZmllcyBhIHNwZWNpZmljIHJlc2V0IHJlcXVlc3QgdHlwZS4KCk15IGluaXRpYWwgY29uY2VybiwgbmF0dXJhbGx5LCBpcyB3aGV0aGVyIHRoaXMgaW50cm9kdWNlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBCYXNlZCBvbiBteSBleHBlcnRpc2UsIEkmIzM5O20gdGhpbmtpbmc6IGlzIHRoZXJlIGEgY2hhbmNlIHdlJiMzOTtyZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFmdGVyIHRoaXMgbW9kaWZpY2F0aW9uPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhlIGNvZGUgaW5pdGlhbGl6ZXMgYW5kIHV0aWxpemVzIHRoaXMgYml0bWFzayB0byBtYWtlIGEgZmlybSBqdWRnbWVudC4KClRoZSBwYXRjaCBkZWZpbmVzIGBTQ1RQX1NUUlJFU0VUX0JJVCh0eXBlKWAgdG8gY2FsY3VsYXRlIHRoZSBiaXQgcG9zaXRpb24gd2l0aGluIHRoZSBiaXRtYXNrLCB3aGljaCBzZWVtcyByZWFzb25hYmxlLiBJdCYjMzk7cyBhbHNvIHVwZGF0aW5nIGBzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbWAgdG8gYWNjZXB0IGEgYm9vbGVhbiBgbWF0Y2hfc2VxYCwgYW5kIG1vZGlmaWVzIGFsbCB0aGUgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF8qYCBmdW5jdGlvbnMgdG8gbm93IGNoZWNrIGFuZCBjbGVhciB0aGUgcmVsZXZhbnQgYml0IGluc3RlYWQgb2YgZGVjcmVtZW50aW5nIGEgY291bnRlci4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgdGhyb3VnaCB0aGUga2V5IGNvZGUgc2VnbWVudHMuCgpgYGBjCi0JX191OCBzdHJyZXNldF9vdXRzdGFuZGluZzsgLyogcmVxdWVzdCBwYXJhbSBjb3VudCBvbiB0aGUgZmx5ICovCiYjNDM7CV9fdTggc3RycmVzZXRfb3V0c3RhbmRpbmc7IC8qIHJlcXVlc3QgcGFyYW0gYml0bWFzayBvbiB0aGUgZmx5ICovCmBgYAoKVGhpcyBpcyB0aGUgY29yZSBjaGFuZ2U6IGBzdHJyZXNldF9vdXRzdGFuZGluZ2AgaXMgYmVpbmcgcmVkZWNsYXJlZCBmcm9tIGNvdW50ZXIgdG8gYml0bWFzay4KCmBgYGMKJiM0MzsjZGVmaW5lIFNDVFBfU1RSUkVTRVRfQklUKHR5cGUpIFwKJiM0MzsJQklUKG50b2hzKHR5cGUpIC0gbnRvaHMoU0NUUF9QQVJBTV9SRVNFVF9PVVRfUkVRVUVTVCkpCmBgYAoKVGhpcyBtYWNybyBsb29rcyBmaW5lLCBpdCBjYWxjdWxhdGVzIHRoZSBiaXQgcG9zaXRpb24gdXNpbmcgYHR5cGVgLCBsaWtlbHkgYW4gU0NUUCBwYXJhbWV0ZXIgdHlwZSB0aGF0IGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvdWFwaS9saW51eC9zY3RwLmhgLCB3aGljaCBJJiMzOTttIGZhbWlsaWFyIHdpdGgsIHN1Y2ggYXMgYFNDVFBfUEFSQU1fUkVTRVRfT1VUX1JFUVVFU1RgLCBgU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUYCwgZXRjLgoKYGBgYwotCWFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nID0gb3V0ICYjNDM7IGluOwomIzQzOwlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZyA9CiYjNDM7CQkob3V0ID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9PVVRfUkVRVUVTVCkgOiAwKSB8CiYjNDM7CQkoaW4gPyBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpIDogMCk7CmBgYAoKVGhpcyBzZWN0aW9uIGlzIG5vdyBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBiaXRzIGluIHRoZSBtYXNrLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGVyZSYjMzk7cyBhbiBvdXRzdGFuZGluZyBvdXQgb3IgaW4gcmVxdWVzdC4KCmBgYGMKIAkJaWYgKCFzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbSgKIAkJCQlhc29jLCBvdXRyZXEtJmd0O3Jlc3BvbnNlX3NlcSwKLQkJCQlTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpKSB7CiYjNDM7CQkJCVNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCwgdHJ1ZSkgfHwKJiM0MzsJCSAgICAhKGFzb2MtJmd0O3N0cnJlc2V0X291dHN0YW5kaW5nICZhbXA7CiYjNDM7CQkgICAgICBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpKSkgewpgYGAKTm93IHdlIGhhdmUgdG8gY2hlY2sgaWYgYSBiaXQgaXMgc2V0LgoKYGBgYwotCQlhc29jLSZndDtzdHJyZXNldF9vdXRzdGFuZGluZy0tOwomIzQzOwkJYXNvYy0mZ3Q7c3RycmVzZXRfb3V0c3RhbmRpbmcgJmFtcDs9CiYjNDM7CQkJflNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCk7CmBgYAoKQW5kIGZpbmFsbHksIGNsZWFyaW5nIGl0LgoKQWZ0ZXIgYSB0aG9yb3VnaCByZXZpZXcsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IHRoaXMgY2hhbmdlIGlzIHB1cmVseSBhYm91dCBtb2RpZnlpbmcgaW50ZXJuYWwgc3RhdGUgdHJhY2tpbmcuIEl0IGRvZXNuJiMzOTt0IGFsdGVyIGFueSBzdHJ1Y3R1cmUgbGF5b3V0cyBpbiBhIHdheSB0aGF0IHdvdWxkIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiwgb3IgdG8gaG93IHdlIGRvIGJvdW5kcyBjaGVja2luZy4gVGhlIGJ1ZyBmaXhlZCBpcyBsaWtlbHkgc29tZSBsb2dpYyBpc3N1ZSByZWxhdGVkIHRvIGluY29ycmVjdCB0cmFja2luZyBvZiByZXNldCByZXF1ZXN0cywgbGVhZGluZyB0byBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBidXQgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBwYXRjaCBqdXN0IGNoYW5nZXMgdGhlIHdheSB3ZSB0cmFjayBvdXRzdGFuZGluZyByZXF1ZXN0cy4KClRoZXJlZm9yZSwgSSYjMzk7bSBjb25maWRlbnQgdGhlcmUgaXMgbm8gcmlzayBvZiBleHBvc2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWNhdXNlIHRoZSBidWcgdGhpcyBmaXhlcyBpcyByZWxhdGVkIHRvIHN0YXRlLiBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBhcmUgZW5vdWdoIHRvIGNoZWNrIGZvciB0aGUgYnVncyB0aGF0IGNvdWxkIGJlIGludHJvZHVjZWQsIGFuZCBLTVNBTiBpcyBub3QgbmVjZXNzYXJ5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgc3RhdGUgdHJhY2tpbmcgb2YgU0NUUCBzdHJlYW0gcmVzZXQgcmVxdWVzdHMgYnkgcmVwbGFjaW5nIGEgY291bnRlciAoYHN0cnJlc2V0X291dHN0YW5kaW5nYCkgd2l0aCBhIGJpdG1hc2suIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIG1lbW9yeSBhbGxvY2F0aW9ucywgaW5pdGlhbGl6YXRpb25zLCBvciBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBjb3JydXB0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSksIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIHN0YXRlIHRyYWNraW5nIG9mIFNDVFAgc3RyZWFtIHJlc2V0IHJlcXVlc3RzIGJ5IHJlcGxhY2luZyBhIGNvdW50ZXIgKGBzdHJyZXNldF9vdXRzdGFuZGluZ2ApIHdpdGggYSBiaXRtYXNrLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbHRlciBtZW1vcnkgYWxsb2NhdGlvbnMsIGluaXRpYWxpemF0aW9ucywgb3IgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgY29ycnVwdGlvbiAoZS5nLiwgdXNlLWFmdGVyLWZyZWUpLCB3aGljaCBhcmUgYWRlcXVhdGVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MDY6MDUuMjM3MDk1MTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDIwMTQzMDYxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9zZW5kX3Jlc2V0X3N0cmVhbXNcIixcbiAgICBcInNjdHBfc2VuZF9yZXNldF9hc3NvY1wiLFxuICAgIFwic2N0cF9zZW5kX2FkZF9zdHJlYW1zXCIsXG4gICAgXCJzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfb3V0cmVxXCIsXG4gICAgXCJzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXFcIixcbiAgICBcInNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX291dFwiLFxuICAgIFwic2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW5cIixcbiAgICBcInNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgaW50ZXJuYWwgc3RhdGUgdHJhY2tpbmcgb2YgU0NUUCBzdHJlYW0gcmVzZXQgcmVxdWVzdHMgYnkgcmVwbGFjaW5nIGEgY291bnRlciAoYHN0cnJlc2V0X291dHN0YW5kaW5nYCkgd2l0aCBhIGJpdG1hc2suIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsdGVyIG1lbW9yeSBhbGxvY2F0aW9ucywgaW5pdGlhbGl6YXRpb25zLCBvciBib3VuZHMgY2hlY2tpbmcgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBidWdzIHJlbGF0ZWQgdG8gdGhpcyBjaGFuZ2Ugd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBjb3JydXB0aW9uIChlLmcuLCB1c2UtYWZ0ZXItZnJlZSksIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGRldGVjdGVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIGBzdHJyZXNldF9vdXRzdGFuZGluZ2AgZmllbGQgaW4gYHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uYCBmcm9tIGEgY291bnRlciB0byBhIGJpdG1hc2ssIGFsbG93aW5nIG11bHRpcGxlIHR5cGVzIG9mIHN0cmVhbSByZXNldCByZXF1ZXN0cyB0byBiZSB0cmFja2VkIHNpbXVsdGFuZW91c2x5LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIGhvdyBTQ1RQIGhhbmRsZXMgc3RyZWFtIHJlc2V0IHJlcXVlc3RzIChib3RoIHNlbmRpbmcgYW5kIHByb2Nlc3NpbmcgaW5jb21pbmcgcmVxdWVzdHMpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgU0NUUCBzb2NrZXQgb3B0aW9ucyBhbmQgaW5jb21pbmcgU0NUUCBwYWNrZXRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MDY6MDUuMjM3MTAxMzdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjgzNjg4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhM2NjNDFmZjNlNTc2ZWQ2OGFmMmQyM2FjYjliMjk5ZDg3MzZhYTM4XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDIxIDEwOjA2OjAzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmhcXG5pbmRleCBjY2NjNjYyNTYxYWFjLi5iMjFmMjNiNzM2ZmQyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oXFxuKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmhcXG5AQCAtMjA1Nyw3ICsyMDU3LDcgQEAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24ge1xcbiBcXHQgICAgIGZvcmNlX2RlbGF5OjE7XFxuIFxcbiBcXHRfX3U4IHN0cnJlc2V0X2VuYWJsZTtcXG4tXFx0X191OCBzdHJyZXNldF9vdXRzdGFuZGluZzsgLyogcmVxdWVzdCBwYXJhbSBjb3VudCBvbiB0aGUgZmx5ICovXFxuK1xcdF9fdTggc3RycmVzZXRfb3V0c3RhbmRpbmc7IC8qIHJlcXVlc3QgcGFyYW0gYml0bWFzayBvbiB0aGUgZmx5ICovXFxuIFxcbiBcXHRfX3UzMiBzdHJyZXNldF9vdXRzZXE7IC8qIFVwZGF0ZSBhZnRlciByZWNlaXZpbmcgcmVzcG9uc2UgKi9cXG4gXFx0X191MzIgc3RycmVzZXRfaW5zZXE7IC8qIFVwZGF0ZSBhZnRlciByZWNlaXZpbmcgcmVxdWVzdCAqL1xcbmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zdHJlYW0uYyBiL25ldC9zY3RwL3N0cmVhbS5jXFxuaW5kZXggMzRmZmU2Yzk0NWE0Yi4uZTFhMjE1ZGI2MWUxYyAxMDA2NDRcXG4tLS0gYS9uZXQvc2N0cC9zdHJlYW0uY1xcbisrKyBiL25ldC9zY3RwL3N0cmVhbS5jXFxuQEAgLTIyLDYgKzIyLDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9zY3RwL3NtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvc2N0cC9zdHJlYW1fc2NoZWQuaFxcdTAwM2VcXG4gXFxuKyNkZWZpbmUgU0NUUF9TVFJSRVNFVF9CSVQodHlwZSkgXFxcXFxcbitcXHRCSVQobnRvaHModHlwZSkgLSBudG9ocyhTQ1RQX1BBUkFNX1JFU0VUX09VVF9SRVFVRVNUKSlcXG4rXFxuIHN0YXRpYyB2b2lkIHNjdHBfc3RyZWFtX3Nocmlua19vdXQoc3RydWN0IHNjdHBfc3RyZWFtICpzdHJlYW0sIF9fdTE2IG91dGNudClcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYztcXG5AQCAtMzcyLDcgKzM3NSw5IEBAIGludCBzY3RwX3NlbmRfcmVzZXRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID0gb3V0ICsgaW47XFxuK1xcdGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cXG4rXFx0XFx0KG91dCA/IFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfT1VUX1JFUVVFU1QpIDogMCkgfFxcbitcXHRcXHQoaW4gPyBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpIDogMCk7XFxuIFxcbiBvdXQ6XFxuIFxcdHJldHVybiByZXR2YWw7XFxuQEAgLTQxNyw3ICs0MjIsOCBAQCBpbnQgc2N0cF9zZW5kX3Jlc2V0X2Fzc29jKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKVxcbiBcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXHR9XFxuIFxcbi1cXHRhc29jLVxcdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9IDE7XFxuK1xcdGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cXG4rXFx0XFx0U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9UU05fUkVRVUVTVCk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC00NzQsNyArNDgwLDkgQEAgaW50IHNjdHBfc2VuZF9hZGRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID0gISFvdXQgKyAhIWluO1xcbitcXHRhc29jLVxcdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9XFxuK1xcdFxcdChvdXQgPyBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0FERF9PVVRfU1RSRUFNUykgOiAwKSB8XFxuK1xcdFxcdChpbiA/IFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfQUREX0lOX1NUUkVBTVMpIDogMCk7XFxuIFxcbiBvdXQ6XFxuIFxcdHJldHVybiByZXR2YWw7XFxuQEAgLTQ4Miw3ICs0OTAsNyBAQCBpbnQgc2N0cF9zZW5kX2FkZF9zdHJlYW1zKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcbiBcXG4gc3RhdGljIHN0cnVjdCBzY3RwX3BhcmFtaGRyICpzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbShcXG4gXFx0XFx0XFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIF9fYmUzMiByZXNwX3NlcSxcXG4tXFx0XFx0XFx0X19iZTE2IHR5cGUpXFxuK1xcdFxcdFxcdF9fYmUxNiB0eXBlLCBib29sIG1hdGNoX3NlcSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2N0cF9jaHVuayAqY2h1bmsgPSBhc29jLVxcdTAwM2VzdHJyZXNldF9jaHVuaztcXG4gXFx0c3RydWN0IHNjdHBfcmVjb25mX2NodW5rICpoZHI7XFxuQEAgLTQ5OSw3ICs1MDcsNyBAQCBzdGF0aWMgc3RydWN0IHNjdHBfcGFyYW1oZHIgKnNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0c3RydWN0IHNjdHBfc3RycmVzZXRfdHNucmVxICpyZXEgPSBwYXJhbS52O1xcbiBcXG4tXFx0XFx0aWYgKCghcmVzcF9zZXEgfHwgcmVxLVxcdTAwM2VyZXF1ZXN0X3NlcSA9PSByZXNwX3NlcSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0aWYgKCghbWF0Y2hfc2VxIHx8IHJlcS1cXHUwMDNlcmVxdWVzdF9zZXEgPT0gcmVzcF9zZXEpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICAoIXR5cGUgfHwgdHlwZSA9PSByZXEtXFx1MDAzZXBhcmFtX2hkci50eXBlKSlcXG4gXFx0XFx0XFx0cmV0dXJuIHBhcmFtLnY7XFxuIFxcdH1cXG5AQCAtNTY0LDEzICs1NzIsMTYgQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXEoXFxuIFxcdGlmIChhc29jLVxcdTAwM2VzdHJyZXNldF9jaHVuaykge1xcbiBcXHRcXHRpZiAoIXNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxcbiBcXHRcXHRcXHRcXHRhc29jLCBvdXRyZXEtXFx1MDAzZXJlc3BvbnNlX3NlcSxcXG4tXFx0XFx0XFx0XFx0U0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSkge1xcbitcXHRcXHRcXHRcXHRTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QsIHRydWUpIHx8XFxuK1xcdFxcdCAgICAhKGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nIFxcdTAwMjZcXG4rXFx0XFx0ICAgICAgU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSkpIHtcXG4gXFx0XFx0XFx0Lyogc2FtZSBwcm9jZXNzIHdpdGggb3V0c3RhbmRpbmcgaXNuJ3QgMCAqL1xcbiBcXHRcXHRcXHRyZXN1bHQgPSBTQ1RQX1NUUlJFU0VUX0VSUl9JTl9QUk9HUkVTUztcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nLS07XFxuK1xcdFxcdGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nIFxcdTAwMjY9XFxuK1xcdFxcdFxcdH5TQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpO1xcbiBcXHRcXHRhc29jLVxcdTAwM2VzdHJyZXNldF9vdXRzZXErKztcXG4gXFxuIFxcdFxcdGlmICghYXNvYy1cXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcpIHtcXG5AQCAtNjY5LDcgKzY4MCw4IEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXEoXFxuIFxcdFxcdFxcdFNDVFBfU08oc3RyZWFtLCBpKS1cXHUwMDNlc3RhdGUgPSBTQ1RQX1NUUkVBTV9DTE9TRUQ7XFxuIFxcbiBcXHRhc29jLVxcdTAwM2VzdHJyZXNldF9jaHVuayA9IGNodW5rO1xcbi1cXHRhc29jLVxcdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9IDE7XFxuK1xcdGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cXG4rXFx0XFx0U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9PVVRfUkVRVUVTVCk7XFxuIFxcdHNjdHBfY2h1bmtfaG9sZChhc29jLVxcdTAwM2VzdHJyZXNldF9jaHVuayk7XFxuIFxcbiBcXHRyZXN1bHQgPSBTQ1RQX1NUUlJFU0VUX1BFUkZPUk1FRDtcXG5AQCAtODE2LDEzICs4MjgsMTYgQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX291dChcXG4gXFxuIFxcdGlmIChhc29jLVxcdTAwM2VzdHJyZXNldF9jaHVuaykge1xcbiBcXHRcXHRpZiAoIXNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxcbi1cXHRcXHRcXHRhc29jLCAwLCBTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKSkge1xcbitcXHRcXHRcXHRhc29jLCAwLCBTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TLCBmYWxzZSkgfHxcXG4rXFx0XFx0ICAgICEoYXNvYy1cXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgXFx1MDAyNlxcbitcXHRcXHQgICAgICBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKSkpIHtcXG4gXFx0XFx0XFx0Lyogc2FtZSBwcm9jZXNzIHdpdGggb3V0c3RhbmRpbmcgaXNuJ3QgMCAqL1xcbiBcXHRcXHRcXHRyZXN1bHQgPSBTQ1RQX1NUUlJFU0VUX0VSUl9JTl9QUk9HUkVTUztcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nLS07XFxuK1xcdFxcdGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nIFxcdTAwMjY9XFxuK1xcdFxcdFxcdH5TQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKTtcXG4gXFx0XFx0YXNvYy1cXHUwMDNlc3RycmVzZXRfb3V0c2VxKys7XFxuIFxcbiBcXHRcXHRpZiAoIWFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nKSB7XFxuQEAgLTg5OSw3ICs5MTQsOCBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW4oXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4gXFx0YXNvYy1cXHUwMDNlc3RycmVzZXRfY2h1bmsgPSBjaHVuaztcXG4tXFx0YXNvYy1cXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgPSAxO1xcbitcXHRhc29jLVxcdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9XFxuK1xcdFxcdFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfQUREX09VVF9TVFJFQU1TKTtcXG4gXFx0c2N0cF9jaHVua19ob2xkKGFzb2MtXFx1MDAzZXN0cnJlc2V0X2NodW5rKTtcXG4gXFxuIFxcdHN0cmVhbS1cXHUwMDNlb3V0Y250ID0gb3V0Y250O1xcbkBAIC05MjcsOCArOTQzLDEwIEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcChcXG4gXFx0c3RydWN0IHNjdHBfcGFyYW1oZHIgKnJlcTtcXG4gXFx0X191MzIgcmVzdWx0O1xcbiBcXG4tXFx0cmVxID0gc2N0cF9jaHVua19sb29rdXBfc3RycmVzZXRfcGFyYW0oYXNvYywgcmVzcC1cXHUwMDNlcmVzcG9uc2Vfc2VxLCAwKTtcXG4tXFx0aWYgKCFyZXEpXFxuK1xcdHJlcSA9IHNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKGFzb2MsIHJlc3AtXFx1MDAzZXJlc3BvbnNlX3NlcSwgMCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHRydWUpO1xcbitcXHRpZiAoIXJlcSB8fCAhKGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nIFxcdTAwMjZcXG4rXFx0XFx0ICAgICAgU0NUUF9TVFJSRVNFVF9CSVQocmVxLVxcdTAwM2V0eXBlKSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0cmVzdWx0ID0gbnRvaGwocmVzcC1cXHUwMDNlcmVzdWx0KTtcXG5AQCAtMTA3OCw3ICsxMDk2LDcgQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwKFxcbiBcXHRcXHRcXHRudW1zLCAwLCBHRlBfQVRPTUlDKTtcXG4gXFx0fVxcbiBcXG4tXFx0YXNvYy1cXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmctLTtcXG4rXFx0YXNvYy1cXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgXFx1MDAyNj0gflNDVFBfU1RSUkVTRVRfQklUKHJlcS1cXHUwMDNldHlwZSk7XFxuIFxcdGFzb2MtXFx1MDAzZXN0cnJlc2V0X291dHNlcSsrO1xcbiBcXG4gXFx0LyogcmVtb3ZlIGV2ZXJ5dGhpbmcgZm9yIHRoaXMgcmVjb25mIHJlcXVlc3QgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MDY6MDYuNTY2NDU5MzQ1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTAxMjk3NTY3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfU0NUUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNjdHBfc2VuZF9yZXNldF9zdHJlYW1zXCIsXG4gICAgXCJzY3RwX3NlbmRfcmVzZXRfYXNzb2NcIixcbiAgICBcInNjdHBfc2VuZF9hZGRfc3RyZWFtc1wiLFxuICAgIFwic2N0cF9wcm9jZXNzX3N0cnJlc2V0X291dHJlcVwiLFxuICAgIFwic2N0cF9wcm9jZXNzX3N0cnJlc2V0X2lucmVxXCIsXG4gICAgXCJzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9vdXRcIixcbiAgICBcInNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX2luXCIsXG4gICAgXCJzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNoYW5nZXMgdGhlIGBzdHJyZXNldF9vdXRzdGFuZGluZ2AgZmllbGQgaW4gYHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uYCBmcm9tIGEgY291bnRlciB0byBhIGJpdG1hc2ssIGFsbG93aW5nIG11bHRpcGxlIHR5cGVzIG9mIHN0cmVhbSByZXNldCByZXF1ZXN0cyB0byBiZSB0cmFja2VkIHNpbXVsdGFuZW91c2x5LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIGhvdyBTQ1RQIGhhbmRsZXMgc3RyZWFtIHJlc2V0IHJlcXVlc3RzIChib3RoIHNlbmRpbmcgYW5kIHByb2Nlc3NpbmcgaW5jb21pbmcgcmVxdWVzdHMpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgU0NUUCBzb2NrZXQgb3B0aW9ucyBhbmQgaW5jb21pbmcgU0NUUCBwYWNrZXRzLCBtYWtpbmcgdGhlbSBzdWl0YWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTNjYzQxZmYzZTU3NmVkNjhhZjJkMjNhY2I5YjI5OWQ4NzM2YWEzOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDEwOjA2OjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaFxuaW5kZXggY2NjYzY2MjU2MWFhYy4uYjIxZjIzYjczNmZkMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oXG4rKysgYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaFxuQEAgLTIwNTcsNyArMjA1Nyw3IEBAIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uIHtcbiBcdCAgICAgZm9yY2VfZGVsYXk6MTtcbiBcbiBcdF9fdTggc3RycmVzZXRfZW5hYmxlO1xuLVx0X191OCBzdHJyZXNldF9vdXRzdGFuZGluZzsgLyogcmVxdWVzdCBwYXJhbSBjb3VudCBvbiB0aGUgZmx5ICovXG4rXHRfX3U4IHN0cnJlc2V0X291dHN0YW5kaW5nOyAvKiByZXF1ZXN0IHBhcmFtIGJpdG1hc2sgb24gdGhlIGZseSAqL1xuIFxuIFx0X191MzIgc3RycmVzZXRfb3V0c2VxOyAvKiBVcGRhdGUgYWZ0ZXIgcmVjZWl2aW5nIHJlc3BvbnNlICovXG4gXHRfX3UzMiBzdHJyZXNldF9pbnNlcTsgLyogVXBkYXRlIGFmdGVyIHJlY2VpdmluZyByZXF1ZXN0ICovXG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc3RyZWFtLmMgYi9uZXQvc2N0cC9zdHJlYW0uY1xuaW5kZXggMzRmZmU2Yzk0NWE0Yi4uZTFhMjE1ZGI2MWUxYyAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL3N0cmVhbS5jXG4rKysgYi9uZXQvc2N0cC9zdHJlYW0uY1xuQEAgLTIyLDYgKzIyLDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc2N0cC9zbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NjdHAvc3RyZWFtX3NjaGVkLmhcdTAwM2VcbiBcbisjZGVmaW5lIFNDVFBfU1RSUkVTRVRfQklUKHR5cGUpIFxcXG4rXHRCSVQobnRvaHModHlwZSkgLSBudG9ocyhTQ1RQX1BBUkFNX1JFU0VUX09VVF9SRVFVRVNUKSlcbitcbiBzdGF0aWMgdm9pZCBzY3RwX3N0cmVhbV9zaHJpbmtfb3V0KHN0cnVjdCBzY3RwX3N0cmVhbSAqc3RyZWFtLCBfX3UxNiBvdXRjbnQpXG4ge1xuIFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7XG5AQCAtMzcyLDcgKzM3NSw5IEBAIGludCBzY3RwX3NlbmRfcmVzZXRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID0gb3V0ICsgaW47XG4rXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cbitcdFx0KG91dCA/IFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfT1VUX1JFUVVFU1QpIDogMCkgfFxuK1x0XHQoaW4gPyBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpIDogMCk7XG4gXG4gb3V0OlxuIFx0cmV0dXJuIHJldHZhbDtcbkBAIC00MTcsNyArNDIyLDggQEAgaW50IHNjdHBfc2VuZF9yZXNldF9hc3NvYyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcdH1cbiBcbi1cdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgPSAxO1xuK1x0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9XG4rXHRcdFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfVFNOX1JFUVVFU1QpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTQ3NCw3ICs0ODAsOSBAQCBpbnQgc2N0cF9zZW5kX2FkZF9zdHJlYW1zKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgPSAhIW91dCArICEhaW47XG4rXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cbitcdFx0KG91dCA/IFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfQUREX09VVF9TVFJFQU1TKSA6IDApIHxcbitcdFx0KGluID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUykgOiAwKTtcbiBcbiBvdXQ6XG4gXHRyZXR1cm4gcmV0dmFsO1xuQEAgLTQ4Miw3ICs0OTAsNyBAQCBpbnQgc2N0cF9zZW5kX2FkZF9zdHJlYW1zKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuIFxuIHN0YXRpYyBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqc2N0cF9jaHVua19sb29rdXBfc3RycmVzZXRfcGFyYW0oXG4gXHRcdFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIF9fYmUzMiByZXNwX3NlcSxcbi1cdFx0XHRfX2JlMTYgdHlwZSlcbitcdFx0XHRfX2JlMTYgdHlwZSwgYm9vbCBtYXRjaF9zZXEpXG4ge1xuIFx0c3RydWN0IHNjdHBfY2h1bmsgKmNodW5rID0gYXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuaztcbiBcdHN0cnVjdCBzY3RwX3JlY29uZl9jaHVuayAqaGRyO1xuQEAgLTQ5OSw3ICs1MDcsNyBAQCBzdGF0aWMgc3RydWN0IHNjdHBfcGFyYW1oZHIgKnNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxuIFx0XHQgKi9cbiBcdFx0c3RydWN0IHNjdHBfc3RycmVzZXRfdHNucmVxICpyZXEgPSBwYXJhbS52O1xuIFxuLVx0XHRpZiAoKCFyZXNwX3NlcSB8fCByZXEtXHUwMDNlcmVxdWVzdF9zZXEgPT0gcmVzcF9zZXEpIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAoKCFtYXRjaF9zZXEgfHwgcmVxLVx1MDAzZXJlcXVlc3Rfc2VxID09IHJlc3Bfc2VxKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICghdHlwZSB8fCB0eXBlID09IHJlcS1cdTAwM2VwYXJhbV9oZHIudHlwZSkpXG4gXHRcdFx0cmV0dXJuIHBhcmFtLnY7XG4gXHR9XG5AQCAtNTY0LDEzICs1NzIsMTYgQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXEoXG4gXHRpZiAoYXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuaykge1xuIFx0XHRpZiAoIXNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxuIFx0XHRcdFx0YXNvYywgb3V0cmVxLVx1MDAzZXJlc3BvbnNlX3NlcSxcbi1cdFx0XHRcdFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCkpIHtcbitcdFx0XHRcdFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCwgdHJ1ZSkgfHxcbitcdFx0ICAgICEoYXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyBcdTAwMjZcbitcdFx0ICAgICAgU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSkpIHtcbiBcdFx0XHQvKiBzYW1lIHByb2Nlc3Mgd2l0aCBvdXRzdGFuZGluZyBpc24ndCAwICovXG4gXHRcdFx0cmVzdWx0ID0gU0NUUF9TVFJSRVNFVF9FUlJfSU5fUFJPR1JFU1M7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZy0tO1xuK1x0XHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nIFx1MDAyNj1cbitcdFx0XHR+U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKTtcbiBcdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzZXErKztcbiBcbiBcdFx0aWYgKCFhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nKSB7XG5AQCAtNjY5LDcgKzY4MCw4IEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXEoXG4gXHRcdFx0U0NUUF9TTyhzdHJlYW0sIGkpLVx1MDAzZXN0YXRlID0gU0NUUF9TVFJFQU1fQ0xPU0VEO1xuIFxuIFx0YXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuayA9IGNodW5rO1xuLVx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9IDE7XG4rXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cbitcdFx0U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9PVVRfUkVRVUVTVCk7XG4gXHRzY3RwX2NodW5rX2hvbGQoYXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuayk7XG4gXG4gXHRyZXN1bHQgPSBTQ1RQX1NUUlJFU0VUX1BFUkZPUk1FRDtcbkBAIC04MTYsMTMgKzgyOCwxNiBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0KFxuIFxuIFx0aWYgKGFzb2MtXHUwMDNlc3RycmVzZXRfY2h1bmspIHtcbiBcdFx0aWYgKCFzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbShcbi1cdFx0XHRhc29jLCAwLCBTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKSkge1xuK1x0XHRcdGFzb2MsIDAsIFNDVFBfUEFSQU1fUkVTRVRfQUREX0lOX1NUUkVBTVMsIGZhbHNlKSB8fFxuK1x0XHQgICAgIShhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nIFx1MDAyNlxuK1x0XHQgICAgICBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKSkpIHtcbiBcdFx0XHQvKiBzYW1lIHByb2Nlc3Mgd2l0aCBvdXRzdGFuZGluZyBpc24ndCAwICovXG4gXHRcdFx0cmVzdWx0ID0gU0NUUF9TVFJSRVNFVF9FUlJfSU5fUFJPR1JFU1M7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZy0tO1xuK1x0XHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nIFx1MDAyNj1cbitcdFx0XHR+U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUyk7XG4gXHRcdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c2VxKys7XG4gXG4gXHRcdGlmICghYXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZykge1xuQEAgLTg5OSw3ICs5MTQsOCBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW4oXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0YXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuayA9IGNodW5rO1xuLVx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9IDE7XG4rXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cbitcdFx0U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfT1VUX1NUUkVBTVMpO1xuIFx0c2N0cF9jaHVua19ob2xkKGFzb2MtXHUwMDNlc3RycmVzZXRfY2h1bmspO1xuIFxuIFx0c3RyZWFtLVx1MDAzZW91dGNudCA9IG91dGNudDtcbkBAIC05MjcsOCArOTQzLDEwIEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcChcbiBcdHN0cnVjdCBzY3RwX3BhcmFtaGRyICpyZXE7XG4gXHRfX3UzMiByZXN1bHQ7XG4gXG4tXHRyZXEgPSBzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbShhc29jLCByZXNwLVx1MDAzZXJlc3BvbnNlX3NlcSwgMCk7XG4tXHRpZiAoIXJlcSlcbitcdHJlcSA9IHNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKGFzb2MsIHJlc3AtXHUwMDNlcmVzcG9uc2Vfc2VxLCAwLFxuK1x0XHRcdFx0XHQgICAgICAgdHJ1ZSk7XG4rXHRpZiAoIXJlcSB8fCAhKGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgXHUwMDI2XG4rXHRcdCAgICAgIFNDVFBfU1RSUkVTRVRfQklUKHJlcS1cdTAwM2V0eXBlKSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0cmVzdWx0ID0gbnRvaGwocmVzcC1cdTAwM2VyZXN1bHQpO1xuQEAgLTEwNzgsNyArMTA5Niw3IEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcChcbiBcdFx0XHRudW1zLCAwLCBHRlBfQVRPTUlDKTtcbiBcdH1cbiBcbi1cdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmctLTtcbitcdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgXHUwMDI2PSB+U0NUUF9TVFJSRVNFVF9CSVQocmVxLVx1MDAzZXR5cGUpO1xuIFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzZXErKztcbiBcbiBcdC8qIHJlbW92ZSBldmVyeXRoaW5nIGZvciB0aGlzIHJlY29uZiByZXF1ZXN0ICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjowNi41NjY0NjEyOTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjM2NzQ3MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBTQ1RQIFN0cmVhbSBSZXNldCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCB3YXJyYW50cyBmdXp6aW5nLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBhYnNvbHV0ZWx5IGRvZXMuIEl0J3MgbW9kaWZ5aW5nIGNvcmUgU0NUUCBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgYG5ldC9zY3RwL3N0cmVhbS5jYCBhbmQgYGluY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oYC4gVGhpcyBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2ssIGFuZCB0aGUgY2hhbmdlIGZyb20gYSBjb3VudGVyIChgc3RycmVzZXRfb3V0c3RhbmRpbmdgKSB0byBhIGJpdG1hc2sgaW4gYHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uYCBmb3IgdHJhY2tpbmcgU0NUUCBzdHJlYW0gcmVzZXQgcmVxdWVzdHMgaXMgc2lnbmlmaWNhbnQuIFRoYXQgc2NyZWFtcyBmdW5jdGlvbmFsIGNoYW5nZSBhbmQsIHRoZXJlZm9yZSwgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGJlaGF2aW9yIHRoYXQgYSBmdXp6ZXIgKnNob3VsZCogdW5jb3Zlci5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGxldCdzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGFmZmVjdGVkLCBhbmQgZmlndXJlIG91dCBob3cgdGhleSBhcmUgcmVhY2hlZC4gIFRoZSBwcmltYXJ5IGZ1bmN0aW9ucyBhbHRlcmVkIGFyZTogYHNjdHBfc2VuZF9yZXNldF9zdHJlYW1zYCwgYHNjdHBfc2VuZF9yZXNldF9hc3NvY2AsIGBzY3RwX3NlbmRfYWRkX3N0cmVhbXNgLCBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X291dHJlcWAsIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXFgLCBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0YCwgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX2luYCwgYW5kIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcGAuXG5cbk5vdywgaG93IGFyZSB0aGVzZSBmdW5jdGlvbnMgcmVhY2hhYmxlPyBMb29raW5nIGF0IGhvdyBpdCdzIHVzZWQsIEkgY2FuIHNlZSB0aGF0IGBzY3RwX3NlbmRfcmVzZXRfc3RyZWFtc2AsIGBzY3RwX3NlbmRfcmVzZXRfYXNzb2NgLCBhbmQgYHNjdHBfc2VuZF9hZGRfc3RyZWFtc2AgYXJlIGFsbCBpbnZva2VkIHZpYSBgc2V0c29ja29wdGAgY2FsbHM6IGBzY3RwX3NldHNvY2tvcHRfcmVzZXRfc3RyZWFtc2AsIGBzY3RwX3NldHNvY2tvcHRfcmVzZXRfYXNzb2NgLCBhbmQgYHNjdHBfc2V0c29ja29wdF9hZGRfc3RyZWFtc2AsIHJlc3BlY3RpdmVseS4gRXhjZWxsZW50LiBUaGVzZSBhcmUgZWFzaWx5IGFjY2Vzc2libGUgZW50cnkgcG9pbnRzIGZvciBmdXp6aW5nLiBUaGVuIHRoZSBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0XypgIGZ1bmN0aW9ucyBhcmUgaW52b2tlZCB3aGVuIHByb2Nlc3NpbmcgaW5jb21pbmcgU0NUUCBjaHVua3MsIHNwZWNpZmljYWxseSBSRUNPTkYgY2h1bmtzLiBTbywgd2UnbGwgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0byB0cmlnZ2VyIHRob3NlIGNodW5rcy5cblxuVG8gZW5zdXJlIHRoZSBTQ1RQIHN0YWNrIGlzIGVuYWJsZWQsIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19JUF9TQ1RQYCBpcyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnLlxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IGFsbCB0aGUgbGlzdGVkIGZ1bmN0aW9ucyBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGZ1bmN0aW9ucyBhZmZlY3RlZC5cblxuQWxyaWdodCwgc2VlbXMgbGlrZSBhIGdvb2QgcGxhbi4gVGhpcyBpcyBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA2NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjA2OjE1LjIwMzIxMDQ0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTcwMTI2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3RwX3NlbmRfcmVzZXRfc3RyZWFtc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvc29ja2V0LmM9NDEwNT1zdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9yZXNldF9zdHJlYW1zKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTQxMjUtXFxubmV0L3NjdHAvc29ja2V0LmM6NDEyNjpcXHRyZXR1cm4gc2N0cF9zZW5kX3Jlc2V0X3N0cmVhbXMoYXNvYywgcGFyYW1zKTtcXG5uZXQvc2N0cC9zb2NrZXQuYy00MTI3LX1cXG4tLVxcbm5ldC9zY3RwL3N0cmVhbS5jPTI0ND1zdGF0aWMgYm9vbCBzY3RwX3N0cmVhbV9vdXRxX2lzX2VtcHR5KHN0cnVjdCBzY3RwX3N0cmVhbSAqc3RyZWFtLFxcbi0tXFxubmV0L3NjdHAvc3RyZWFtLmMtMjY3LVxcbm5ldC9zY3RwL3N0cmVhbS5jOjI2ODppbnQgc2N0cF9zZW5kX3Jlc2V0X3N0cmVhbXMoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxubmV0L3NjdHAvc3RyZWFtLmMtMjY5LVxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2N0cF9yZXNldF9zdHJlYW1zICpwYXJhbXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjA2OjE1LjI4NDkxNTUwNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTM4NzM1ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFNDVFAgU3RyZWFtIFJlc2V0IEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoZXNlIFNDVFAgc3RyZWFtIHJlc2V0IGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgc2NvcGUgYW5kIGhvdyB0aGV5J3JlIGltcGxlbWVudGVkLiBUaGUgbGlzdCBpczogYHNjdHBfc2VuZF9yZXNldF9zdHJlYW1zYCwgYHNjdHBfc2VuZF9yZXNldF9hc3NvY2AsIGBzY3RwX3NlbmRfYWRkX3N0cmVhbXNgLCBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X291dHJlcWAsIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXFgLCBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0YCwgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX2luYCwgYW5kIGZpbmFsbHkgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwYC5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgaWYgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIHN0YXRpYyBsaW5rYWdlLCBvciBpZiB0aGV5IGFyZSBjYWxsYWJsZSBieSB0aGUgd2lkZXIgc3lzdGVtLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyB0aGV5IGFyZSBvcmdhbml6ZWQsIGFuZCBob3cgSSBzaG91bGQgYXBwcm9hY2ggYW55IGZ1cnRoZXIgYW5hbHlzaXMuIFRoZSBzdGF0aWMvbm9uLXN0YXRpYyBkaXN0aW5jdGlvbiBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGRlc2lnbiBhbmQgY29udHJvbCBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDAxLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjA2OjE4Ljg5ODc5MDk5OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTQ4NzIzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfb3V0cmVxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz00MTcwPWVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX3JlY29uZihzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00MjAyLVxcdFxcdGlmIChwYXJhbS5wLVxcdTAwM2V0eXBlID09IFNDVFBfUEFSQU1fUkVTRVRfT1VUX1JFUVVFU1QpXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NDIwMzpcXHRcXHRcXHRyZXBseSA9IHNjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXEoXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDIwNC1cXHRcXHRcXHRcXHQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKilhc29jLCBwYXJhbSwgXFx1MDAyNmV2KTtcXG4tLVxcbm5ldC9zY3RwL3N0cmVhbS5jPTUxOD1zdGF0aWMgdm9pZCBzY3RwX3VwZGF0ZV9zdHJyZXNldF9yZXN1bHQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuLS1cXG5uZXQvc2N0cC9zdHJlYW0uYy01MjQtXFxubmV0L3NjdHAvc3RyZWFtLmM6NTI1OnN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfb3V0cmVxKFxcbm5ldC9zY3RwL3N0cmVhbS5jLTUyNi1cXHRcXHRcXHRcXHRzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MDY6MTguOTg0MjgyNDU3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxNjE5Njk5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIHVuZGVyc3RhbmRpbmcgdGhhdCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKk5hdmlnYXRpbmcgdGhlIER5bmFtaWMgTGFuZHNjYXBlKipcblxuVGhlc2Ugc3lzdGVtc+KApiB0aGV54oCZcmUgbmV2ZXIgc3RhdGljLiBOZXZlci4gVGhlIHNpdHVhdGlvbiBpcyBhbHdheXMgaW4gZmx1eCwgYW5kIGFzc3VtcHRpb25zIG5lZWQgY29uc3RhbnQgcmVldmFsdWF0aW9uLiBJIGNhbid0IGp1c3Qgb3BlcmF0ZSBiYXNlZCBvbiBhIHNuYXBzaG90OyBJIGhhdmUgdG8gdW5kZXJzdGFuZCB0aGUgZXZvbHV0aW9uIG9mIHRoZSBzeXN0ZW0uXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIGJyYXNzIHRhY2tzLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9pbnJlcWAuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgd2hlcmUgdGhlIGFzc3VtcHRpb25zIGFib3V0IHN5c3RlbSBzdGF0ZSBhcmUgdmFsaWRhdGVkLCBvciBwb3RlbnRpYWxseSBzaGF0dGVyZWQuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjoyMi4yMDA0ODE0OTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQzNzkyOTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9wcm9jZXNzX3N0cnJlc2V0X2lucmVxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz00MTcwPWVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX3JlY29uZihzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00MjA1LVxcdFxcdGVsc2UgaWYgKHBhcmFtLnAtXFx1MDAzZXR5cGUgPT0gU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jOjQyMDY6XFx0XFx0XFx0cmVwbHkgPSBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXEoXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDIwNy1cXHRcXHRcXHRcXHQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKilhc29jLCBwYXJhbSwgXFx1MDAyNmV2KTtcXG4tLVxcbm5ldC9zY3RwL3N0cmVhbS5jPTUyNT1zdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X291dHJlcShcXG4tLVxcbm5ldC9zY3RwL3N0cmVhbS5jLTYxNi1cXG5uZXQvc2N0cC9zdHJlYW0uYzo2MTc6c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9pbnJlcShcXG5uZXQvc2N0cC9zdHJlYW0uYy02MTgtXFx0XFx0XFx0XFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjA2OjIyLjI5NDg2NTk3OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTkxOTk2MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkZvY3VzIFN5bWJvbCBDYW5kaWRhdGVzIGFuZCBTQ1RQIEtjb25maWcqKlxuXG5SaWdodCwgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbml0ZWx5IGp1bXBpbmcgb3V0IGF0IG1lIGFzIHBvdGVudGlhbCBjYW5kaWRhdGVzIGZvciBGb2N1c1N5bWJvbHMuIEknbSBzZWVpbmcgYSBjbGVhciBwYXR0ZXJuIGhlcmUsIGFuZCBteSBpbml0aWFsIGludHVpdGlvbiBzYXlzIHdlIGNvdWxkIGxldmVyYWdlIHRob3NlIHN5bWJvbHMgdG8gc2lnbmlmaWNhbnRseSBpbXByb3ZlIGFuYWx5c2lzLiBUaW1lIHRvIGRpZyBpbiBhIGJpdCBmdXJ0aGVyLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gaGVhZCBvdmVyIHRvIEtjb25maWcgYW5kIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFNDVFAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcmVsZXZhbnQgZmxhZ3MgYW5kIGRlcGVuZGVuY2llcy4gV2hhdCBhcmUgdGhlIGJ1aWxkIG9wdGlvbnM/IEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIHRoYXQgbWlnaHQgaW1wYWN0IG91ciBhYmlsaXR5IHRvIHByb3Blcmx5IGRlZmluZSB0aGUgRm9jdXNTeW1ib2xzIGZvciB0aGlzIGFyZWE/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGZ1bGx5IGJlZm9yZSBjb21taXR0aW5nIHRvIGFueXRoaW5nLiBUaGlzIEtjb25maWcgY2hlY2sgaXMgY3J1Y2lhbDsgSSBkb24ndCB3YW50IHRvIG1ha2UgYXNzdW1wdGlvbnMgdGhhdCBhcmUgcHJvdmVuIHdyb25nIGJ5IHRoZSBhY3R1YWwgYnVpbGQgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU1OCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjA2OjI1Ljg1NDA2ODcwNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE4ODY4MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQX1NDVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL0tjb25maWctNS1cXG5uZXQvc2N0cC9LY29uZmlnOjY6bWVudWNvbmZpZyBJUF9TQ1RQXFxubmV0L3NjdHAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJUaGUgU0NUUCBQcm90b2NvbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MDY6MjUuOTI1OTYyNTgzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjU2OTY2NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFNDVFAgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlIGBJUF9TQ1RQYCBjb25maWd1cmF0aW9uIGhlcmUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBhIGdyb3VwIG9mIFNDVFAgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc3RyZWFtIHJlc2V0cywgYWRkaXRpb25zLCBhbmQgdGhlaXIgYXNzb2NpYXRlZCBwcm9jZXNzaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgcGllY2VzIGZpdCB0b2dldGhlci4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQ6XG5cbiogICBgc2N0cF9zZW5kX3Jlc2V0X3N0cmVhbXNgXG4qICAgYHNjdHBfc2VuZF9yZXNldF9hc3NvY2BcbiogICBgc2N0cF9zZW5kX2FkZF9zdHJlYW1zYFxuKiAgIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfb3V0cmVxYFxuKiAgIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXFgXG4qICAgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX291dGBcbiogICBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW5gXG4qICAgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwYFxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgdGhhdCB0aGV5IGFyZSBub3Qgc3RhdGljLCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGFyZSBjYWxsZWQgZnJvbSBvdGhlciBmaWxlcyB3aXRoaW4gdGhlIGBuZXQvc2N0cC9gIGRpcmVjdG9yeSwgd2hpY2ggY29uZmlybXMgdGhlaXIgZXh0ZXJuYWwgYWNjZXNzaWJpbGl0eS5cblxuTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBzY3RwX3NlbmRfcmVzZXRfYXNzb2NgIGFuZCBzZWUgd2hhdCBpdCB0ZWxscyB1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg1NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjozNi4xODI5MzIwMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNDcxNTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfc2VuZF9yZXNldF9hc3NvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvc29ja2V0LmM9NDEyOT1zdGF0aWMgaW50IHNjdHBfc2V0c29ja29wdF9yZXNldF9hc3NvYyhzdHJ1Y3Qgc29jayAqc2ssIHNjdHBfYXNzb2NfdCAqYXNzb2NpZCxcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTQxNDAtXFxubmV0L3NjdHAvc29ja2V0LmM6NDE0MTpcXHRyZXR1cm4gc2N0cF9zZW5kX3Jlc2V0X2Fzc29jKGFzb2MpO1xcbm5ldC9zY3RwL3NvY2tldC5jLTQxNDItfVxcbi0tXFxubmV0L3NjdHAvc3RyZWFtLmM9MjY4PWludCBzY3RwX3NlbmRfcmVzZXRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG4tLVxcbm5ldC9zY3RwL3N0cmVhbS5jLTM4NS1cXG5uZXQvc2N0cC9zdHJlYW0uYzozODY6aW50IHNjdHBfc2VuZF9yZXNldF9hc3NvYyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcXG5uZXQvc2N0cC9zdHJlYW0uYy0zODcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjozNi4yODU0MDczNzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NDE5ODgxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIER5bmFtaWMgU3RyZWFtIEJlaGF2aW9yIGluIFNDVFAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgdGhlc2Ugc3RyZWFtcyBhcmUgKmRlZmluaXRlbHkqIG5vbi1zdGF0aWMuIFRoaXMgaXNuJ3QgYSBmaXhlZCBjb25maWd1cmF0aW9uLCBhbmQgdGhhdCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBzeXN0ZW0gdGhhdCBjYW4gY2hhbmdlIGR5bmFtaWNhbGx5LCBhbmQgdGhhdCByZXF1aXJlcyBhIGRpZmZlcmVudCBhcHByb2FjaCB0byBpdHMgdXNlLiBUaGlzIHVuZGVyc3RhbmRpbmcgYWZmZWN0cyBob3cgSSBuZWVkIHRvIGhhbmRsZSwgb2JzZXJ2ZSwgYW5kIG1hbmlwdWxhdGUgdGhlc2UgdGhpbmdzLlxuXG5Ob3csIHdpdGggdGhpcyBpbiBtaW5kLCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYHNjdHBfc2VuZF9hZGRfc3RyZWFtc2AgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCdzIGludm9sdmVkIHRoZXJlLCBiZWNhdXNlICp0aGF0KiBpcyB3aGVyZSB0aGUgZHluYW1pc20gaXMgbGlrZWx5IGNvbnRyb2xsZWQuIEkgbmVlZCB0byBkaXNzZWN0IHRoaXMgZnVuY3Rpb24gdG8gZmluZCBvdXQgaG93IHRoZXNlIHN0cmVhbSBhZGRpdGlvbnMgYXJlIG1hbmFnZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NzUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjozOS41Nzk2MDgyN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMzODcxNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2N0cF9zZW5kX2FkZF9zdHJlYW1zXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9zb2NrZXQuYz00MTQ0PXN0YXRpYyBpbnQgc2N0cF9zZXRzb2Nrb3B0X2FkZF9zdHJlYW1zKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9zY3RwL3NvY2tldC5jLTQxNTYtXFxubmV0L3NjdHAvc29ja2V0LmM6NDE1NzpcXHRyZXR1cm4gc2N0cF9zZW5kX2FkZF9zdHJlYW1zKGFzb2MsIHBhcmFtcyk7XFxubmV0L3NjdHAvc29ja2V0LmMtNDE1OC19XFxuLS1cXG5uZXQvc2N0cC9zdHJlYW0uYz0zODY9aW50IHNjdHBfc2VuZF9yZXNldF9hc3NvYyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcXG4tLVxcbm5ldC9zY3RwL3N0cmVhbS5jLTQzMC1cXG5uZXQvc2N0cC9zdHJlYW0uYzo0MzE6aW50IHNjdHBfc2VuZF9hZGRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcXG5uZXQvc2N0cC9zdHJlYW0uYy00MzItXFx0XFx0XFx0ICBzdHJ1Y3Qgc2N0cF9hZGRfc3RyZWFtcyAqcGFyYW1zKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjozOS42NTMwMDAyNjhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg3MTI0Njc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgU3RyZWFtIFJlc2V0IGFuZCBBZGRpdGlvbioqXG5cbk9rYXksIEknbSBjb25maXJtaW5nIGl0LCB0aGVzZSBlbGVtZW50cyAqYXJlKiBkeW5hbWljLiBMZXQncyBkaWcgZGVlcGVyIGludG8gdGhlIHN0cmVhbSByZXNldCBhbmQgYWRkaXRpb24gcHJvY2Vzcy4gTXkgbmV4dCBtb3ZlIGlzIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0YC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgaGFuZGxpbmcgdGhlIG91dGJvdW5kIHN0cmVhbSByZXNldHMgYW5kIGFkZGl0aW9ucyBsaWtlbHkgcmVzaWRlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzdGF0ZSB0cmFuc2l0aW9ucyB3b3JrIGhlcmUgYW5kIHRoZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBvdmVyYWxsIFNDVFAgc3RhdGUuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIG51YW5jZXMgb2YgdGhpcyBmdW5jdGlvbidzIGxvZ2ljIGFuZCBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzdGFjayB0aGF0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAyNCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjA2OjQyLjUyNDI1MTQ5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTkwMzYyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9vdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjdHAvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jPTQxNzA9ZW51bSBzY3RwX2Rpc3Bvc2l0aW9uIHNjdHBfc2ZfZG9fcmVjb25mKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQyMTEtXFx0XFx0ZWxzZSBpZiAocGFyYW0ucC1cXHUwMDNldHlwZSA9PSBTQ1RQX1BBUkFNX1JFU0VUX0FERF9PVVRfU1RSRUFNUylcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo0MjEyOlxcdFxcdFxcdHJlcGx5ID0gc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0KFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQyMTMtXFx0XFx0XFx0XFx0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopYXNvYywgcGFyYW0sIFxcdTAwMjZldik7XFxuLS1cXG5uZXQvc2N0cC9zdHJlYW0uYz02OTg9c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF90c25yZXEoXFxuLS1cXG5uZXQvc2N0cC9zdHJlYW0uYy03OTQtXFxubmV0L3NjdHAvc3RyZWFtLmM6Nzk1OnN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9vdXQoXFxubmV0L3NjdHAvc3RyZWFtLmMtNzk2LVxcdFxcdFxcdFxcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjo0Mi41ODYxNTk2MzdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1NzY1NjgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqQXNzZXNzaW5nIHRoZSBEeW5hbWljIE5hdHVyZSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIG5vbi1zdGF0aWMsIHdoaWNoIGlzIHdoYXQgSSBzdXNwZWN0ZWQuIFRoaXMgaW1wbGllcyBwb3RlbnRpYWwgdmFyaWFiaWxpdHkgb3Igc3RhdGUgY2hhbmdlcyB0aGF0IG5lZWQgY2FyZWZ1bCBoYW5kbGluZy4gVGhlIG5hdHVyZSBvZiBub24tc3RhdGljIGluZm9ybWF0aW9uIG1lYW5zIGl0IHJlcXVpcmVzIHNwZWNpZmljIGFuYWx5c2lzLlxuXG5Ob3csIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGUgZnVuY3Rpb24sIHRoZSBsaW5jaHBpbiwgYW5kIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnMgb2YgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX2luYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgc2l0dWF0aW9uIGV4aXN0cy4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgc2l0dWF0aW9uLCBhbmQgdG8gaWRlbnRpZnkgcG90ZW50aWFsIGVkZ2UtY2FzZXMgYW5kIHZ1bG5lcmFiaWxpdGllcy4gVGltZSB0byBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MzMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjo0NS43NDM4MTk3NTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTQ2NDE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX2luXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY3RwL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYz00MTcwPWVudW0gc2N0cF9kaXNwb3NpdGlvbiBzY3RwX3NmX2RvX3JlY29uZihzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYy00MjE0LVxcdFxcdGVsc2UgaWYgKHBhcmFtLnAtXFx1MDAzZXR5cGUgPT0gU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUylcXG5uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYzo0MjE1OlxcdFxcdFxcdHJlcGx5ID0gc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW4oXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDIxNi1cXHRcXHRcXHRcXHQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKilhc29jLCBwYXJhbSwgXFx1MDAyNmV2KTtcXG4tLVxcbm5ldC9zY3RwL3N0cmVhbS5jPTc5NT1zdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0KFxcbi0tXFxubmV0L3NjdHAvc3RyZWFtLmMtODY3LVxcbm5ldC9zY3RwL3N0cmVhbS5jOjg2ODpzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW4oXFxubmV0L3NjdHAvc3RyZWFtLmMtODY5LVxcdFxcdFxcdFxcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjo0NS44MDQ5NzI5MDhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxMDU5MDQxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE5vbi1TdGF0aWMgTmF0dXJlKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgYXNzZXNzbWVudCBjb25maXJtcyBpdDogdGhlIGNoYXJhY3RlcmlzdGljcyBpbiBxdWVzdGlvbiBhcmUgaW5kZWVkIG5vbi1zdGF0aWMuIFRoaXMgaXNuJ3QgdW5leHBlY3RlZCwgYnV0IGl0J3MgaW1wb3J0YW50IHRvIHZlcmlmeS4gTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byBhIHNwZWNpZmljIGFyZWEgd2hlcmUgdGhpcyBub24tc3RhdGljIGJlaGF2aW9yIG1pZ2h0IGJlIG1vc3QgaW1wYWN0ZnVsLCBvciBtb3N0IGxpa2VseSB0byBiZSBlbmNvdW50ZXJlZC4gSSdtIGdvaW5nIHRvIGZvY3VzIGluIG9uIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcGAuIEV4YW1pbmluZyB0aGlzIGZ1bmN0aW9uIG5vdyBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDUwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTA6MDY6NDkuMjE1NTY3MjE5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODM0NTM3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2N0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjdHAvc21fc3RhdGVmdW5zLmM9NDE3MD1lbnVtIHNjdHBfZGlzcG9zaXRpb24gc2N0cF9zZl9kb19yZWNvbmYoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmMtNDIxNy1cXHRcXHRlbHNlIGlmIChwYXJhbS5wLVxcdTAwM2V0eXBlID09IFNDVFBfUEFSQU1fUkVTRVRfUkVTUE9OU0UpXFxubmV0L3NjdHAvc21fc3RhdGVmdW5zLmM6NDIxODpcXHRcXHRcXHRyZXBseSA9IHNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwKFxcbm5ldC9zY3RwL3NtX3N0YXRlZnVucy5jLTQyMTktXFx0XFx0XFx0XFx0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopYXNvYywgcGFyYW0sIFxcdTAwMjZldik7XFxuLS1cXG5uZXQvc2N0cC9zdHJlYW0uYz04Njg9c3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX2luKFxcbi0tXFxubmV0L3NjdHAvc3RyZWFtLmMtOTMzLVxcbm5ldC9zY3RwL3N0cmVhbS5jOjkzNDpzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X3Jlc3AoXFxubmV0L3NjdHAvc3RyZWFtLmMtOTM1LVxcdFxcdFxcdFxcdHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjo0OS4yOTM5MTY3OThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI3ODQ3OTk5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBTQ1RQIFN0cmVhbSBSZXNldCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBpbnRyb2R1Y2luZyBhIGNoYW5nZSB0aGF0J3MgKm5vdCogc3RhdGljLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgdG8gcGF5IGF0dGVudGlvbiB0by4gVGhlIGNvcmUgb2YgdGhlIG1vZGlmaWNhdGlvbiBpcyBpbiBob3cgU0NUUCB0cmFja3Mgb3V0c3RhbmRpbmcgc3RyZWFtIHJlc2V0IHJlcXVlc3RzLiBJbnN0ZWFkIG9mIGEgc2ltcGxlIGNvdW50ZXIsIHRoZXkncmUgc3dpdGNoaW5nIHRvIGEgYml0bWFzayBmb3IgYHN0cnJlc2V0X291dHN0YW5kaW5nYCB3aXRoaW4gdGhlIGBzY3RwX2Fzc29jaWF0aW9uYCBzdHJ1Y3QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgc2lnbmlmaWNhbnQgb25lIHJlYWxseSwgYmVjYXVzZSBpdCBhbGxvd3MgdGhlIHN5c3RlbSB0byB0cmFjayAqbXVsdGlwbGUqIHR5cGVzIG9mIHJlc2V0IHJlcXVlc3RzIGF0IHRoZSBzYW1lIHRpbWUuXG5cbkFuZCB0aGUgYmVzdCBwYXJ0IGlzIGl0J3MgdG91Y2hpbmcgdGhlIFNDVFAgc3RhY2sncyBjb3JlIGxvZ2ljLiBUaGUgZnVuY3Rpb25zIGhhbmRsaW5nIHNlbmQgYW5kIHByb2Nlc3NpbmcgcmVxdWVzdHMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSwgZWl0aGVyIHRocm91Z2ggdGhlIHNvY2tldCBvcHRpb25zIG9yIHZpYSBpbmNvbWluZyBTQ1RQIHBhY2tldHMuIFRoYXQncyBhIGh1Z2UgZ3JlZW4gbGlnaHQhIFRoYXQgbWVhbnMgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIGZhY3QgdGhhdCB0aGUgY2hhbmdlIGlzIGluIGBzY3RwX3NlbmRfcmVzZXRfc3RyZWFtc2AsIGBzY3RwX3NlbmRfcmVzZXRfYXNzb2NgLCBgc2N0cF9zZW5kX2FkZF9zdHJlYW1zYCwgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXFgLCBgc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2lucmVxYCwgYHNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX291dGAsIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9pbmAgYW5kIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcGAgaXMgZXhjZWxsZW50LiBUaGlzIGNvdmVycyB0aGUgc2VuZGluZyBhbmQgcmVjZWl2aW5nIHBhdGhzLCBhbmQgYWxzbyB0aGUgYWRkaXRpb24gb2Ygc3RyZWFtcy4gSSB3aWxsIGVuYWJsZSBgSVBfU0NUUGAgYW5kIHVzZSB0aGVzZSBmdW5jdGlvbnMgYXMgZm9jdXMgc3ltYm9scy4gSSdtIGdvaW5nIHRvIHN0YXJ0IHJ1bm5pbmcgZnV6eiB0ZXN0cyB0byBzZWUgaWYgdGhpcyBjaGFuZ2UgcmV2ZWFscyBhbnkgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGNvdWxkIGJlIGFuIGludGVyZXN0aW5nIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MTUsIk91dHB1dFRva2VucyI6MjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjA2OjU2LjU3MjM5OTk3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzODEzMzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9TQ1RQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2N0cF9zZW5kX3Jlc2V0X3N0cmVhbXNcIixcbiAgICBcInNjdHBfc2VuZF9yZXNldF9hc3NvY1wiLFxuICAgIFwic2N0cF9zZW5kX2FkZF9zdHJlYW1zXCIsXG4gICAgXCJzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfb3V0cmVxXCIsXG4gICAgXCJzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXFcIixcbiAgICBcInNjdHBfcHJvY2Vzc19zdHJyZXNldF9hZGRzdHJtX291dFwiLFxuICAgIFwic2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW5cIixcbiAgICBcInNjdHBfcHJvY2Vzc19zdHJyZXNldF9yZXNwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY2hhbmdlcyB0aGUgYHN0cnJlc2V0X291dHN0YW5kaW5nYCBmaWVsZCBpbiBgc3RydWN0IHNjdHBfYXNzb2NpYXRpb25gIGZyb20gYSBjb3VudGVyIHRvIGEgYml0bWFzaywgYWxsb3dpbmcgbXVsdGlwbGUgdHlwZXMgb2Ygc3RyZWFtIHJlc2V0IHJlcXVlc3RzIHRvIGJlIHRyYWNrZWQgc2ltdWx0YW5lb3VzbHkuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgaG93IFNDVFAgaGFuZGxlcyBzdHJlYW0gcmVzZXQgcmVxdWVzdHMgKGJvdGggc2VuZGluZyBhbmQgcHJvY2Vzc2luZyBpbmNvbWluZyByZXF1ZXN0cykuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBTQ1RQIHNvY2tldCBvcHRpb25zIGFuZCBpbmNvbWluZyBTQ1RQIHBhY2tldHMsIG1ha2luZyB0aGVtIHN1aXRhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1NDVFBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzY3RwX3NlbmRfcmVzZXRfc3RyZWFtc1wiLFxuICAgIFwic2N0cF9zZW5kX3Jlc2V0X2Fzc29jXCIsXG4gICAgXCJzY3RwX3NlbmRfYWRkX3N0cmVhbXNcIixcbiAgICBcInNjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXFcIixcbiAgICBcInNjdHBfcHJvY2Vzc19zdHJyZXNldF9pbnJlcVwiLFxuICAgIFwic2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0XCIsXG4gICAgXCJzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfYWRkc3RybV9pblwiLFxuICAgIFwic2N0cF9wcm9jZXNzX3N0cnJlc2V0X3Jlc3BcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjaGFuZ2VzIHRoZSBgc3RycmVzZXRfb3V0c3RhbmRpbmdgIGZpZWxkIGluIGBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbmAgZnJvbSBhIGNvdW50ZXIgdG8gYSBiaXRtYXNrLCBhbGxvd2luZyBtdWx0aXBsZSB0eXBlcyBvZiBzdHJlYW0gcmVzZXQgcmVxdWVzdHMgdG8gYmUgdHJhY2tlZCBzaW11bHRhbmVvdXNseS4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBvZiBob3cgU0NUUCBoYW5kbGVzIHN0cmVhbSByZXNldCByZXF1ZXN0cyAoYm90aCBzZW5kaW5nIGFuZCBwcm9jZXNzaW5nIGluY29taW5nIHJlcXVlc3RzKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIFNDVFAgc29ja2V0IG9wdGlvbnMgYW5kIGluY29taW5nIFNDVFAgcGFja2V0cywgbWFraW5nIHRoZW0gc3VpdGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEwOjA2OjU2LjY5NjIyMDEzNFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3NDIyOTI1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjo1Ni42OTY2NDA5NjRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTI3NDE4NjcyNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBzdGF0ZSB0cmFja2luZyBvZiBTQ1RQIHN0cmVhbSByZXNldCByZXF1ZXN0cyBieSByZXBsYWNpbmcgYSBjb3VudGVyIChgc3RycmVzZXRfb3V0c3RhbmRpbmdgKSB3aXRoIGEgYml0bWFzay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgbWVtb3J5IGFsbG9jYXRpb25zLCBpbml0aWFsaXphdGlvbnMsIG9yIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlKSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTNjYzQxZmYzZTU3NmVkNjhhZjJkMjNhY2I5YjI5OWQ4NzM2YWEzOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDEwOjA2OjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmggYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaFxuaW5kZXggY2NjYzY2MjU2MWFhYy4uYjIxZjIzYjczNmZkMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oXG4rKysgYi9pbmNsdWRlL25ldC9zY3RwL3N0cnVjdHMuaFxuQEAgLTIwNTcsNyArMjA1Nyw3IEBAIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uIHtcbiBcdCAgICAgZm9yY2VfZGVsYXk6MTtcbiBcbiBcdF9fdTggc3RycmVzZXRfZW5hYmxlO1xuLVx0X191OCBzdHJyZXNldF9vdXRzdGFuZGluZzsgLyogcmVxdWVzdCBwYXJhbSBjb3VudCBvbiB0aGUgZmx5ICovXG4rXHRfX3U4IHN0cnJlc2V0X291dHN0YW5kaW5nOyAvKiByZXF1ZXN0IHBhcmFtIGJpdG1hc2sgb24gdGhlIGZseSAqL1xuIFxuIFx0X191MzIgc3RycmVzZXRfb3V0c2VxOyAvKiBVcGRhdGUgYWZ0ZXIgcmVjZWl2aW5nIHJlc3BvbnNlICovXG4gXHRfX3UzMiBzdHJyZXNldF9pbnNlcTsgLyogVXBkYXRlIGFmdGVyIHJlY2VpdmluZyByZXF1ZXN0ICovXG5kaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc3RyZWFtLmMgYi9uZXQvc2N0cC9zdHJlYW0uY1xuaW5kZXggMzRmZmU2Yzk0NWE0Yi4uZTFhMjE1ZGI2MWUxYyAxMDA2NDRcbi0tLSBhL25ldC9zY3RwL3N0cmVhbS5jXG4rKysgYi9uZXQvc2N0cC9zdHJlYW0uY1xuQEAgLTIyLDYgKzIyLDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvc2N0cC9zbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3NjdHAvc3RyZWFtX3NjaGVkLmhcdTAwM2VcbiBcbisjZGVmaW5lIFNDVFBfU1RSUkVTRVRfQklUKHR5cGUpIFxcXG4rXHRCSVQobnRvaHModHlwZSkgLSBudG9ocyhTQ1RQX1BBUkFNX1JFU0VUX09VVF9SRVFVRVNUKSlcbitcbiBzdGF0aWMgdm9pZCBzY3RwX3N0cmVhbV9zaHJpbmtfb3V0KHN0cnVjdCBzY3RwX3N0cmVhbSAqc3RyZWFtLCBfX3UxNiBvdXRjbnQpXG4ge1xuIFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7XG5AQCAtMzcyLDcgKzM3NSw5IEBAIGludCBzY3RwX3NlbmRfcmVzZXRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID0gb3V0ICsgaW47XG4rXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cbitcdFx0KG91dCA/IFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfT1VUX1JFUVVFU1QpIDogMCkgfFxuK1x0XHQoaW4gPyBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0lOX1JFUVVFU1QpIDogMCk7XG4gXG4gb3V0OlxuIFx0cmV0dXJuIHJldHZhbDtcbkBAIC00MTcsNyArNDIyLDggQEAgaW50IHNjdHBfc2VuZF9yZXNldF9hc3NvYyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYylcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcdH1cbiBcbi1cdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgPSAxO1xuK1x0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9XG4rXHRcdFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfVFNOX1JFUVVFU1QpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTQ3NCw3ICs0ODAsOSBAQCBpbnQgc2N0cF9zZW5kX2FkZF9zdHJlYW1zKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgPSAhIW91dCArICEhaW47XG4rXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cbitcdFx0KG91dCA/IFNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfQUREX09VVF9TVFJFQU1TKSA6IDApIHxcbitcdFx0KGluID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUykgOiAwKTtcbiBcbiBvdXQ6XG4gXHRyZXR1cm4gcmV0dmFsO1xuQEAgLTQ4Miw3ICs0OTAsNyBAQCBpbnQgc2N0cF9zZW5kX2FkZF9zdHJlYW1zKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLFxuIFxuIHN0YXRpYyBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqc2N0cF9jaHVua19sb29rdXBfc3RycmVzZXRfcGFyYW0oXG4gXHRcdFx0c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIF9fYmUzMiByZXNwX3NlcSxcbi1cdFx0XHRfX2JlMTYgdHlwZSlcbitcdFx0XHRfX2JlMTYgdHlwZSwgYm9vbCBtYXRjaF9zZXEpXG4ge1xuIFx0c3RydWN0IHNjdHBfY2h1bmsgKmNodW5rID0gYXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuaztcbiBcdHN0cnVjdCBzY3RwX3JlY29uZl9jaHVuayAqaGRyO1xuQEAgLTQ5OSw3ICs1MDcsNyBAQCBzdGF0aWMgc3RydWN0IHNjdHBfcGFyYW1oZHIgKnNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxuIFx0XHQgKi9cbiBcdFx0c3RydWN0IHNjdHBfc3RycmVzZXRfdHNucmVxICpyZXEgPSBwYXJhbS52O1xuIFxuLVx0XHRpZiAoKCFyZXNwX3NlcSB8fCByZXEtXHUwMDNlcmVxdWVzdF9zZXEgPT0gcmVzcF9zZXEpIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAoKCFtYXRjaF9zZXEgfHwgcmVxLVx1MDAzZXJlcXVlc3Rfc2VxID09IHJlc3Bfc2VxKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICghdHlwZSB8fCB0eXBlID09IHJlcS1cdTAwM2VwYXJhbV9oZHIudHlwZSkpXG4gXHRcdFx0cmV0dXJuIHBhcmFtLnY7XG4gXHR9XG5AQCAtNTY0LDEzICs1NzIsMTYgQEAgc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfcHJvY2Vzc19zdHJyZXNldF9vdXRyZXEoXG4gXHRpZiAoYXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuaykge1xuIFx0XHRpZiAoIXNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxuIFx0XHRcdFx0YXNvYywgb3V0cmVxLVx1MDAzZXJlc3BvbnNlX3NlcSxcbi1cdFx0XHRcdFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCkpIHtcbitcdFx0XHRcdFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCwgdHJ1ZSkgfHxcbitcdFx0ICAgICEoYXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyBcdTAwMjZcbitcdFx0ICAgICAgU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSkpIHtcbiBcdFx0XHQvKiBzYW1lIHByb2Nlc3Mgd2l0aCBvdXRzdGFuZGluZyBpc24ndCAwICovXG4gXHRcdFx0cmVzdWx0ID0gU0NUUF9TVFJSRVNFVF9FUlJfSU5fUFJPR1JFU1M7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZy0tO1xuK1x0XHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nIFx1MDAyNj1cbitcdFx0XHR+U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKTtcbiBcdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzZXErKztcbiBcbiBcdFx0aWYgKCFhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nKSB7XG5AQCAtNjY5LDcgKzY4MCw4IEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfaW5yZXEoXG4gXHRcdFx0U0NUUF9TTyhzdHJlYW0sIGkpLVx1MDAzZXN0YXRlID0gU0NUUF9TVFJFQU1fQ0xPU0VEO1xuIFxuIFx0YXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuayA9IGNodW5rO1xuLVx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9IDE7XG4rXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cbitcdFx0U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9PVVRfUkVRVUVTVCk7XG4gXHRzY3RwX2NodW5rX2hvbGQoYXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuayk7XG4gXG4gXHRyZXN1bHQgPSBTQ1RQX1NUUlJFU0VUX1BFUkZPUk1FRDtcbkBAIC04MTYsMTMgKzgyOCwxNiBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1fb3V0KFxuIFxuIFx0aWYgKGFzb2MtXHUwMDNlc3RycmVzZXRfY2h1bmspIHtcbiBcdFx0aWYgKCFzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbShcbi1cdFx0XHRhc29jLCAwLCBTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKSkge1xuK1x0XHRcdGFzb2MsIDAsIFNDVFBfUEFSQU1fUkVTRVRfQUREX0lOX1NUUkVBTVMsIGZhbHNlKSB8fFxuK1x0XHQgICAgIShhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nIFx1MDAyNlxuK1x0XHQgICAgICBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX0FERF9JTl9TVFJFQU1TKSkpIHtcbiBcdFx0XHQvKiBzYW1lIHByb2Nlc3Mgd2l0aCBvdXRzdGFuZGluZyBpc24ndCAwICovXG4gXHRcdFx0cmVzdWx0ID0gU0NUUF9TVFJSRVNFVF9FUlJfSU5fUFJPR1JFU1M7XG4gXHRcdFx0Z290byBvdXQ7XG4gXHRcdH1cbiBcbi1cdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZy0tO1xuK1x0XHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nIFx1MDAyNj1cbitcdFx0XHR+U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfSU5fU1RSRUFNUyk7XG4gXHRcdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c2VxKys7XG4gXG4gXHRcdGlmICghYXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZykge1xuQEAgLTg5OSw3ICs5MTQsOCBAQCBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9wcm9jZXNzX3N0cnJlc2V0X2FkZHN0cm1faW4oXG4gXHRcdGdvdG8gb3V0O1xuIFxuIFx0YXNvYy1cdTAwM2VzdHJyZXNldF9jaHVuayA9IGNodW5rO1xuLVx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9IDE7XG4rXHRhc29jLVx1MDAzZXN0cnJlc2V0X291dHN0YW5kaW5nID1cbitcdFx0U0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9BRERfT1VUX1NUUkVBTVMpO1xuIFx0c2N0cF9jaHVua19ob2xkKGFzb2MtXHUwMDNlc3RycmVzZXRfY2h1bmspO1xuIFxuIFx0c3RyZWFtLVx1MDAzZW91dGNudCA9IG91dGNudDtcbkBAIC05MjcsOCArOTQzLDEwIEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcChcbiBcdHN0cnVjdCBzY3RwX3BhcmFtaGRyICpyZXE7XG4gXHRfX3UzMiByZXN1bHQ7XG4gXG4tXHRyZXEgPSBzY3RwX2NodW5rX2xvb2t1cF9zdHJyZXNldF9wYXJhbShhc29jLCByZXNwLVx1MDAzZXJlc3BvbnNlX3NlcSwgMCk7XG4tXHRpZiAoIXJlcSlcbitcdHJlcSA9IHNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKGFzb2MsIHJlc3AtXHUwMDNlcmVzcG9uc2Vfc2VxLCAwLFxuK1x0XHRcdFx0XHQgICAgICAgdHJ1ZSk7XG4rXHRpZiAoIXJlcSB8fCAhKGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgXHUwMDI2XG4rXHRcdCAgICAgIFNDVFBfU1RSUkVTRVRfQklUKHJlcS1cdTAwM2V0eXBlKSkpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0cmVzdWx0ID0gbnRvaGwocmVzcC1cdTAwM2VyZXN1bHQpO1xuQEAgLTEwNzgsNyArMTA5Niw3IEBAIHN0cnVjdCBzY3RwX2NodW5rICpzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfcmVzcChcbiBcdFx0XHRudW1zLCAwLCBHRlBfQVRPTUlDKTtcbiBcdH1cbiBcbi1cdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmctLTtcbitcdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmcgXHUwMDI2PSB+U0NUUF9TVFJSRVNFVF9CSVQocmVxLVx1MDAzZXR5cGUpO1xuIFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzZXErKztcbiBcbiBcdC8qIHJlbW92ZSBldmVyeXRoaW5nIGZvciB0aGlzIHJlY29uZiByZXF1ZXN0ICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNjo1Ni42OTY2NDE4MDRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI3NDE4MjMwMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTQ1RQIFN0cmVhbSBSZXNldCBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgZnVuZGFtZW50YWxseSBhYm91dCB0d2Vha2luZyB0aGUgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKSBzdHJlYW0gcmVzZXQgbG9naWMuIFNwZWNpZmljYWxseSwgaXQncyBjaGFuZ2luZyBob3cgYHN0cnJlc2V0X291dHN0YW5kaW5nYCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgY29kZS4gSW5zdGVhZCBvZiBrZWVwaW5nIGEgY291bnQgb2Ygb3V0c3RhbmRpbmcgcmVxdWVzdHMsIGl0J3MgYmVpbmcgY29udmVydGVkIGludG8gYSBiaXRtYXNrIHJlcHJlc2VudGluZyB0aGUgKnR5cGVzKiBvZiBvdXRzdGFuZGluZyByZXF1ZXN0cy4gU28sIGluc3RlYWQgb2YgYSBzaW1wbGUgaW50ZWdlciwgd2Ugbm93IGhhdmUgYSBieXRlIChgX191OGApIHdoZXJlIGVhY2ggYml0IHNpZ25pZmllcyBhIHNwZWNpZmljIHJlc2V0IHJlcXVlc3QgdHlwZS5cblxuTXkgaW5pdGlhbCBjb25jZXJuLCBuYXR1cmFsbHksIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIEJhc2VkIG9uIG15IGV4cGVydGlzZSwgSSdtIHRoaW5raW5nOiBpcyB0aGVyZSBhIGNoYW5jZSB3ZSdyZSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFmdGVyIHRoaXMgbW9kaWZpY2F0aW9uPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhlIGNvZGUgaW5pdGlhbGl6ZXMgYW5kIHV0aWxpemVzIHRoaXMgYml0bWFzayB0byBtYWtlIGEgZmlybSBqdWRnbWVudC5cblxuVGhlIHBhdGNoIGRlZmluZXMgYFNDVFBfU1RSUkVTRVRfQklUKHR5cGUpYCB0byBjYWxjdWxhdGUgdGhlIGJpdCBwb3NpdGlvbiB3aXRoaW4gdGhlIGJpdG1hc2ssIHdoaWNoIHNlZW1zIHJlYXNvbmFibGUuIEl0J3MgYWxzbyB1cGRhdGluZyBgc2N0cF9jaHVua19sb29rdXBfc3RycmVzZXRfcGFyYW1gIHRvIGFjY2VwdCBhIGJvb2xlYW4gYG1hdGNoX3NlcWAsIGFuZCBtb2RpZmllcyBhbGwgdGhlIGBzY3RwX3Byb2Nlc3Nfc3RycmVzZXRfKmAgZnVuY3Rpb25zIHRvIG5vdyBjaGVjayBhbmQgY2xlYXIgdGhlIHJlbGV2YW50IGJpdCBpbnN0ZWFkIG9mIGRlY3JlbWVudGluZyBhIGNvdW50ZXIuXG5cbk5vdywgbGV0J3Mgc3RlcCB0aHJvdWdoIHRoZSBrZXkgY29kZSBzZWdtZW50cy5cblxuYGBgY1xuLVx0X191OCBzdHJyZXNldF9vdXRzdGFuZGluZzsgLyogcmVxdWVzdCBwYXJhbSBjb3VudCBvbiB0aGUgZmx5ICovXG4rXHRfX3U4IHN0cnJlc2V0X291dHN0YW5kaW5nOyAvKiByZXF1ZXN0IHBhcmFtIGJpdG1hc2sgb24gdGhlIGZseSAqL1xuYGBgXG5cblRoaXMgaXMgdGhlIGNvcmUgY2hhbmdlOiBgc3RycmVzZXRfb3V0c3RhbmRpbmdgIGlzIGJlaW5nIHJlZGVjbGFyZWQgZnJvbSBjb3VudGVyIHRvIGJpdG1hc2suXG5cbmBgYGNcbisjZGVmaW5lIFNDVFBfU1RSUkVTRVRfQklUKHR5cGUpIFxcXG4rXHRCSVQobnRvaHModHlwZSkgLSBudG9ocyhTQ1RQX1BBUkFNX1JFU0VUX09VVF9SRVFVRVNUKSlcbmBgYFxuXG5UaGlzIG1hY3JvIGxvb2tzIGZpbmUsIGl0IGNhbGN1bGF0ZXMgdGhlIGJpdCBwb3NpdGlvbiB1c2luZyBgdHlwZWAsIGxpa2VseSBhbiBTQ1RQIHBhcmFtZXRlciB0eXBlIHRoYXQgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS91YXBpL2xpbnV4L3NjdHAuaGAsIHdoaWNoIEknbSBmYW1pbGlhciB3aXRoLCBzdWNoIGFzIGBTQ1RQX1BBUkFNX1JFU0VUX09VVF9SRVFVRVNUYCwgYFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVGAsIGV0Yy5cblxuYGBgY1xuLVx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9IG91dCArIGluO1xuK1x0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyA9XG4rXHRcdChvdXQgPyBTQ1RQX1NUUlJFU0VUX0JJVChTQ1RQX1BBUkFNX1JFU0VUX09VVF9SRVFVRVNUKSA6IDApIHxcbitcdFx0KGluID8gU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSA6IDApO1xuYGBgXG5cblRoaXMgc2VjdGlvbiBpcyBub3cgc2V0dGluZyB0aGUgYXBwcm9wcmlhdGUgYml0cyBpbiB0aGUgbWFzaywgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlcmUncyBhbiBvdXRzdGFuZGluZyBvdXQgb3IgaW4gcmVxdWVzdC5cblxuYGBgY1xuIFx0XHRpZiAoIXNjdHBfY2h1bmtfbG9va3VwX3N0cnJlc2V0X3BhcmFtKFxuIFx0XHRcdFx0YXNvYywgb3V0cmVxLVx1MDAzZXJlc3BvbnNlX3NlcSxcbi1cdFx0XHRcdFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCkpIHtcbitcdFx0XHRcdFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCwgdHJ1ZSkgfHxcbitcdFx0ICAgICEoYXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyBcdTAwMjZcbitcdFx0ICAgICAgU0NUUF9TVFJSRVNFVF9CSVQoU0NUUF9QQVJBTV9SRVNFVF9JTl9SRVFVRVNUKSkpIHtcbmBgYFxuTm93IHdlIGhhdmUgdG8gY2hlY2sgaWYgYSBiaXQgaXMgc2V0LlxuXG5gYGBjXG4tXHRcdGFzb2MtXHUwMDNlc3RycmVzZXRfb3V0c3RhbmRpbmctLTtcbitcdFx0YXNvYy1cdTAwM2VzdHJyZXNldF9vdXRzdGFuZGluZyBcdTAwMjY9XG4rXHRcdFx0flNDVFBfU1RSUkVTRVRfQklUKFNDVFBfUEFSQU1fUkVTRVRfSU5fUkVRVUVTVCk7XG5gYGBcblxuQW5kIGZpbmFsbHksIGNsZWFyaW5nIGl0LlxuXG5BZnRlciBhIHRob3JvdWdoIHJldmlldywgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGNoYW5nZSBpcyBwdXJlbHkgYWJvdXQgbW9kaWZ5aW5nIGludGVybmFsIHN0YXRlIHRyYWNraW5nLiBJdCBkb2Vzbid0IGFsdGVyIGFueSBzdHJ1Y3R1cmUgbGF5b3V0cyBpbiBhIHdheSB0aGF0IHdvdWxkIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiwgb3IgdG8gaG93IHdlIGRvIGJvdW5kcyBjaGVja2luZy4gVGhlIGJ1ZyBmaXhlZCBpcyBsaWtlbHkgc29tZSBsb2dpYyBpc3N1ZSByZWxhdGVkIHRvIGluY29ycmVjdCB0cmFja2luZyBvZiByZXNldCByZXF1ZXN0cywgbGVhZGluZyB0byBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCBidXQgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBwYXRjaCBqdXN0IGNoYW5nZXMgdGhlIHdheSB3ZSB0cmFjayBvdXRzdGFuZGluZyByZXF1ZXN0cy5cblxuVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVjYXVzZSB0aGUgYnVnIHRoaXMgZml4ZXMgaXMgcmVsYXRlZCB0byBzdGF0ZS4gS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgYXJlIGVub3VnaCB0byBjaGVjayBmb3IgdGhlIGJ1Z3MgdGhhdCBjb3VsZCBiZSBpbnRyb2R1Y2VkLCBhbmQgS01TQU4gaXMgbm90IG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA2MiwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMDowNzowOS40Mzg0Njc5MTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBpbnRlcm5hbCBzdGF0ZSB0cmFja2luZyBvZiBTQ1RQIHN0cmVhbSByZXNldCByZXF1ZXN0cyBieSByZXBsYWNpbmcgYSBjb3VudGVyIChgc3RycmVzZXRfb3V0c3RhbmRpbmdgKSB3aXRoIGEgYml0bWFzay4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWx0ZXIgbWVtb3J5IGFsbG9jYXRpb25zLCBpbml0aWFsaXphdGlvbnMsIG9yIGJvdW5kcyBjaGVja2luZyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gKGUuZy4sIHVzZS1hZnRlci1mcmVlKSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGludGVybmFsIHN0YXRlIHRyYWNraW5nIG9mIFNDVFAgc3RyZWFtIHJlc2V0IHJlcXVlc3RzIGJ5IHJlcGxhY2luZyBhIGNvdW50ZXIgKGBzdHJyZXNldF9vdXRzdGFuZGluZ2ApIHdpdGggYSBiaXRtYXNrLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbHRlciBtZW1vcnkgYWxsb2NhdGlvbnMsIGluaXRpYWxpemF0aW9ucywgb3IgYm91bmRzIGNoZWNraW5nIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgY29ycnVwdGlvbiAoZS5nLiwgdXNlLWFmdGVyLWZyZWUpLCB3aGljaCBhcmUgYWRlcXVhdGVseSBkZXRlY3RlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx5m5v[1] Phase: Succeeded StartedAt: 2026-08-21 10:07:21 +0000 UTC FinishedAt: 2026-08-21 10:07:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 10:07:21 +0000 UTC FinishedAt: 2026-08-21 10:07:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[2] Phase: Succeeded StartedAt: 2026-08-21 10:07:21 +0000 UTC FinishedAt: 2026-08-21 13:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:07:21 +0000 UTC FinishedAt: 2026-08-21 13:47:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:07:21 +0000 UTC FinishedAt: 2026-08-21 10:07:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:07:21 +0000 UTC FinishedAt: 2026-08-21 10:07:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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-workflowx5m5v/series-workflowx5m5v-convert-artifact-3075834123/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:07:31 +0000 UTC FinishedAt: 2026-08-21 10:24:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:07:31 +0000 UTC FinishedAt: 2026-08-21 10:24:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*71ecf15b-25a5-4db8-b2ce-0388ea5b9cfb,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-workflowx5m5v/series-workflowx5m5v-convert-artifact-3075834123/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": "f0a22788-7482-4900-92de-5ed5d0eca860", "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-workflowx5m5v/series-workflowx5m5v-build-action-1285127177/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:07:31 +0000 UTC FinishedAt: 2026-08-21 10:23:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*71ecf15b-25a5-4db8-b2ce-0388ea5b9cfb,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-workflowx5m5v/series-workflowx5m5v-convert-artifact-3075834123/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": "f0a22788-7482-4900-92de-5ed5d0eca860", "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-workflowx5m5v/series-workflowx5m5v-build-action-1285127177/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:24:01 +0000 UTC FinishedAt: 2026-08-21 10:24:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:24:01 +0000 UTC FinishedAt: 2026-08-21 10:24:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:24:01 +0000 UTC FinishedAt: 2026-08-21 10:24:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:24:01 +0000 UTC FinishedAt: 2026-08-21 10:24:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-workflowx5m5v/series-workflowx5m5v-convert-artifact-2444235874/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:24:12 +0000 UTC FinishedAt: 2026-08-21 10:26:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:24:12 +0000 UTC FinishedAt: 2026-08-21 10:26:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f0a22788-7482-4900-92de-5ed5d0eca860,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-workflowx5m5v/series-workflowx5m5v-build-action-1285127177/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-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:26:15 +0000 UTC FinishedAt: 2026-08-21 10:26:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:26:15 +0000 UTC FinishedAt: 2026-08-21 10:26:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:26:15 +0000 UTC FinishedAt: 2026-08-21 10:42:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:26:15 +0000 UTC FinishedAt: 2026-08-21 10:42:34 +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:*71ecf15b-25a5-4db8-b2ce-0388ea5b9cfb,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-workflowx5m5v/series-workflowx5m5v-convert-artifact-2444235874/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": "1e1f4a06-6760-4a30-9ada-05836c857305", "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-workflowx5m5v/series-workflowx5m5v-build-action-4055007414/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:26:15 +0000 UTC FinishedAt: 2026-08-21 10:42:24 +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:*71ecf15b-25a5-4db8-b2ce-0388ea5b9cfb,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-workflowx5m5v/series-workflowx5m5v-convert-artifact-2444235874/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": "1e1f4a06-6760-4a30-9ada-05836c857305", "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-workflowx5m5v/series-workflowx5m5v-build-action-4055007414/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:42:34 +0000 UTC FinishedAt: 2026-08-21 10:42:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:42:34 +0000 UTC FinishedAt: 2026-08-21 10:42:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:42:34 +0000 UTC FinishedAt: 2026-08-21 10:44:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:42:34 +0000 UTC FinishedAt: 2026-08-21 10:44:15 +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:*1e1f4a06-6760-4a30-9ada-05836c857305,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-workflowx5m5v/series-workflowx5m5v-build-action-4055007414/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-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:44:25 +0000 UTC FinishedAt: 2026-08-21 13:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:44:25 +0000 UTC FinishedAt: 2026-08-21 13:47:15 +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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"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:*f0a22788-7482-4900-92de-5ed5d0eca860,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1e1f4a06-6760-4a30-9ada-05836c857305,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-workflowx5m5v/series-workflowx5m5v-build-action-1285127177/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-workflowx5m5v/series-workflowx5m5v-build-action-4055007414/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:44:25 +0000 UTC FinishedAt: 2026-08-21 10:44:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:44:25 +0000 UTC FinishedAt: 2026-08-21 10:44:30 +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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"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-workflowx5m5v/series-workflowx5m5v-convert-artifact-2934505367/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:44:25 +0000 UTC FinishedAt: 2026-08-21 10:44:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:44:25 +0000 UTC FinishedAt: 2026-08-21 10:44:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:44:25 +0000 UTC FinishedAt: 2026-08-21 10:44:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:44:35 +0000 UTC FinishedAt: 2026-08-21 13:47:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx5m5v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"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":["sctp_send_reset_streams","sctp_send_reset_assoc","sctp_send_add_streams","sctp_process_strreset_outreq","sctp_process_strreset_inreq","sctp_process_strreset_addstrm_out","sctp_process_strreset_addstrm_in","sctp_process_strreset_resp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"746fc0787f616da418ffc04a110296fe95d53491","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_SCTP"],"series_id":"c12b4e49-f7b3-44e2-9807-538b74cd0986","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-08-21 10:44:35 +0000 UTC FinishedAt: 2026-08-21 13:47:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f0a22788-7482-4900-92de-5ed5d0eca860,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1e1f4a06-6760-4a30-9ada-05836c857305,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-workflowx5m5v/series-workflowx5m5v-build-action-1285127177/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-workflowx5m5v/series-workflowx5m5v-build-action-4055007414/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-workflowx5m5v/series-workflowx5m5v-convert-artifact-2934505367/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,}