Name: series-workflowpxhvw Phase: Succeeded StartedAt: 2026-09-08 00:15:46 +0000 UTC FinishedAt: 2026-09-08 04:41:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[0] Phase: Succeeded StartedAt: 2026-09-08 00:15:46 +0000 UTC FinishedAt: 2026-09-08 01:00:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 00:15:46 +0000 UTC FinishedAt: 2026-09-08 01:00:53 +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": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_CLS_ROUTE4" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_CLS_ROUTE4" ], "series_id": "74d313f7-7b34-4986-a456-9a033a25ba37" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "route4_change", "route4_delete", "route4_set_parms" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfUk9VVEU0JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cm91dGU0X2NoYW5nZSYjMzQ7LAogICAgJiMzNDtyb3V0ZTRfZGVsZXRlJiMzNDssCiAgICAmIzM0O3JvdXRlNF9zZXRfcGFybXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSB0cmFja2luZyBpc3N1ZXMgaW4gY2xzX3JvdXRlICh0cmFmZmljIGNvbnRyb2wgcm91dGUgY2xhc3NpZmllcikgd2hlbiB1cGRhdGluZyBvciBkZWxldGluZyByb3V0ZSBmaWx0ZXJzIGFjcm9zcyBidWNrZXRzLCBieSBpbnRyb2R1Y2luZyBhIGBmaWx0ZXJzX3JlZmAgcmVmY291bnQgKGByZWZjb3VudF90YCkgdG8gYHN0cnVjdCByb3V0ZTRfYnVja2V0YC5cblxuQW5hbHlzaXMgb2YgbWVtb3J5IHNhbml0aXphdGlvbiByZXF1aXJlbWVudHM6XG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gS01TQU46IEFsbCBhbGxvY2F0aW9ucyAoYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBhbmQgYHN0cnVjdCByb3V0ZTRfZmlsdGVyYCkgY29udGludWUgdG8gdXNlIGBremFsbG9jX29iamAgZW5zdXJpbmcgYWxsIG1lbW9yeSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHVwb24gY3JlYXRpb24uIFRoZSBuZXcgYGZpbHRlcnNfcmVmYCBmaWVsZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYHJlZmNvdW50X3NldGAgYW5kIG1hbmFnZWQgdmlhIGByZWZjb3VudF9pbmNgIC8gYHJlZmNvdW50X2RlY19hbmRfdGVzdGAuIE5vIHN0cnVjdCBmaWVsZHMsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlIHZpYSBOZXRsaW5rIChhbGwgZHVtcGVkIGF0dHJpYnV0ZXMgYXJlIHZhbGlkYXRlZCBhbmQgcG9wdWxhdGVkIGZyb20gaW5pdGlhbGl6ZWQgc2NhbGFyIHZhbHVlcykuIFRoZXJlIGlzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbi0gVUFGIC8gS0FTQU46IFRoZSBjaGFuZ2VzIG1vZGlmeSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGJ1Y2tldCBkZWFsbG9jYXRpb24gbGlmZXRpbWVzIChga2ZyZWVfcmN1YCksIHdoaWNoIGZhbGwgdW5kZXIgVXNlLUFmdGVyLUZyZWUgYW5kIHJlZmNvdW50IHNhZmV0eS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgbW9uaXRvcmVkIGFuZCBkZXRlY3RlZCBieSBLQVNBTiBhbmQgdGhlIGtlcm5lbCYjMzk7cyBidWlsdC1pbiByZWZjb3VudCBjaGVja2luZyAoYHJlZmNvdW50X3RgKS5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbHNfcm91dGUgbmV0d29yayB0cmFmZmljIGNvbnRyb2wgY2xhc3NpZmllciBpbiBuZXQvc2NoZWQvY2xzX3JvdXRlLmMsIGludHJvZHVjaW5nIGEgcmVmY291bnQgKGZpbHRlcnNfcmVmKSB0byBtYW5hZ2Ugcm91dGU0X2J1Y2tldCBsaWZldGltZXMgZHVyaW5nIHJvdXRlIGZpbHRlciBtb2RpZmljYXRpb24sIGNyZWF0aW9uLCBhbmQgZGVsZXRpb24gKHJvdXRlNF9jaGFuZ2UsIHJvdXRlNF9kZWxldGUsIGFuZCByb3V0ZTRfc2V0X3Bhcm1zKS4gVGhpcyBpcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsvdGMgZmlsdGVyIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNGI0NzBhOGFiMjhmNmZlMzdkNWE0ZTU3YTkwNTZiYzA4YzhlOGUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMDo1OTozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmMgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbmluZGV4IDBkMTMyNGM5MDU4MzcuLjBmMjExZjAzMGZkOWEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfcm91dGUuY1xuQEAgLTExLDYgJiM0MzsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2VcbkBAIC00MSw2ICYjNDM7NDIsNyBAQCBzdHJ1Y3Qgcm91dGU0X2hlYWQge1xuIHN0cnVjdCByb3V0ZTRfYnVja2V0IHtcbiBcdC8qIDE2IEZST00gYnVja2V0cyAmIzQzOyAxNiBJSUYgYnVja2V0cyAmIzQzOyAxIHdpbGRjYXJkIGJ1Y2tldCAqL1xuIFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3VcdCpodFsxNiAmIzQzOyAxNiAmIzQzOyAxXTtcbiYjNDM7XHRyZWZjb3VudF90XHRcdFx0ZmlsdGVyc19yZWY7XG4gXHRzdHJ1Y3QgcmN1X2hlYWRcdFx0XHRyY3U7XG4gfTtcbiBcbkBAIC0zMzYsNyAmIzQzOzMzOCw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X2RlbGV0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqYXJnLCBib29sICpsYXN0LFxuIFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKm5mO1xuIFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gXHR1bnNpZ25lZCBpbnQgaCA9IDA7XG4tXHRpbnQgaSwgaDE7XG4mIzQzO1x0aW50IGgxO1xuIFxuIFx0aWYgKCFoZWFkIHx8ICFmKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0zNjIsMjMgJiM0MzszNjQsMTQgQEAgc3RhdGljIGludCByb3V0ZTRfZGVsZXRlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICphcmcsIGJvb2wgKmxhc3QsXG4gXHRcdFx0dGNmX2V4dHNfZ2V0X25ldChcdTAwMjZmLVx1MDAzZWV4dHMpO1xuIFx0XHRcdHRjZl9xdWV1ZV93b3JrKFx1MDAyNmYtXHUwMDNlcndvcmssIHJvdXRlNF9kZWxldGVfZmlsdGVyX3dvcmspO1xuIFxuLVx0XHRcdC8qIFN0cmlwIFJUTkwgcHJvdGVjdGVkIHRyZWUgKi9cbi1cdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gMzI7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqcnQ7XG4tXG4tXHRcdFx0XHRydCA9IHJ0bmxfZGVyZWZlcmVuY2UoYi1cdTAwM2VodFtpXSk7XG4tXHRcdFx0XHRpZiAocnQpXG4tXHRcdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYpKSB7XG4mIzQzO1x0XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcbiYjNDM7XHRcdFx0XHRrZnJlZV9yY3UoYiwgcmN1KTtcbiBcdFx0XHR9XG4tXG4tXHRcdFx0LyogT0ssIHNlc3Npb24gaGFzIG5vIGZsb3dzICovXG4tXHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcbi1cdFx0XHRrZnJlZV9yY3UoYiwgcmN1KTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuIFxuLW91dDpcbiBcdCpsYXN0ID0gdHJ1ZTtcbiBcdGZvciAoaDEgPSAwOyBoMSBcdTAwM2M9IDI1NjsgaDEmIzQzOyYjNDM7KSB7XG4gXHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoaGVhZC1cdTAwM2V0YWJsZVtoMV0pKSB7XG5AQCAtNDAwLDggJiM0MzszOTMsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcm91dGU0X3BvbGljeVtUQ0FfUk9VVEU0X01BWCAmIzQzOyAxXSA9IHtcbiBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiBcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBiYXNlLCBzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZixcbiBcdFx0XHQgICAgdTMyIGhhbmRsZSwgc3RydWN0IHJvdXRlNF9oZWFkICpoZWFkLFxuLVx0XHRcdCAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBubGF0dHIgKmVzdCwgaW50IG5ldyxcbi1cdFx0XHQgICAgdTMyIGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBubGF0dHIgKmVzdCxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmb2xkLCB1MzIgZmxhZ3MsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0dTMyIGlkID0gMCwgdG8gPSAwLCBuaGFuZGxlID0gMHg4MDAwO1xuIFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZwO1xuQEAgLTQxNCw3ICYjNDM7NDA4LDcgQEAgc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRpZiAodGJbVENBX1JPVVRFNF9UT10pIHtcbi1cdFx0aWYgKG5ldyBcdTAwMjZcdTAwMjYgaGFuZGxlIFx1MDAyNiAweDgwMDApIHtcbiYjNDM7XHRcdGlmICghZm9sZCBcdTAwMjZcdTAwMjYgaGFuZGxlIFx1MDAyNiAweDgwMDApIHtcbiBcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgaGFuZGxlXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuQEAgLTQzNywxNCAmIzQzOzQzMSwxNCBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiBcdH0gZWxzZVxuIFx0XHRuaGFuZGxlIHw9IDB4RkZGRiBcdTAwM2NcdTAwM2MgMTY7XG4gXG4tXHRpZiAoaGFuZGxlIFx1MDAyNlx1MDAyNiBuZXcpIHtcbiYjNDM7XHRpZiAoaGFuZGxlIFx1MDAyNlx1MDAyNiAoIWZvbGQgfHwgbmhhbmRsZSA9PSAoaGFuZGxlIFx1MDAyNiB+MHg3RjAwKSkpXG4gXHRcdG5oYW5kbGUgfD0gaGFuZGxlIFx1MDAyNiAweDdGMDA7XG4tXHRcdGlmIChuaGFuZGxlICE9IGhhbmRsZSkge1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXG4tXHRcdFx0XHRcdCAgIFwmIzM0O0hhbmRsZSBtaXNtYXRjaCBjb25zdHJ1Y3RlZDogJXggKGV4cGVjdGVkOiAleClcJiMzNDssXG4tXHRcdFx0XHRcdCAgIGhhbmRsZSwgbmhhbmRsZSk7XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGhhbmRsZSBcdTAwMjZcdTAwMjYgIWZvbGQgXHUwMDI2XHUwMDI2IG5oYW5kbGUgIT0gaGFuZGxlKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O0hhbmRsZSBtaXNtYXRjaCBjb25zdHJ1Y3RlZDogJXggKGV4cGVjdGVkOiAleClcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgaGFuZGxlLCBuaGFuZGxlKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuIFx0aWYgKCFuaGFuZGxlKSB7XG5AQCAtNDU5LDYgJiM0Mzs0NTMsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiBcdFx0aWYgKGIgPT0gTlVMTClcbiBcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG4mIzQzO1x0XHRyZWZjb3VudF9zZXQoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZiwgMSk7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcihoZWFkLVx1MDAzZXRhYmxlW2gxXSwgYik7XG4gXHR9IGVsc2Uge1xuIFx0XHR1bnNpZ25lZCBpbnQgaDIgPSBmcm9tX2hhc2gobmhhbmRsZSBcdTAwM2VcdTAwM2UgMTYpO1xuQEAgLTQ2Niw4ICYjNDM7NDYxLDE0IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0XHRmb3IgKGZwID0gcnRubF9kZXJlZmVyZW5jZShiLVx1MDAzZWh0W2gyXSk7XG4gXHRcdCAgICAgZnA7XG4gXHRcdCAgICAgZnAgPSBydG5sX2RlcmVmZXJlbmNlKGZwLVx1MDAzZW5leHQpKVxuLVx0XHRcdGlmIChmcC1cdTAwM2VoYW5kbGUgPT0gZi1cdTAwM2VoYW5kbGUpXG4mIzQzO1x0XHRcdGlmIChmcCAhPSBmb2xkIFx1MDAyNlx1MDAyNiBmcC1cdTAwM2VoYW5kbGUgPT0gbmhhbmRsZSkge1xuJiM0MztcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFwmIzM0O0hhbmRsZSAleCBpcyBhbHJlYWR5IGluIHVzZVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgbmhhbmRsZSk7XG4gXHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHJlZmNvdW50X2luYyhcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKTtcbiBcdH1cbiBcbiBcdGlmICh0YltUQ0FfUk9VVEU0X1RPXSlcbkBAIC01MDAsOSAmIzQzOzUwMSw4IEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZm9sZCwgKmYxLCAqcGZwLCAqZiA9IE5VTEw7XG4gXHRzdHJ1Y3Qgcm91dGU0X2J1Y2tldCAqYjtcbiBcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9ST1VURTRfTUFYICYjNDM7IDFdO1xuLVx0dW5zaWduZWQgaW50IGgsIHRoO1xuJiM0MztcdHVuc2lnbmVkIGludCBoO1xuIFx0aW50IGVycjtcbi1cdGJvb2wgbmV3ID0gdHJ1ZTtcbiBcbiBcdGlmICghaGFuZGxlKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q3JlYXRpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkXCYjMzQ7KTtcbkBAIC01MzksMTEgJiM0Mzs1MzksMTAgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcbiBcdFx0Zi1cdTAwM2V0cCA9IGZvbGQtXHUwMDNldHA7XG4gXHRcdGYtXHUwMDNlYmt0ID0gZm9sZC1cdTAwM2Via3Q7XG4tXHRcdG5ldyA9IGZhbHNlO1xuIFx0fVxuIFxuIFx0ZXJyID0gcm91dGU0X3NldF9wYXJtcyhuZXQsIHRwLCBiYXNlLCBmLCBoYW5kbGUsIGhlYWQsIHRiLFxuLVx0XHRcdCAgICAgICB0Y2FbVENBX1JBVEVdLCBuZXcsIGZsYWdzLCBleHRhY2spO1xuJiM0MztcdFx0XHQgICAgICAgdGNhW1RDQV9SQVRFXSwgZm9sZCwgZmxhZ3MsIGV4dGFjayk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycm91dDtcbiBcbkBAIC01NjAsMTcgJiM0Mzs1NTksMjAgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGYpO1xuIFxuIFx0aWYgKGZvbGQpIHtcbi1cdFx0dGggPSB0b19oYXNoKGZvbGQtXHUwMDNlaGFuZGxlKTtcbiYjNDM7XHRcdGIgPSBmb2xkLVx1MDAzZWJrdDtcbiBcdFx0aCA9IGZyb21faGFzaChmb2xkLVx1MDAzZWhhbmRsZSBcdTAwM2VcdTAwM2UgMTYpO1xuLVx0XHRiID0gcnRubF9kZXJlZmVyZW5jZShoZWFkLVx1MDAzZXRhYmxlW3RoXSk7XG4tXHRcdGlmIChiKSB7XG4tXHRcdFx0ZnAgPSBcdTAwMjZiLVx1MDAzZWh0W2hdO1xuLVx0XHRcdGZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7XG4tXHRcdFx0ICAgICBmcCA9IFx1MDAyNnBmcC1cdTAwM2VuZXh0LCBwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCkpIHtcbi1cdFx0XHRcdGlmIChwZnAgPT0gZm9sZCkge1xuLVx0XHRcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmb2xkLVx1MDAzZW5leHQpO1xuLVx0XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdGZwID0gXHUwMDI2Yi1cdTAwM2VodFtoXTtcbiYjNDM7XHRcdGZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7XG4mIzQzO1x0XHQgICAgIGZwID0gXHUwMDI2cGZwLVx1MDAzZW5leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkge1xuJiM0MztcdFx0XHRpZiAocGZwID09IGZvbGQpIHtcbiYjNDM7XHRcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmb2xkLVx1MDAzZW5leHQpO1xuJiM0MztcdFx0XHRcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZikpIHtcbiYjNDM7XHRcdFx0XHRcdHVuc2lnbmVkIGludCB0aCA9IHRvX2hhc2goZm9sZC1cdTAwM2VoYW5kbGUpO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cdTAwM2V0YWJsZVt0aF0sIE5VTEwpO1xuJiM0MztcdFx0XHRcdFx0a2ZyZWVfcmN1KGIsIHJjdSk7XG4gXHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL2ZpbHRlcnMvcm91dGUuanNvblxuaW5kZXggMDVjZWRjYTY3Y2NhZC4uMmQ1ODQzYWViZDcyOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvZmlsdGVycy9yb3V0ZS5qc29uXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL2ZpbHRlcnMvcm91dGUuanNvblxuQEAgLTIwMiw1ICYjNDM7MjAyLDIxNSBAQFxuICAgICAgICAgXCYjMzQ7dGVhcmRvd25cJiMzNDs6IFtcbiAgICAgICAgICAgICBcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBwYXJlbnQgcm9vdCBkcnJcJiMzNDtcbiAgICAgICAgIF1cbiYjNDM7ICAgIH0sXG4mIzQzOyAgICB7XG4mIzQzOyAgICAgICAgXCYjMzQ7aWRcJiMzNDs6IFwmIzM0O2E3ZDJcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bmFtZVwmIzM0OzogXCYjMzQ7RGVsZXRlIGEgcm91dGUgZmlsdGVyIHRoYXQgd2FzIG1vdmVkIHRvIGFub3RoZXIgYnVja2V0XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2ZpbHRlclwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cm91dGVcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgZmlsdGVyIGNoYW5nZSBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMDAxIHJvdXRlIGZyb20gMSB0byAyIGNsYXNzaWQgMToxXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMjAwIHJvdXRlIGZyb20gNSB0byA1IGNsYXNzaWQgMTo1XCYjMzQ7XG4mIzQzOyAgICAgICAgXSxcbiYjNDM7ICAgICAgICBcJiMzNDtjbWRVbmRlclRlc3RcJiMzNDs6IFwmIzM0OyRUQyBmaWx0ZXIgZGVsIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAwMDIgcm91dGUgZnJvbSAxIHRvIDJcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7ZXhwRXhpdENvZGVcJiMzNDs6IFwmIzM0OzBcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dmVyaWZ5Q21kXCYjMzQ7OiBcJiMzNDskVEMgLWogZmlsdGVyIHNob3cgZGV2ICRERVYxIHBhcmVudCBmZmZmOlwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaEpTT05cJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAge1xuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7cHJvdG9jb2xcJiMzNDs6IFwmIzM0O2lwXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7cHJlZlwmIzM0OzogMjAwLFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7a2luZFwmIzM0OzogXCYjMzQ7cm91dGVcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtjaGFpblwmIzM0OzogMFxuJiM0MzsgICAgICAgICAgICB9LFxuJiM0MzsgICAgICAgICAgICB7XG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtwcm90b2NvbFwmIzM0OzogXCYjMzQ7aXBcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtwcmVmXCYjMzQ7OiAyMDAsXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtraW5kXCYjMzQ7OiBcJiMzNDtyb3V0ZVwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O2NoYWluXCYjMzQ7OiAwLFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7b3B0aW9uc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICAgICAgICAgIFwmIzM0O2ZoXCYjMzQ7OiBcJiMzNDsweDUwMDA1XCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgIFwmIzM0O2Zsb3dpZFwmIzM0OzogXCYjMzQ7MTo1XCYjMzQ7XG4mIzQzOyAgICAgICAgICAgICAgICB9XG4mIzQzOyAgICAgICAgICAgIH1cbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3RlYXJkb3duXCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3NcJiMzNDtcbiYjNDM7ICAgICAgICBdXG4mIzQzOyAgICB9LFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDtjMDVhXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O25hbWVcJiMzNDs6IFwmIzM0O1RyeSB0byBjaGFuZ2UgYSByb3V0ZSBmaWx0ZXIgb250byBhbiBhbHJlYWR5IHVzZWQgaGFuZGxlXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2ZpbHRlclwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cm91dGVcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxIGFjdGlvbiBva1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCByb3V0ZSBmcm9tIDIgdG8gMiBjbGFzc2lkIDE6MiBhY3Rpb24gZHJvcFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgZmlsdGVyIGNoYW5nZSBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMDAxIHJvdXRlIGZyb20gMiB0byAyIGNsYXNzaWQgMToxIGFjdGlvbiBva1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtleHBFeGl0Q29kZVwmIzM0OzogXCYjMzQ7MlwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyAtaiBmaWx0ZXIgc2hvdyBkZXYgJERFVjEgcGFyZW50IGZmZmY6XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoSlNPTlwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICB7XG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtwcm90b2NvbFwmIzM0OzogXCYjMzQ7aXBcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtwcmVmXCYjMzQ7OiAxMDAsXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtraW5kXCYjMzQ7OiBcJiMzNDtyb3V0ZVwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O2NoYWluXCYjMzQ7OiAwXG4mIzQzOyAgICAgICAgICAgIH0sXG4mIzQzOyAgICAgICAgICAgIHtcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O3Byb3RvY29sXCYjMzQ7OiBcJiMzNDtpcFwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O3ByZWZcJiMzNDs6IDEwMCxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O2tpbmRcJiMzNDs6IFwmIzM0O3JvdXRlXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7Y2hhaW5cJiMzNDs6IDAsXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtvcHRpb25zXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7ZmhcJiMzNDs6IFwmIzM0OzB4MTAwMDFcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7Zmxvd2lkXCYjMzQ7OiBcJiMzNDsxOjFcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7YWN0aW9uc1wmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtvcmRlclwmIzM0OzogMSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O2tpbmRcJiMzNDs6IFwmIzM0O2dhY3RcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtjb250cm9sX2FjdGlvblwmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O3R5cGVcJiMzNDs6IFwmIzM0O3Bhc3NcJiMzNDtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgfVxuJiM0MzsgICAgICAgICAgICAgICAgICAgIF1cbiYjNDM7ICAgICAgICAgICAgICAgIH1cbiYjNDM7ICAgICAgICAgICAgfSxcbiYjNDM7ICAgICAgICAgICAge1xuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7cHJvdG9jb2xcJiMzNDs6IFwmIzM0O2lwXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7cHJlZlwmIzM0OzogMTAwLFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7a2luZFwmIzM0OzogXCYjMzQ7cm91dGVcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtjaGFpblwmIzM0OzogMCxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O29wdGlvbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDtmaFwmIzM0OzogXCYjMzQ7MHgyMDAwMlwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDtmbG93aWRcJiMzNDs6IFwmIzM0OzE6MlwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDthY3Rpb25zXCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O29yZGVyXCYjMzQ7OiAxLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7a2luZFwmIzM0OzogXCYjMzQ7Z2FjdFwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O2NvbnRyb2xfYWN0aW9uXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7dHlwZVwmIzM0OzogXCYjMzQ7ZHJvcFwmIzM0O1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB9XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXVxuJiM0MzsgICAgICAgICAgICAgICAgfVxuJiM0MzsgICAgICAgICAgICB9XG4mIzQzOyAgICAgICAgXSxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXCYjMzQ7XG4mIzQzOyAgICAgICAgXVxuJiM0MzsgICAgfSxcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7M2YyMVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtSZXBsYWNlIGEgcm91dGUgZmlsdGVyIHRoYXQgc2hhcmVzIGl0cyBrZXkgd2l0aCBhbm90aGVyIGZpbHRlclwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtjYXRlZ29yeVwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtmaWx0ZXJcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3JvdXRlXCYjMzQ7XG4mIzQzOyAgICAgICAgXSxcbiYjNDM7ICAgICAgICBcJiMzNDtwbHVnaW5zXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3JlcXVpcmVzXCYjMzQ7OiBcJiMzNDtuc1BsdWdpblwmIzM0O1xuJiM0MzsgICAgICAgIH0sXG4mIzQzOyAgICAgICAgXCYjMzQ7c2V0dXBcJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzc1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6MVwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDIwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6MlwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtleHBFeGl0Q29kZVwmIzM0OzogXCYjMzQ7MFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyAtaiBmaWx0ZXIgc2hvdyBkZXYgJERFVjEgcGFyZW50IGZmZmY6XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoSlNPTlwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICB7XG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtwcm90b2NvbFwmIzM0OzogXCYjMzQ7aXBcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtwcmVmXCYjMzQ7OiAxMDAsXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtraW5kXCYjMzQ7OiBcJiMzNDtyb3V0ZVwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O2NoYWluXCYjMzQ7OiAwXG4mIzQzOyAgICAgICAgICAgIH0sXG4mIzQzOyAgICAgICAgICAgIHtcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O3Byb3RvY29sXCYjMzQ7OiBcJiMzNDtpcFwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O3ByZWZcJiMzNDs6IDEwMCxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O2tpbmRcJiMzNDs6IFwmIzM0O3JvdXRlXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7Y2hhaW5cJiMzNDs6IDAsXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtvcHRpb25zXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7ZmhcJiMzNDs6IFwmIzM0OzB4MTAxMDFcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7Zmxvd2lkXCYjMzQ7OiBcJiMzNDsxOjlcJiMzNDtcbiYjNDM7ICAgICAgICAgICAgICAgIH1cbiYjNDM7ICAgICAgICAgICAgfSxcbiYjNDM7ICAgICAgICAgICAge1xuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7cHJvdG9jb2xcJiMzNDs6IFwmIzM0O2lwXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7cHJlZlwmIzM0OzogMTAwLFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7a2luZFwmIzM0OzogXCYjMzQ7cm91dGVcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtjaGFpblwmIzM0OzogMCxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O29wdGlvbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDtmaFwmIzM0OzogXCYjMzQ7MHgxMDIwMVwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDtmbG93aWRcJiMzNDs6IFwmIzM0OzE6MlwmIzM0O1xuJiM0MzsgICAgICAgICAgICAgICAgfVxuJiM0MzsgICAgICAgICAgICB9XG4mIzQzOyAgICAgICAgXSxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXCYjMzQ7XG4mIzQzOyAgICAgICAgXVxuJiM0MzsgICAgfSxcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7OWQwZVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtSZXBsYWNlIGJvdGggcm91dGUgZmlsdGVycyBzaGFyaW5nIGEga2V5XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2ZpbHRlclwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cm91dGVcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMjAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToyXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OVwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDIwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtleHBFeGl0Q29kZVwmIzM0OzogXCYjMzQ7MFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyAtaiBmaWx0ZXIgc2hvdyBkZXYgJERFVjEgcGFyZW50IGZmZmY6XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoSlNPTlwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICB7XG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtwcm90b2NvbFwmIzM0OzogXCYjMzQ7aXBcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtwcmVmXCYjMzQ7OiAxMDAsXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtraW5kXCYjMzQ7OiBcJiMzNDtyb3V0ZVwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O2NoYWluXCYjMzQ7OiAwXG4mIzQzOyAgICAgICAgICAgIH0sXG4mIzQzOyAgICAgICAgICAgIHtcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O3Byb3RvY29sXCYjMzQ7OiBcJiMzNDtpcFwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O3ByZWZcJiMzNDs6IDEwMCxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O2tpbmRcJiMzNDs6IFwmIzM0O3JvdXRlXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7Y2hhaW5cJiMzNDs6IDAsXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtvcHRpb25zXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7ZmhcJiMzNDs6IFwmIzM0OzB4MTAxMDFcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7Zmxvd2lkXCYjMzQ7OiBcJiMzNDsxOjlcJiMzNDtcbiYjNDM7ICAgICAgICAgICAgICAgIH1cbiYjNDM7ICAgICAgICAgICAgfSxcbiYjNDM7ICAgICAgICAgICAge1xuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7cHJvdG9jb2xcJiMzNDs6IFwmIzM0O2lwXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7cHJlZlwmIzM0OzogMTAwLFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7a2luZFwmIzM0OzogXCYjMzQ7cm91dGVcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtjaGFpblwmIzM0OzogMCxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O29wdGlvbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDtmaFwmIzM0OzogXCYjMzQ7MHgxMDIwMVwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDtmbG93aWRcJiMzNDs6IFwmIzM0OzE6OFwmIzM0O1xuJiM0MzsgICAgICAgICAgICAgICAgfVxuJiM0MzsgICAgICAgICAgICB9XG4mIzQzOyAgICAgICAgXSxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXCYjMzQ7XG4mIzQzOyAgICAgICAgXVxuICAgICB9XG4gXVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfUk9VVEU0JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cm91dGU0X2NoYW5nZSYjMzQ7LAogICAgJiMzNDtyb3V0ZTRfZGVsZXRlJiMzNDssCiAgICAmIzM0O3JvdXRlNF9zZXRfcGFybXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNsc19yb3V0ZSBuZXR3b3JrIHRyYWZmaWMgY29udHJvbCBjbGFzc2lmaWVyIGluIG5ldC9zY2hlZC9jbHNfcm91dGUuYywgaW50cm9kdWNpbmcgYSByZWZjb3VudCAoZmlsdGVyc19yZWYpIHRvIG1hbmFnZSByb3V0ZTRfYnVja2V0IGxpZmV0aW1lcyBkdXJpbmcgcm91dGUgZmlsdGVyIG1vZGlmaWNhdGlvbiwgY3JlYXRpb24sIGFuZCBkZWxldGlvbiAocm91dGU0X2NoYW5nZSwgcm91dGU0X2RlbGV0ZSwgYW5kIHJvdXRlNF9zZXRfcGFybXMpLiBUaGlzIGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluay90YyBmaWx0ZXIgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA0YjQ3MGE4YWIyOGY2ZmUzN2Q1YTRlNTdhOTA1NmJjMDhjOGU4ZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDAwOjU5OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jCmluZGV4IDBkMTMyNGM5MDU4MzcuLjBmMjExZjAzMGZkOWEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfcm91dGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmMKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmVmY291bnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZHN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3JvdXRlLmgmZ3Q7CkBAIC00MSw2ICYjNDM7NDIsNyBAQCBzdHJ1Y3Qgcm91dGU0X2hlYWQgewogc3RydWN0IHJvdXRlNF9idWNrZXQgewogCS8qIDE2IEZST00gYnVja2V0cyAmIzQzOyAxNiBJSUYgYnVja2V0cyAmIzQzOyAxIHdpbGRjYXJkIGJ1Y2tldCAqLwogCXN0cnVjdCByb3V0ZTRfZmlsdGVyIF9fcmN1CSpodFsxNiAmIzQzOyAxNiAmIzQzOyAxXTsKJiM0MzsJcmVmY291bnRfdAkJCWZpbHRlcnNfcmVmOwogCXN0cnVjdCByY3VfaGVhZAkJCXJjdTsKIH07CiAKQEAgLTMzNiw3ICYjNDM7MzM4LDcgQEAgc3RhdGljIGludCByb3V0ZTRfZGVsZXRlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICphcmcsIGJvb2wgKmxhc3QsCiAJc3RydWN0IHJvdXRlNF9maWx0ZXIgKm5mOwogCXN0cnVjdCByb3V0ZTRfYnVja2V0ICpiOwogCXVuc2lnbmVkIGludCBoID0gMDsKLQlpbnQgaSwgaDE7CiYjNDM7CWludCBoMTsKIAogCWlmICghaGVhZCB8fCAhZikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNjIsMjMgJiM0MzszNjQsMTQgQEAgc3RhdGljIGludCByb3V0ZTRfZGVsZXRlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICphcmcsIGJvb2wgKmxhc3QsCiAJCQl0Y2ZfZXh0c19nZXRfbmV0KCZhbXA7Zi0mZ3Q7ZXh0cyk7CiAJCQl0Y2ZfcXVldWVfd29yaygmYW1wO2YtJmd0O3J3b3JrLCByb3V0ZTRfZGVsZXRlX2ZpbHRlcl93b3JrKTsKIAotCQkJLyogU3RyaXAgUlROTCBwcm90ZWN0ZWQgdHJlZSAqLwotCQkJZm9yIChpID0gMDsgaSAmbHQ7PSAzMjsgaSYjNDM7JiM0MzspIHsKLQkJCQlzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqcnQ7Ci0KLQkJCQlydCA9IHJ0bmxfZGVyZWZlcmVuY2UoYi0mZ3Q7aHRbaV0pOwotCQkJCWlmIChydCkKLQkJCQkJZ290byBvdXQ7CiYjNDM7CQkJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKSkgewomIzQzOwkJCQlSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtJmd0O3RhYmxlW3RvX2hhc2goaCldLCBOVUxMKTsKJiM0MzsJCQkJa2ZyZWVfcmN1KGIsIHJjdSk7CiAJCQl9Ci0KLQkJCS8qIE9LLCBzZXNzaW9uIGhhcyBubyBmbG93cyAqLwotCQkJUkNVX0lOSVRfUE9JTlRFUihoZWFkLSZndDt0YWJsZVt0b19oYXNoKGgpXSwgTlVMTCk7Ci0JCQlrZnJlZV9yY3UoYiwgcmN1KTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCi1vdXQ6CiAJKmxhc3QgPSB0cnVlOwogCWZvciAoaDEgPSAwOyBoMSAmbHQ7PSAyNTY7IGgxJiM0MzsmIzQzOykgewogCQlpZiAocmN1X2FjY2Vzc19wb2ludGVyKGhlYWQtJmd0O3RhYmxlW2gxXSkpIHsKQEAgLTQwMCw4ICYjNDM7MzkzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJvdXRlNF9wb2xpY3lbVENBX1JPVVRFNF9NQVggJiM0MzsgMV0gPSB7CiBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGJhc2UsIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmLAogCQkJICAgIHUzMiBoYW5kbGUsIHN0cnVjdCByb3V0ZTRfaGVhZCAqaGVhZCwKLQkJCSAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBubGF0dHIgKmVzdCwgaW50IG5ldywKLQkJCSAgICB1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0MzsJCQkgICAgc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgbmxhdHRyICplc3QsCiYjNDM7CQkJICAgIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmb2xkLCB1MzIgZmxhZ3MsCiYjNDM7CQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAl1MzIgaWQgPSAwLCB0byA9IDAsIG5oYW5kbGUgPSAweDgwMDA7CiAJc3RydWN0IHJvdXRlNF9maWx0ZXIgKmZwOwpAQCAtNDE0LDcgJiM0Mzs0MDgsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwKIAkJcmV0dXJuIGVycjsKIAogCWlmICh0YltUQ0FfUk9VVEU0X1RPXSkgewotCQlpZiAobmV3ICZhbXA7JmFtcDsgaGFuZGxlICZhbXA7IDB4ODAwMCkgewomIzQzOwkJaWYgKCFmb2xkICZhbXA7JmFtcDsgaGFuZGxlICZhbXA7IDB4ODAwMCkgewogCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O0ludmFsaWQgaGFuZGxlJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTQzNywxNCAmIzQzOzQzMSwxNCBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwKIAl9IGVsc2UKIAkJbmhhbmRsZSB8PSAweEZGRkYgJmx0OyZsdDsgMTY7CiAKLQlpZiAoaGFuZGxlICZhbXA7JmFtcDsgbmV3KSB7CiYjNDM7CWlmIChoYW5kbGUgJmFtcDsmYW1wOyAoIWZvbGQgfHwgbmhhbmRsZSA9PSAoaGFuZGxlICZhbXA7IH4weDdGMDApKSkKIAkJbmhhbmRsZSB8PSBoYW5kbGUgJmFtcDsgMHg3RjAwOwotCQlpZiAobmhhbmRsZSAhPSBoYW5kbGUpIHsKLQkJCU5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssCi0JCQkJCSAgICYjMzQ7SGFuZGxlIG1pc21hdGNoIGNvbnN0cnVjdGVkOiAleCAoZXhwZWN0ZWQ6ICV4KSYjMzQ7LAotCQkJCQkgICBoYW5kbGUsIG5oYW5kbGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KJiM0MzsKJiM0MzsJaWYgKGhhbmRsZSAmYW1wOyZhbXA7ICFmb2xkICZhbXA7JmFtcDsgbmhhbmRsZSAhPSBoYW5kbGUpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7SGFuZGxlIG1pc21hdGNoIGNvbnN0cnVjdGVkOiAleCAoZXhwZWN0ZWQ6ICV4KSYjMzQ7LAomIzQzOwkJCQkgICBoYW5kbGUsIG5oYW5kbGUpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKCFuaGFuZGxlKSB7CkBAIC00NTksNiAmIzQzOzQ1Myw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLAogCQlpZiAoYiA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9CVUZTOwogCiYjNDM7CQlyZWZjb3VudF9zZXQoJmFtcDtiLSZndDtmaWx0ZXJzX3JlZiwgMSk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihoZWFkLSZndDt0YWJsZVtoMV0sIGIpOwogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGludCBoMiA9IGZyb21faGFzaChuaGFuZGxlICZndDsmZ3Q7IDE2KTsKQEAgLTQ2Niw4ICYjNDM7NDYxLDE0IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLAogCQlmb3IgKGZwID0gcnRubF9kZXJlZmVyZW5jZShiLSZndDtodFtoMl0pOwogCQkgICAgIGZwOwogCQkgICAgIGZwID0gcnRubF9kZXJlZmVyZW5jZShmcC0mZ3Q7bmV4dCkpCi0JCQlpZiAoZnAtJmd0O2hhbmRsZSA9PSBmLSZndDtoYW5kbGUpCiYjNDM7CQkJaWYgKGZwICE9IGZvbGQgJmFtcDsmYW1wOyBmcC0mZ3Q7aGFuZGxlID09IG5oYW5kbGUpIHsKJiM0MzsJCQkJTkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywKJiM0MzsJCQkJCQkgICAmIzM0O0hhbmRsZSAleCBpcyBhbHJlYWR5IGluIHVzZSYjMzQ7LAomIzQzOwkJCQkJCSAgIG5oYW5kbGUpOwogCQkJCXJldHVybiAtRUVYSVNUOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCXJlZmNvdW50X2luYygmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKTsKIAl9CiAKIAlpZiAodGJbVENBX1JPVVRFNF9UT10pCkBAIC01MDAsOSAmIzQzOzUwMSw4IEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJc3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsICpmMSwgKnBmcCwgKmYgPSBOVUxMOwogCXN0cnVjdCByb3V0ZTRfYnVja2V0ICpiOwogCXN0cnVjdCBubGF0dHIgKnRiW1RDQV9ST1VURTRfTUFYICYjNDM7IDFdOwotCXVuc2lnbmVkIGludCBoLCB0aDsKJiM0MzsJdW5zaWduZWQgaW50IGg7CiAJaW50IGVycjsKLQlib29sIG5ldyA9IHRydWU7CiAKIAlpZiAoIWhhbmRsZSkgewogCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7Q3JlYXRpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkJiMzNDspOwpAQCAtNTM5LDExICYjNDM7NTM5LDEwIEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAKIAkJZi0mZ3Q7dHAgPSBmb2xkLSZndDt0cDsKIAkJZi0mZ3Q7Ymt0ID0gZm9sZC0mZ3Q7Ymt0OwotCQluZXcgPSBmYWxzZTsKIAl9CiAKIAllcnIgPSByb3V0ZTRfc2V0X3Bhcm1zKG5ldCwgdHAsIGJhc2UsIGYsIGhhbmRsZSwgaGVhZCwgdGIsCi0JCQkgICAgICAgdGNhW1RDQV9SQVRFXSwgbmV3LCBmbGFncywgZXh0YWNrKTsKJiM0MzsJCQkgICAgICAgdGNhW1RDQV9SQVRFXSwgZm9sZCwgZmxhZ3MsIGV4dGFjayk7CiAJaWYgKGVyciAmbHQ7IDApCiAJCWdvdG8gZXJyb3V0OwogCkBAIC01NjAsMTcgJiM0Mzs1NTksMjAgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAlyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmKTsKIAogCWlmIChmb2xkKSB7Ci0JCXRoID0gdG9faGFzaChmb2xkLSZndDtoYW5kbGUpOwomIzQzOwkJYiA9IGZvbGQtJmd0O2JrdDsKIAkJaCA9IGZyb21faGFzaChmb2xkLSZndDtoYW5kbGUgJmd0OyZndDsgMTYpOwotCQliID0gcnRubF9kZXJlZmVyZW5jZShoZWFkLSZndDt0YWJsZVt0aF0pOwotCQlpZiAoYikgewotCQkJZnAgPSAmYW1wO2ItJmd0O2h0W2hdOwotCQkJZm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDsKLQkJCSAgICAgZnAgPSAmYW1wO3BmcC0mZ3Q7bmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7Ci0JCQkJaWYgKHBmcCA9PSBmb2xkKSB7Ci0JCQkJCXJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGZvbGQtJmd0O25leHQpOwotCQkJCQlicmVhazsKJiM0MzsJCWZwID0gJmFtcDtiLSZndDtodFtoXTsKJiM0MzsJCWZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7CiYjNDM7CQkgICAgIGZwID0gJmFtcDtwZnAtJmd0O25leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkgewomIzQzOwkJCWlmIChwZnAgPT0gZm9sZCkgewomIzQzOwkJCQlyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmb2xkLSZndDtuZXh0KTsKJiM0MzsJCQkJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKSkgewomIzQzOwkJCQkJdW5zaWduZWQgaW50IHRoID0gdG9faGFzaChmb2xkLSZndDtoYW5kbGUpOwomIzQzOwomIzQzOwkJCQkJUkNVX0lOSVRfUE9JTlRFUihoZWFkLSZndDt0YWJsZVt0aF0sIE5VTEwpOwomIzQzOwkJCQkJa2ZyZWVfcmN1KGIsIHJjdSk7CiAJCQkJfQomIzQzOwkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvZmlsdGVycy9yb3V0ZS5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb24KaW5kZXggMDVjZWRjYTY3Y2NhZC4uMmQ1ODQzYWViZDcyOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb24KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb24KQEAgLTIwMiw1ICYjNDM7MjAyLDIxNSBAQAogICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKICAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgcGFyZW50IHJvb3QgZHJyJiMzNDsKICAgICAgICAgXQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7YTdkMiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7RGVsZXRlIGEgcm91dGUgZmlsdGVyIHRoYXQgd2FzIG1vdmVkIHRvIGFub3RoZXIgYnVja2V0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O2ZpbHRlciYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7cm91dGUmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjEmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgY2hhbmdlIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAwMDEgcm91dGUgZnJvbSAxIHRvIDIgY2xhc3NpZCAxOjEmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAyMDAgcm91dGUgZnJvbSA1IHRvIDUgY2xhc3NpZCAxOjUmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIGZpbHRlciBkZWwgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDAwMiByb3V0ZSBmcm9tIDEgdG8gMiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIC1qIGZpbHRlciBzaG93IGRldiAkREVWMSBwYXJlbnQgZmZmZjomIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hKU09OJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICB7CiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJvdG9jb2wmIzM0OzogJiMzNDtpcCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3ByZWYmIzM0OzogMjAwLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O2tpbmQmIzM0OzogJiMzNDtyb3V0ZSYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O2NoYWluJiMzNDs6IDAKJiM0MzsgICAgICAgICAgICB9LAomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAyMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtvcHRpb25zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7ZmgmIzM0OzogJiMzNDsweDUwMDA1JiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2Zsb3dpZCYjMzQ7OiAmIzM0OzE6NSYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICB9CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzJiMzNDsKJiM0MzsgICAgICAgIF0KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0O2MwNWEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O1RyeSB0byBjaGFuZ2UgYSByb3V0ZSBmaWx0ZXIgb250byBhbiBhbHJlYWR5IHVzZWQgaGFuZGxlJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O2ZpbHRlciYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7cm91dGUmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjEgYWN0aW9uIG9rJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIHJvdXRlIGZyb20gMiB0byAyIGNsYXNzaWQgMToyIGFjdGlvbiBkcm9wJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBmaWx0ZXIgY2hhbmdlIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAwMDEgcm91dGUgZnJvbSAyIHRvIDIgY2xhc3NpZCAxOjEgYWN0aW9uIG9rJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgLWogZmlsdGVyIHNob3cgZGV2ICRERVYxIHBhcmVudCBmZmZmOiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaEpTT04mIzM0OzogWwomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAxMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMAomIzQzOyAgICAgICAgICAgIH0sCiYjNDM7ICAgICAgICAgICAgewomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3Byb3RvY29sJiMzNDs6ICYjMzQ7aXAmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcmVmJiMzNDs6IDEwMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtraW5kJiMzNDs6ICYjMzQ7cm91dGUmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtjaGFpbiYjMzQ7OiAwLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O29wdGlvbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzNDtmaCYjMzQ7OiAmIzM0OzB4MTAwMDEmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7Zmxvd2lkJiMzNDs6ICYjMzQ7MToxJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2FjdGlvbnMmIzM0OzogWwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDtvcmRlciYjMzQ7OiAxLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O2tpbmQmIzM0OzogJiMzNDtnYWN0JiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7Y29udHJvbF9hY3Rpb24mIzM0OzogewomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDt0eXBlJiMzNDs6ICYjMzQ7cGFzcyYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB9CiYjNDM7ICAgICAgICAgICAgICAgICAgICBdCiYjNDM7ICAgICAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICB9LAomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAxMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtvcHRpb25zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7ZmgmIzM0OzogJiMzNDsweDIwMDAyJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2Zsb3dpZCYjMzQ7OiAmIzM0OzE6MiYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzNDthY3Rpb25zJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7b3JkZXImIzM0OzogMSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDtraW5kJiMzNDs6ICYjMzQ7Z2FjdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O2NvbnRyb2xfYWN0aW9uJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7dHlwZSYjMzQ7OiAmIzM0O2Ryb3AmIzM0OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgfQomIzQzOyAgICAgICAgICAgICAgICAgICAgXQomIzQzOyAgICAgICAgICAgICAgICB9CiYjNDM7ICAgICAgICAgICAgfQomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzcyYjMzQ7CiYjNDM7ICAgICAgICBdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDszZjIxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtSZXBsYWNlIGEgcm91dGUgZmlsdGVyIHRoYXQgc2hhcmVzIGl0cyBrZXkgd2l0aCBhbm90aGVyIGZpbHRlciYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtmaWx0ZXImIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O3JvdXRlJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMjAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToyJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBmaWx0ZXIgcmVwbGFjZSBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMTo5JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgLWogZmlsdGVyIHNob3cgZGV2ICRERVYxIHBhcmVudCBmZmZmOiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaEpTT04mIzM0OzogWwomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAxMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMAomIzQzOyAgICAgICAgICAgIH0sCiYjNDM7ICAgICAgICAgICAgewomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3Byb3RvY29sJiMzNDs6ICYjMzQ7aXAmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcmVmJiMzNDs6IDEwMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtraW5kJiMzNDs6ICYjMzQ7cm91dGUmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtjaGFpbiYjMzQ7OiAwLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O29wdGlvbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzNDtmaCYjMzQ7OiAmIzM0OzB4MTAxMDEmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7Zmxvd2lkJiMzNDs6ICYjMzQ7MTo5JiMzNDsKJiM0MzsgICAgICAgICAgICAgICAgfQomIzQzOyAgICAgICAgICAgIH0sCiYjNDM7ICAgICAgICAgICAgewomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3Byb3RvY29sJiMzNDs6ICYjMzQ7aXAmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcmVmJiMzNDs6IDEwMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtraW5kJiMzNDs6ICYjMzQ7cm91dGUmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtjaGFpbiYjMzQ7OiAwLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O29wdGlvbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzNDtmaCYjMzQ7OiAmIzM0OzB4MTAyMDEmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7Zmxvd2lkJiMzNDs6ICYjMzQ7MToyJiMzNDsKJiM0MzsgICAgICAgICAgICAgICAgfQomIzQzOyAgICAgICAgICAgIH0KJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OwomIzQzOyAgICAgICAgXQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7OWQwZSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7UmVwbGFjZSBib3RoIHJvdXRlIGZpbHRlcnMgc2hhcmluZyBhIGtleSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtmaWx0ZXImIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O3JvdXRlJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMjAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToyJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OSYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDIwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIC1qIGZpbHRlciBzaG93IGRldiAkREVWMSBwYXJlbnQgZmZmZjomIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hKU09OJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICB7CiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJvdG9jb2wmIzM0OzogJiMzNDtpcCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3ByZWYmIzM0OzogMTAwLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O2tpbmQmIzM0OzogJiMzNDtyb3V0ZSYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O2NoYWluJiMzNDs6IDAKJiM0MzsgICAgICAgICAgICB9LAomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAxMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtvcHRpb25zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7ZmgmIzM0OzogJiMzNDsweDEwMTAxJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2Zsb3dpZCYjMzQ7OiAmIzM0OzE6OSYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICB9LAomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAxMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtvcHRpb25zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7ZmgmIzM0OzogJiMzNDsweDEwMjAxJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2Zsb3dpZCYjMzQ7OiAmIzM0OzE6OCYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICB9CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzJiMzNDsKJiM0MzsgICAgICAgIF0KICAgICB9CiBdCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MzAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBBbmFseXNpczogUm91dGUgQ2xhc3NpZmllciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGFuZCBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGZ1enotd29ydGh5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgcG9pbnRzOiB0aGUgY29uZmlndXJhdGlvbiBwcmVyZXF1aXNpdGVzLCBhbmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBvciBzdHJ1Y3R1cmVzIHRoYXQgZGVzZXJ2ZSB0aGUgbW9zdCBhdHRlbnRpb24gZHVyaW5nIGZ1enppbmcuCgpBbHJpZ2h0LCB0aGUgY2hhbmdlcyBpbnZvbHZlIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgIGFuZCBhIGNvcnJlc3BvbmRpbmcgc2VsZnRlc3QgdXBkYXRlIGluIGByb3V0ZS5qc29uYC4gVGhlIGNvZGUgY2hhbmdlcyBpbiBgY2xzX3JvdXRlLmNgIGFyZSB3aGF0IGludHJpZ3VlIG1lLiBXZSYjMzk7cmUgc2VlaW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGByb3V0ZTRfYnVja2V0YCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB0aGUgYWRkaXRpb24gb2YgYHJlZmNvdW50X3QgZmlsdGVyc19yZWY7YC4gVGhpcyBoaW50cyBhdCBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBhbHdheXMgYSBnb29kIHNpZ24gZm9yIGZ1enppbmcgdGFyZ2V0cyEKCkxvb2tpbmcgY2xvc2VyOiB0aGUgYHJvdXRlNF9kZWxldGUoKWAgZnVuY3Rpb24gbm93IGluY2x1ZGVzIHJlZmNvdW50IGhhbmRsaW5nIGFuZCBidWNrZXQgZnJlZWluZyBsb2dpYy4gYHJvdXRlNF9zZXRfcGFybXMoKWAgaGFzIHZhbGlkYXRpb24sIGR1cGxpY2F0ZSBjaGVja3MsIGFuZCByZWZjb3VudCBtYW5hZ2VtZW50IOKAkyBhbGwgYWRkaW5nIGVudHJ5IHBvaW50cyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gRmluYWxseSwgYHJvdXRlNF9jaGFuZ2UoKWAgdG91Y2hlcyBgZm9sZGAsIGJ1Y2tldCBoYW5kbGluZywgYW5kLCBjcml0aWNhbGx5LCBgcmVmY291bnRfZGVjX2FuZF90ZXN0YC4gVGhhdCBsYXN0IG9uZSBpcyBzY3JlYW1pbmcgZm9yIHNvbWUgZm9jdXNlZCBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIEtjb25maWcgZm9yIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgLiBOZWVkIHRvIGtub3cgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgdG8gZW5hYmxlIHRoaXMgY29kZS4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCAob3IganVzdCByZWFkIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUsIG9mIGNvdXJzZSkgdG8gbWFrZSBzdXJlIEkga25vdyBob3cgdG8gY29uZmlndXJlIHRoZSBrZXJuZWwgdG8gaGl0IHRoZXNlIGNvZGUgcGF0aHMuIEtub3dpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGJlIGtleSB0byBjcmVhdGluZyBhIGZvY3VzZWQgZnV6emluZyBjYW1wYWlnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbHNfcm91dGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NDk0PWNvbmZpZyBORVRfQ0xTX1JPVVRFNFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTUwMy1cdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxubmV0L3NjaGVkL0tjb25maWc6NTA0Olx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX3JvdXRlLlxubmV0L3NjaGVkL0tjb25maWctNTA1LVxuLS1cbm5ldC9zY2hlZC9NYWtlZmlsZT02OD1vYmotJChDT05GSUdfTkVUX0NMU19VMzIpXHQmIzQzOz0gY2xzX3UzMi5vXG5uZXQvc2NoZWQvTWFrZWZpbGU6Njk6b2JqLSQoQ09ORklHX05FVF9DTFNfUk9VVEU0KVx0JiM0Mzs9IGNsc19yb3V0ZS5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtNzAtb2JqLSQoQ09ORklHX05FVF9DTFNfRlcpXHQmIzQzOz0gY2xzX2Z3Lm9cbi0tXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtMi0vKlxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjM6ICogbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXHRST1VURTQgY2xhc3NpZmllci5cbm5ldC9zY2hlZC9jbHNfcm91dGUuYy00LSAqXG4tLVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jPTY3Mj1zdGF0aWMgdm9pZCByb3V0ZTRfYmluZF9jbGFzcyh2b2lkICpmaCwgdTMyIGNsYXNzaWQsIHVuc2lnbmVkIGxvbmcgY2wsIHZvaWQgKnEsXG4tLVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTY3OS1cbm5ldC9zY2hlZC9jbHNfcm91dGUuYzo2ODA6c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc19yb3V0ZTRfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjgxLVx0LmtpbmRcdFx0PVx0XCYjMzQ7cm91dGVcJiMzNDssXG4tLVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jPTY5NT1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JvdXRlNCh2b2lkKVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTY5Ni17XG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM6Njk3Olx0cmV0dXJuIHJlZ2lzdGVyX3RjZl9wcm90b19vcHMoXHUwMDI2Y2xzX3JvdXRlNF9vcHMpO1xubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTY5OC19XG4tLVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jPTcwMD1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yb3V0ZTQodm9pZClcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy03MDEte1xubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjcwMjpcdHVucmVnaXN0ZXJfdGNmX3Byb3RvX29wcyhcdTAwMjZjbHNfcm91dGU0X29wcyk7XG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNzAzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTE3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIEtjb25maWcgZm9yIE5ldHdvcmsgU2NoZWR1bGluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBuZXR3b3JrIHNjaGVkdWxlciB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0IG1lIG9wZW4gdXAgYG5ldC9zY2hlZC9LY29uZmlnYCBhbmQgem9vbSBpbiBvbiBsaW5lIDQ5NC4gSG9wZWZ1bGx5LCB0aGF0IGxvY2F0aW9uIHdpbGwgdHJpZ2dlciBhIGtleSBzZWN0aW9uLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWV0aGluZyBzcGVjaWZpYyByZWxhdGVkIHRvIHRoZSBzaGFwaW5nIG9yIHF1ZXVpbmcgZGlzY2lwbGluZXMgdGhhdCBJIGhhdmUgYmVlbiByZXNlYXJjaGluZy4gSSB3aWxsIHNlZSB3aGF0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIHByb2JsZW0gSSBhbSB0cnlpbmcgdG8gc29sdmUuIEkgd2lsbCBsaWtlbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgc2V0dGluZ3MgdG8gbWFrZSB0aGUgYmVzdCBkZWNpc2lvbiBmb3IgbXkgY3VycmVudCBuZWVkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0ODA6XHRcbiA0ODE6XHRjb25maWcgTkVUX0NMU1xuIDQ4MjpcdFx0Ym9vbFxuIDQ4MzpcdFxuIDQ4NDpcdGNvbmZpZyBORVRfQ0xTX0JBU0lDXG4gNDg1Olx0XHR0cmlzdGF0ZSBcJiMzNDtFbGVtZW50YXJ5IGNsYXNzaWZpY2F0aW9uIChCQVNJQylcJiMzNDtcbiA0ODY6XHRcdHNlbGVjdCBORVRfQ0xTXG4gNDg3Olx0XHRoZWxwXG4gNDg4Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzIHVzaW5nXG4gNDg5Olx0XHQgIG9ubHkgZXh0ZW5kZWQgbWF0Y2hlcyBhbmQgYWN0aW9ucy5cbiA0OTA6XHRcbiA0OTE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDQ5MjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX2Jhc2ljLlxuIDQ5MzpcdFxuIDQ5NDpcdGNvbmZpZyBORVRfQ0xTX1JPVVRFNFxuIDQ5NTpcdFx0dHJpc3RhdGUgXCYjMzQ7Um91dGluZyBkZWNpc2lvbiAoUk9VVEUpXCYjMzQ7XG4gNDk2Olx0XHRkZXBlbmRzIG9uIElORVRcbiA0OTc6XHRcdHNlbGVjdCBJUF9ST1VURV9DTEFTU0lEXG4gNDk4Olx0XHRzZWxlY3QgTkVUX0NMU1xuIDQ5OTpcdFx0aGVscFxuIDUwMDpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzXG4gNTAxOlx0XHQgIGFjY29yZGluZyB0byB0aGUgcm91dGUgdGFibGUgZW50cnkgdGhleSBtYXRjaGVkLlxuIDUwMjpcdFxuIDUwMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNTA0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfcm91dGUuXG4gNTA1Olx0XG4gNTA2Olx0Y29uZmlnIE5FVF9DTFNfRldcbiA1MDc6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBtYXJrIChGVylcJiMzNDtcbiA1MDg6XHRcdHNlbGVjdCBORVRfQ0xTXG4gNTA5Olx0XHRoZWxwXG4gNTEwOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHNcbiA1MTE6XHRcdCAgYWNjb3JkaW5nIHRvIG5ldGZpbHRlci9maXJld2FsbCBtYXJrcy5cbiA1MTI6XHRcbiA1MTM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDUxNDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX2Z3LlxuIDUxNTpcdFxuIDUxNjpcdGNvbmZpZyBORVRfQ0xTX1UzMlxuIDUxNzpcdFx0dHJpc3RhdGUgXCYjMzQ7VW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcJiMzNDtcbiA1MTg6XHRcdHNlbGVjdCBORVRfQ0xTXG4gNTE5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI1OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBjbHNfcm91dGUuY2AgZm9yIENsYXJpdHkqKgoKT2theSwgc28gSSB3YW50IHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIHdoYXQmIzM5O3MgY2hhbmdlZCB3aXRoaW4gdGhlIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgIG1vZHVsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBwaW5wb2ludCB0aGUgZXhhY3QgbW9kaWZpY2F0aW9ucyBtYWRlIHRvIHRob3NlIGtleSBmdW5jdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIGl0c2VsZiwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSByZWNlbnQgY29tbWl0cyBhbmQgdGhlIGRpZmZzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIHRoZSByb3V0aW5nIGNsYXNzaWZpY2F0aW9uIGxvZ2ljLCBhbnkgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBHb2luZyBkaXJlY3RseSB0byB0aGUgc291cmNlIHdpbGwgcHJvdmlkZSB0aGUgY2xlYW5lc3QgcGljdHVyZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3JvdXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzMDpcdH1cbiAzMzE6XHRcbiAzMzI6XHRzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCxcbiAzMzM6XHRcdFx0XHQgYm9vbCBydG5sX2hlbGQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAzMzQ6XHR7XG4gMzM1Olx0XHRzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQgPSBydG5sX2RlcmVmZXJlbmNlKHRwLVx1MDAzZXJvb3QpO1xuIDMzNjpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmYgPSBhcmc7XG4gMzM3Olx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciBfX3JjdSAqKmZwO1xuIDMzODpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKm5mO1xuIDMzOTpcdFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gMzQwOlx0XHR1bnNpZ25lZCBpbnQgaCA9IDA7XG4gMzQxOlx0XHRpbnQgaDE7XG4gMzQyOlx0XG4gMzQzOlx0XHRpZiAoIWhlYWQgfHwgIWYpXG4gMzQ0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM0NTpcdFxuIDM0NjpcdFx0aCA9IGYtXHUwMDNlaGFuZGxlO1xuIDM0NzpcdFx0YiA9IGYtXHUwMDNlYmt0O1xuIDM0ODpcdFxuIDM0OTpcdFx0ZnAgPSBcdTAwMjZiLVx1MDAzZWh0W2Zyb21faGFzaChoIFx1MDAzZVx1MDAzZSAxNildO1xuIDM1MDpcdFx0Zm9yIChuZiA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgbmY7XG4gMzUxOlx0XHQgICAgIGZwID0gXHUwMDI2bmYtXHUwMDNlbmV4dCwgbmYgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCkpIHtcbiAzNTI6XHRcdFx0aWYgKG5mID09IGYpIHtcbiAzNTM6XHRcdFx0XHQvKiB1bmxpbmsgaXQgKi9cbiAzNTQ6XHRcdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKCpmcCwgcnRubF9kZXJlZmVyZW5jZShmLVx1MDAzZW5leHQpKTtcbiAzNTU6XHRcbiAzNTY6XHRcdFx0XHQvKiBDbGVhciBhbnkgZmFzdG1hcCBlbnRyaWVzIHRoYXQgbWF5IHJlZiB0aGlzIGZpbHRlciBhbmRcbiAzNTc6XHRcdFx0XHQgKiBtYXJrIGl0IGR5aW5nIHNvIGluLWZsaWdodCByZWFkZXJzIGNhbiYjMzk7dCByZXB1Ymxpc2ggaXRcbiAzNTg6XHRcdFx0XHQgKiBhZnRlciB0aGUgcmVzZXQuXG4gMzU5Olx0XHRcdFx0ICovXG4gMzYwOlx0XHRcdFx0cm91dGU0X3Jlc2V0X2Zhc3RtYXAoaGVhZCwgZik7XG4gMzYxOlx0XG4gMzYyOlx0XHRcdFx0LyogRGVsZXRlIGl0ICovXG4gMzYzOlx0XHRcdFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFx1MDAyNmYtXHUwMDNlcmVzKTtcbiAzNjQ6XHRcdFx0XHR0Y2ZfZXh0c19nZXRfbmV0KFx1MDAyNmYtXHUwMDNlZXh0cyk7XG4gMzY1Olx0XHRcdFx0dGNmX3F1ZXVlX3dvcmsoXHUwMDI2Zi1cdTAwM2Vyd29yaywgcm91dGU0X2RlbGV0ZV9maWx0ZXJfd29yayk7XG4gMzY2Olx0XG4gMzY3Olx0XHRcdFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKSkge1xuIDM2ODpcdFx0XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcbiAzNjk6XHRcdFx0XHRcdGtmcmVlX3JjdShiLCByY3UpO1xuIDM3MDpcdFx0XHRcdH1cbiAzNzE6XHRcdFx0XHRicmVhaztcbiAzNzI6XHRcdFx0fVxuIDM3MzpcdFx0fVxuIDM3NDpcdFxuIDM3NTpcdFx0Kmxhc3QgPSB0cnVlO1xuIDM3NjpcdFx0Zm9yIChoMSA9IDA7IGgxIFx1MDAzYz0gMjU2OyBoMSYjNDM7JiM0MzspIHtcbiAzNzc6XHRcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihoZWFkLVx1MDAzZXRhYmxlW2gxXSkpIHtcbiAzNzg6XHRcdFx0XHQqbGFzdCA9IGZhbHNlO1xuIDM3OTpcdFx0XHRcdGJyZWFrO1xuIDM4MDpcdFx0XHR9XG4gMzgxOlx0XHR9XG4gMzgyOlx0XG4gMzgzOlx0XHRyZXR1cm4gMDtcbiAzODQ6XHR9XG4gMzg1Olx0XG4gMzg2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJvdXRlNF9wb2xpY3lbVENBX1JPVVRFNF9NQVggJiM0MzsgMV0gPSB7XG4gMzg3Olx0XHRbVENBX1JPVVRFNF9DTEFTU0lEXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIDM4ODpcdFx0W1RDQV9ST1VURTRfVE9dXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMHhGRiksXG4gMzg5Olx0XHRbVENBX1JPVVRFNF9GUk9NXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAweEZGKSxcbiAzOTA6XHRcdFtUQ0FfUk9VVEU0X0lJRl1cdD0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMHg3RkZGKSxcbiAzOTE6XHR9O1xuIDM5MjpcdFxuIDM5MzpcdHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIDM5NDpcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGJhc2UsIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmLFxuIDM5NTpcdFx0XHRcdCAgICB1MzIgaGFuZGxlLCBzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQsXG4gMzk2Olx0XHRcdFx0ICAgIHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IG5sYXR0ciAqZXN0LFxuIDM5NzpcdFx0XHRcdCAgICBzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZm9sZCwgdTMyIGZsYWdzLFxuIDM5ODpcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gMzk5Olx0e1xuIDQwMDpcdFx0dTMyIGlkID0gMCwgdG8gPSAwLCBuaGFuZGxlID0gMHg4MDAwO1xuIDQwMTpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZwO1xuIDQwMjpcdFx0dW5zaWduZWQgaW50IGgxO1xuIDQwMzpcdFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gNDA0Olx0XHRpbnQgZXJyO1xuIDQwNTpcdFxuIDQwNjpcdFx0ZXJyID0gdGNmX2V4dHNfdmFsaWRhdGUobmV0LCB0cCwgdGIsIGVzdCwgXHUwMDI2Zi1cdTAwM2VleHRzLCBmbGFncywgZXh0YWNrKTtcbiA0MDc6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNDA4Olx0XHRcdHJldHVybiBlcnI7XG4gNDA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3ODMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgZm9jdXNpbmcgb24gdGhlIGltcGxpZWQgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgRGVlcGVyIGludG8gUm91dGluZyBQYXJhbWV0ZXIgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGZvciBgcm91dGU0X3NldF9wYXJtc2AgYW5kIGByb3V0ZTRfY2hhbmdlYC4gVGhhdCBwcmV2aW91cyBjb250ZXh0IGFib3V0IHRoZSBvdmVyYWxsIGZsb3cgYW5kIHRoZSBpbml0aWFsIGZ1bmN0aW9uIGNhbGwgaXMgc3RpbGwgZnJlc2ggaW4gbXkgbWluZC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSB0d28gZnVuY3Rpb25zIGJlY2F1c2UgdGhleSYjMzk7cmUgY3JpdGljYWwgZm9yIGFjdHVhbGx5IGNvbmZpZ3VyaW5nIGFuZCBwb3RlbnRpYWxseSBtb2RpZnlpbmcgdGhlIHJvdXRpbmcgc2V0dXAsIHJpZ2h0PyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgcGFyYW1ldGVycyBhcmUgYmVpbmcgc2V0IGFuZCBob3cgY2hhbmdlcyBhcmUgYmVpbmcgaW1wbGVtZW50ZWQuIFNwZWNpZmljYWxseSwgd2hhdCYjMzk7cyB0aGUgbG9naWMgdGhlcmU/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGRpcmVjdGx5IG1vZGlmeWluZyBkYXRhIHN0cnVjdHVyZXMsIG9yIGFyZSB0aGVyZSBtb3JlIGNvbXBsZXggaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbW9kdWxlcyBvciBwcm9jZXNzZXMgaW52b2x2ZWQ/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgdGhlc2Ugd2lsbCBiZSB0aGUgY29yZSBmdW5jdGlvbnMgZm9yIGVpdGhlciBpbml0aWFsIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHJvdXRpbmcgdGFibGUgb3IgYWRqdXN0bWVudCBvZiB0aGVzZSBwYXJhbWV0ZXJzIGR1cmluZyBydW50aW1lLiBGcm9tIGV4cGVyaWVuY2UgSSBrbm93IHRoYXQgdGhpcyBpcyBhIGNyaXRpY2FsIHNlY3Rpb24gdG8gcHJldmVudCBpbmNvbnNpc3RlbnQgYmVoYXZpb3IuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGF0b21pY2l0eSBpc3N1ZXMsIGFuZCBlcnJvciBoYW5kbGluZyDigJMgdGhvc2UgYXJlIGFsd2F5cyBrZXkgYXJlYXMgb2YgY29uY2VybiBpbiByb3V0aW5nIG1hbmFnZW1lbnQuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCBtYXAgb3V0IHRoZSBjb250cm9sIGZsb3csIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFuZCBzZWUgaG93IHdlbGwgdGhpcyBpcyBkZXNpZ25lZCBmb3Igc2NhbGFiaWxpdHkgYW5kIHJvYnVzdG5lc3MuIExldCYjMzk7cyBzZWUgaG93IHdlbGwgdGhlIGNvZGUgaGFuZGxlcyBlZGdlIGNhc2VzLCB0b28gLSBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZWFscyB3aXRoIGFsbCB0aGUgY29ybmVyIGNhc2VzIEkgY2FuIHRoaW5rIG9mLCBpbmNsdWRpbmcgd2hlbiB0aGUgcmVxdWVzdGVkIGNoYW5nZSBpcyBub3QgYWxsb3dlZC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfcm91dGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDEwOlx0XHRpZiAodGJbVENBX1JPVVRFNF9UT10pIHtcbiA0MTE6XHRcdFx0aWYgKCFmb2xkIFx1MDAyNlx1MDAyNiBoYW5kbGUgXHUwMDI2IDB4ODAwMCkge1xuIDQxMjpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBoYW5kbGVcJiMzNDspO1xuIDQxMzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQxNDpcdFx0XHR9XG4gNDE1Olx0XHRcdHRvID0gbmxhX2dldF91MzIodGJbVENBX1JPVVRFNF9UT10pO1xuIDQxNjpcdFx0XHRuaGFuZGxlID0gdG87XG4gNDE3Olx0XHR9XG4gNDE4Olx0XG4gNDE5Olx0XHRpZiAodGJbVENBX1JPVVRFNF9GUk9NXSBcdTAwMjZcdTAwMjYgdGJbVENBX1JPVVRFNF9JSUZdKSB7XG4gNDIwOlx0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoZXh0YWNrLCB0YltUQ0FfUk9VVEU0X0ZST01dLFxuIDQyMTpcdFx0XHRcdFx0ICAgIFwmIzM0OyYjMzk7ZnJvbSYjMzk7IGFuZCAmIzM5O2Zyb21pZiYjMzk7IGFyZSBtdXR1YWxseSBleGNsdXNpdmVcJiMzNDspO1xuIDQyMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0MjM6XHRcdH1cbiA0MjQ6XHRcbiA0MjU6XHRcdGlmICh0YltUQ0FfUk9VVEU0X0ZST01dKSB7XG4gNDI2Olx0XHRcdGlkID0gbmxhX2dldF91MzIodGJbVENBX1JPVVRFNF9GUk9NXSk7XG4gNDI3Olx0XHRcdG5oYW5kbGUgfD0gaWQgXHUwMDNjXHUwMDNjIDE2O1xuIDQyODpcdFx0fSBlbHNlIGlmICh0YltUQ0FfUk9VVEU0X0lJRl0pIHtcbiA0Mjk6XHRcdFx0aWQgPSBubGFfZ2V0X3UzMih0YltUQ0FfUk9VVEU0X0lJRl0pO1xuIDQzMDpcdFx0XHRuaGFuZGxlIHw9IChpZCB8IDB4ODAwMCkgXHUwMDNjXHUwMDNjIDE2O1xuIDQzMTpcdFx0fSBlbHNlXG4gNDMyOlx0XHRcdG5oYW5kbGUgfD0gMHhGRkZGIFx1MDAzY1x1MDAzYyAxNjtcbiA0MzM6XHRcbiA0MzQ6XHRcdGlmIChoYW5kbGUgXHUwMDI2XHUwMDI2ICghZm9sZCB8fCBuaGFuZGxlID09IChoYW5kbGUgXHUwMDI2IH4weDdGMDApKSlcbiA0MzU6XHRcdFx0bmhhbmRsZSB8PSBoYW5kbGUgXHUwMDI2IDB4N0YwMDtcbiA0MzY6XHRcbiA0Mzc6XHRcdGlmIChoYW5kbGUgXHUwMDI2XHUwMDI2ICFmb2xkIFx1MDAyNlx1MDAyNiBuaGFuZGxlICE9IGhhbmRsZSkge1xuIDQzODpcdFx0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuIDQzOTpcdFx0XHRcdFx0ICAgXCYjMzQ7SGFuZGxlIG1pc21hdGNoIGNvbnN0cnVjdGVkOiAleCAoZXhwZWN0ZWQ6ICV4KVwmIzM0OyxcbiA0NDA6XHRcdFx0XHRcdCAgIGhhbmRsZSwgbmhhbmRsZSk7XG4gNDQxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ0MjpcdFx0fVxuIDQ0MzpcdFxuIDQ0NDpcdFx0aWYgKCFuaGFuZGxlKSB7XG4gNDQ1Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7UmVwbGFjaW5nIHdpdGggaGFuZGxlIG9mIDAgaXMgaW52YWxpZFwmIzM0Oyk7XG4gNDQ2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ0NzpcdFx0fVxuIDQ0ODpcdFxuIDQ0OTpcdFx0aDEgPSB0b19oYXNoKG5oYW5kbGUpO1xuIDQ1MDpcdFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UoaGVhZC1cdTAwM2V0YWJsZVtoMV0pO1xuIDQ1MTpcdFx0aWYgKCFiKSB7XG4gNDUyOlx0XHRcdGIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2J1Y2tldCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiA0NTM6XHRcdFx0aWYgKGIgPT0gTlVMTClcbiA0NTQ6XHRcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gNDU1Olx0XG4gNDU2Olx0XHRcdHJlZmNvdW50X3NldChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmLCAxKTtcbiA0NTc6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGhlYWQtXHUwMDNldGFibGVbaDFdLCBiKTtcbiA0NTg6XHRcdH0gZWxzZSB7XG4gNDU5Olx0XHRcdHVuc2lnbmVkIGludCBoMiA9IGZyb21faGFzaChuaGFuZGxlIFx1MDAzZVx1MDAzZSAxNik7XG4gNDYwOlx0XG4gNDYxOlx0XHRcdGZvciAoZnAgPSBydG5sX2RlcmVmZXJlbmNlKGItXHUwMDNlaHRbaDJdKTtcbiA0NjI6XHRcdFx0ICAgICBmcDtcbiA0NjM6XHRcdFx0ICAgICBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoZnAtXHUwMDNlbmV4dCkpXG4gNDY0Olx0XHRcdFx0aWYgKGZwICE9IGZvbGQgXHUwMDI2XHUwMDI2IGZwLVx1MDAzZWhhbmRsZSA9PSBuaGFuZGxlKSB7XG4gNDY1Olx0XHRcdFx0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuIDQ2NjpcdFx0XHRcdFx0XHRcdCAgIFwmIzM0O0hhbmRsZSAleCBpcyBhbHJlYWR5IGluIHVzZVwmIzM0OyxcbiA0Njc6XHRcdFx0XHRcdFx0XHQgICBuaGFuZGxlKTtcbiA0Njg6XHRcdFx0XHRcdHJldHVybiAtRUVYSVNUO1xuIDQ2OTpcdFx0XHRcdH1cbiA0NzA6XHRcbiA0NzE6XHRcdFx0cmVmY291bnRfaW5jKFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYpO1xuIDQ3MjpcdFx0fVxuIDQ3MzpcdFxuIDQ3NDpcdFx0aWYgKHRiW1RDQV9ST1VURTRfVE9dKVxuIDQ3NTpcdFx0XHRmLVx1MDAzZWlkID0gdG87XG4gNDc2Olx0XG4gNDc3Olx0XHRpZiAodGJbVENBX1JPVVRFNF9GUk9NXSlcbiA0Nzg6XHRcdFx0Zi1cdTAwM2VpZCA9IHRvIHwgaWRcdTAwM2NcdTAwM2MxNjtcbiA0Nzk6XHRcdGVsc2UgaWYgKHRiW1RDQV9ST1VURTRfSUlGXSlcbiA0ODA6XHRcdFx0Zi1cdTAwM2VpaWYgPSBpZDtcbiA0ODE6XHRcbiA0ODI6XHRcdGYtXHUwMDNlaGFuZGxlID0gbmhhbmRsZTtcbiA0ODM6XHRcdGYtXHUwMDNlYmt0ID0gYjtcbiA0ODQ6XHRcdGYtXHUwMDNldHAgPSB0cDtcbiA0ODU6XHRcbiA0ODY6XHRcdGlmICh0YltUQ0FfUk9VVEU0X0NMQVNTSURdKSB7XG4gNDg3Olx0XHRcdGYtXHUwMDNlcmVzLmNsYXNzaWQgPSBubGFfZ2V0X3UzMih0YltUQ0FfUk9VVEU0X0NMQVNTSURdKTtcbiA0ODg6XHRcdFx0dGNmX2JpbmRfZmlsdGVyKHRwLCBcdTAwMjZmLVx1MDAzZXJlcywgYmFzZSk7XG4gNDg5Olx0XHR9XG4gNDkwOlx0XG4gNDkxOlx0XHRyZXR1cm4gMDtcbiA0OTI6XHR9XG4gNDkzOlx0XG4gNDk0Olx0c3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiA0OTU6XHRcdFx0XHQgc3RydWN0IHRjZl9wcm90byAqdHAsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdTMyIGhhbmRsZSxcbiA0OTY6XHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKnRjYSwgdm9pZCAqKmFyZywgdTMyIGZsYWdzLFxuIDQ5NzpcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNDk4Olx0e1xuIDQ5OTpcdFx0c3RydWN0IHJvdXRlNF9oZWFkICpoZWFkID0gcnRubF9kZXJlZmVyZW5jZSh0cC1cdTAwM2Vyb290KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MjUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgcm91dGU0X2NoYW5nZWAgTGluZXMgNTAwLTU5MCoqCgpPa2F5LCBJJiMzOTttIGRpdmluZyBpbnRvIGByb3V0ZTRfY2hhbmdlYCBub3csIHNwZWNpZmljYWxseSBsaW5lcyA1MDAgdG8gNTkwLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjb25zaWRlciB3aGF0IHRoaXMgc2VjdGlvbiBvZiBjb2RlICpsaWtlbHkqIGRlYWxzIHdpdGguIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiBhbmQgdGhlICYjMzQ7Y2hhbmdlJiMzNDsgaW4gdGhlIGZpbGVuYW1lLCBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGZvcm0gb2Ygc3RhdGUgdHJhbnNpdGlvbiwgcGVyaGFwcyByZWxhdGVkIHRvIHJvdXRpbmcgdXBkYXRlcywgZmFpbG92ZXIgbWVjaGFuaXNtcywgb3IgbWF5YmUgZXZlbiBjb25maWd1cmF0aW9uIGNoYW5nZXMuIFRoaXMgcmFuZ2UgZmVlbHMgc2lnbmlmaWNhbnQsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGhhbmRsaW5nIGEgY29yZSBsb2dpYyBibG9jayByYXRoZXIgdGhhbiBhIHRyaXZpYWwgY29uZGl0aW9uYWwgb3Igc2ltcGxlIGRhdGEgbWFuaXB1bGF0aW9uLgoKSSYjMzk7bSBtZW50YWxseSBwcmVwYXJpbmcgdG8gbG9vayBmb3Igc3BlY2lmaWMga2V5d29yZHMgYW5kIHBhdHRlcm5zLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHJlZmVyZW5jZXMgdG8gcm91dGUgdGFibGVzLCBuZXR3b3JrIGludGVyZmFjZXMsIHBlcmhhcHMgc29tZSBzb3J0IG9mICYjMzQ7aWYvZWxzZSYjMzQ7IG9yICYjMzQ7c3dpdGNoJiMzNDsgc3RhdGVtZW50IGdvdmVybmluZyB0aGUgcm91dGluZyBiZWhhdmlvciwgYW5kIGhvcGVmdWxseSBzb21lIGxvZ2dpbmcgb3IgZXJyb3IgaGFuZGxpbmcuIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIG1lY2hhbmlzbXMsIGVzcGVjaWFsbHkgaWYgdGhpcyBjb2RlIGlzIHRvdWNoaW5nIHNoYXJlZCByZXNvdXJjZXMgb3IgaXMgbXVsdGl0aHJlYWRlZC4KCkZ1cnRoZXJtb3JlLCBJIGFtIGxvb2tpbmcgZm9yIHdheXMgdG8gc2VlIGhvdyB0aGlzIGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZmlsZS4gQXJlIHRoZXJlIGFueSBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkIGZyb20gdGhpcyByYW5nZSwgb3IgaXMgdGhpcyB0aGUgZnVuY3Rpb24gdGhhdCBpcyBtYWtpbmcgdGhlIGNhbGw/IEFyZSB0aGVyZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVwZGF0ZWQgb3IgcmVmZXJlbmNlZCBpbiB0aGlzIHJhbmdlLCBhbmQgd2hlcmUgZWxzZSBhcmUgdGhleSB1c2VkPwoKSSYjMzk7bSBhaW1pbmcgdG8gcXVpY2tseSBncmFzcCB0aGUgKmludGVudCogb2YgdGhpcyBibG9jayBmaXJzdCDigJMgd2hhdCYjMzk7cyB0aGUgZ29hbCBpdCYjMzk7cyB0cnlpbmcgdG8gYWNoaWV2ZT8gVGhlbiwgSSYjMzk7bGwgZHJpbGwgZG93biBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRvIHNlZSBpZiB0aGUgYXBwcm9hY2ggaXMgc291bmQsIGVmZmljaWVudCwgYW5kIHdlbGwtZG9jdW1lbnRlZC4gRmluYWxseSwgSSYjMzk7bGwgYmUgZm9ybWluZyBhbiBpbml0aWFsIGh5cG90aGVzaXMgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtaWdodCBjb25zaWRlci4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfcm91dGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTAwOlx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciBfX3JjdSAqKmZwO1xuIDUwMTpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsICpmMSwgKnBmcCwgKmYgPSBOVUxMO1xuIDUwMjpcdFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gNTAzOlx0XHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfUk9VVEU0X01BWCAmIzQzOyAxXTtcbiA1MDQ6XHRcdHVuc2lnbmVkIGludCBoO1xuIDUwNTpcdFx0aW50IGVycjtcbiA1MDY6XHRcbiA1MDc6XHRcdGlmICghaGFuZGxlKSB7XG4gNTA4Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q3JlYXRpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkXCYjMzQ7KTtcbiA1MDk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTEwOlx0XHR9XG4gNTExOlx0XG4gNTEyOlx0XHRpZiAoTkxfUkVRX0FUVFJfQ0hFQ0soZXh0YWNrLCBOVUxMLCB0Y2EsIFRDQV9PUFRJT05TKSkge1xuIDUxMzpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtNaXNzaW5nIG9wdGlvbnNcJiMzNDspO1xuIDUxNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MTU6XHRcdH1cbiA1MTY6XHRcbiA1MTc6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgVENBX1JPVVRFNF9NQVgsIHRjYVtUQ0FfT1BUSU9OU10sXG4gNTE4Olx0XHRcdFx0XHRcdCAgcm91dGU0X3BvbGljeSwgTlVMTCk7XG4gNTE5Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDUyMDpcdFx0XHRyZXR1cm4gZXJyO1xuIDUyMTpcdFxuIDUyMjpcdFx0Zm9sZCA9ICphcmc7XG4gNTIzOlx0XHRpZiAoZm9sZCBcdTAwMjZcdTAwMjYgZm9sZC1cdTAwM2VoYW5kbGUgIT0gaGFuZGxlKVxuIDUyNDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDUyNTpcdFxuIDUyNjpcdFx0ZXJyID0gLUVOT0JVRlM7XG4gNTI3Olx0XHRmID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gNTI4Olx0XHRpZiAoIWYpXG4gNTI5Olx0XHRcdGdvdG8gZXJyb3V0O1xuIDUzMDpcdFxuIDUzMTpcdFx0ZXJyID0gdGNmX2V4dHNfaW5pdChcdTAwMjZmLVx1MDAzZWV4dHMsIG5ldCwgVENBX1JPVVRFNF9BQ1QsIFRDQV9ST1VURTRfUE9MSUNFKTtcbiA1MzI6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNTMzOlx0XHRcdGdvdG8gZXJyb3V0O1xuIDUzNDpcdFxuIDUzNTpcdFx0aWYgKGZvbGQpIHtcbiA1MzY6XHRcdFx0Zi1cdTAwM2VpZCA9IGZvbGQtXHUwMDNlaWQ7XG4gNTM3Olx0XHRcdGYtXHUwMDNlaWlmID0gZm9sZC1cdTAwM2VpaWY7XG4gNTM4Olx0XHRcdGYtXHUwMDNlaGFuZGxlID0gZm9sZC1cdTAwM2VoYW5kbGU7XG4gNTM5Olx0XG4gNTQwOlx0XHRcdGYtXHUwMDNldHAgPSBmb2xkLVx1MDAzZXRwO1xuIDU0MTpcdFx0XHRmLVx1MDAzZWJrdCA9IGZvbGQtXHUwMDNlYmt0O1xuIDU0MjpcdFx0fVxuIDU0MzpcdFxuIDU0NDpcdFx0ZXJyID0gcm91dGU0X3NldF9wYXJtcyhuZXQsIHRwLCBiYXNlLCBmLCBoYW5kbGUsIGhlYWQsIHRiLFxuIDU0NTpcdFx0XHRcdCAgICAgICB0Y2FbVENBX1JBVEVdLCBmb2xkLCBmbGFncywgZXh0YWNrKTtcbiA1NDY6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNTQ3Olx0XHRcdGdvdG8gZXJyb3V0O1xuIDU0ODpcdFxuIDU0OTpcdFx0aCA9IGZyb21faGFzaChmLVx1MDAzZWhhbmRsZSBcdTAwM2VcdTAwM2UgMTYpO1xuIDU1MDpcdFx0ZnAgPSBcdTAwMjZmLVx1MDAzZWJrdC1cdTAwM2VodFtoXTtcbiA1NTE6XHRcdGZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApO1xuIDU1MjpcdFx0ICAgICAoZjEgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCkpICE9IE5VTEw7XG4gNTUzOlx0XHQgICAgIGZwID0gXHUwMDI2ZjEtXHUwMDNlbmV4dClcbiA1NTQ6XHRcdFx0aWYgKGYtXHUwMDNlaGFuZGxlIFx1MDAzYyBmMS1cdTAwM2VoYW5kbGUpXG4gNTU1Olx0XHRcdFx0YnJlYWs7XG4gNTU2Olx0XG4gNTU3Olx0XHR0Y2ZfYmxvY2tfbmV0aWZfa2VlcF9kc3QodHAtXHUwMDNlY2hhaW4tXHUwMDNlYmxvY2spO1xuIDU1ODpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGYtXHUwMDNlbmV4dCwgZjEpO1xuIDU1OTpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZik7XG4gNTYwOlx0XG4gNTYxOlx0XHRpZiAoZm9sZCkge1xuIDU2MjpcdFx0XHRiID0gZm9sZC1cdTAwM2Via3Q7XG4gNTYzOlx0XHRcdGggPSBmcm9tX2hhc2goZm9sZC1cdTAwM2VoYW5kbGUgXHUwMDNlXHUwMDNlIDE2KTtcbiA1NjQ6XHRcdFx0ZnAgPSBcdTAwMjZiLVx1MDAzZWh0W2hdO1xuIDU2NTpcdFx0XHRmb3IgKHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgcGZwO1xuIDU2NjpcdFx0XHQgICAgIGZwID0gXHUwMDI2cGZwLVx1MDAzZW5leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkge1xuIDU2NzpcdFx0XHRcdGlmIChwZnAgPT0gZm9sZCkge1xuIDU2ODpcdFx0XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC1cdTAwM2VuZXh0KTtcbiA1Njk6XHRcdFx0XHRcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZikpIHtcbiA1NzA6XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IHRoID0gdG9faGFzaChmb2xkLVx1MDAzZWhhbmRsZSk7XG4gNTcxOlx0XG4gNTcyOlx0XHRcdFx0XHRcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cdTAwM2V0YWJsZVt0aF0sIE5VTEwpO1xuIDU3MzpcdFx0XHRcdFx0XHRrZnJlZV9yY3UoYiwgcmN1KTtcbiA1NzQ6XHRcdFx0XHRcdH1cbiA1NzU6XHRcdFx0XHRcdGJyZWFrO1xuIDU3NjpcdFx0XHRcdH1cbiA1Nzc6XHRcdFx0fVxuIDU3ODpcdFx0fVxuIDU3OTpcdFxuIDU4MDpcdFx0cm91dGU0X3Jlc2V0X2Zhc3RtYXAoaGVhZCwgZm9sZCk7XG4gNTgxOlx0XHQqYXJnID0gZjtcbiA1ODI6XHRcdGlmIChmb2xkKSB7XG4gNTgzOlx0XHRcdHRjZl91bmJpbmRfZmlsdGVyKHRwLCBcdTAwMjZmb2xkLVx1MDAzZXJlcyk7XG4gNTg0Olx0XHRcdHRjZl9leHRzX2dldF9uZXQoXHUwMDI2Zm9sZC1cdTAwM2VleHRzKTtcbiA1ODU6XHRcdFx0dGNmX3F1ZXVlX3dvcmsoXHUwMDI2Zm9sZC1cdTAwM2Vyd29yaywgcm91dGU0X2RlbGV0ZV9maWx0ZXJfd29yayk7XG4gNTg2Olx0XHR9XG4gNTg3Olx0XHRyZXR1cm4gMDtcbiA1ODg6XHRcbiA1ODk6XHRlcnJvdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDQ2CgkJCQkJCQlvdXRwdXQ6IDE0NgoJCQkJCQkJdGhvdWdodHM6IDYxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldDogY2xzX3JvdXRlIFJlZmFjdG9yIGluIG5ldC9zY2hlZCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBleHBlcnQgaW5zdGluY3RzIGFyZSB0ZWxsaW5nIG1lIHRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSByZWZhY3RvciBvZiBgY2xzX3JvdXRlYCwgc3BlY2lmaWNhbGx5IGluIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgLCB3aGljaCBpcyBhIFRyYWZmaWMgQ29udHJvbCBjbGFzc2lmaWVyIChST1VURTQpIGluIExpbnV4IG5ldHdvcmtpbmcuIFRoaXMgY29kZSBpcyBjcml0aWNhbCwgYXMgaXQmIzM5O3MgdGhlIGNvcmUgb2YgaG93IHRyYWZmaWMgaXMgcm91dGVkIGFuZCBmaWx0ZXJlZCwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIOKAkyBydG5ldGxpbmsgYW5kIGB0Y2AgY29tbWFuZHMgbGlrZSBgUlRNX05FV1RGSUxURVJgLCBgUlRNX0RFTFRGSUxURVJgLCBldGMuIFN5emthbGxlciBhbHJlYWR5IGV4ZXJjaXNlcyB0aGlzIGFyZWEsIHdoaWNoIGlzIGEgZ29vZCBzaWduLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyByZWZhY3RvcmluZyBidWNrZXQgbGlmZXRpbWUgbWFuYWdlbWVudC4gSXQmIzM5O3MgbW92aW5nIGZyb20gaXRlcmF0aW5nIHRocm91Z2ggYnVja2V0IGVudHJpZXMgdG8gdXNpbmcgYSBgcmVmY291bnRfdCBmaWx0ZXJzX3JlZmAsIHdoaWNoIGltcGxpZXMgY2hhbmdlcyB0byBmaWx0ZXIgY2hhbmdlLCByZXBsYWNlbWVudCwgYW5kIGhhbmRsZSB2YWxpZGF0aW9uIGxvZ2ljLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBhcmVhIHdoZXJlIHN1YnRsZSBjb25jdXJyZW5jeSBidWdzIG9yIGluY29ycmVjdCBoYW5kbGluZyBvZiBlZGdlIGNhc2VzIGNhbiBlYXNpbHkgc2xpcCBpbi4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuICoqV29ydGhGdXp6aW5nID0gdHJ1ZS4qKgoKQ29uZmlnLXdpc2UsIHdlIG5lZWQgYE5FVF9DTFNfUk9VVEU0YCBlbmFibGVkLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1haW4gcmVxdWlyZW1lbnQsIHdpdGggYSBkZXBlbmRlbmN5IG9uIGBJTkVUYC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRoYXQmIzM5O3Mgc2V0IGluIHRoZSBmdXp6ZXIgY29uZmlndXJhdGlvbi4gU28sICoqRW5hYmxlQ29uZmlncyoqOiBgWyYjMzQ7TkVUX0NMU19ST1VURTQmIzM0O11gLgoKTG9va2luZyBhdCB0aGUgY29kZSBtb2RpZmljYXRpb25zLCB0aGUgcGF0Y2ggaGFzIHRvdWNoZWQgdGhyZWUga2V5IGZ1bmN0aW9uczogYHJvdXRlNF9kZWxldGVgLCBgcm91dGU0X3NldF9wYXJtc2AsIGFuZCBgcm91dGU0X2NoYW5nZWAuIFdoaWxlIHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gYGNsc19yb3V0ZS5jYCBhcmUgYWxzbyByZWxldmFudCwgdGhlc2UgYXJlIHRoZSBvbmVzICpkaXJlY3RseSogbW9kaWZpZWQsIHNvIEkmIzM5O2xsIGZvY3VzIG9uIHRoZW0uICoqRm9jdXNTeW1ib2xzKio6IGBbJiMzNDtyb3V0ZTRfY2hhbmdlJiMzNDssICYjMzQ7cm91dGU0X2RlbGV0ZSYjMzQ7LCAmIzM0O3JvdXRlNF9zZXRfcGFybXMmIzM0O11gLgoKVG8gYmUgY3J5c3RhbCBjbGVhcjogdGhlIHBhdGNoIG1vZGlmaWVzIGNvZGUgKGFuZCBhIGNyaXRpY2FsIGRhdGFzdHJ1Y3R1cmUpIGluIG5ldC9zY2hlZCBkdXJpbmcgcm91dGUgZmlsdGVyIGNyZWF0aW9uLCByZXBsYWNlbWVudCwgYW5kIGRlbGV0aW9uIChgcm91dGU0X2NoYW5nZWAsIGByb3V0ZTRfc2V0X3Bhcm1zYCwgYHJvdXRlNF9kZWxldGVgKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpbiB0aGUgbmV0d29yayB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsvdGMgZmlsdGVyIGNvbmZpZ3VyYXRpb24uIFRoaXMgcmVmYWN0b3JpbmcsIHdpdGggaXRzIGZvY3VzIG9uIGxpZmV0aW1lIG1hbmFnZW1lbnQgYW5kIHJlZmVyZW5jZSBjb3VudHMsIG1ha2VzIHRoaXMgYSBwcmltZSB0YXJnZXQuCgpBbHJpZ2h0LCBldmVyeXRoaW5nIGxpbmVzIHVwLiBJdCYjMzk7cyB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gTGV0JiMzOTtzIGdldCB0aGlzIGZ1enplciBwb2ludGVkIGluIHRoZSByaWdodCBkaXJlY3Rpb24hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfQ0xTX1JPVVRFNCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JvdXRlNF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7cm91dGU0X2RlbGV0ZSYjMzQ7LAogICAgJiMzNDtyb3V0ZTRfc2V0X3Bhcm1zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbHNfcm91dGUgbmV0d29yayB0cmFmZmljIGNvbnRyb2wgY2xhc3NpZmllciBpbiBuZXQvc2NoZWQvY2xzX3JvdXRlLmMsIGludHJvZHVjaW5nIGEgcmVmY291bnQgKGZpbHRlcnNfcmVmKSB0byBtYW5hZ2Ugcm91dGU0X2J1Y2tldCBsaWZldGltZXMgZHVyaW5nIHJvdXRlIGZpbHRlciBtb2RpZmljYXRpb24sIGNyZWF0aW9uLCBhbmQgZGVsZXRpb24gKHJvdXRlNF9jaGFuZ2UsIHJvdXRlNF9kZWxldGUsIGFuZCByb3V0ZTRfc2V0X3Bhcm1zKS4gVGhpcyBpcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsvdGMgZmlsdGVyIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfUk9VVEU0JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cm91dGU0X2NoYW5nZSYjMzQ7LAogICAgJiMzNDtyb3V0ZTRfZGVsZXRlJiMzNDssCiAgICAmIzM0O3JvdXRlNF9zZXRfcGFybXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNsc19yb3V0ZSBuZXR3b3JrIHRyYWZmaWMgY29udHJvbCBjbGFzc2lmaWVyIGluIG5ldC9zY2hlZC9jbHNfcm91dGUuYywgaW50cm9kdWNpbmcgYSByZWZjb3VudCAoZmlsdGVyc19yZWYpIHRvIG1hbmFnZSByb3V0ZTRfYnVja2V0IGxpZmV0aW1lcyBkdXJpbmcgcm91dGUgZmlsdGVyIG1vZGlmaWNhdGlvbiwgY3JlYXRpb24sIGFuZCBkZWxldGlvbiAocm91dGU0X2NoYW5nZSwgcm91dGU0X2RlbGV0ZSwgYW5kIHJvdXRlNF9zZXRfcGFybXMpLiBUaGlzIGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluay90YyBmaWx0ZXIgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBsaWZldGltZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nIGlzc3VlcyBpbiBjbHNfcm91dGUgKHRyYWZmaWMgY29udHJvbCByb3V0ZSBjbGFzc2lmaWVyKSB3aGVuIHVwZGF0aW5nIG9yIGRlbGV0aW5nIHJvdXRlIGZpbHRlcnMgYWNyb3NzIGJ1Y2tldHMsIGJ5IGludHJvZHVjaW5nIGEgYGZpbHRlcnNfcmVmYCByZWZjb3VudCAoYHJlZmNvdW50X3RgKSB0byBgc3RydWN0IHJvdXRlNF9idWNrZXRgLlxuXG5BbmFseXNpcyBvZiBtZW1vcnkgc2FuaXRpemF0aW9uIHJlcXVpcmVtZW50czpcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBLTVNBTjogQWxsIGFsbG9jYXRpb25zIChgc3RydWN0IHJvdXRlNF9idWNrZXRgIGFuZCBgc3RydWN0IHJvdXRlNF9maWx0ZXJgKSBjb250aW51ZSB0byB1c2UgYGt6YWxsb2Nfb2JqYCBlbnN1cmluZyBhbGwgbWVtb3J5IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbi4gVGhlIG5ldyBgZmlsdGVyc19yZWZgIGZpZWxkIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgcmVmY291bnRfc2V0YCBhbmQgbWFuYWdlZCB2aWEgYHJlZmNvdW50X2luY2AgLyBgcmVmY291bnRfZGVjX2FuZF90ZXN0YC4gTm8gc3RydWN0IGZpZWxkcywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UgdmlhIE5ldGxpbmsgKGFsbCBkdW1wZWQgYXR0cmlidXRlcyBhcmUgdmFsaWRhdGVkIGFuZCBwb3B1bGF0ZWQgZnJvbSBpbml0aWFsaXplZCBzY2FsYXIgdmFsdWVzKS4gVGhlcmUgaXMgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuLSBVQUYgLyBLQVNBTjogVGhlIGNoYW5nZXMgbW9kaWZ5IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYnVja2V0IGRlYWxsb2NhdGlvbiBsaWZldGltZXMgKGBrZnJlZV9yY3VgKSwgd2hpY2ggZmFsbCB1bmRlciBVc2UtQWZ0ZXItRnJlZSBhbmQgcmVmY291bnQgc2FmZXR5LiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBtb25pdG9yZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCB0aGUga2VybmVsJiMzOTtzIGJ1aWx0LWluIHJlZmNvdW50IGNoZWNraW5nIChgcmVmY291bnRfdGApLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA0YjQ3MGE4YWIyOGY2ZmUzN2Q1YTRlNTdhOTA1NmJjMDhjOGU4ZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDAwOjU5OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jCmluZGV4IDBkMTMyNGM5MDU4MzcuLjBmMjExZjAzMGZkOWEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfcm91dGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmMKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmVmY291bnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZHN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3JvdXRlLmgmZ3Q7CkBAIC00MSw2ICYjNDM7NDIsNyBAQCBzdHJ1Y3Qgcm91dGU0X2hlYWQgewogc3RydWN0IHJvdXRlNF9idWNrZXQgewogCS8qIDE2IEZST00gYnVja2V0cyAmIzQzOyAxNiBJSUYgYnVja2V0cyAmIzQzOyAxIHdpbGRjYXJkIGJ1Y2tldCAqLwogCXN0cnVjdCByb3V0ZTRfZmlsdGVyIF9fcmN1CSpodFsxNiAmIzQzOyAxNiAmIzQzOyAxXTsKJiM0MzsJcmVmY291bnRfdAkJCWZpbHRlcnNfcmVmOwogCXN0cnVjdCByY3VfaGVhZAkJCXJjdTsKIH07CiAKQEAgLTMzNiw3ICYjNDM7MzM4LDcgQEAgc3RhdGljIGludCByb3V0ZTRfZGVsZXRlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICphcmcsIGJvb2wgKmxhc3QsCiAJc3RydWN0IHJvdXRlNF9maWx0ZXIgKm5mOwogCXN0cnVjdCByb3V0ZTRfYnVja2V0ICpiOwogCXVuc2lnbmVkIGludCBoID0gMDsKLQlpbnQgaSwgaDE7CiYjNDM7CWludCBoMTsKIAogCWlmICghaGVhZCB8fCAhZikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNjIsMjMgJiM0MzszNjQsMTQgQEAgc3RhdGljIGludCByb3V0ZTRfZGVsZXRlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICphcmcsIGJvb2wgKmxhc3QsCiAJCQl0Y2ZfZXh0c19nZXRfbmV0KCZhbXA7Zi0mZ3Q7ZXh0cyk7CiAJCQl0Y2ZfcXVldWVfd29yaygmYW1wO2YtJmd0O3J3b3JrLCByb3V0ZTRfZGVsZXRlX2ZpbHRlcl93b3JrKTsKIAotCQkJLyogU3RyaXAgUlROTCBwcm90ZWN0ZWQgdHJlZSAqLwotCQkJZm9yIChpID0gMDsgaSAmbHQ7PSAzMjsgaSYjNDM7JiM0MzspIHsKLQkJCQlzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqcnQ7Ci0KLQkJCQlydCA9IHJ0bmxfZGVyZWZlcmVuY2UoYi0mZ3Q7aHRbaV0pOwotCQkJCWlmIChydCkKLQkJCQkJZ290byBvdXQ7CiYjNDM7CQkJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKSkgewomIzQzOwkJCQlSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtJmd0O3RhYmxlW3RvX2hhc2goaCldLCBOVUxMKTsKJiM0MzsJCQkJa2ZyZWVfcmN1KGIsIHJjdSk7CiAJCQl9Ci0KLQkJCS8qIE9LLCBzZXNzaW9uIGhhcyBubyBmbG93cyAqLwotCQkJUkNVX0lOSVRfUE9JTlRFUihoZWFkLSZndDt0YWJsZVt0b19oYXNoKGgpXSwgTlVMTCk7Ci0JCQlrZnJlZV9yY3UoYiwgcmN1KTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCi1vdXQ6CiAJKmxhc3QgPSB0cnVlOwogCWZvciAoaDEgPSAwOyBoMSAmbHQ7PSAyNTY7IGgxJiM0MzsmIzQzOykgewogCQlpZiAocmN1X2FjY2Vzc19wb2ludGVyKGhlYWQtJmd0O3RhYmxlW2gxXSkpIHsKQEAgLTQwMCw4ICYjNDM7MzkzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJvdXRlNF9wb2xpY3lbVENBX1JPVVRFNF9NQVggJiM0MzsgMV0gPSB7CiBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGJhc2UsIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmLAogCQkJICAgIHUzMiBoYW5kbGUsIHN0cnVjdCByb3V0ZTRfaGVhZCAqaGVhZCwKLQkJCSAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBubGF0dHIgKmVzdCwgaW50IG5ldywKLQkJCSAgICB1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0MzsJCQkgICAgc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgbmxhdHRyICplc3QsCiYjNDM7CQkJICAgIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmb2xkLCB1MzIgZmxhZ3MsCiYjNDM7CQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAl1MzIgaWQgPSAwLCB0byA9IDAsIG5oYW5kbGUgPSAweDgwMDA7CiAJc3RydWN0IHJvdXRlNF9maWx0ZXIgKmZwOwpAQCAtNDE0LDcgJiM0Mzs0MDgsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwKIAkJcmV0dXJuIGVycjsKIAogCWlmICh0YltUQ0FfUk9VVEU0X1RPXSkgewotCQlpZiAobmV3ICZhbXA7JmFtcDsgaGFuZGxlICZhbXA7IDB4ODAwMCkgewomIzQzOwkJaWYgKCFmb2xkICZhbXA7JmFtcDsgaGFuZGxlICZhbXA7IDB4ODAwMCkgewogCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O0ludmFsaWQgaGFuZGxlJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTQzNywxNCAmIzQzOzQzMSwxNCBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwKIAl9IGVsc2UKIAkJbmhhbmRsZSB8PSAweEZGRkYgJmx0OyZsdDsgMTY7CiAKLQlpZiAoaGFuZGxlICZhbXA7JmFtcDsgbmV3KSB7CiYjNDM7CWlmIChoYW5kbGUgJmFtcDsmYW1wOyAoIWZvbGQgfHwgbmhhbmRsZSA9PSAoaGFuZGxlICZhbXA7IH4weDdGMDApKSkKIAkJbmhhbmRsZSB8PSBoYW5kbGUgJmFtcDsgMHg3RjAwOwotCQlpZiAobmhhbmRsZSAhPSBoYW5kbGUpIHsKLQkJCU5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssCi0JCQkJCSAgICYjMzQ7SGFuZGxlIG1pc21hdGNoIGNvbnN0cnVjdGVkOiAleCAoZXhwZWN0ZWQ6ICV4KSYjMzQ7LAotCQkJCQkgICBoYW5kbGUsIG5oYW5kbGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KJiM0MzsKJiM0MzsJaWYgKGhhbmRsZSAmYW1wOyZhbXA7ICFmb2xkICZhbXA7JmFtcDsgbmhhbmRsZSAhPSBoYW5kbGUpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7SGFuZGxlIG1pc21hdGNoIGNvbnN0cnVjdGVkOiAleCAoZXhwZWN0ZWQ6ICV4KSYjMzQ7LAomIzQzOwkJCQkgICBoYW5kbGUsIG5oYW5kbGUpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKCFuaGFuZGxlKSB7CkBAIC00NTksNiAmIzQzOzQ1Myw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLAogCQlpZiAoYiA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9CVUZTOwogCiYjNDM7CQlyZWZjb3VudF9zZXQoJmFtcDtiLSZndDtmaWx0ZXJzX3JlZiwgMSk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihoZWFkLSZndDt0YWJsZVtoMV0sIGIpOwogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGludCBoMiA9IGZyb21faGFzaChuaGFuZGxlICZndDsmZ3Q7IDE2KTsKQEAgLTQ2Niw4ICYjNDM7NDYxLDE0IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLAogCQlmb3IgKGZwID0gcnRubF9kZXJlZmVyZW5jZShiLSZndDtodFtoMl0pOwogCQkgICAgIGZwOwogCQkgICAgIGZwID0gcnRubF9kZXJlZmVyZW5jZShmcC0mZ3Q7bmV4dCkpCi0JCQlpZiAoZnAtJmd0O2hhbmRsZSA9PSBmLSZndDtoYW5kbGUpCiYjNDM7CQkJaWYgKGZwICE9IGZvbGQgJmFtcDsmYW1wOyBmcC0mZ3Q7aGFuZGxlID09IG5oYW5kbGUpIHsKJiM0MzsJCQkJTkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywKJiM0MzsJCQkJCQkgICAmIzM0O0hhbmRsZSAleCBpcyBhbHJlYWR5IGluIHVzZSYjMzQ7LAomIzQzOwkJCQkJCSAgIG5oYW5kbGUpOwogCQkJCXJldHVybiAtRUVYSVNUOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCXJlZmNvdW50X2luYygmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKTsKIAl9CiAKIAlpZiAodGJbVENBX1JPVVRFNF9UT10pCkBAIC01MDAsOSAmIzQzOzUwMSw4IEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJc3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsICpmMSwgKnBmcCwgKmYgPSBOVUxMOwogCXN0cnVjdCByb3V0ZTRfYnVja2V0ICpiOwogCXN0cnVjdCBubGF0dHIgKnRiW1RDQV9ST1VURTRfTUFYICYjNDM7IDFdOwotCXVuc2lnbmVkIGludCBoLCB0aDsKJiM0MzsJdW5zaWduZWQgaW50IGg7CiAJaW50IGVycjsKLQlib29sIG5ldyA9IHRydWU7CiAKIAlpZiAoIWhhbmRsZSkgewogCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7Q3JlYXRpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkJiMzNDspOwpAQCAtNTM5LDExICYjNDM7NTM5LDEwIEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAKIAkJZi0mZ3Q7dHAgPSBmb2xkLSZndDt0cDsKIAkJZi0mZ3Q7Ymt0ID0gZm9sZC0mZ3Q7Ymt0OwotCQluZXcgPSBmYWxzZTsKIAl9CiAKIAllcnIgPSByb3V0ZTRfc2V0X3Bhcm1zKG5ldCwgdHAsIGJhc2UsIGYsIGhhbmRsZSwgaGVhZCwgdGIsCi0JCQkgICAgICAgdGNhW1RDQV9SQVRFXSwgbmV3LCBmbGFncywgZXh0YWNrKTsKJiM0MzsJCQkgICAgICAgdGNhW1RDQV9SQVRFXSwgZm9sZCwgZmxhZ3MsIGV4dGFjayk7CiAJaWYgKGVyciAmbHQ7IDApCiAJCWdvdG8gZXJyb3V0OwogCkBAIC01NjAsMTcgJiM0Mzs1NTksMjAgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAlyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmKTsKIAogCWlmIChmb2xkKSB7Ci0JCXRoID0gdG9faGFzaChmb2xkLSZndDtoYW5kbGUpOwomIzQzOwkJYiA9IGZvbGQtJmd0O2JrdDsKIAkJaCA9IGZyb21faGFzaChmb2xkLSZndDtoYW5kbGUgJmd0OyZndDsgMTYpOwotCQliID0gcnRubF9kZXJlZmVyZW5jZShoZWFkLSZndDt0YWJsZVt0aF0pOwotCQlpZiAoYikgewotCQkJZnAgPSAmYW1wO2ItJmd0O2h0W2hdOwotCQkJZm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDsKLQkJCSAgICAgZnAgPSAmYW1wO3BmcC0mZ3Q7bmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7Ci0JCQkJaWYgKHBmcCA9PSBmb2xkKSB7Ci0JCQkJCXJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGZvbGQtJmd0O25leHQpOwotCQkJCQlicmVhazsKJiM0MzsJCWZwID0gJmFtcDtiLSZndDtodFtoXTsKJiM0MzsJCWZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7CiYjNDM7CQkgICAgIGZwID0gJmFtcDtwZnAtJmd0O25leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkgewomIzQzOwkJCWlmIChwZnAgPT0gZm9sZCkgewomIzQzOwkJCQlyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmb2xkLSZndDtuZXh0KTsKJiM0MzsJCQkJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKSkgewomIzQzOwkJCQkJdW5zaWduZWQgaW50IHRoID0gdG9faGFzaChmb2xkLSZndDtoYW5kbGUpOwomIzQzOwomIzQzOwkJCQkJUkNVX0lOSVRfUE9JTlRFUihoZWFkLSZndDt0YWJsZVt0aF0sIE5VTEwpOwomIzQzOwkJCQkJa2ZyZWVfcmN1KGIsIHJjdSk7CiAJCQkJfQomIzQzOwkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvZmlsdGVycy9yb3V0ZS5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb24KaW5kZXggMDVjZWRjYTY3Y2NhZC4uMmQ1ODQzYWViZDcyOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb24KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb24KQEAgLTIwMiw1ICYjNDM7MjAyLDIxNSBAQAogICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKICAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgcGFyZW50IHJvb3QgZHJyJiMzNDsKICAgICAgICAgXQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7YTdkMiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7RGVsZXRlIGEgcm91dGUgZmlsdGVyIHRoYXQgd2FzIG1vdmVkIHRvIGFub3RoZXIgYnVja2V0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O2ZpbHRlciYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7cm91dGUmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjEmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgY2hhbmdlIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAwMDEgcm91dGUgZnJvbSAxIHRvIDIgY2xhc3NpZCAxOjEmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAyMDAgcm91dGUgZnJvbSA1IHRvIDUgY2xhc3NpZCAxOjUmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIGZpbHRlciBkZWwgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDAwMiByb3V0ZSBmcm9tIDEgdG8gMiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIC1qIGZpbHRlciBzaG93IGRldiAkREVWMSBwYXJlbnQgZmZmZjomIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hKU09OJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICB7CiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJvdG9jb2wmIzM0OzogJiMzNDtpcCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3ByZWYmIzM0OzogMjAwLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O2tpbmQmIzM0OzogJiMzNDtyb3V0ZSYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O2NoYWluJiMzNDs6IDAKJiM0MzsgICAgICAgICAgICB9LAomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAyMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtvcHRpb25zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7ZmgmIzM0OzogJiMzNDsweDUwMDA1JiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2Zsb3dpZCYjMzQ7OiAmIzM0OzE6NSYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICB9CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzJiMzNDsKJiM0MzsgICAgICAgIF0KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0O2MwNWEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O1RyeSB0byBjaGFuZ2UgYSByb3V0ZSBmaWx0ZXIgb250byBhbiBhbHJlYWR5IHVzZWQgaGFuZGxlJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O2ZpbHRlciYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7cm91dGUmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjEgYWN0aW9uIG9rJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIHJvdXRlIGZyb20gMiB0byAyIGNsYXNzaWQgMToyIGFjdGlvbiBkcm9wJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBmaWx0ZXIgY2hhbmdlIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAwMDEgcm91dGUgZnJvbSAyIHRvIDIgY2xhc3NpZCAxOjEgYWN0aW9uIG9rJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgLWogZmlsdGVyIHNob3cgZGV2ICRERVYxIHBhcmVudCBmZmZmOiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaEpTT04mIzM0OzogWwomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAxMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMAomIzQzOyAgICAgICAgICAgIH0sCiYjNDM7ICAgICAgICAgICAgewomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3Byb3RvY29sJiMzNDs6ICYjMzQ7aXAmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcmVmJiMzNDs6IDEwMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtraW5kJiMzNDs6ICYjMzQ7cm91dGUmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtjaGFpbiYjMzQ7OiAwLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O29wdGlvbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzNDtmaCYjMzQ7OiAmIzM0OzB4MTAwMDEmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7Zmxvd2lkJiMzNDs6ICYjMzQ7MToxJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2FjdGlvbnMmIzM0OzogWwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDtvcmRlciYjMzQ7OiAxLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O2tpbmQmIzM0OzogJiMzNDtnYWN0JiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7Y29udHJvbF9hY3Rpb24mIzM0OzogewomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDt0eXBlJiMzNDs6ICYjMzQ7cGFzcyYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB9CiYjNDM7ICAgICAgICAgICAgICAgICAgICBdCiYjNDM7ICAgICAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICB9LAomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAxMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtvcHRpb25zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7ZmgmIzM0OzogJiMzNDsweDIwMDAyJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2Zsb3dpZCYjMzQ7OiAmIzM0OzE6MiYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzNDthY3Rpb25zJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7b3JkZXImIzM0OzogMSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDtraW5kJiMzNDs6ICYjMzQ7Z2FjdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O2NvbnRyb2xfYWN0aW9uJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7dHlwZSYjMzQ7OiAmIzM0O2Ryb3AmIzM0OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgfQomIzQzOyAgICAgICAgICAgICAgICAgICAgXQomIzQzOyAgICAgICAgICAgICAgICB9CiYjNDM7ICAgICAgICAgICAgfQomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzcyYjMzQ7CiYjNDM7ICAgICAgICBdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDszZjIxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtSZXBsYWNlIGEgcm91dGUgZmlsdGVyIHRoYXQgc2hhcmVzIGl0cyBrZXkgd2l0aCBhbm90aGVyIGZpbHRlciYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtmaWx0ZXImIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O3JvdXRlJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMjAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToyJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBmaWx0ZXIgcmVwbGFjZSBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMTo5JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgLWogZmlsdGVyIHNob3cgZGV2ICRERVYxIHBhcmVudCBmZmZmOiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaEpTT04mIzM0OzogWwomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAxMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMAomIzQzOyAgICAgICAgICAgIH0sCiYjNDM7ICAgICAgICAgICAgewomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3Byb3RvY29sJiMzNDs6ICYjMzQ7aXAmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcmVmJiMzNDs6IDEwMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtraW5kJiMzNDs6ICYjMzQ7cm91dGUmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtjaGFpbiYjMzQ7OiAwLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O29wdGlvbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzNDtmaCYjMzQ7OiAmIzM0OzB4MTAxMDEmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7Zmxvd2lkJiMzNDs6ICYjMzQ7MTo5JiMzNDsKJiM0MzsgICAgICAgICAgICAgICAgfQomIzQzOyAgICAgICAgICAgIH0sCiYjNDM7ICAgICAgICAgICAgewomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3Byb3RvY29sJiMzNDs6ICYjMzQ7aXAmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcmVmJiMzNDs6IDEwMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtraW5kJiMzNDs6ICYjMzQ7cm91dGUmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtjaGFpbiYjMzQ7OiAwLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O29wdGlvbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzNDtmaCYjMzQ7OiAmIzM0OzB4MTAyMDEmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7Zmxvd2lkJiMzNDs6ICYjMzQ7MToyJiMzNDsKJiM0MzsgICAgICAgICAgICAgICAgfQomIzQzOyAgICAgICAgICAgIH0KJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OwomIzQzOyAgICAgICAgXQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7OWQwZSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7UmVwbGFjZSBib3RoIHJvdXRlIGZpbHRlcnMgc2hhcmluZyBhIGtleSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtmaWx0ZXImIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O3JvdXRlJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMjAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToyJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OSYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDIwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIC1qIGZpbHRlciBzaG93IGRldiAkREVWMSBwYXJlbnQgZmZmZjomIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hKU09OJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICB7CiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJvdG9jb2wmIzM0OzogJiMzNDtpcCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3ByZWYmIzM0OzogMTAwLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O2tpbmQmIzM0OzogJiMzNDtyb3V0ZSYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O2NoYWluJiMzNDs6IDAKJiM0MzsgICAgICAgICAgICB9LAomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAxMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtvcHRpb25zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7ZmgmIzM0OzogJiMzNDsweDEwMTAxJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2Zsb3dpZCYjMzQ7OiAmIzM0OzE6OSYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICB9LAomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAxMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtvcHRpb25zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7ZmgmIzM0OzogJiMzNDsweDEwMjAxJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2Zsb3dpZCYjMzQ7OiAmIzM0OzE6OCYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICB9CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzJiMzNDsKJiM0MzsgICAgICAgIF0KICAgICB9CiBdCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjQyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm92aWRlZCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoIGlzIHRoYXQgaXQmIzM5O3MgZm9jdXNlZCBvbiB0aGUgYGNsc19yb3V0ZWAgY2xhc3NpZmllciwgZ2l2ZW4gdGhlIGZpbGUgbW9kaWZpY2F0aW9uIGluIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgLiBUaGUgZmFjdCB0aGF0IHRoZXJlIGFyZSBhbHNvIG5ldyB0ZXN0IGNhc2VzIGFkZGVkIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb25gIHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGFpbWVkIGF0IGltcHJvdmluZyBvciBleHBhbmRpbmcgdGhlIHRlc3RpbmcgY292ZXJhZ2UgZm9yIHRoaXMgY2xhc3NpZmllci4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBnZXQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSBtb2RpZmljYXRpb25zIGluIGBjbHNfcm91dGUuY2AuIEkgd2lsbCBsaWtlbHkgZWl0aGVyIHJlYWQgdGhlIGVudGlyZSBmaWxlIG9yIHVzZSB0b29scyBsaWtlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBpc29sYXRlIHRoZSBzcGVjaWZpYyBjaGFuZ2VzIGFuZCB0aGVpciBzdXJyb3VuZGluZyBjb250ZXh0LiBGcm9tIHRoZXJlIEkmIzM5O2xsIHNjcnV0aW5pemUgdGhlIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfcm91dGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHR9O1xuICA0MTpcdFxuICA0MjpcdHN0cnVjdCByb3V0ZTRfYnVja2V0IHtcbiAgNDM6XHRcdC8qIDE2IEZST00gYnVja2V0cyAmIzQzOyAxNiBJSUYgYnVja2V0cyAmIzQzOyAxIHdpbGRjYXJkIGJ1Y2tldCAqL1xuICA0NDpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3VcdCpodFsxNiAmIzQzOyAxNiAmIzQzOyAxXTtcbiAgNDU6XHRcdHJlZmNvdW50X3RcdFx0XHRmaWx0ZXJzX3JlZjtcbiAgNDY6XHRcdHN0cnVjdCByY3VfaGVhZFx0XHRcdHJjdTtcbiAgNDc6XHR9O1xuICA0ODpcdFxuICA0OTpcdHN0cnVjdCByb3V0ZTRfZmlsdGVyIHtcbiAgNTA6XHRcdHN0cnVjdCByb3V0ZTRfZmlsdGVyIF9fcmN1XHQqbmV4dDtcbiAgNTE6XHRcdHUzMlx0XHRcdGlkO1xuICA1MjpcdFx0aW50XHRcdFx0aWlmO1xuICA1MzpcdFxuICA1NDpcdFx0c3RydWN0IHRjZl9yZXN1bHRcdHJlcztcbiAgNTU6XHRcdHN0cnVjdCB0Y2ZfZXh0c1x0XHRleHRzO1xuICA1NjpcdFx0dTMyXHRcdFx0aGFuZGxlO1xuICA1NzpcdFx0Ym9vbFx0XHRcdGR5aW5nO1xuICA1ODpcdFx0c3RydWN0IHJvdXRlNF9idWNrZXRcdCpia3Q7XG4gIDU5Olx0XHRzdHJ1Y3QgdGNmX3Byb3RvXHQqdHA7XG4gIDYwOlx0XHRzdHJ1Y3QgcmN1X3dvcmtcdFx0cndvcms7XG4gIDYxOlx0fTtcbiAgNjI6XHRcbiAgNjM6XHQjZGVmaW5lIFJPVVRFNF9GQUlMVVJFICgoc3RydWN0IHJvdXRlNF9maWx0ZXIgKikoLTFMKSlcbiAgNjQ6XHRcbiAgNjU6XHRzdGF0aWMgaW5saW5lIGludCByb3V0ZTRfZmFzdG1hcF9oYXNoKHUzMiBpZCwgaW50IGlpZilcbiAgNjY6XHR7XG4gIDY3Olx0XHRyZXR1cm4gaWQgXHUwMDI2IDB4RjtcbiAgNjg6XHR9XG4gIDY5Olx0XG4gIDcwOlx0c3RhdGljIERFRklORV9TUElOTE9DSyhmYXN0bWFwX2xvY2spO1xuICA3MTpcdHN0YXRpYyB2b2lkXG4gIDcyOlx0cm91dGU0X3Jlc2V0X2Zhc3RtYXAoc3RydWN0IHJvdXRlNF9oZWFkICpoZWFkLCBzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZilcbiAgNzM6XHR7XG4gIDc0Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2ZmFzdG1hcF9sb2NrKTtcbiAgNzU6XHRcdGlmIChmKVxuICA3NjpcdFx0XHRmLVx1MDAzZWR5aW5nID0gdHJ1ZTtcbiAgNzc6XHRcdG1lbXNldChoZWFkLVx1MDAzZWZhc3RtYXAsIDAsIHNpemVvZihoZWFkLVx1MDAzZWZhc3RtYXApKTtcbiAgNzg6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmZhc3RtYXBfbG9jayk7XG4gIDc5Olx0fVxuICA4MDpcdFxuICA4MTpcdHN0YXRpYyB2b2lkXG4gIDgyOlx0cm91dGU0X3NldF9mYXN0bWFwKHN0cnVjdCByb3V0ZTRfaGVhZCAqaGVhZCwgdTMyIGlkLCBpbnQgaWlmLFxuICA4MzpcdFx0XHQgICBzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZilcbiAgODQ6XHR7XG4gIDg1Olx0XHRpbnQgaCA9IHJvdXRlNF9mYXN0bWFwX2hhc2goaWQsIGlpZik7XG4gIDg2Olx0XG4gIDg3Olx0XHQvKiBmYXN0bWFwIHVwZGF0ZXMgbXVzdCBsb29rIGF0b21pYyB0byBhbGluZyBpZCwgaWZmLCBmaWx0ZXIgKi9cbiAgODg6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZmYXN0bWFwX2xvY2spO1xuICA4OTpcdFx0aWYgKGYgPT0gUk9VVEU0X0ZBSUxVUkUgfHwgIWYtXHUwMDNlZHlpbmcpIHtcbiAgOTA6XHRcdFx0aGVhZC1cdTAwM2VmYXN0bWFwW2hdLmlkID0gaWQ7XG4gIDkxOlx0XHRcdGhlYWQtXHUwMDNlZmFzdG1hcFtoXS5paWYgPSBpaWY7XG4gIDkyOlx0XHRcdGhlYWQtXHUwMDNlZmFzdG1hcFtoXS5maWx0ZXIgPSBmO1xuICA5MzpcdFx0fVxuICA5NDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZmFzdG1hcF9sb2NrKTtcbiAgOTU6XHR9XG4gIDk2Olx0XG4gIDk3Olx0c3RhdGljIGlubGluZSBpbnQgcm91dGU0X2hhc2hfdG8odTMyIGlkKVxuICA5ODpcdHtcbiAgOTk6XHRcdHJldHVybiBpZCBcdTAwMjYgMHhGRjtcbiAxMDA6XHR9XG4gMTAxOlx0XG4gMTAyOlx0c3RhdGljIGlubGluZSBpbnQgcm91dGU0X2hhc2hfZnJvbSh1MzIgaWQpXG4gMTAzOlx0e1xuIDEwNDpcdFx0cmV0dXJuIChpZCBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweEY7XG4gMTA1Olx0fVxuIDEwNjpcdFxuIDEwNzpcdHN0YXRpYyBpbmxpbmUgaW50IHJvdXRlNF9oYXNoX2lpZihpbnQgaWlmKVxuIDEwODpcdHtcbiAxMDk6XHRcdHJldHVybiAxNiAmIzQzOyAoKGlpZiBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweEYpO1xuIDExMDpcdH1cbiAxMTE6XHRcbiAxMTI6XHRzdGF0aWMgaW5saW5lIGludCByb3V0ZTRfaGFzaF93aWxkKHZvaWQpXG4gMTEzOlx0e1xuIDExNDpcdFx0cmV0dXJuIDMyO1xuIDExNTpcdH1cbiAxMTY6XHRcbiAxMTc6XHQjZGVmaW5lIFJPVVRFNF9BUFBMWV9SRVNVTFQoKVx0XHRcdFx0XHRcXFxuIDExODpcdHtcdFx0XHRcdFx0XHRcdFx0XFxcbiAxMTk6XHRcdCpyZXMgPSBmLVx1MDAzZXJlcztcdFx0XHRcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDI5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgY2xzX3JvdXRlLmNgIGNvZGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyBhcm91bmQgYHJvdXRlNF9kZWxldGVgLCBgcm91dGU0X3NldF9wYXJtc2AsIGByb3V0ZTRfY2hhbmdlYCwgYW5kIHRoZSBlbnRpcmUgbGFuZHNjYXBlIG9mIGhvdyB0aGVzZSBmaWx0ZXIgYWxsb2NhdGlvbnMgYW5kIGxvb2t1cHMgYXJlIG9yY2hlc3RyYXRlZC4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIHBpY3R1cmUgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyByZWxhdGUgdG8gZWFjaCBvdGhlciwgZXNwZWNpYWxseSB3aGVyZSBmaWx0ZXJzIGNvbWUgaW50byBwbGF5LiBJdCYjMzk7cyBjcnVjaWFsIHRvIGdyYXNwIGhvdyByb3V0ZXMgYXJlIG1hbmlwdWxhdGVkLCBjcmVhdGVkLCBhbmQgZGVsZXRlZCwgYW5kIHRoZSBpbXBhY3QgdGhpcyBoYXMgb24gZmlsdGVyIG1hbmFnZW1lbnQuIFVuZGVyc3RhbmRpbmcgdGhlIGZsb3cgZnJvbSBkZWxldGlvbiB0byBwYXJhbWV0ZXIgc2V0dGluZyBhbmQgY2hhbmdlcyBpcyB2aXRhbCB0byBtYWludGFpbmluZyBvdmVyYWxsIHN5c3RlbSBpbnRlZ3JpdHkuIExldCYjMzk7cyBzZWUgaG93IHRoZXNlIGFjdGlvbnMgYXJlIHJlZmxlY3RlZCBpbiB0aGUgZmlsdGVyIGxvb2t1cHMgYW5kIGFsbG9jYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfcm91dGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzMDpcdH1cbiAzMzE6XHRcbiAzMzI6XHRzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCxcbiAzMzM6XHRcdFx0XHQgYm9vbCBydG5sX2hlbGQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAzMzQ6XHR7XG4gMzM1Olx0XHRzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQgPSBydG5sX2RlcmVmZXJlbmNlKHRwLVx1MDAzZXJvb3QpO1xuIDMzNjpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmYgPSBhcmc7XG4gMzM3Olx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciBfX3JjdSAqKmZwO1xuIDMzODpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKm5mO1xuIDMzOTpcdFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gMzQwOlx0XHR1bnNpZ25lZCBpbnQgaCA9IDA7XG4gMzQxOlx0XHRpbnQgaDE7XG4gMzQyOlx0XG4gMzQzOlx0XHRpZiAoIWhlYWQgfHwgIWYpXG4gMzQ0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM0NTpcdFxuIDM0NjpcdFx0aCA9IGYtXHUwMDNlaGFuZGxlO1xuIDM0NzpcdFx0YiA9IGYtXHUwMDNlYmt0O1xuIDM0ODpcdFxuIDM0OTpcdFx0ZnAgPSBcdTAwMjZiLVx1MDAzZWh0W2Zyb21faGFzaChoIFx1MDAzZVx1MDAzZSAxNildO1xuIDM1MDpcdFx0Zm9yIChuZiA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgbmY7XG4gMzUxOlx0XHQgICAgIGZwID0gXHUwMDI2bmYtXHUwMDNlbmV4dCwgbmYgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCkpIHtcbiAzNTI6XHRcdFx0aWYgKG5mID09IGYpIHtcbiAzNTM6XHRcdFx0XHQvKiB1bmxpbmsgaXQgKi9cbiAzNTQ6XHRcdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKCpmcCwgcnRubF9kZXJlZmVyZW5jZShmLVx1MDAzZW5leHQpKTtcbiAzNTU6XHRcbiAzNTY6XHRcdFx0XHQvKiBDbGVhciBhbnkgZmFzdG1hcCBlbnRyaWVzIHRoYXQgbWF5IHJlZiB0aGlzIGZpbHRlciBhbmRcbiAzNTc6XHRcdFx0XHQgKiBtYXJrIGl0IGR5aW5nIHNvIGluLWZsaWdodCByZWFkZXJzIGNhbiYjMzk7dCByZXB1Ymxpc2ggaXRcbiAzNTg6XHRcdFx0XHQgKiBhZnRlciB0aGUgcmVzZXQuXG4gMzU5Olx0XHRcdFx0ICovXG4gMzYwOlx0XHRcdFx0cm91dGU0X3Jlc2V0X2Zhc3RtYXAoaGVhZCwgZik7XG4gMzYxOlx0XG4gMzYyOlx0XHRcdFx0LyogRGVsZXRlIGl0ICovXG4gMzYzOlx0XHRcdFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFx1MDAyNmYtXHUwMDNlcmVzKTtcbiAzNjQ6XHRcdFx0XHR0Y2ZfZXh0c19nZXRfbmV0KFx1MDAyNmYtXHUwMDNlZXh0cyk7XG4gMzY1Olx0XHRcdFx0dGNmX3F1ZXVlX3dvcmsoXHUwMDI2Zi1cdTAwM2Vyd29yaywgcm91dGU0X2RlbGV0ZV9maWx0ZXJfd29yayk7XG4gMzY2Olx0XG4gMzY3Olx0XHRcdFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKSkge1xuIDM2ODpcdFx0XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcbiAzNjk6XHRcdFx0XHRcdGtmcmVlX3JjdShiLCByY3UpO1xuIDM3MDpcdFx0XHRcdH1cbiAzNzE6XHRcdFx0XHRicmVhaztcbiAzNzI6XHRcdFx0fVxuIDM3MzpcdFx0fVxuIDM3NDpcdFxuIDM3NTpcdFx0Kmxhc3QgPSB0cnVlO1xuIDM3NjpcdFx0Zm9yIChoMSA9IDA7IGgxIFx1MDAzYz0gMjU2OyBoMSYjNDM7JiM0MzspIHtcbiAzNzc6XHRcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihoZWFkLVx1MDAzZXRhYmxlW2gxXSkpIHtcbiAzNzg6XHRcdFx0XHQqbGFzdCA9IGZhbHNlO1xuIDM3OTpcdFx0XHRcdGJyZWFrO1xuIDM4MDpcdFx0XHR9XG4gMzgxOlx0XHR9XG4gMzgyOlx0XG4gMzgzOlx0XHRyZXR1cm4gMDtcbiAzODQ6XHR9XG4gMzg1Olx0XG4gMzg2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJvdXRlNF9wb2xpY3lbVENBX1JPVVRFNF9NQVggJiM0MzsgMV0gPSB7XG4gMzg3Olx0XHRbVENBX1JPVVRFNF9DTEFTU0lEXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIDM4ODpcdFx0W1RDQV9ST1VURTRfVE9dXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMHhGRiksXG4gMzg5Olx0XHRbVENBX1JPVVRFNF9GUk9NXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAweEZGKSxcbiAzOTA6XHRcdFtUQ0FfUk9VVEU0X0lJRl1cdD0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMHg3RkZGKSxcbiAzOTE6XHR9O1xuIDM5MjpcdFxuIDM5MzpcdHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIDM5NDpcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGJhc2UsIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmLFxuIDM5NTpcdFx0XHRcdCAgICB1MzIgaGFuZGxlLCBzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQsXG4gMzk2Olx0XHRcdFx0ICAgIHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IG5sYXR0ciAqZXN0LFxuIDM5NzpcdFx0XHRcdCAgICBzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZm9sZCwgdTMyIGZsYWdzLFxuIDM5ODpcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gMzk5Olx0e1xuIDQwMDpcdFx0dTMyIGlkID0gMCwgdG8gPSAwLCBuaGFuZGxlID0gMHg4MDAwO1xuIDQwMTpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZwO1xuIDQwMjpcdFx0dW5zaWduZWQgaW50IGgxO1xuIDQwMzpcdFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gNDA0Olx0XHRpbnQgZXJyO1xuIDQwNTpcdFxuIDQwNjpcdFx0ZXJyID0gdGNmX2V4dHNfdmFsaWRhdGUobmV0LCB0cCwgdGIsIGVzdCwgXHUwMDI2Zi1cdTAwM2VleHRzLCBmbGFncywgZXh0YWNrKTtcbiA0MDc6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNDA4Olx0XHRcdHJldHVybiBlcnI7XG4gNDA5Olx0XG4gNDEwOlx0XHRpZiAodGJbVENBX1JPVVRFNF9UT10pIHtcbiA0MTE6XHRcdFx0aWYgKCFmb2xkIFx1MDAyNlx1MDAyNiBoYW5kbGUgXHUwMDI2IDB4ODAwMCkge1xuIDQxMjpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBoYW5kbGVcJiMzNDspO1xuIDQxMzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQxNDpcdFx0XHR9XG4gNDE1Olx0XHRcdHRvID0gbmxhX2dldF91MzIodGJbVENBX1JPVVRFNF9UT10pO1xuIDQxNjpcdFx0XHRuaGFuZGxlID0gdG87XG4gNDE3Olx0XHR9XG4gNDE4Olx0XG4gNDE5Olx0XHRpZiAodGJbVENBX1JPVVRFNF9GUk9NXSBcdTAwMjZcdTAwMjYgdGJbVENBX1JPVVRFNF9JSUZdKSB7XG4gNDIwOlx0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoZXh0YWNrLCB0YltUQ0FfUk9VVEU0X0ZST01dLFxuIDQyMTpcdFx0XHRcdFx0ICAgIFwmIzM0OyYjMzk7ZnJvbSYjMzk7IGFuZCAmIzM5O2Zyb21pZiYjMzk7IGFyZSBtdXR1YWxseSBleGNsdXNpdmVcJiMzNDspO1xuIDQyMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0MjM6XHRcdH1cbiA0MjQ6XHRcbiA0MjU6XHRcdGlmICh0YltUQ0FfUk9VVEU0X0ZST01dKSB7XG4gNDI2Olx0XHRcdGlkID0gbmxhX2dldF91MzIodGJbVENBX1JPVVRFNF9GUk9NXSk7XG4gNDI3Olx0XHRcdG5oYW5kbGUgfD0gaWQgXHUwMDNjXHUwMDNjIDE2O1xuIDQyODpcdFx0fSBlbHNlIGlmICh0YltUQ0FfUk9VVEU0X0lJRl0pIHtcbiA0Mjk6XHRcdFx0aWQgPSBubGFfZ2V0X3UzMih0YltUQ0FfUk9VVEU0X0lJRl0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTMxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGZvY3VzaW5nIG9uIHRoZSBpbXBsaWVkIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIERlZXBlciBpbnRvIFJvdXRpbmcgUGFyYW1ldGVyIE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBmb3IgYHJvdXRlNF9zZXRfcGFybXNgIGFuZCBgcm91dGU0X2NoYW5nZWAuIFRoYXQgcHJldmlvdXMgY29udGV4dCBhYm91dCB0aGUgb3ZlcmFsbCBmbG93IGFuZCB0aGUgaW5pdGlhbCBmdW5jdGlvbiBjYWxsIGlzIHN0aWxsIGZyZXNoIGluIG15IG1pbmQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2UgdHdvIGZ1bmN0aW9ucyBiZWNhdXNlIHRoZXkmIzM5O3JlIGNyaXRpY2FsIGZvciBhY3R1YWxseSBjb25maWd1cmluZyBhbmQgcG90ZW50aWFsbHkgbW9kaWZ5aW5nIHRoZSByb3V0aW5nIHNldHVwLCByaWdodD8gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHNldCBhbmQgaG93IGNoYW5nZXMgYXJlIGJlaW5nIGltcGxlbWVudGVkLiBTcGVjaWZpY2FsbHksIHdoYXQmIzM5O3MgdGhlIGxvZ2ljIHRoZXJlPyBBcmUgd2UgdGFsa2luZyBhYm91dCBkaXJlY3RseSBtb2RpZnlpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBvciBhcmUgdGhlcmUgbW9yZSBjb21wbGV4IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIG1vZHVsZXMgb3IgcHJvY2Vzc2VzIGludm9sdmVkPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoZXNlIHdpbGwgYmUgdGhlIGNvcmUgZnVuY3Rpb25zIGZvciBlaXRoZXIgaW5pdGlhbCBjb25maWd1cmF0aW9uIG9mIHRoZSByb3V0aW5nIHRhYmxlIG9yIGFkanVzdG1lbnQgb2YgdGhlc2UgcGFyYW1ldGVycyBkdXJpbmcgcnVudGltZS4gRnJvbSBleHBlcmllbmNlIEkga25vdyB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBzZWN0aW9uIHRvIHByZXZlbnQgaW5jb25zaXN0ZW50IGJlaGF2aW9yLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBhdG9taWNpdHkgaXNzdWVzLCBhbmQgZXJyb3IgaGFuZGxpbmcg4oCTIHRob3NlIGFyZSBhbHdheXMga2V5IGFyZWFzIG9mIGNvbmNlcm4gaW4gcm91dGluZyBtYW5hZ2VtZW50LiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgbWFwIG91dCB0aGUgY29udHJvbCBmbG93LCBsb29rIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgc2VlIGhvdyB3ZWxsIHRoaXMgaXMgZGVzaWduZWQgZm9yIHNjYWxhYmlsaXR5IGFuZCByb2J1c3RuZXNzLiBMZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIHRoZSBjb2RlIGhhbmRsZXMgZWRnZSBjYXNlcywgdG9vIC0gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gZGVhbHMgd2l0aCBhbGwgdGhlIGNvcm5lciBjYXNlcyBJIGNhbiB0aGluayBvZiwgaW5jbHVkaW5nIHdoZW4gdGhlIHJlcXVlc3RlZCBjaGFuZ2UgaXMgbm90IGFsbG93ZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3JvdXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MzA6XHRcdFx0bmhhbmRsZSB8PSAoaWQgfCAweDgwMDApIFx1MDAzY1x1MDAzYyAxNjtcbiA0MzE6XHRcdH0gZWxzZVxuIDQzMjpcdFx0XHRuaGFuZGxlIHw9IDB4RkZGRiBcdTAwM2NcdTAwM2MgMTY7XG4gNDMzOlx0XG4gNDM0Olx0XHRpZiAoaGFuZGxlIFx1MDAyNlx1MDAyNiAoIWZvbGQgfHwgbmhhbmRsZSA9PSAoaGFuZGxlIFx1MDAyNiB+MHg3RjAwKSkpXG4gNDM1Olx0XHRcdG5oYW5kbGUgfD0gaGFuZGxlIFx1MDAyNiAweDdGMDA7XG4gNDM2Olx0XG4gNDM3Olx0XHRpZiAoaGFuZGxlIFx1MDAyNlx1MDAyNiAhZm9sZCBcdTAwMjZcdTAwMjYgbmhhbmRsZSAhPSBoYW5kbGUpIHtcbiA0Mzg6XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcbiA0Mzk6XHRcdFx0XHRcdCAgIFwmIzM0O0hhbmRsZSBtaXNtYXRjaCBjb25zdHJ1Y3RlZDogJXggKGV4cGVjdGVkOiAleClcJiMzNDssXG4gNDQwOlx0XHRcdFx0XHQgICBoYW5kbGUsIG5oYW5kbGUpO1xuIDQ0MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0NDI6XHRcdH1cbiA0NDM6XHRcbiA0NDQ6XHRcdGlmICghbmhhbmRsZSkge1xuIDQ0NTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1JlcGxhY2luZyB3aXRoIGhhbmRsZSBvZiAwIGlzIGludmFsaWRcJiMzNDspO1xuIDQ0NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0NDc6XHRcdH1cbiA0NDg6XHRcbiA0NDk6XHRcdGgxID0gdG9faGFzaChuaGFuZGxlKTtcbiA0NTA6XHRcdGIgPSBydG5sX2RlcmVmZXJlbmNlKGhlYWQtXHUwMDNldGFibGVbaDFdKTtcbiA0NTE6XHRcdGlmICghYikge1xuIDQ1MjpcdFx0XHRiID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9idWNrZXQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gNDUzOlx0XHRcdGlmIChiID09IE5VTEwpXG4gNDU0Olx0XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIDQ1NTpcdFxuIDQ1NjpcdFx0XHRyZWZjb3VudF9zZXQoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZiwgMSk7XG4gNDU3Olx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihoZWFkLVx1MDAzZXRhYmxlW2gxXSwgYik7XG4gNDU4Olx0XHR9IGVsc2Uge1xuIDQ1OTpcdFx0XHR1bnNpZ25lZCBpbnQgaDIgPSBmcm9tX2hhc2gobmhhbmRsZSBcdTAwM2VcdTAwM2UgMTYpO1xuIDQ2MDpcdFxuIDQ2MTpcdFx0XHRmb3IgKGZwID0gcnRubF9kZXJlZmVyZW5jZShiLVx1MDAzZWh0W2gyXSk7XG4gNDYyOlx0XHRcdCAgICAgZnA7XG4gNDYzOlx0XHRcdCAgICAgZnAgPSBydG5sX2RlcmVmZXJlbmNlKGZwLVx1MDAzZW5leHQpKVxuIDQ2NDpcdFx0XHRcdGlmIChmcCAhPSBmb2xkIFx1MDAyNlx1MDAyNiBmcC1cdTAwM2VoYW5kbGUgPT0gbmhhbmRsZSkge1xuIDQ2NTpcdFx0XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcbiA0NjY6XHRcdFx0XHRcdFx0XHQgICBcJiMzNDtIYW5kbGUgJXggaXMgYWxyZWFkeSBpbiB1c2VcJiMzNDssXG4gNDY3Olx0XHRcdFx0XHRcdFx0ICAgbmhhbmRsZSk7XG4gNDY4Olx0XHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiA0Njk6XHRcdFx0XHR9XG4gNDcwOlx0XG4gNDcxOlx0XHRcdHJlZmNvdW50X2luYyhcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKTtcbiA0NzI6XHRcdH1cbiA0NzM6XHRcbiA0NzQ6XHRcdGlmICh0YltUQ0FfUk9VVEU0X1RPXSlcbiA0NzU6XHRcdFx0Zi1cdTAwM2VpZCA9IHRvO1xuIDQ3NjpcdFxuIDQ3NzpcdFx0aWYgKHRiW1RDQV9ST1VURTRfRlJPTV0pXG4gNDc4Olx0XHRcdGYtXHUwMDNlaWQgPSB0byB8IGlkXHUwMDNjXHUwMDNjMTY7XG4gNDc5Olx0XHRlbHNlIGlmICh0YltUQ0FfUk9VVEU0X0lJRl0pXG4gNDgwOlx0XHRcdGYtXHUwMDNlaWlmID0gaWQ7XG4gNDgxOlx0XG4gNDgyOlx0XHRmLVx1MDAzZWhhbmRsZSA9IG5oYW5kbGU7XG4gNDgzOlx0XHRmLVx1MDAzZWJrdCA9IGI7XG4gNDg0Olx0XHRmLVx1MDAzZXRwID0gdHA7XG4gNDg1Olx0XG4gNDg2Olx0XHRpZiAodGJbVENBX1JPVVRFNF9DTEFTU0lEXSkge1xuIDQ4NzpcdFx0XHRmLVx1MDAzZXJlcy5jbGFzc2lkID0gbmxhX2dldF91MzIodGJbVENBX1JPVVRFNF9DTEFTU0lEXSk7XG4gNDg4Olx0XHRcdHRjZl9iaW5kX2ZpbHRlcih0cCwgXHUwMDI2Zi1cdTAwM2VyZXMsIGJhc2UpO1xuIDQ4OTpcdFx0fVxuIDQ5MDpcdFxuIDQ5MTpcdFx0cmV0dXJuIDA7XG4gNDkyOlx0fVxuIDQ5MzpcdFxuIDQ5NDpcdHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gNDk1Olx0XHRcdFx0IHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1bnNpZ25lZCBsb25nIGJhc2UsIHUzMiBoYW5kbGUsXG4gNDk2Olx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKip0Y2EsIHZvaWQgKiphcmcsIHUzMiBmbGFncyxcbiA0OTc6XHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDQ5ODpcdHtcbiA0OTk6XHRcdHN0cnVjdCByb3V0ZTRfaGVhZCAqaGVhZCA9IHJ0bmxfZGVyZWZlcmVuY2UodHAtXHUwMDNlcm9vdCk7XG4gNTAwOlx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciBfX3JjdSAqKmZwO1xuIDUwMTpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsICpmMSwgKnBmcCwgKmYgPSBOVUxMO1xuIDUwMjpcdFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gNTAzOlx0XHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfUk9VVEU0X01BWCAmIzQzOyAxXTtcbiA1MDQ6XHRcdHVuc2lnbmVkIGludCBoO1xuIDUwNTpcdFx0aW50IGVycjtcbiA1MDY6XHRcbiA1MDc6XHRcdGlmICghaGFuZGxlKSB7XG4gNTA4Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q3JlYXRpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkXCYjMzQ7KTtcbiA1MDk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTEwOlx0XHR9XG4gNTExOlx0XG4gNTEyOlx0XHRpZiAoTkxfUkVRX0FUVFJfQ0hFQ0soZXh0YWNrLCBOVUxMLCB0Y2EsIFRDQV9PUFRJT05TKSkge1xuIDUxMzpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtNaXNzaW5nIG9wdGlvbnNcJiMzNDspO1xuIDUxNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MTU6XHRcdH1cbiA1MTY6XHRcbiA1MTc6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgVENBX1JPVVRFNF9NQVgsIHRjYVtUQ0FfT1BUSU9OU10sXG4gNTE4Olx0XHRcdFx0XHRcdCAgcm91dGU0X3BvbGljeSwgTlVMTCk7XG4gNTE5Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDUyMDpcdFx0XHRyZXR1cm4gZXJyO1xuIDUyMTpcdFxuIDUyMjpcdFx0Zm9sZCA9ICphcmc7XG4gNTIzOlx0XHRpZiAoZm9sZCBcdTAwMjZcdTAwMjYgZm9sZC1cdTAwM2VoYW5kbGUgIT0gaGFuZGxlKVxuIDUyNDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDUyNTpcdFxuIDUyNjpcdFx0ZXJyID0gLUVOT0JVRlM7XG4gNTI3Olx0XHRmID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gNTI4Olx0XHRpZiAoIWYpXG4gNTI5Olx0XHRcdGdvdG8gZXJyb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg2MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIFJvdXRlNCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgc28gdGhlIG9idmlvdXMgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgcmVzdCBvZiB0aGUgY29kZSByZWxhdGVkIHRvIHRob3NlIGByb3V0ZTRgIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGByb3V0ZTRfY2hhbmdlYCBhbmQgYHJvdXRlNF9kdW1wYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCByb3V0aW5nIHN0cnVjdHVyZS4gVGhlIG5hbWluZyBzdWdnZXN0cyB0aGF0IHRoZXkgYXJlIHJlbGF0ZWQgdG8gY2hhbmdlcyB3aXRoaW4gYW5kIGR1bXBpbmcgaW5mb3JtYXRpb24gZnJvbSByb3V0ZTQuIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBzY29wZSBvZiB0aGVpciByZXNwb25zaWJpbGl0eSBpbiByZWxhdGlvbiB0byB0aGUgb3RoZXIgcm91dGVzLCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGUgY29uZmlndXJhdGlvbiBhbmQgcmV0cmlldmFsIG9mIGRhdGEuIEkgd2FudCB0byBsb29rIGZvciBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiwgcGFydGljdWxhcmx5IGFyb3VuZCBjb25jdXJyZW5jeSBvciBzdGF0ZSBtYW5hZ2VtZW50LiBVbmRlcnN0YW5kaW5nIGhvdyBkYXRhIGlzIG1vZGlmaWVkIGFuZCBhY2Nlc3NlZCBpcyBrZXkgaGVyZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIHJhY2UgY29uZGl0aW9ucywgaW5jb25zaXN0ZW5jaWVzLCBvciBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gZGF0YSBpbnRlZ3JpdHkgd2hlbiBJIHJldmlldyB0aGlzIGNvZGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBpcyBiZWluZyBkdW1wZWQgYnkgJiMzOTtyb3V0ZTRfZHVtcCYjMzk7IGFuZCB3aGV0aGVyIGRhdGEgaXMgYWx0ZXJlZCBieSB0aGUgJiMzOTtyb3V0ZTRfY2hhbmdlJiMzOTsgZnVuY3Rpb24uIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgaG93IHRoZXkgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfcm91dGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTMwOlx0XG4gNTMxOlx0XHRlcnIgPSB0Y2ZfZXh0c19pbml0KFx1MDAyNmYtXHUwMDNlZXh0cywgbmV0LCBUQ0FfUk9VVEU0X0FDVCwgVENBX1JPVVRFNF9QT0xJQ0UpO1xuIDUzMjpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiA1MzM6XHRcdFx0Z290byBlcnJvdXQ7XG4gNTM0Olx0XG4gNTM1Olx0XHRpZiAoZm9sZCkge1xuIDUzNjpcdFx0XHRmLVx1MDAzZWlkID0gZm9sZC1cdTAwM2VpZDtcbiA1Mzc6XHRcdFx0Zi1cdTAwM2VpaWYgPSBmb2xkLVx1MDAzZWlpZjtcbiA1Mzg6XHRcdFx0Zi1cdTAwM2VoYW5kbGUgPSBmb2xkLVx1MDAzZWhhbmRsZTtcbiA1Mzk6XHRcbiA1NDA6XHRcdFx0Zi1cdTAwM2V0cCA9IGZvbGQtXHUwMDNldHA7XG4gNTQxOlx0XHRcdGYtXHUwMDNlYmt0ID0gZm9sZC1cdTAwM2Via3Q7XG4gNTQyOlx0XHR9XG4gNTQzOlx0XG4gNTQ0Olx0XHRlcnIgPSByb3V0ZTRfc2V0X3Bhcm1zKG5ldCwgdHAsIGJhc2UsIGYsIGhhbmRsZSwgaGVhZCwgdGIsXG4gNTQ1Olx0XHRcdFx0ICAgICAgIHRjYVtUQ0FfUkFURV0sIGZvbGQsIGZsYWdzLCBleHRhY2spO1xuIDU0NjpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiA1NDc6XHRcdFx0Z290byBlcnJvdXQ7XG4gNTQ4Olx0XG4gNTQ5Olx0XHRoID0gZnJvbV9oYXNoKGYtXHUwMDNlaGFuZGxlIFx1MDAzZVx1MDAzZSAxNik7XG4gNTUwOlx0XHRmcCA9IFx1MDAyNmYtXHUwMDNlYmt0LVx1MDAzZWh0W2hdO1xuIDU1MTpcdFx0Zm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7XG4gNTUyOlx0XHQgICAgIChmMSA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkgIT0gTlVMTDtcbiA1NTM6XHRcdCAgICAgZnAgPSBcdTAwMjZmMS1cdTAwM2VuZXh0KVxuIDU1NDpcdFx0XHRpZiAoZi1cdTAwM2VoYW5kbGUgXHUwMDNjIGYxLVx1MDAzZWhhbmRsZSlcbiA1NTU6XHRcdFx0XHRicmVhaztcbiA1NTY6XHRcbiA1NTc6XHRcdHRjZl9ibG9ja19uZXRpZl9rZWVwX2RzdCh0cC1cdTAwM2VjaGFpbi1cdTAwM2VibG9jayk7XG4gNTU4Olx0XHRyY3VfYXNzaWduX3BvaW50ZXIoZi1cdTAwM2VuZXh0LCBmMSk7XG4gNTU5Olx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmKTtcbiA1NjA6XHRcbiA1NjE6XHRcdGlmIChmb2xkKSB7XG4gNTYyOlx0XHRcdGIgPSBmb2xkLVx1MDAzZWJrdDtcbiA1NjM6XHRcdFx0aCA9IGZyb21faGFzaChmb2xkLVx1MDAzZWhhbmRsZSBcdTAwM2VcdTAwM2UgMTYpO1xuIDU2NDpcdFx0XHRmcCA9IFx1MDAyNmItXHUwMDNlaHRbaF07XG4gNTY1Olx0XHRcdGZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7XG4gNTY2Olx0XHRcdCAgICAgZnAgPSBcdTAwMjZwZnAtXHUwMDNlbmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XG4gNTY3Olx0XHRcdFx0aWYgKHBmcCA9PSBmb2xkKSB7XG4gNTY4Olx0XHRcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmb2xkLVx1MDAzZW5leHQpO1xuIDU2OTpcdFx0XHRcdFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKSkge1xuIDU3MDpcdFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgdGggPSB0b19oYXNoKGZvbGQtXHUwMDNlaGFuZGxlKTtcbiA1NzE6XHRcbiA1NzI6XHRcdFx0XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RoXSwgTlVMTCk7XG4gNTczOlx0XHRcdFx0XHRcdGtmcmVlX3JjdShiLCByY3UpO1xuIDU3NDpcdFx0XHRcdFx0fVxuIDU3NTpcdFx0XHRcdFx0YnJlYWs7XG4gNTc2Olx0XHRcdFx0fVxuIDU3NzpcdFx0XHR9XG4gNTc4Olx0XHR9XG4gNTc5Olx0XG4gNTgwOlx0XHRyb3V0ZTRfcmVzZXRfZmFzdG1hcChoZWFkLCBmb2xkKTtcbiA1ODE6XHRcdCphcmcgPSBmO1xuIDU4MjpcdFx0aWYgKGZvbGQpIHtcbiA1ODM6XHRcdFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFx1MDAyNmZvbGQtXHUwMDNlcmVzKTtcbiA1ODQ6XHRcdFx0dGNmX2V4dHNfZ2V0X25ldChcdTAwMjZmb2xkLVx1MDAzZWV4dHMpO1xuIDU4NTpcdFx0XHR0Y2ZfcXVldWVfd29yayhcdTAwMjZmb2xkLVx1MDAzZXJ3b3JrLCByb3V0ZTRfZGVsZXRlX2ZpbHRlcl93b3JrKTtcbiA1ODY6XHRcdH1cbiA1ODc6XHRcdHJldHVybiAwO1xuIDU4ODpcdFxuIDU4OTpcdGVycm91dDpcbiA1OTA6XHRcdGlmIChmKVxuIDU5MTpcdFx0XHR0Y2ZfZXh0c19kZXN0cm95KFx1MDAyNmYtXHUwMDNlZXh0cyk7XG4gNTkyOlx0XHRrZnJlZShmKTtcbiA1OTM6XHRcdHJldHVybiBlcnI7XG4gNTk0Olx0fVxuIDU5NTpcdFxuIDU5NjpcdHN0YXRpYyB2b2lkIHJvdXRlNF93YWxrKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNmX3dhbGtlciAqYXJnLFxuIDU5NzpcdFx0XHRcdGJvb2wgcnRubF9oZWxkKVxuIDU5ODpcdHtcbiA1OTk6XHRcdHN0cnVjdCByb3V0ZTRfaGVhZCAqaGVhZCA9IHJ0bmxfZGVyZWZlcmVuY2UodHAtXHUwMDNlcm9vdCk7XG4gNjAwOlx0XHR1bnNpZ25lZCBpbnQgaCwgaDE7XG4gNjAxOlx0XG4gNjAyOlx0XHRpZiAoaGVhZCA9PSBOVUxMIHx8IGFyZy1cdTAwM2VzdG9wKVxuIDYwMzpcdFx0XHRyZXR1cm47XG4gNjA0Olx0XG4gNjA1Olx0XHRmb3IgKGggPSAwOyBoIFx1MDAzYz0gMjU2OyBoJiM0MzsmIzQzOykge1xuIDYwNjpcdFx0XHRzdHJ1Y3Qgcm91dGU0X2J1Y2tldCAqYiA9IHJ0bmxfZGVyZWZlcmVuY2UoaGVhZC1cdTAwM2V0YWJsZVtoXSk7XG4gNjA3Olx0XG4gNjA4Olx0XHRcdGlmIChiKSB7XG4gNjA5Olx0XHRcdFx0Zm9yIChoMSA9IDA7IGgxIFx1MDAzYz0gMzI7IGgxJiM0MzsmIzQzOykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM4MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyBgY2xzX3JvdXRlLmNgLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgaXQgbXlzZWxmLCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBjbHNfcm91dGUuYyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoaXMgYGNsc19yb3V0ZS5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24gd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG92ZXJhbGwgc3lzdGVtIGRlc2lnbi4gV2hhdCYjMzk7cyBpdCBkb2luZz8gV2hhdCBraW5kIG9mIHJvdXRpbmcgbG9naWMgaXMgaW1wbGVtZW50ZWQgaGVyZT8gSXMgaXQgc2ltcGxlIGxvb2t1cHMsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggd2l0aCBwb2xpY3kgY29uc2lkZXJhdGlvbnM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIHJvdXRlIHNlbGVjdGlvbiwgY2FjaGluZywgYW5kIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGludGVyZmFjZXMuIEJhc2ljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51dHMgYW5kIGJvbHRzIG9mIGhvdyB0aGlzIG1vZHVsZSBtYWtlcyByb3V0aW5nIGRlY2lzaW9ucy4gVGltZSB0byBnZXQgZmFtaWxpYXIgd2l0aCB0aGUgY29kZSBhbmQgaXRzIGFwcHJvYWNoIHRvIGVuc3VyZSBlZmZpY2llbnQgYW5kIHJvYnVzdCBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19yb3V0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTA6XHRcdFx0XHRcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmO1xuIDYxMTpcdFxuIDYxMjpcdFx0XHRcdFx0Zm9yIChmID0gcnRubF9kZXJlZmVyZW5jZShiLVx1MDAzZWh0W2gxXSk7XG4gNjEzOlx0XHRcdFx0XHQgICAgIGY7XG4gNjE0Olx0XHRcdFx0XHQgICAgIGYgPSBydG5sX2RlcmVmZXJlbmNlKGYtXHUwMDNlbmV4dCkpIHtcbiA2MTU6XHRcdFx0XHRcdFx0aWYgKCF0Y19jbHNfc3RhdHNfZHVtcCh0cCwgYXJnLCBmKSlcbiA2MTY6XHRcdFx0XHRcdFx0XHRyZXR1cm47XG4gNjE3Olx0XHRcdFx0XHR9XG4gNjE4Olx0XHRcdFx0fVxuIDYxOTpcdFx0XHR9XG4gNjIwOlx0XHR9XG4gNjIxOlx0fVxuIDYyMjpcdFxuIDYyMzpcdHN0YXRpYyBpbnQgcm91dGU0X2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqZmgsXG4gNjI0Olx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNtc2cgKnQsIGJvb2wgcnRubF9oZWxkKVxuIDYyNTpcdHtcbiA2MjY6XHRcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmID0gZmg7XG4gNjI3Olx0XHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xuIDYyODpcdFx0dTMyIGlkO1xuIDYyOTpcdFxuIDYzMDpcdFx0aWYgKGYgPT0gTlVMTClcbiA2MzE6XHRcdFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4gNjMyOlx0XG4gNjMzOlx0XHR0LVx1MDAzZXRjbV9oYW5kbGUgPSBmLVx1MDAzZWhhbmRsZTtcbiA2MzQ6XHRcbiA2MzU6XHRcdG5lc3QgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcoc2tiLCBUQ0FfT1BUSU9OUyk7XG4gNjM2Olx0XHRpZiAobmVzdCA9PSBOVUxMKVxuIDYzNzpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA2Mzg6XHRcbiA2Mzk6XHRcdGlmICghKGYtXHUwMDNlaGFuZGxlIFx1MDAyNiAweDgwMDApKSB7XG4gNjQwOlx0XHRcdGlkID0gZi1cdTAwM2VpZCBcdTAwMjYgMHhGRjtcbiA2NDE6XHRcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgVENBX1JPVVRFNF9UTywgaWQpKVxuIDY0MjpcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDY0MzpcdFx0fVxuIDY0NDpcdFx0aWYgKGYtXHUwMDNlaGFuZGxlIFx1MDAyNiAweDgwMDAwMDAwKSB7XG4gNjQ1Olx0XHRcdGlmICgoZi1cdTAwM2VoYW5kbGUgXHUwMDNlXHUwMDNlIDE2KSAhPSAweEZGRkYgXHUwMDI2XHUwMDI2XG4gNjQ2Olx0XHRcdCAgICBubGFfcHV0X3UzMihza2IsIFRDQV9ST1VURTRfSUlGLCBmLVx1MDAzZWlpZikpXG4gNjQ3Olx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gNjQ4Olx0XHR9IGVsc2Uge1xuIDY0OTpcdFx0XHRpZCA9IGYtXHUwMDNlaWQgXHUwMDNlXHUwMDNlIDE2O1xuIDY1MDpcdFx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBUQ0FfUk9VVEU0X0ZST00sIGlkKSlcbiA2NTE6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA2NTI6XHRcdH1cbiA2NTM6XHRcdGlmIChmLVx1MDAzZXJlcy5jbGFzc2lkIFx1MDAyNlx1MDAyNlxuIDY1NDpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgVENBX1JPVVRFNF9DTEFTU0lELCBmLVx1MDAzZXJlcy5jbGFzc2lkKSlcbiA2NTU6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gNjU2Olx0XG4gNjU3Olx0XHRpZiAodGNmX2V4dHNfZHVtcChza2IsIFx1MDAyNmYtXHUwMDNlZXh0cykgXHUwMDNjIDApXG4gNjU4Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDY1OTpcdFxuIDY2MDpcdFx0bmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7XG4gNjYxOlx0XG4gNjYyOlx0XHRpZiAodGNmX2V4dHNfZHVtcF9zdGF0cyhza2IsIFx1MDAyNmYtXHUwMDNlZXh0cykgXHUwMDNjIDApXG4gNjYzOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDY2NDpcdFxuIDY2NTpcdFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4gNjY2Olx0XG4gNjY3Olx0bmxhX3B1dF9mYWlsdXJlOlxuIDY2ODpcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgbmVzdCk7XG4gNjY5Olx0XHRyZXR1cm4gLTE7XG4gNjcwOlx0fVxuIDY3MTpcdFxuIDY3MjpcdHN0YXRpYyB2b2lkIHJvdXRlNF9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcbiA2NzM6XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGJhc2UpXG4gNjc0Olx0e1xuIDY3NTpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmYgPSBmaDtcbiA2NzY6XHRcbiA2Nzc6XHRcdHRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCBcdTAwMjZmLVx1MDAzZXJlcywgYmFzZSk7XG4gNjc4Olx0fVxuIDY3OTpcdFxuIDY4MDpcdHN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfcm91dGU0X29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuIDY4MTpcdFx0LmtpbmRcdFx0PVx0XCYjMzQ7cm91dGVcJiMzNDssXG4gNjgyOlx0XHQuY2xhc3NpZnlcdD1cdHJvdXRlNF9jbGFzc2lmeSxcbiA2ODM6XHRcdC5pbml0XHRcdD1cdHJvdXRlNF9pbml0LFxuIDY4NDpcdFx0LmRlc3Ryb3lcdD1cdHJvdXRlNF9kZXN0cm95LFxuIDY4NTpcdFx0LmdldFx0XHQ9XHRyb3V0ZTRfZ2V0LFxuIDY4NjpcdFx0LmNoYW5nZVx0XHQ9XHRyb3V0ZTRfY2hhbmdlLFxuIDY4NzpcdFx0LmRlbGV0ZVx0XHQ9XHRyb3V0ZTRfZGVsZXRlLFxuIDY4ODpcdFx0LndhbGtcdFx0PVx0cm91dGU0X3dhbGssXG4gNjg5Olx0XHQuZHVtcFx0XHQ9XHRyb3V0ZTRfZHVtcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4NjgKCQkJCQkJCW91dHB1dDogMjkzCgkJCQkJCQl0aG91Z2h0czogMTEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgY2xzX3JvdXRlLmMgUGF0Y2g6IFJlZmNvdW50aW5nIGFuZCBNZW1vcnkgU2FmZXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggZm9yIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhZGRyZXNzaW5nIGEgY3JpdGljYWwgaXNzdWUgaW4gaG93IHRoZSBgcm91dGU0X2J1Y2tldGAgc3RydWN0dXJlIGlzIG1hbmFnZWQsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIGZpbHRlciBkZWxldGlvbiBhbmQgbW9kaWZpY2F0aW9uLgoKTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlIGNvcmUgcHJvYmxlbSB3YXMgYSBsYWNrIG9mIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgZm9yIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAuICBQcmV2aW91c2x5LCB3aGVuIGEgZmlsdGVyIHdhcyBkZWxldGVkIChgcm91dGU0X2RlbGV0ZWApLCB0aGUgY29kZSB3b3VsZCBpdGVyYXRlIHRocm91Z2ggdGhlIGJ1Y2tldCYjMzk7cyBoYXNoIHRhYmxlIChgYi0mZ3Q7aHRbMC4uMzJdYCkgdG8gc2VlIGlmIGFueSBmaWx0ZXJzIHJlbWFpbmVkLiBJZiBpdCBmb3VuZCBub25lLCBpdCYjMzk7ZCBjbGVhciB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiB0aGUgaGVhZCYjMzk7cyB0YWJsZSAoYGhlYWQtJmd0O3RhYmxlW3RvX2hhc2goaCldYCkgYW5kIGZyZWUgdGhlIGJ1Y2tldCB1c2luZyBga2ZyZWVfcmN1KGIsIHJjdSlgLiBUaGUgd2Vha25lc3MgbGllcyBpbiBob3cgZmlsdGVycyBhcmUgKmNoYW5nZWQqIChgcm91dGU0X2NoYW5nZWApLiBJZiBhIGZpbHRlciYjMzk7cyBgZm9sZGAgd2FzIHJlcGxhY2VkIG9yIG1vdmVkIHRvIGEgZGlmZmVyZW50IGJ1Y2tldCBvciBoYW5kbGUsIHRoZXJlIHdhcyBhIHJpc2sgb2YgY29ycnVwdGluZyBidWNrZXQgYWNjb3VudGluZyBvciBmcmVlaW5nIHRoZSBidWNrZXQgd2hpbGUgZmlsdGVycyB3ZXJlIHN0aWxsIHVzaW5nIGl0LCB3aGljaCBtZWFucyB3ZSBwb3RlbnRpYWxseSBoYWQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLgoKVGhlIHBhdGNoJiMzOTtzIHNvbHV0aW9uIGlzIGVsZWdhbnQ6IGl0IGludHJvZHVjZXMgYSBgcmVmY291bnRfdCBmaWx0ZXJzX3JlZmAgZmllbGQgd2l0aGluIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAuIE5vdywgaW5zdGVhZCBvZiBsb29waW5nIHRvIGRldGVybWluZSBpZiB0aGUgYnVja2V0IGlzIGVtcHR5IGR1cmluZyBkZWxldGlvbiwgYHJvdXRlNF9kZWxldGVgIHVzZXMgYHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKWAuICBJbiB0aGUgYHJvdXRlNF9zZXRfcGFybXNgIGZ1bmN0aW9uLCB3ZSBub3cgaW5jcmVtZW50IHRoZSByZWZjb3VudCB3aGVuIGFkZGluZyBhIGZpbHRlciB0byBhbiBleGlzdGluZyBidWNrZXQgb3Igc2V0IHRoZSByZWZjb3VudCB0byAxIHdoZW4gYWxsb2NhdGluZyBhIG5ldyBidWNrZXQuIFRoaXMgbWFrZXMgaXQgbXVjaCBtb3JlIHJvYnVzdC4gVGhlIGZpbHRlciByZXBsYWNlbWVudCBsb2dpYyB3aXRoaW4gYHJvdXRlNF9jaGFuZ2VgIG5vdyBhbHNvIGluY2x1ZGVzIHRoZSByZWZjb3VudCBkZWNyZW1lbnQgd2hlbiB1bmxpbmtpbmcgYSBmaWx0ZXIuIFRoZSBgaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKSlgIGNvbmRpdGlvbiBpbiBgcm91dGU0X2NoYW5nZWAgbm93IHByb3Blcmx5IGhhbmRsZXMgdGhlIGJ1Y2tldCBkZWFsbG9jYXRpb24uIEkgYWxzbyBub3RpY2VkIHRoYXQgdGhlIGNvbGxpc2lvbiBjaGVjayBpbiBgcm91dGU0X3NldF9wYXJtc2Agbm93IHdvcmtzIGNvcnJlY3RseSwgZW5zdXJpbmcgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IHByb2JsZW1zIGlmIHdlJiMzOTtyZSByZXBsYWNpbmcgb3IgZGV0ZWN0aW5nIGFuIGV4aXN0aW5nIGZpbHRlci4KCk5leHQsIEkgbmVlZCB0byBjaGVjayBmb3IgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBlc3BlY2lhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBGb3J0dW5hdGVseSwgdGhpcyBsb29rcyBwcmV0dHkgY2xlYW4uIEJvdGggYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBhbmQgYHN0cnVjdCByb3V0ZTRfZmlsdGVyYCBhcmUgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbi4gVGhpcyBlbGltaW5hdGVzIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IGFsbG9jYXRpb24uIEZ1cnRoZXJtb3JlLCB0aGVyZSYjMzk7cyBubyBldmlkZW5jZSBvZiBhbnkgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZyBvciBmaWVsZHMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UuICBUaGUgYHJvdXRlNF9kdW1wYCBmdW5jdGlvbiB1c2VzIGBubGFfcHV0X3UzMmAgdG8gZHVtcCByZWxldmFudCBmaWVsZHMgbGlrZSBgZi0mZ3Q7aWRgLCBgZi0mZ3Q7aWlmYCwgYW5kIGBmLSZndDtyZXMuY2xhc3NpZGAuICBUaGVzZSBhcmUgYWxsIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIGZpbHRlciBjcmVhdGlvbi9tb2RpZmljYXRpb24sIHNvIG5vIHByb2JsZW1zIGhlcmUuIEkgYWxzbyBkb24mIzM5O3Qgc2VlIGFueSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSBpc3N1ZXMgYWRkcmVzc2VkIGFuZCBmaXhlZCBsb29rIGxpa2UgY2xhc3NpYyByZWZlcmVuY2UgY291bnRpbmcgcHJvYmxlbXMgd2hpY2ggYXJlIHZlcnkgZWFzaWx5IGNhdWdodCBieSBLQVNBTiBvciBsb2NrZGVwLCB3aGljaCBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LgoKTm93LCBsZXQmIzM5O3MgYXBwbHkgb3VyIHN0YW5kYXJkIGNoZWNrbGlzdC4gIFRoaXMgaXMgd2hhdCBJIGxvb2sgZm9yIHdoZW4gZGV0ZXJtaW5pbmcgaWYgYSBLTVNBTiBzZXNzaW9uIGlzIG5lY2Vzc2FyeToKCiogICBTdGFuZGFyZCBLQVNBTiBidWlsZHMgKE9PQiwgVUFGLCBkb3VibGUtZnJlZSwgaW52YWxpZC1mcmVlKSwgTE9DS0RFUCwgVUJTQU4sIHJlZmNvdW50IGNoZWNrczogVGhlc2UgYXJlIGFscmVhZHkgZW5hYmxlZCBhbmQgd291bGQgaGF2ZSBjYXVnaHQgaXNzdWVzIHJlbGF0ZWQgdG8gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlcywgZXRjLgoqICAgS01TQU4gZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3M6IFRoaXMgaXMgdGhlIGNyaXRpY2FsIGNoZWNrIGZvciBteSBhc3Nlc3NtZW50LgoqICAgJiMzNDtUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLCBMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLiYjMzQ7CiogICAmIzM0O1NldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcy4uLiYjMzQ7IChmb2xsb3dlZCBieSBhIGxpc3Qgb2YgY3JpdGVyaWEgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5L3N0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIGV0Yy4pCgpCYXNlZCBvbiB0aGlzLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBLTVNBTiBpcyAqbm90KiBuZWVkZWQgaGVyZS4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0OgoKKiAgIENvcHkgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4KKiAgIERlcGVuZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb25kaXRpb25hbCBsb2dpYy4KKiAgIEFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuCiogICBVc2UgYW55IGtpbmQgb2YgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzIGluIHN1cnJvdW5kaW5nIGNvZGUuCgpUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgYWJvdXQgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAoYHJlZmNvdW50X3RgKSBvZiBgc3RydWN0IHJvdXRlNF9idWNrZXRgIGFuZCBmaXhpbmcgc29tZSBmaWx0ZXIgcmVwbGFjZW1lbnQgbG9naWMgYnVncyBpbiBgY2xzX3JvdXRlYC4gVGhlIGdvYWwgaXMgdG8gbWFrZSB0aGluZ3Mgcm9idXN0LCBzbyBteSBhc3Nlc3NtZW50IHdvdWxkIGJlIHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSBjYW4gZGVmaW5pdGl2ZWx5IHN0YXRlIHRoYXQgdGhpcyBpcyBhIHNhZmUgcGF0Y2ggaW4gdGVybXMgb2YgbWVtb3J5IHNhZmV0eSwgYW5kIHN0YW5kYXJkIGtlcm5lbCBidWlsZCB0b29scyBzaG91bGQgYmUgYWJsZSB0byBjb3ZlcgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBsaWZldGltZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nIGlzc3VlcyBpbiBjbHNfcm91dGUgKHRyYWZmaWMgY29udHJvbCByb3V0ZSBjbGFzc2lmaWVyKSB3aGVuIHVwZGF0aW5nIG9yIGRlbGV0aW5nIHJvdXRlIGZpbHRlcnMgYWNyb3NzIGJ1Y2tldHMsIGJ5IGludHJvZHVjaW5nIGEgYGZpbHRlcnNfcmVmYCByZWZjb3VudCAoYHJlZmNvdW50X3RgKSB0byBgc3RydWN0IHJvdXRlNF9idWNrZXRgLlxuXG5BbmFseXNpcyBvZiBtZW1vcnkgc2FuaXRpemF0aW9uIHJlcXVpcmVtZW50czpcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBLTVNBTjogQWxsIGFsbG9jYXRpb25zIChgc3RydWN0IHJvdXRlNF9idWNrZXRgIGFuZCBgc3RydWN0IHJvdXRlNF9maWx0ZXJgKSBjb250aW51ZSB0byB1c2UgYGt6YWxsb2Nfb2JqYCBlbnN1cmluZyBhbGwgbWVtb3J5IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbi4gVGhlIG5ldyBgZmlsdGVyc19yZWZgIGZpZWxkIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgcmVmY291bnRfc2V0YCBhbmQgbWFuYWdlZCB2aWEgYHJlZmNvdW50X2luY2AgLyBgcmVmY291bnRfZGVjX2FuZF90ZXN0YC4gTm8gc3RydWN0IGZpZWxkcywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UgdmlhIE5ldGxpbmsgKGFsbCBkdW1wZWQgYXR0cmlidXRlcyBhcmUgdmFsaWRhdGVkIGFuZCBwb3B1bGF0ZWQgZnJvbSBpbml0aWFsaXplZCBzY2FsYXIgdmFsdWVzKS4gVGhlcmUgaXMgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuLSBVQUYgLyBLQVNBTjogVGhlIGNoYW5nZXMgbW9kaWZ5IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYnVja2V0IGRlYWxsb2NhdGlvbiBsaWZldGltZXMgKGBrZnJlZV9yY3VgKSwgd2hpY2ggZmFsbCB1bmRlciBVc2UtQWZ0ZXItRnJlZSBhbmQgcmVmY291bnQgc2FmZXR5LiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBtb25pdG9yZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCB0aGUga2VybmVsJiMzOTtzIGJ1aWx0LWluIHJlZmNvdW50IGNoZWNraW5nIChgcmVmY291bnRfdGApLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBsaWZldGltZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nIGlzc3VlcyBpbiBjbHNfcm91dGUgKHRyYWZmaWMgY29udHJvbCByb3V0ZSBjbGFzc2lmaWVyKSB3aGVuIHVwZGF0aW5nIG9yIGRlbGV0aW5nIHJvdXRlIGZpbHRlcnMgYWNyb3NzIGJ1Y2tldHMsIGJ5IGludHJvZHVjaW5nIGEgYGZpbHRlcnNfcmVmYCByZWZjb3VudCAoYHJlZmNvdW50X3RgKSB0byBgc3RydWN0IHJvdXRlNF9idWNrZXRgLlxuXG5BbmFseXNpcyBvZiBtZW1vcnkgc2FuaXRpemF0aW9uIHJlcXVpcmVtZW50czpcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBLTVNBTjogQWxsIGFsbG9jYXRpb25zIChgc3RydWN0IHJvdXRlNF9idWNrZXRgIGFuZCBgc3RydWN0IHJvdXRlNF9maWx0ZXJgKSBjb250aW51ZSB0byB1c2UgYGt6YWxsb2Nfb2JqYCBlbnN1cmluZyBhbGwgbWVtb3J5IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbi4gVGhlIG5ldyBgZmlsdGVyc19yZWZgIGZpZWxkIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgcmVmY291bnRfc2V0YCBhbmQgbWFuYWdlZCB2aWEgYHJlZmNvdW50X2luY2AgLyBgcmVmY291bnRfZGVjX2FuZF90ZXN0YC4gTm8gc3RydWN0IGZpZWxkcywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UgdmlhIE5ldGxpbmsgKGFsbCBkdW1wZWQgYXR0cmlidXRlcyBhcmUgdmFsaWRhdGVkIGFuZCBwb3B1bGF0ZWQgZnJvbSBpbml0aWFsaXplZCBzY2FsYXIgdmFsdWVzKS4gVGhlcmUgaXMgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuLSBVQUYgLyBLQVNBTjogVGhlIGNoYW5nZXMgbW9kaWZ5IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYnVja2V0IGRlYWxsb2NhdGlvbiBsaWZldGltZXMgKGBrZnJlZV9yY3VgKSwgd2hpY2ggZmFsbCB1bmRlciBVc2UtQWZ0ZXItRnJlZSBhbmQgcmVmY291bnQgc2FmZXR5LiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBtb25pdG9yZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCB0aGUga2VybmVsJiMzOTtzIGJ1aWx0LWluIHJlZmNvdW50IGNoZWNraW5nIChgcmVmY291bnRfdGApLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6NTk6MzQuODYxNDcxNTM4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyODQyNjExMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0NMU19ST1VURTRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyb3V0ZTRfY2hhbmdlXCIsXG4gICAgXCJyb3V0ZTRfZGVsZXRlXCIsXG4gICAgXCJyb3V0ZTRfc2V0X3Bhcm1zXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSB0cmFja2luZyBpc3N1ZXMgaW4gY2xzX3JvdXRlICh0cmFmZmljIGNvbnRyb2wgcm91dGUgY2xhc3NpZmllcikgd2hlbiB1cGRhdGluZyBvciBkZWxldGluZyByb3V0ZSBmaWx0ZXJzIGFjcm9zcyBidWNrZXRzLCBieSBpbnRyb2R1Y2luZyBhIGBmaWx0ZXJzX3JlZmAgcmVmY291bnQgKGByZWZjb3VudF90YCkgdG8gYHN0cnVjdCByb3V0ZTRfYnVja2V0YC5cXG5cXG5BbmFseXNpcyBvZiBtZW1vcnkgc2FuaXRpemF0aW9uIHJlcXVpcmVtZW50czpcXG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gS01TQU46IEFsbCBhbGxvY2F0aW9ucyAoYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBhbmQgYHN0cnVjdCByb3V0ZTRfZmlsdGVyYCkgY29udGludWUgdG8gdXNlIGBremFsbG9jX29iamAgZW5zdXJpbmcgYWxsIG1lbW9yeSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHVwb24gY3JlYXRpb24uIFRoZSBuZXcgYGZpbHRlcnNfcmVmYCBmaWVsZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYHJlZmNvdW50X3NldGAgYW5kIG1hbmFnZWQgdmlhIGByZWZjb3VudF9pbmNgIC8gYHJlZmNvdW50X2RlY19hbmRfdGVzdGAuIE5vIHN0cnVjdCBmaWVsZHMsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlIHZpYSBOZXRsaW5rIChhbGwgZHVtcGVkIGF0dHJpYnV0ZXMgYXJlIHZhbGlkYXRlZCBhbmQgcG9wdWxhdGVkIGZyb20gaW5pdGlhbGl6ZWQgc2NhbGFyIHZhbHVlcykuIFRoZXJlIGlzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cXG4tIFVBRiAvIEtBU0FOOiBUaGUgY2hhbmdlcyBtb2RpZnkgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBidWNrZXQgZGVhbGxvY2F0aW9uIGxpZmV0aW1lcyAoYGtmcmVlX3JjdWApLCB3aGljaCBmYWxsIHVuZGVyIFVzZS1BZnRlci1GcmVlIGFuZCByZWZjb3VudCBzYWZldHkuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIG1vbml0b3JlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHRoZSBrZXJuZWwncyBidWlsdC1pbiByZWZjb3VudCBjaGVja2luZyAoYHJlZmNvdW50X3RgKS5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2xzX3JvdXRlIG5ldHdvcmsgdHJhZmZpYyBjb250cm9sIGNsYXNzaWZpZXIgaW4gbmV0L3NjaGVkL2Nsc19yb3V0ZS5jLCBpbnRyb2R1Y2luZyBhIHJlZmNvdW50IChmaWx0ZXJzX3JlZikgdG8gbWFuYWdlIHJvdXRlNF9idWNrZXQgbGlmZXRpbWVzIGR1cmluZyByb3V0ZSBmaWx0ZXIgbW9kaWZpY2F0aW9uLCBjcmVhdGlvbiwgYW5kIGRlbGV0aW9uIChyb3V0ZTRfY2hhbmdlLCByb3V0ZTRfZGVsZXRlLCBhbmQgcm91dGU0X3NldF9wYXJtcykuIFRoaXMgaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rL3RjIGZpbHRlciBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDo1OTozNC44NjE0NzYwOThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjM2NzE0MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNGI0NzBhOGFiMjhmNmZlMzdkNWE0ZTU3YTkwNTZiYzA4YzhlOGUyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMDA6NTk6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXFxuaW5kZXggMGQxMzI0YzkwNTgzNy4uMGYyMTFmMDMwZmQ5YSAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcXG4rKysgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcXG5AQCAtMTEsNiArMTEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWZjb3VudC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvZHN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcm91dGUuaFxcdTAwM2VcXG5AQCAtNDEsNiArNDIsNyBAQCBzdHJ1Y3Qgcm91dGU0X2hlYWQge1xcbiBzdHJ1Y3Qgcm91dGU0X2J1Y2tldCB7XFxuIFxcdC8qIDE2IEZST00gYnVja2V0cyArIDE2IElJRiBidWNrZXRzICsgMSB3aWxkY2FyZCBidWNrZXQgKi9cXG4gXFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3VcXHQqaHRbMTYgKyAxNiArIDFdO1xcbitcXHRyZWZjb3VudF90XFx0XFx0XFx0ZmlsdGVyc19yZWY7XFxuIFxcdHN0cnVjdCByY3VfaGVhZFxcdFxcdFxcdHJjdTtcXG4gfTtcXG4gXFxuQEAgLTMzNiw3ICszMzgsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCxcXG4gXFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKm5mO1xcbiBcXHRzdHJ1Y3Qgcm91dGU0X2J1Y2tldCAqYjtcXG4gXFx0dW5zaWduZWQgaW50IGggPSAwO1xcbi1cXHRpbnQgaSwgaDE7XFxuK1xcdGludCBoMTtcXG4gXFxuIFxcdGlmICghaGVhZCB8fCAhZilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTM2MiwyMyArMzY0LDE0IEBAIHN0YXRpYyBpbnQgcm91dGU0X2RlbGV0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqYXJnLCBib29sICpsYXN0LFxcbiBcXHRcXHRcXHR0Y2ZfZXh0c19nZXRfbmV0KFxcdTAwMjZmLVxcdTAwM2VleHRzKTtcXG4gXFx0XFx0XFx0dGNmX3F1ZXVlX3dvcmsoXFx1MDAyNmYtXFx1MDAzZXJ3b3JrLCByb3V0ZTRfZGVsZXRlX2ZpbHRlcl93b3JrKTtcXG4gXFxuLVxcdFxcdFxcdC8qIFN0cmlwIFJUTkwgcHJvdGVjdGVkIHRyZWUgKi9cXG4tXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjPSAzMjsgaSsrKSB7XFxuLVxcdFxcdFxcdFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpydDtcXG4tXFxuLVxcdFxcdFxcdFxcdHJ0ID0gcnRubF9kZXJlZmVyZW5jZShiLVxcdTAwM2VodFtpXSk7XFxuLVxcdFxcdFxcdFxcdGlmIChydClcXG4tXFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmItXFx1MDAzZWZpbHRlcnNfcmVmKSkge1xcbitcXHRcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtXFx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0a2ZyZWVfcmN1KGIsIHJjdSk7XFxuIFxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdC8qIE9LLCBzZXNzaW9uIGhhcyBubyBmbG93cyAqL1xcbi1cXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtXFx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcXG4tXFx0XFx0XFx0a2ZyZWVfcmN1KGIsIHJjdSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLW91dDpcXG4gXFx0Kmxhc3QgPSB0cnVlO1xcbiBcXHRmb3IgKGgxID0gMDsgaDEgXFx1MDAzYz0gMjU2OyBoMSsrKSB7XFxuIFxcdFxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoaGVhZC1cXHUwMDNldGFibGVbaDFdKSkge1xcbkBAIC00MDAsOCArMzkzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJvdXRlNF9wb2xpY3lbVENBX1JPVVRFNF9NQVggKyAxXSA9IHtcXG4gc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXFxuIFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGJhc2UsIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmLFxcbiBcXHRcXHRcXHQgICAgdTMyIGhhbmRsZSwgc3RydWN0IHJvdXRlNF9oZWFkICpoZWFkLFxcbi1cXHRcXHRcXHQgICAgc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgbmxhdHRyICplc3QsIGludCBuZXcsXFxuLVxcdFxcdFxcdCAgICB1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IG5sYXR0ciAqZXN0LFxcbitcXHRcXHRcXHQgICAgc3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsIHUzMiBmbGFncyxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHR1MzIgaWQgPSAwLCB0byA9IDAsIG5oYW5kbGUgPSAweDgwMDA7XFxuIFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmcDtcXG5AQCAtNDE0LDcgKzQwOCw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4gXFx0aWYgKHRiW1RDQV9ST1VURTRfVE9dKSB7XFxuLVxcdFxcdGlmIChuZXcgXFx1MDAyNlxcdTAwMjYgaGFuZGxlIFxcdTAwMjYgMHg4MDAwKSB7XFxuK1xcdFxcdGlmICghZm9sZCBcXHUwMDI2XFx1MDAyNiBoYW5kbGUgXFx1MDAyNiAweDgwMDApIHtcXG4gXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBoYW5kbGVcXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG5AQCAtNDM3LDE0ICs0MzEsMTQgQEAgc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXFxuIFxcdH0gZWxzZVxcbiBcXHRcXHRuaGFuZGxlIHw9IDB4RkZGRiBcXHUwMDNjXFx1MDAzYyAxNjtcXG4gXFxuLVxcdGlmIChoYW5kbGUgXFx1MDAyNlxcdTAwMjYgbmV3KSB7XFxuK1xcdGlmIChoYW5kbGUgXFx1MDAyNlxcdTAwMjYgKCFmb2xkIHx8IG5oYW5kbGUgPT0gKGhhbmRsZSBcXHUwMDI2IH4weDdGMDApKSlcXG4gXFx0XFx0bmhhbmRsZSB8PSBoYW5kbGUgXFx1MDAyNiAweDdGMDA7XFxuLVxcdFxcdGlmIChuaGFuZGxlICE9IGhhbmRsZSkge1xcbi1cXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBcXFwiSGFuZGxlIG1pc21hdGNoIGNvbnN0cnVjdGVkOiAleCAoZXhwZWN0ZWQ6ICV4KVxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIGhhbmRsZSwgbmhhbmRsZSk7XFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHR9XFxuK1xcbitcXHRpZiAoaGFuZGxlIFxcdTAwMjZcXHUwMDI2ICFmb2xkIFxcdTAwMjZcXHUwMDI2IG5oYW5kbGUgIT0gaGFuZGxlKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJIYW5kbGUgbWlzbWF0Y2ggY29uc3RydWN0ZWQ6ICV4IChleHBlY3RlZDogJXgpXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgaGFuZGxlLCBuaGFuZGxlKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICghbmhhbmRsZSkge1xcbkBAIC00NTksNiArNDUzLDcgQEAgc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXFxuIFxcdFxcdGlmIChiID09IE5VTEwpXFxuIFxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gXFxuK1xcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2Yi1cXHUwMDNlZmlsdGVyc19yZWYsIDEpO1xcbiBcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoaGVhZC1cXHUwMDNldGFibGVbaDFdLCBiKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0dW5zaWduZWQgaW50IGgyID0gZnJvbV9oYXNoKG5oYW5kbGUgXFx1MDAzZVxcdTAwM2UgMTYpO1xcbkBAIC00NjYsOCArNDYxLDE0IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbiBcXHRcXHRmb3IgKGZwID0gcnRubF9kZXJlZmVyZW5jZShiLVxcdTAwM2VodFtoMl0pO1xcbiBcXHRcXHQgICAgIGZwO1xcbiBcXHRcXHQgICAgIGZwID0gcnRubF9kZXJlZmVyZW5jZShmcC1cXHUwMDNlbmV4dCkpXFxuLVxcdFxcdFxcdGlmIChmcC1cXHUwMDNlaGFuZGxlID09IGYtXFx1MDAzZWhhbmRsZSlcXG4rXFx0XFx0XFx0aWYgKGZwICE9IGZvbGQgXFx1MDAyNlxcdTAwMjYgZnAtXFx1MDAzZWhhbmRsZSA9PSBuaGFuZGxlKSB7XFxuK1xcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJIYW5kbGUgJXggaXMgYWxyZWFkeSBpbiB1c2VcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBuaGFuZGxlKTtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2Yi1cXHUwMDNlZmlsdGVyc19yZWYpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAodGJbVENBX1JPVVRFNF9UT10pXFxuQEAgLTUwMCw5ICs1MDEsOCBAQCBzdGF0aWMgaW50IHJvdXRlNF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbiBcXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZm9sZCwgKmYxLCAqcGZwLCAqZiA9IE5VTEw7XFxuIFxcdHN0cnVjdCByb3V0ZTRfYnVja2V0ICpiO1xcbiBcXHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfUk9VVEU0X01BWCArIDFdO1xcbi1cXHR1bnNpZ25lZCBpbnQgaCwgdGg7XFxuK1xcdHVuc2lnbmVkIGludCBoO1xcbiBcXHRpbnQgZXJyO1xcbi1cXHRib29sIG5ldyA9IHRydWU7XFxuIFxcbiBcXHRpZiAoIWhhbmRsZSkge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJDcmVhdGluZyB3aXRoIGhhbmRsZSBvZiAwIGlzIGludmFsaWRcXFwiKTtcXG5AQCAtNTM5LDExICs1MzksMTAgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gXFxuIFxcdFxcdGYtXFx1MDAzZXRwID0gZm9sZC1cXHUwMDNldHA7XFxuIFxcdFxcdGYtXFx1MDAzZWJrdCA9IGZvbGQtXFx1MDAzZWJrdDtcXG4tXFx0XFx0bmV3ID0gZmFsc2U7XFxuIFxcdH1cXG4gXFxuIFxcdGVyciA9IHJvdXRlNF9zZXRfcGFybXMobmV0LCB0cCwgYmFzZSwgZiwgaGFuZGxlLCBoZWFkLCB0YixcXG4tXFx0XFx0XFx0ICAgICAgIHRjYVtUQ0FfUkFURV0sIG5ldywgZmxhZ3MsIGV4dGFjayk7XFxuK1xcdFxcdFxcdCAgICAgICB0Y2FbVENBX1JBVEVdLCBmb2xkLCBmbGFncywgZXh0YWNrKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyb3V0O1xcbiBcXG5AQCAtNTYwLDE3ICs1NTksMjAgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gXFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZik7XFxuIFxcbiBcXHRpZiAoZm9sZCkge1xcbi1cXHRcXHR0aCA9IHRvX2hhc2goZm9sZC1cXHUwMDNlaGFuZGxlKTtcXG4rXFx0XFx0YiA9IGZvbGQtXFx1MDAzZWJrdDtcXG4gXFx0XFx0aCA9IGZyb21faGFzaChmb2xkLVxcdTAwM2VoYW5kbGUgXFx1MDAzZVxcdTAwM2UgMTYpO1xcbi1cXHRcXHRiID0gcnRubF9kZXJlZmVyZW5jZShoZWFkLVxcdTAwM2V0YWJsZVt0aF0pO1xcbi1cXHRcXHRpZiAoYikge1xcbi1cXHRcXHRcXHRmcCA9IFxcdTAwMjZiLVxcdTAwM2VodFtoXTtcXG4tXFx0XFx0XFx0Zm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDtcXG4tXFx0XFx0XFx0ICAgICBmcCA9IFxcdTAwMjZwZnAtXFx1MDAzZW5leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkge1xcbi1cXHRcXHRcXHRcXHRpZiAocGZwID09IGZvbGQpIHtcXG4tXFx0XFx0XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC1cXHUwMDNlbmV4dCk7XFxuLVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRmcCA9IFxcdTAwMjZiLVxcdTAwM2VodFtoXTtcXG4rXFx0XFx0Zm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDtcXG4rXFx0XFx0ICAgICBmcCA9IFxcdTAwMjZwZnAtXFx1MDAzZW5leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkge1xcbitcXHRcXHRcXHRpZiAocGZwID09IGZvbGQpIHtcXG4rXFx0XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC1cXHUwMDNlbmV4dCk7XFxuK1xcdFxcdFxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmItXFx1MDAzZWZpbHRlcnNfcmVmKSkge1xcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdGggPSB0b19oYXNoKGZvbGQtXFx1MDAzZWhhbmRsZSk7XFxuK1xcbitcXHRcXHRcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtXFx1MDAzZXRhYmxlW3RoXSwgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdFxcdGtmcmVlX3JjdShiLCByY3UpO1xcbiBcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0fVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL2ZpbHRlcnMvcm91dGUuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvZmlsdGVycy9yb3V0ZS5qc29uXFxuaW5kZXggMDVjZWRjYTY3Y2NhZC4uMmQ1ODQzYWViZDcyOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL2ZpbHRlcnMvcm91dGUuanNvblxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvZmlsdGVycy9yb3V0ZS5qc29uXFxuQEAgLTIwMiw1ICsyMDIsMjE1IEBAXFxuICAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcbiAgICAgICAgICAgICBcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgcGFyZW50IHJvb3QgZHJyXFxcIlxcbiAgICAgICAgIF1cXG4rICAgIH0sXFxuKyAgICB7XFxuKyAgICAgICAgXFxcImlkXFxcIjogXFxcImE3ZDJcXFwiLFxcbisgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIkRlbGV0ZSBhIHJvdXRlIGZpbHRlciB0aGF0IHdhcyBtb3ZlZCB0byBhbm90aGVyIGJ1Y2tldFxcXCIsXFxuKyAgICAgICAgXFxcImNhdGVnb3J5XFxcIjogW1xcbisgICAgICAgICAgICBcXFwiZmlsdGVyXFxcIixcXG4rICAgICAgICAgICAgXFxcInJvdXRlXFxcIlxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcInBsdWdpbnNcXFwiOiB7XFxuKyAgICAgICAgICAgIFxcXCJyZXF1aXJlc1xcXCI6IFxcXCJuc1BsdWdpblxcXCJcXG4rICAgICAgICB9LFxcbisgICAgICAgIFxcXCJzZXR1cFxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcIiRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3NcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6MVxcXCIsXFxuKyAgICAgICAgICAgIFxcXCIkVEMgZmlsdGVyIGNoYW5nZSBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMDAxIHJvdXRlIGZyb20gMSB0byAyIGNsYXNzaWQgMToxXFxcIixcXG4rICAgICAgICAgICAgXFxcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAyMDAgcm91dGUgZnJvbSA1IHRvIDUgY2xhc3NpZCAxOjVcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwiY21kVW5kZXJUZXN0XFxcIjogXFxcIiRUQyBmaWx0ZXIgZGVsIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAwMDIgcm91dGUgZnJvbSAxIHRvIDJcXFwiLFxcbisgICAgICAgIFxcXCJleHBFeGl0Q29kZVxcXCI6IFxcXCIwXFxcIixcXG4rICAgICAgICBcXFwidmVyaWZ5Q21kXFxcIjogXFxcIiRUQyAtaiBmaWx0ZXIgc2hvdyBkZXYgJERFVjEgcGFyZW50IGZmZmY6XFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hKU09OXFxcIjogW1xcbisgICAgICAgICAgICB7XFxuKyAgICAgICAgICAgICAgICBcXFwicHJvdG9jb2xcXFwiOiBcXFwiaXBcXFwiLFxcbisgICAgICAgICAgICAgICAgXFxcInByZWZcXFwiOiAyMDAsXFxuKyAgICAgICAgICAgICAgICBcXFwia2luZFxcXCI6IFxcXCJyb3V0ZVxcXCIsXFxuKyAgICAgICAgICAgICAgICBcXFwiY2hhaW5cXFwiOiAwXFxuKyAgICAgICAgICAgIH0sXFxuKyAgICAgICAgICAgIHtcXG4rICAgICAgICAgICAgICAgIFxcXCJwcm90b2NvbFxcXCI6IFxcXCJpcFxcXCIsXFxuKyAgICAgICAgICAgICAgICBcXFwicHJlZlxcXCI6IDIwMCxcXG4rICAgICAgICAgICAgICAgIFxcXCJraW5kXFxcIjogXFxcInJvdXRlXFxcIixcXG4rICAgICAgICAgICAgICAgIFxcXCJjaGFpblxcXCI6IDAsXFxuKyAgICAgICAgICAgICAgICBcXFwib3B0aW9uc1xcXCI6IHtcXG4rICAgICAgICAgICAgICAgICAgICBcXFwiZmhcXFwiOiBcXFwiMHg1MDAwNVxcXCIsXFxuKyAgICAgICAgICAgICAgICAgICAgXFxcImZsb3dpZFxcXCI6IFxcXCIxOjVcXFwiXFxuKyAgICAgICAgICAgICAgICB9XFxuKyAgICAgICAgICAgIH1cXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcIiRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3NcXFwiXFxuKyAgICAgICAgXVxcbisgICAgfSxcXG4rICAgIHtcXG4rICAgICAgICBcXFwiaWRcXFwiOiBcXFwiYzA1YVxcXCIsXFxuKyAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiVHJ5IHRvIGNoYW5nZSBhIHJvdXRlIGZpbHRlciBvbnRvIGFuIGFscmVhZHkgdXNlZCBoYW5kbGVcXFwiLFxcbisgICAgICAgIFxcXCJjYXRlZ29yeVxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcImZpbHRlclxcXCIsXFxuKyAgICAgICAgICAgIFxcXCJyb3V0ZVxcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJwbHVnaW5zXFxcIjoge1xcbisgICAgICAgICAgICBcXFwicmVxdWlyZXNcXFwiOiBcXFwibnNQbHVnaW5cXFwiXFxuKyAgICAgICAgfSxcXG4rICAgICAgICBcXFwic2V0dXBcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCIkVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzXFxcIixcXG4rICAgICAgICAgICAgXFxcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjEgYWN0aW9uIG9rXFxcIixcXG4rICAgICAgICAgICAgXFxcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgcm91dGUgZnJvbSAyIHRvIDIgY2xhc3NpZCAxOjIgYWN0aW9uIGRyb3BcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwiY21kVW5kZXJUZXN0XFxcIjogXFxcIiRUQyBmaWx0ZXIgY2hhbmdlIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAwMDEgcm91dGUgZnJvbSAyIHRvIDIgY2xhc3NpZCAxOjEgYWN0aW9uIG9rXFxcIixcXG4rICAgICAgICBcXFwiZXhwRXhpdENvZGVcXFwiOiBcXFwiMlxcXCIsXFxuKyAgICAgICAgXFxcInZlcmlmeUNtZFxcXCI6IFxcXCIkVEMgLWogZmlsdGVyIHNob3cgZGV2ICRERVYxIHBhcmVudCBmZmZmOlxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoSlNPTlxcXCI6IFtcXG4rICAgICAgICAgICAge1xcbisgICAgICAgICAgICAgICAgXFxcInByb3RvY29sXFxcIjogXFxcImlwXFxcIixcXG4rICAgICAgICAgICAgICAgIFxcXCJwcmVmXFxcIjogMTAwLFxcbisgICAgICAgICAgICAgICAgXFxcImtpbmRcXFwiOiBcXFwicm91dGVcXFwiLFxcbisgICAgICAgICAgICAgICAgXFxcImNoYWluXFxcIjogMFxcbisgICAgICAgICAgICB9LFxcbisgICAgICAgICAgICB7XFxuKyAgICAgICAgICAgICAgICBcXFwicHJvdG9jb2xcXFwiOiBcXFwiaXBcXFwiLFxcbisgICAgICAgICAgICAgICAgXFxcInByZWZcXFwiOiAxMDAsXFxuKyAgICAgICAgICAgICAgICBcXFwia2luZFxcXCI6IFxcXCJyb3V0ZVxcXCIsXFxuKyAgICAgICAgICAgICAgICBcXFwiY2hhaW5cXFwiOiAwLFxcbisgICAgICAgICAgICAgICAgXFxcIm9wdGlvbnNcXFwiOiB7XFxuKyAgICAgICAgICAgICAgICAgICAgXFxcImZoXFxcIjogXFxcIjB4MTAwMDFcXFwiLFxcbisgICAgICAgICAgICAgICAgICAgIFxcXCJmbG93aWRcXFwiOiBcXFwiMToxXFxcIixcXG4rICAgICAgICAgICAgICAgICAgICBcXFwiYWN0aW9uc1xcXCI6IFtcXG4rICAgICAgICAgICAgICAgICAgICAgICAge1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIm9yZGVyXFxcIjogMSxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJraW5kXFxcIjogXFxcImdhY3RcXFwiLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImNvbnRyb2xfYWN0aW9uXFxcIjoge1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ0eXBlXFxcIjogXFxcInBhc3NcXFwiXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuKyAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4rICAgICAgICAgICAgICAgICAgICBdXFxuKyAgICAgICAgICAgICAgICB9XFxuKyAgICAgICAgICAgIH0sXFxuKyAgICAgICAgICAgIHtcXG4rICAgICAgICAgICAgICAgIFxcXCJwcm90b2NvbFxcXCI6IFxcXCJpcFxcXCIsXFxuKyAgICAgICAgICAgICAgICBcXFwicHJlZlxcXCI6IDEwMCxcXG4rICAgICAgICAgICAgICAgIFxcXCJraW5kXFxcIjogXFxcInJvdXRlXFxcIixcXG4rICAgICAgICAgICAgICAgIFxcXCJjaGFpblxcXCI6IDAsXFxuKyAgICAgICAgICAgICAgICBcXFwib3B0aW9uc1xcXCI6IHtcXG4rICAgICAgICAgICAgICAgICAgICBcXFwiZmhcXFwiOiBcXFwiMHgyMDAwMlxcXCIsXFxuKyAgICAgICAgICAgICAgICAgICAgXFxcImZsb3dpZFxcXCI6IFxcXCIxOjJcXFwiLFxcbisgICAgICAgICAgICAgICAgICAgIFxcXCJhY3Rpb25zXFxcIjogW1xcbisgICAgICAgICAgICAgICAgICAgICAgICB7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwib3JkZXJcXFwiOiAxLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImtpbmRcXFwiOiBcXFwiZ2FjdFxcXCIsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiY29udHJvbF9hY3Rpb25cXFwiOiB7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInR5cGVcXFwiOiBcXFwiZHJvcFxcXCJcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4rICAgICAgICAgICAgICAgICAgICAgICAgfVxcbisgICAgICAgICAgICAgICAgICAgIF1cXG4rICAgICAgICAgICAgICAgIH1cXG4rICAgICAgICAgICAgfVxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcbisgICAgICAgICAgICBcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzc1xcXCJcXG4rICAgICAgICBdXFxuKyAgICB9LFxcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCIzZjIxXFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJSZXBsYWNlIGEgcm91dGUgZmlsdGVyIHRoYXQgc2hhcmVzIGl0cyBrZXkgd2l0aCBhbm90aGVyIGZpbHRlclxcXCIsXFxuKyAgICAgICAgXFxcImNhdGVnb3J5XFxcIjogW1xcbisgICAgICAgICAgICBcXFwiZmlsdGVyXFxcIixcXG4rICAgICAgICAgICAgXFxcInJvdXRlXFxcIlxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcInBsdWdpbnNcXFwiOiB7XFxuKyAgICAgICAgICAgIFxcXCJyZXF1aXJlc1xcXCI6IFxcXCJuc1BsdWdpblxcXCJcXG4rICAgICAgICB9LFxcbisgICAgICAgIFxcXCJzZXR1cFxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcIiRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3NcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6MVxcXCIsXFxuKyAgICAgICAgICAgIFxcXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMjAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToyXFxcIlxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcImNtZFVuZGVyVGVzdFxcXCI6IFxcXCIkVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OVxcXCIsXFxuKyAgICAgICAgXFxcImV4cEV4aXRDb2RlXFxcIjogXFxcIjBcXFwiLFxcbisgICAgICAgIFxcXCJ2ZXJpZnlDbWRcXFwiOiBcXFwiJFRDIC1qIGZpbHRlciBzaG93IGRldiAkREVWMSBwYXJlbnQgZmZmZjpcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaEpTT05cXFwiOiBbXFxuKyAgICAgICAgICAgIHtcXG4rICAgICAgICAgICAgICAgIFxcXCJwcm90b2NvbFxcXCI6IFxcXCJpcFxcXCIsXFxuKyAgICAgICAgICAgICAgICBcXFwicHJlZlxcXCI6IDEwMCxcXG4rICAgICAgICAgICAgICAgIFxcXCJraW5kXFxcIjogXFxcInJvdXRlXFxcIixcXG4rICAgICAgICAgICAgICAgIFxcXCJjaGFpblxcXCI6IDBcXG4rICAgICAgICAgICAgfSxcXG4rICAgICAgICAgICAge1xcbisgICAgICAgICAgICAgICAgXFxcInByb3RvY29sXFxcIjogXFxcImlwXFxcIixcXG4rICAgICAgICAgICAgICAgIFxcXCJwcmVmXFxcIjogMTAwLFxcbisgICAgICAgICAgICAgICAgXFxcImtpbmRcXFwiOiBcXFwicm91dGVcXFwiLFxcbisgICAgICAgICAgICAgICAgXFxcImNoYWluXFxcIjogMCxcXG4rICAgICAgICAgICAgICAgIFxcXCJvcHRpb25zXFxcIjoge1xcbisgICAgICAgICAgICAgICAgICAgIFxcXCJmaFxcXCI6IFxcXCIweDEwMTAxXFxcIixcXG4rICAgICAgICAgICAgICAgICAgICBcXFwiZmxvd2lkXFxcIjogXFxcIjE6OVxcXCJcXG4rICAgICAgICAgICAgICAgIH1cXG4rICAgICAgICAgICAgfSxcXG4rICAgICAgICAgICAge1xcbisgICAgICAgICAgICAgICAgXFxcInByb3RvY29sXFxcIjogXFxcImlwXFxcIixcXG4rICAgICAgICAgICAgICAgIFxcXCJwcmVmXFxcIjogMTAwLFxcbisgICAgICAgICAgICAgICAgXFxcImtpbmRcXFwiOiBcXFwicm91dGVcXFwiLFxcbisgICAgICAgICAgICAgICAgXFxcImNoYWluXFxcIjogMCxcXG4rICAgICAgICAgICAgICAgIFxcXCJvcHRpb25zXFxcIjoge1xcbisgICAgICAgICAgICAgICAgICAgIFxcXCJmaFxcXCI6IFxcXCIweDEwMjAxXFxcIixcXG4rICAgICAgICAgICAgICAgICAgICBcXFwiZmxvd2lkXFxcIjogXFxcIjE6MlxcXCJcXG4rICAgICAgICAgICAgICAgIH1cXG4rICAgICAgICAgICAgfVxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcbisgICAgICAgICAgICBcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzc1xcXCJcXG4rICAgICAgICBdXFxuKyAgICB9LFxcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCI5ZDBlXFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJSZXBsYWNlIGJvdGggcm91dGUgZmlsdGVycyBzaGFyaW5nIGEga2V5XFxcIixcXG4rICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCJmaWx0ZXJcXFwiLFxcbisgICAgICAgICAgICBcXFwicm91dGVcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwicGx1Z2luc1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcInJlcXVpcmVzXFxcIjogXFxcIm5zUGx1Z2luXFxcIlxcbisgICAgICAgIH0sXFxuKyAgICAgICAgXFxcInNldHVwXFxcIjogW1xcbisgICAgICAgICAgICBcXFwiJFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzc1xcXCIsXFxuKyAgICAgICAgICAgIFxcXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxXFxcIixcXG4rICAgICAgICAgICAgXFxcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAyMDEgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjJcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGZpbHRlciByZXBsYWNlIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAxMDEgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjlcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwiY21kVW5kZXJUZXN0XFxcIjogXFxcIiRUQyBmaWx0ZXIgcmVwbGFjZSBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMjAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMTo4XFxcIixcXG4rICAgICAgICBcXFwiZXhwRXhpdENvZGVcXFwiOiBcXFwiMFxcXCIsXFxuKyAgICAgICAgXFxcInZlcmlmeUNtZFxcXCI6IFxcXCIkVEMgLWogZmlsdGVyIHNob3cgZGV2ICRERVYxIHBhcmVudCBmZmZmOlxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoSlNPTlxcXCI6IFtcXG4rICAgICAgICAgICAge1xcbisgICAgICAgICAgICAgICAgXFxcInByb3RvY29sXFxcIjogXFxcImlwXFxcIixcXG4rICAgICAgICAgICAgICAgIFxcXCJwcmVmXFxcIjogMTAwLFxcbisgICAgICAgICAgICAgICAgXFxcImtpbmRcXFwiOiBcXFwicm91dGVcXFwiLFxcbisgICAgICAgICAgICAgICAgXFxcImNoYWluXFxcIjogMFxcbisgICAgICAgICAgICB9LFxcbisgICAgICAgICAgICB7XFxuKyAgICAgICAgICAgICAgICBcXFwicHJvdG9jb2xcXFwiOiBcXFwiaXBcXFwiLFxcbisgICAgICAgICAgICAgICAgXFxcInByZWZcXFwiOiAxMDAsXFxuKyAgICAgICAgICAgICAgICBcXFwia2luZFxcXCI6IFxcXCJyb3V0ZVxcXCIsXFxuKyAgICAgICAgICAgICAgICBcXFwiY2hhaW5cXFwiOiAwLFxcbisgICAgICAgICAgICAgICAgXFxcIm9wdGlvbnNcXFwiOiB7XFxuKyAgICAgICAgICAgICAgICAgICAgXFxcImZoXFxcIjogXFxcIjB4MTAxMDFcXFwiLFxcbisgICAgICAgICAgICAgICAgICAgIFxcXCJmbG93aWRcXFwiOiBcXFwiMTo5XFxcIlxcbisgICAgICAgICAgICAgICAgfVxcbisgICAgICAgICAgICB9LFxcbisgICAgICAgICAgICB7XFxuKyAgICAgICAgICAgICAgICBcXFwicHJvdG9jb2xcXFwiOiBcXFwiaXBcXFwiLFxcbisgICAgICAgICAgICAgICAgXFxcInByZWZcXFwiOiAxMDAsXFxuKyAgICAgICAgICAgICAgICBcXFwia2luZFxcXCI6IFxcXCJyb3V0ZVxcXCIsXFxuKyAgICAgICAgICAgICAgICBcXFwiY2hhaW5cXFwiOiAwLFxcbisgICAgICAgICAgICAgICAgXFxcIm9wdGlvbnNcXFwiOiB7XFxuKyAgICAgICAgICAgICAgICAgICAgXFxcImZoXFxcIjogXFxcIjB4MTAyMDFcXFwiLFxcbisgICAgICAgICAgICAgICAgICAgIFxcXCJmbG93aWRcXFwiOiBcXFwiMTo4XFxcIlxcbisgICAgICAgICAgICAgICAgfVxcbisgICAgICAgICAgICB9XFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXFxcIlxcbisgICAgICAgIF1cXG4gICAgIH1cXG4gXVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDo1OTozNi4zMjU4MjY2NDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMyMDkxOTkzMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9DTFNfUk9VVEU0XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicm91dGU0X2NoYW5nZVwiLFxuICAgIFwicm91dGU0X2RlbGV0ZVwiLFxuICAgIFwicm91dGU0X3NldF9wYXJtc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbHNfcm91dGUgbmV0d29yayB0cmFmZmljIGNvbnRyb2wgY2xhc3NpZmllciBpbiBuZXQvc2NoZWQvY2xzX3JvdXRlLmMsIGludHJvZHVjaW5nIGEgcmVmY291bnQgKGZpbHRlcnNfcmVmKSB0byBtYW5hZ2Ugcm91dGU0X2J1Y2tldCBsaWZldGltZXMgZHVyaW5nIHJvdXRlIGZpbHRlciBtb2RpZmljYXRpb24sIGNyZWF0aW9uLCBhbmQgZGVsZXRpb24gKHJvdXRlNF9jaGFuZ2UsIHJvdXRlNF9kZWxldGUsIGFuZCByb3V0ZTRfc2V0X3Bhcm1zKS4gVGhpcyBpcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsvdGMgZmlsdGVyIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDRiNDcwYThhYjI4ZjZmZTM3ZDVhNGU1N2E5MDU2YmMwOGM4ZThlMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDA6NTk6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmMgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbmluZGV4IDBkMTMyNGM5MDU4MzcuLjBmMjExZjAzMGZkOWEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbisrKyBiL25ldC9zY2hlZC9jbHNfcm91dGUuY1xuQEAgLTExLDYgKzExLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG5AQCAtNDEsNiArNDIsNyBAQCBzdHJ1Y3Qgcm91dGU0X2hlYWQge1xuIHN0cnVjdCByb3V0ZTRfYnVja2V0IHtcbiBcdC8qIDE2IEZST00gYnVja2V0cyArIDE2IElJRiBidWNrZXRzICsgMSB3aWxkY2FyZCBidWNrZXQgKi9cbiBcdHN0cnVjdCByb3V0ZTRfZmlsdGVyIF9fcmN1XHQqaHRbMTYgKyAxNiArIDFdO1xuK1x0cmVmY291bnRfdFx0XHRcdGZpbHRlcnNfcmVmO1xuIFx0c3RydWN0IHJjdV9oZWFkXHRcdFx0cmN1O1xuIH07XG4gXG5AQCAtMzM2LDcgKzMzOCw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X2RlbGV0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqYXJnLCBib29sICpsYXN0LFxuIFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKm5mO1xuIFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gXHR1bnNpZ25lZCBpbnQgaCA9IDA7XG4tXHRpbnQgaSwgaDE7XG4rXHRpbnQgaDE7XG4gXG4gXHRpZiAoIWhlYWQgfHwgIWYpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTM2MiwyMyArMzY0LDE0IEBAIHN0YXRpYyBpbnQgcm91dGU0X2RlbGV0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqYXJnLCBib29sICpsYXN0LFxuIFx0XHRcdHRjZl9leHRzX2dldF9uZXQoXHUwMDI2Zi1cdTAwM2VleHRzKTtcbiBcdFx0XHR0Y2ZfcXVldWVfd29yayhcdTAwMjZmLVx1MDAzZXJ3b3JrLCByb3V0ZTRfZGVsZXRlX2ZpbHRlcl93b3JrKTtcbiBcbi1cdFx0XHQvKiBTdHJpcCBSVE5MIHByb3RlY3RlZCB0cmVlICovXG4tXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2M9IDMyOyBpKyspIHtcbi1cdFx0XHRcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpydDtcbi1cbi1cdFx0XHRcdHJ0ID0gcnRubF9kZXJlZmVyZW5jZShiLVx1MDAzZWh0W2ldKTtcbi1cdFx0XHRcdGlmIChydClcbi1cdFx0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKSkge1xuK1x0XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcbitcdFx0XHRcdGtmcmVlX3JjdShiLCByY3UpO1xuIFx0XHRcdH1cbi1cbi1cdFx0XHQvKiBPSywgc2Vzc2lvbiBoYXMgbm8gZmxvd3MgKi9cbi1cdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtXHUwMDNldGFibGVbdG9faGFzaChoKV0sIE5VTEwpO1xuLVx0XHRcdGtmcmVlX3JjdShiLCByY3UpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4gXG4tb3V0OlxuIFx0Kmxhc3QgPSB0cnVlO1xuIFx0Zm9yIChoMSA9IDA7IGgxIFx1MDAzYz0gMjU2OyBoMSsrKSB7XG4gXHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoaGVhZC1cdTAwM2V0YWJsZVtoMV0pKSB7XG5AQCAtNDAwLDggKzM5Myw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSByb3V0ZTRfcG9saWN5W1RDQV9ST1VURTRfTUFYICsgMV0gPSB7XG4gc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG4gXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYmFzZSwgc3RydWN0IHJvdXRlNF9maWx0ZXIgKmYsXG4gXHRcdFx0ICAgIHUzMiBoYW5kbGUsIHN0cnVjdCByb3V0ZTRfaGVhZCAqaGVhZCxcbi1cdFx0XHQgICAgc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgbmxhdHRyICplc3QsIGludCBuZXcsXG4tXHRcdFx0ICAgIHUzMiBmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK1x0XHRcdCAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBubGF0dHIgKmVzdCxcbitcdFx0XHQgICAgc3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsIHUzMiBmbGFncyxcbitcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHUzMiBpZCA9IDAsIHRvID0gMCwgbmhhbmRsZSA9IDB4ODAwMDtcbiBcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmcDtcbkBAIC00MTQsNyArNDA4LDcgQEAgc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRpZiAodGJbVENBX1JPVVRFNF9UT10pIHtcbi1cdFx0aWYgKG5ldyBcdTAwMjZcdTAwMjYgaGFuZGxlIFx1MDAyNiAweDgwMDApIHtcbitcdFx0aWYgKCFmb2xkIFx1MDAyNlx1MDAyNiBoYW5kbGUgXHUwMDI2IDB4ODAwMCkge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJJbnZhbGlkIGhhbmRsZVwiKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuQEAgLTQzNywxNCArNDMxLDE0IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0fSBlbHNlXG4gXHRcdG5oYW5kbGUgfD0gMHhGRkZGIFx1MDAzY1x1MDAzYyAxNjtcbiBcbi1cdGlmIChoYW5kbGUgXHUwMDI2XHUwMDI2IG5ldykge1xuK1x0aWYgKGhhbmRsZSBcdTAwMjZcdTAwMjYgKCFmb2xkIHx8IG5oYW5kbGUgPT0gKGhhbmRsZSBcdTAwMjYgfjB4N0YwMCkpKVxuIFx0XHRuaGFuZGxlIHw9IGhhbmRsZSBcdTAwMjYgMHg3RjAwO1xuLVx0XHRpZiAobmhhbmRsZSAhPSBoYW5kbGUpIHtcbi1cdFx0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuLVx0XHRcdFx0XHQgICBcIkhhbmRsZSBtaXNtYXRjaCBjb25zdHJ1Y3RlZDogJXggKGV4cGVjdGVkOiAleClcIixcbi1cdFx0XHRcdFx0ICAgaGFuZGxlLCBuaGFuZGxlKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuK1xuK1x0aWYgKGhhbmRsZSBcdTAwMjZcdTAwMjYgIWZvbGQgXHUwMDI2XHUwMDI2IG5oYW5kbGUgIT0gaGFuZGxlKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXG4rXHRcdFx0XHQgICBcIkhhbmRsZSBtaXNtYXRjaCBjb25zdHJ1Y3RlZDogJXggKGV4cGVjdGVkOiAleClcIixcbitcdFx0XHRcdCAgIGhhbmRsZSwgbmhhbmRsZSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuIFx0aWYgKCFuaGFuZGxlKSB7XG5AQCAtNDU5LDYgKzQ1Myw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0XHRpZiAoYiA9PSBOVUxMKVxuIFx0XHRcdHJldHVybiAtRU5PQlVGUztcbiBcbitcdFx0cmVmY291bnRfc2V0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYsIDEpO1xuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoaGVhZC1cdTAwM2V0YWJsZVtoMV0sIGIpO1xuIFx0fSBlbHNlIHtcbiBcdFx0dW5zaWduZWQgaW50IGgyID0gZnJvbV9oYXNoKG5oYW5kbGUgXHUwMDNlXHUwMDNlIDE2KTtcbkBAIC00NjYsOCArNDYxLDE0IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0XHRmb3IgKGZwID0gcnRubF9kZXJlZmVyZW5jZShiLVx1MDAzZWh0W2gyXSk7XG4gXHRcdCAgICAgZnA7XG4gXHRcdCAgICAgZnAgPSBydG5sX2RlcmVmZXJlbmNlKGZwLVx1MDAzZW5leHQpKVxuLVx0XHRcdGlmIChmcC1cdTAwM2VoYW5kbGUgPT0gZi1cdTAwM2VoYW5kbGUpXG4rXHRcdFx0aWYgKGZwICE9IGZvbGQgXHUwMDI2XHUwMDI2IGZwLVx1MDAzZWhhbmRsZSA9PSBuaGFuZGxlKSB7XG4rXHRcdFx0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuK1x0XHRcdFx0XHRcdCAgIFwiSGFuZGxlICV4IGlzIGFscmVhZHkgaW4gdXNlXCIsXG4rXHRcdFx0XHRcdFx0ICAgbmhhbmRsZSk7XG4gXHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbitcdFx0XHR9XG4rXG4rXHRcdHJlZmNvdW50X2luYyhcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKTtcbiBcdH1cbiBcbiBcdGlmICh0YltUQ0FfUk9VVEU0X1RPXSlcbkBAIC01MDAsOSArNTAxLDggQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmb2xkLCAqZjEsICpwZnAsICpmID0gTlVMTDtcbiBcdHN0cnVjdCByb3V0ZTRfYnVja2V0ICpiO1xuIFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX1JPVVRFNF9NQVggKyAxXTtcbi1cdHVuc2lnbmVkIGludCBoLCB0aDtcbitcdHVuc2lnbmVkIGludCBoO1xuIFx0aW50IGVycjtcbi1cdGJvb2wgbmV3ID0gdHJ1ZTtcbiBcbiBcdGlmICghaGFuZGxlKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJDcmVhdGluZyB3aXRoIGhhbmRsZSBvZiAwIGlzIGludmFsaWRcIik7XG5AQCAtNTM5LDExICs1MzksMTAgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcbiBcdFx0Zi1cdTAwM2V0cCA9IGZvbGQtXHUwMDNldHA7XG4gXHRcdGYtXHUwMDNlYmt0ID0gZm9sZC1cdTAwM2Via3Q7XG4tXHRcdG5ldyA9IGZhbHNlO1xuIFx0fVxuIFxuIFx0ZXJyID0gcm91dGU0X3NldF9wYXJtcyhuZXQsIHRwLCBiYXNlLCBmLCBoYW5kbGUsIGhlYWQsIHRiLFxuLVx0XHRcdCAgICAgICB0Y2FbVENBX1JBVEVdLCBuZXcsIGZsYWdzLCBleHRhY2spO1xuK1x0XHRcdCAgICAgICB0Y2FbVENBX1JBVEVdLCBmb2xkLCBmbGFncywgZXh0YWNrKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFxuQEAgLTU2MCwxNyArNTU5LDIwIEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmKTtcbiBcbiBcdGlmIChmb2xkKSB7XG4tXHRcdHRoID0gdG9faGFzaChmb2xkLVx1MDAzZWhhbmRsZSk7XG4rXHRcdGIgPSBmb2xkLVx1MDAzZWJrdDtcbiBcdFx0aCA9IGZyb21faGFzaChmb2xkLVx1MDAzZWhhbmRsZSBcdTAwM2VcdTAwM2UgMTYpO1xuLVx0XHRiID0gcnRubF9kZXJlZmVyZW5jZShoZWFkLVx1MDAzZXRhYmxlW3RoXSk7XG4tXHRcdGlmIChiKSB7XG4tXHRcdFx0ZnAgPSBcdTAwMjZiLVx1MDAzZWh0W2hdO1xuLVx0XHRcdGZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7XG4tXHRcdFx0ICAgICBmcCA9IFx1MDAyNnBmcC1cdTAwM2VuZXh0LCBwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCkpIHtcbi1cdFx0XHRcdGlmIChwZnAgPT0gZm9sZCkge1xuLVx0XHRcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmb2xkLVx1MDAzZW5leHQpO1xuLVx0XHRcdFx0XHRicmVhaztcbitcdFx0ZnAgPSBcdTAwMjZiLVx1MDAzZWh0W2hdO1xuK1x0XHRmb3IgKHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgcGZwO1xuK1x0XHQgICAgIGZwID0gXHUwMDI2cGZwLVx1MDAzZW5leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkge1xuK1x0XHRcdGlmIChwZnAgPT0gZm9sZCkge1xuK1x0XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC1cdTAwM2VuZXh0KTtcbitcdFx0XHRcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZikpIHtcbitcdFx0XHRcdFx0dW5zaWduZWQgaW50IHRoID0gdG9faGFzaChmb2xkLVx1MDAzZWhhbmRsZSk7XG4rXG4rXHRcdFx0XHRcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cdTAwM2V0YWJsZVt0aF0sIE5VTEwpO1xuK1x0XHRcdFx0XHRrZnJlZV9yY3UoYiwgcmN1KTtcbiBcdFx0XHRcdH1cbitcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvZmlsdGVycy9yb3V0ZS5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb25cbmluZGV4IDA1Y2VkY2E2N2NjYWQuLjJkNTg0M2FlYmQ3MjkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL2ZpbHRlcnMvcm91dGUuanNvblxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb25cbkBAIC0yMDIsNSArMjAyLDIxNSBAQFxuICAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4gICAgICAgICAgICAgXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBwYXJlbnQgcm9vdCBkcnJcIlxuICAgICAgICAgXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiYTdkMlwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiRGVsZXRlIGEgcm91dGUgZmlsdGVyIHRoYXQgd2FzIG1vdmVkIHRvIGFub3RoZXIgYnVja2V0XCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcImZpbHRlclwiLFxuKyAgICAgICAgICAgIFwicm91dGVcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtcbisgICAgICAgICAgICBcIiRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3NcIixcbisgICAgICAgICAgICBcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjFcIixcbisgICAgICAgICAgICBcIiRUQyBmaWx0ZXIgY2hhbmdlIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAwMDEgcm91dGUgZnJvbSAxIHRvIDIgY2xhc3NpZCAxOjFcIixcbisgICAgICAgICAgICBcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAyMDAgcm91dGUgZnJvbSA1IHRvIDUgY2xhc3NpZCAxOjVcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIGZpbHRlciBkZWwgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDAwMiByb3V0ZSBmcm9tIDEgdG8gMlwiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIC1qIGZpbHRlciBzaG93IGRldiAkREVWMSBwYXJlbnQgZmZmZjpcIixcbisgICAgICAgIFwibWF0Y2hKU09OXCI6IFtcbisgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgIFwicHJvdG9jb2xcIjogXCJpcFwiLFxuKyAgICAgICAgICAgICAgICBcInByZWZcIjogMjAwLFxuKyAgICAgICAgICAgICAgICBcImtpbmRcIjogXCJyb3V0ZVwiLFxuKyAgICAgICAgICAgICAgICBcImNoYWluXCI6IDBcbisgICAgICAgICAgICB9LFxuKyAgICAgICAgICAgIHtcbisgICAgICAgICAgICAgICAgXCJwcm90b2NvbFwiOiBcImlwXCIsXG4rICAgICAgICAgICAgICAgIFwicHJlZlwiOiAyMDAsXG4rICAgICAgICAgICAgICAgIFwia2luZFwiOiBcInJvdXRlXCIsXG4rICAgICAgICAgICAgICAgIFwiY2hhaW5cIjogMCxcbisgICAgICAgICAgICAgICAgXCJvcHRpb25zXCI6IHtcbisgICAgICAgICAgICAgICAgICAgIFwiZmhcIjogXCIweDUwMDA1XCIsXG4rICAgICAgICAgICAgICAgICAgICBcImZsb3dpZFwiOiBcIjE6NVwiXG4rICAgICAgICAgICAgICAgIH1cbisgICAgICAgICAgICB9XG4rICAgICAgICBdLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXCJcbisgICAgICAgIF1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcImMwNWFcIixcbisgICAgICAgIFwibmFtZVwiOiBcIlRyeSB0byBjaGFuZ2UgYSByb3V0ZSBmaWx0ZXIgb250byBhbiBhbHJlYWR5IHVzZWQgaGFuZGxlXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcImZpbHRlclwiLFxuKyAgICAgICAgICAgIFwicm91dGVcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtcbisgICAgICAgICAgICBcIiRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3NcIixcbisgICAgICAgICAgICBcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjEgYWN0aW9uIG9rXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIHJvdXRlIGZyb20gMiB0byAyIGNsYXNzaWQgMToyIGFjdGlvbiBkcm9wXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBmaWx0ZXIgY2hhbmdlIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAwMDEgcm91dGUgZnJvbSAyIHRvIDIgY2xhc3NpZCAxOjEgYWN0aW9uIG9rXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMlwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgLWogZmlsdGVyIHNob3cgZGV2ICRERVYxIHBhcmVudCBmZmZmOlwiLFxuKyAgICAgICAgXCJtYXRjaEpTT05cIjogW1xuKyAgICAgICAgICAgIHtcbisgICAgICAgICAgICAgICAgXCJwcm90b2NvbFwiOiBcImlwXCIsXG4rICAgICAgICAgICAgICAgIFwicHJlZlwiOiAxMDAsXG4rICAgICAgICAgICAgICAgIFwia2luZFwiOiBcInJvdXRlXCIsXG4rICAgICAgICAgICAgICAgIFwiY2hhaW5cIjogMFxuKyAgICAgICAgICAgIH0sXG4rICAgICAgICAgICAge1xuKyAgICAgICAgICAgICAgICBcInByb3RvY29sXCI6IFwiaXBcIixcbisgICAgICAgICAgICAgICAgXCJwcmVmXCI6IDEwMCxcbisgICAgICAgICAgICAgICAgXCJraW5kXCI6IFwicm91dGVcIixcbisgICAgICAgICAgICAgICAgXCJjaGFpblwiOiAwLFxuKyAgICAgICAgICAgICAgICBcIm9wdGlvbnNcIjoge1xuKyAgICAgICAgICAgICAgICAgICAgXCJmaFwiOiBcIjB4MTAwMDFcIixcbisgICAgICAgICAgICAgICAgICAgIFwiZmxvd2lkXCI6IFwiMToxXCIsXG4rICAgICAgICAgICAgICAgICAgICBcImFjdGlvbnNcIjogW1xuKyAgICAgICAgICAgICAgICAgICAgICAgIHtcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmRlclwiOiAxLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImtpbmRcIjogXCJnYWN0XCIsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udHJvbF9hY3Rpb25cIjoge1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwicGFzc1wiXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbisgICAgICAgICAgICAgICAgICAgICAgICB9XG4rICAgICAgICAgICAgICAgICAgICBdXG4rICAgICAgICAgICAgICAgIH1cbisgICAgICAgICAgICB9LFxuKyAgICAgICAgICAgIHtcbisgICAgICAgICAgICAgICAgXCJwcm90b2NvbFwiOiBcImlwXCIsXG4rICAgICAgICAgICAgICAgIFwicHJlZlwiOiAxMDAsXG4rICAgICAgICAgICAgICAgIFwia2luZFwiOiBcInJvdXRlXCIsXG4rICAgICAgICAgICAgICAgIFwiY2hhaW5cIjogMCxcbisgICAgICAgICAgICAgICAgXCJvcHRpb25zXCI6IHtcbisgICAgICAgICAgICAgICAgICAgIFwiZmhcIjogXCIweDIwMDAyXCIsXG4rICAgICAgICAgICAgICAgICAgICBcImZsb3dpZFwiOiBcIjE6MlwiLFxuKyAgICAgICAgICAgICAgICAgICAgXCJhY3Rpb25zXCI6IFtcbisgICAgICAgICAgICAgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JkZXJcIjogMSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJraW5kXCI6IFwiZ2FjdFwiLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xfYWN0aW9uXCI6IHtcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImRyb3BcIlxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4rICAgICAgICAgICAgICAgICAgICAgICAgfVxuKyAgICAgICAgICAgICAgICAgICAgXVxuKyAgICAgICAgICAgICAgICB9XG4rICAgICAgICAgICAgfVxuKyAgICAgICAgXSxcbisgICAgICAgIFwidGVhcmRvd25cIjogW1xuKyAgICAgICAgICAgIFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzc1wiXG4rICAgICAgICBdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCIzZjIxXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJSZXBsYWNlIGEgcm91dGUgZmlsdGVyIHRoYXQgc2hhcmVzIGl0cyBrZXkgd2l0aCBhbm90aGVyIGZpbHRlclwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJmaWx0ZXJcIixcbisgICAgICAgICAgICBcInJvdXRlXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMjAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToyXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBmaWx0ZXIgcmVwbGFjZSBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMTo5XCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgLWogZmlsdGVyIHNob3cgZGV2ICRERVYxIHBhcmVudCBmZmZmOlwiLFxuKyAgICAgICAgXCJtYXRjaEpTT05cIjogW1xuKyAgICAgICAgICAgIHtcbisgICAgICAgICAgICAgICAgXCJwcm90b2NvbFwiOiBcImlwXCIsXG4rICAgICAgICAgICAgICAgIFwicHJlZlwiOiAxMDAsXG4rICAgICAgICAgICAgICAgIFwia2luZFwiOiBcInJvdXRlXCIsXG4rICAgICAgICAgICAgICAgIFwiY2hhaW5cIjogMFxuKyAgICAgICAgICAgIH0sXG4rICAgICAgICAgICAge1xuKyAgICAgICAgICAgICAgICBcInByb3RvY29sXCI6IFwiaXBcIixcbisgICAgICAgICAgICAgICAgXCJwcmVmXCI6IDEwMCxcbisgICAgICAgICAgICAgICAgXCJraW5kXCI6IFwicm91dGVcIixcbisgICAgICAgICAgICAgICAgXCJjaGFpblwiOiAwLFxuKyAgICAgICAgICAgICAgICBcIm9wdGlvbnNcIjoge1xuKyAgICAgICAgICAgICAgICAgICAgXCJmaFwiOiBcIjB4MTAxMDFcIixcbisgICAgICAgICAgICAgICAgICAgIFwiZmxvd2lkXCI6IFwiMTo5XCJcbisgICAgICAgICAgICAgICAgfVxuKyAgICAgICAgICAgIH0sXG4rICAgICAgICAgICAge1xuKyAgICAgICAgICAgICAgICBcInByb3RvY29sXCI6IFwiaXBcIixcbisgICAgICAgICAgICAgICAgXCJwcmVmXCI6IDEwMCxcbisgICAgICAgICAgICAgICAgXCJraW5kXCI6IFwicm91dGVcIixcbisgICAgICAgICAgICAgICAgXCJjaGFpblwiOiAwLFxuKyAgICAgICAgICAgICAgICBcIm9wdGlvbnNcIjoge1xuKyAgICAgICAgICAgICAgICAgICAgXCJmaFwiOiBcIjB4MTAyMDFcIixcbisgICAgICAgICAgICAgICAgICAgIFwiZmxvd2lkXCI6IFwiMToyXCJcbisgICAgICAgICAgICAgICAgfVxuKyAgICAgICAgICAgIH1cbisgICAgICAgIF0sXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcbisgICAgICAgICAgICBcIiRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3NcIlxuKyAgICAgICAgXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiOWQwZVwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiUmVwbGFjZSBib3RoIHJvdXRlIGZpbHRlcnMgc2hhcmluZyBhIGtleVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJmaWx0ZXJcIixcbisgICAgICAgICAgICBcInJvdXRlXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMjAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToyXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OVwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDIwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OFwiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIC1qIGZpbHRlciBzaG93IGRldiAkREVWMSBwYXJlbnQgZmZmZjpcIixcbisgICAgICAgIFwibWF0Y2hKU09OXCI6IFtcbisgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgIFwicHJvdG9jb2xcIjogXCJpcFwiLFxuKyAgICAgICAgICAgICAgICBcInByZWZcIjogMTAwLFxuKyAgICAgICAgICAgICAgICBcImtpbmRcIjogXCJyb3V0ZVwiLFxuKyAgICAgICAgICAgICAgICBcImNoYWluXCI6IDBcbisgICAgICAgICAgICB9LFxuKyAgICAgICAgICAgIHtcbisgICAgICAgICAgICAgICAgXCJwcm90b2NvbFwiOiBcImlwXCIsXG4rICAgICAgICAgICAgICAgIFwicHJlZlwiOiAxMDAsXG4rICAgICAgICAgICAgICAgIFwia2luZFwiOiBcInJvdXRlXCIsXG4rICAgICAgICAgICAgICAgIFwiY2hhaW5cIjogMCxcbisgICAgICAgICAgICAgICAgXCJvcHRpb25zXCI6IHtcbisgICAgICAgICAgICAgICAgICAgIFwiZmhcIjogXCIweDEwMTAxXCIsXG4rICAgICAgICAgICAgICAgICAgICBcImZsb3dpZFwiOiBcIjE6OVwiXG4rICAgICAgICAgICAgICAgIH1cbisgICAgICAgICAgICB9LFxuKyAgICAgICAgICAgIHtcbisgICAgICAgICAgICAgICAgXCJwcm90b2NvbFwiOiBcImlwXCIsXG4rICAgICAgICAgICAgICAgIFwicHJlZlwiOiAxMDAsXG4rICAgICAgICAgICAgICAgIFwia2luZFwiOiBcInJvdXRlXCIsXG4rICAgICAgICAgICAgICAgIFwiY2hhaW5cIjogMCxcbisgICAgICAgICAgICAgICAgXCJvcHRpb25zXCI6IHtcbisgICAgICAgICAgICAgICAgICAgIFwiZmhcIjogXCIweDEwMjAxXCIsXG4rICAgICAgICAgICAgICAgICAgICBcImZsb3dpZFwiOiBcIjE6OFwiXG4rICAgICAgICAgICAgICAgIH1cbisgICAgICAgICAgICB9XG4rICAgICAgICBdLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXCJcbisgICAgICAgIF1cbiAgICAgfVxuIF1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjU5OjM2LjMyNTgyODIyM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNTMyNjA5NTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IFJvdXRlIENsYXNzaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIHBhdGNoIGRvd24gYW5kIGZpZ3VyZSBvdXQgaWYgaXQncyBmdXp6LXdvcnRoeS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIHBvaW50czogdGhlIGNvbmZpZ3VyYXRpb24gcHJlcmVxdWlzaXRlcywgYW5kIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgb3Igc3RydWN0dXJlcyB0aGF0IGRlc2VydmUgdGhlIG1vc3QgYXR0ZW50aW9uIGR1cmluZyBmdXp6aW5nLlxuXG5BbHJpZ2h0LCB0aGUgY2hhbmdlcyBpbnZvbHZlIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgIGFuZCBhIGNvcnJlc3BvbmRpbmcgc2VsZnRlc3QgdXBkYXRlIGluIGByb3V0ZS5qc29uYC4gVGhlIGNvZGUgY2hhbmdlcyBpbiBgY2xzX3JvdXRlLmNgIGFyZSB3aGF0IGludHJpZ3VlIG1lLiBXZSdyZSBzZWVpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUgYHJvdXRlNF9idWNrZXRgIHN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IHRoZSBhZGRpdGlvbiBvZiBgcmVmY291bnRfdCBmaWx0ZXJzX3JlZjtgLiBUaGlzIGhpbnRzIGF0IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIGFsd2F5cyBhIGdvb2Qgc2lnbiBmb3IgZnV6emluZyB0YXJnZXRzIVxuXG5Mb29raW5nIGNsb3NlcjogdGhlIGByb3V0ZTRfZGVsZXRlKClgIGZ1bmN0aW9uIG5vdyBpbmNsdWRlcyByZWZjb3VudCBoYW5kbGluZyBhbmQgYnVja2V0IGZyZWVpbmcgbG9naWMuIGByb3V0ZTRfc2V0X3Bhcm1zKClgIGhhcyB2YWxpZGF0aW9uLCBkdXBsaWNhdGUgY2hlY2tzLCBhbmQgcmVmY291bnQgbWFuYWdlbWVudCDigJMgYWxsIGFkZGluZyBlbnRyeSBwb2ludHMgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEZpbmFsbHksIGByb3V0ZTRfY2hhbmdlKClgIHRvdWNoZXMgYGZvbGRgLCBidWNrZXQgaGFuZGxpbmcsIGFuZCwgY3JpdGljYWxseSwgYHJlZmNvdW50X2RlY19hbmRfdGVzdGAuIFRoYXQgbGFzdCBvbmUgaXMgc2NyZWFtaW5nIGZvciBzb21lIGZvY3VzZWQgZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIEtjb25maWcgZm9yIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgLiBOZWVkIHRvIGtub3cgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgdG8gZW5hYmxlIHRoaXMgY29kZS4gSSdsbCB1c2UgYGdyZXBwZXJgIChvciBqdXN0IHJlYWQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSwgb2YgY291cnNlKSB0byBtYWtlIHN1cmUgSSBrbm93IGhvdyB0byBjb25maWd1cmUgdGhlIGtlcm5lbCB0byBoaXQgdGhlc2UgY29kZSBwYXRocy4gS25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUga2V5IHRvIGNyZWF0aW5nIGEgZm9jdXNlZCBmdXp6aW5nIGNhbXBhaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDMwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6NTk6NDcuODU4NDQwMjM4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Mzg2MjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNsc19yb3V0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9NDk0PWNvbmZpZyBORVRfQ0xTX1JPVVRFNFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNTAzLVxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbm5ldC9zY2hlZC9LY29uZmlnOjUwNDpcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfcm91dGUuXFxubmV0L3NjaGVkL0tjb25maWctNTA1LVxcbi0tXFxubmV0L3NjaGVkL01ha2VmaWxlPTY4PW9iai0kKENPTkZJR19ORVRfQ0xTX1UzMilcXHQrPSBjbHNfdTMyLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGU6Njk6b2JqLSQoQ09ORklHX05FVF9DTFNfUk9VVEU0KVxcdCs9IGNsc19yb3V0ZS5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTcwLW9iai0kKENPTkZJR19ORVRfQ0xTX0ZXKVxcdCs9IGNsc19mdy5vXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtMi0vKlxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYzozOiAqIG5ldC9zY2hlZC9jbHNfcm91dGUuY1xcdFJPVVRFNCBjbGFzc2lmaWVyLlxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy00LSAqXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM9NjcyPXN0YXRpYyB2b2lkIHJvdXRlNF9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy02NzktXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjY4MDpzdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX3JvdXRlNF9vcHMgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjgxLVxcdC5raW5kXFx0XFx0PVxcdFxcXCJyb3V0ZVxcXCIsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM9Njk1PXN0YXRpYyBpbnQgX19pbml0IGluaXRfcm91dGU0KHZvaWQpXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTY5Ni17XFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjY5NzpcXHRyZXR1cm4gcmVnaXN0ZXJfdGNmX3Byb3RvX29wcyhcXHUwMDI2Y2xzX3JvdXRlNF9vcHMpO1xcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy02OTgtfVxcbi0tXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jPTcwMD1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yb3V0ZTQodm9pZClcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNzAxLXtcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM6NzAyOlxcdHVucmVnaXN0ZXJfdGNmX3Byb3RvX29wcyhcXHUwMDI2Y2xzX3JvdXRlNF9vcHMpO1xcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy03MDMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDo1OTo0Ny45MDQ4MzExMTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjI4NzM2NjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgS2NvbmZpZyBmb3IgTmV0d29yayBTY2hlZHVsaW5nKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBuZXR3b3JrIHNjaGVkdWxlciB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0IG1lIG9wZW4gdXAgYG5ldC9zY2hlZC9LY29uZmlnYCBhbmQgem9vbSBpbiBvbiBsaW5lIDQ5NC4gSG9wZWZ1bGx5LCB0aGF0IGxvY2F0aW9uIHdpbGwgdHJpZ2dlciBhIGtleSBzZWN0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZXRoaW5nIHNwZWNpZmljIHJlbGF0ZWQgdG8gdGhlIHNoYXBpbmcgb3IgcXVldWluZyBkaXNjaXBsaW5lcyB0aGF0IEkgaGF2ZSBiZWVuIHJlc2VhcmNoaW5nLiBJIHdpbGwgc2VlIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgcHJvYmxlbSBJIGFtIHRyeWluZyB0byBzb2x2ZS4gSSB3aWxsIGxpa2VseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdCBzZXR0aW5ncyB0byBtYWtlIHRoZSBiZXN0IGRlY2lzaW9uIGZvciBteSBjdXJyZW50IG5lZWRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTE3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6NTk6NTAuNTMzNTcwMzY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDgwOlxcdFxcbiA0ODE6XFx0Y29uZmlnIE5FVF9DTFNcXG4gNDgyOlxcdFxcdGJvb2xcXG4gNDgzOlxcdFxcbiA0ODQ6XFx0Y29uZmlnIE5FVF9DTFNfQkFTSUNcXG4gNDg1OlxcdFxcdHRyaXN0YXRlIFxcXCJFbGVtZW50YXJ5IGNsYXNzaWZpY2F0aW9uIChCQVNJQylcXFwiXFxuIDQ4NjpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA0ODc6XFx0XFx0aGVscFxcbiA0ODg6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyB1c2luZ1xcbiA0ODk6XFx0XFx0ICBvbmx5IGV4dGVuZGVkIG1hdGNoZXMgYW5kIGFjdGlvbnMuXFxuIDQ5MDpcXHRcXG4gNDkxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA0OTI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX2Jhc2ljLlxcbiA0OTM6XFx0XFxuIDQ5NDpcXHRjb25maWcgTkVUX0NMU19ST1VURTRcXG4gNDk1OlxcdFxcdHRyaXN0YXRlIFxcXCJSb3V0aW5nIGRlY2lzaW9uIChST1VURSlcXFwiXFxuIDQ5NjpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gNDk3OlxcdFxcdHNlbGVjdCBJUF9ST1VURV9DTEFTU0lEXFxuIDQ5ODpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA0OTk6XFx0XFx0aGVscFxcbiA1MDA6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzXFxuIDUwMTpcXHRcXHQgIGFjY29yZGluZyB0byB0aGUgcm91dGUgdGFibGUgZW50cnkgdGhleSBtYXRjaGVkLlxcbiA1MDI6XFx0XFxuIDUwMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNTA0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19yb3V0ZS5cXG4gNTA1OlxcdFxcbiA1MDY6XFx0Y29uZmlnIE5FVF9DTFNfRldcXG4gNTA3OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbWFyayAoRlcpXFxcIlxcbiA1MDg6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNTA5OlxcdFxcdGhlbHBcXG4gNTEwOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0c1xcbiA1MTE6XFx0XFx0ICBhY2NvcmRpbmcgdG8gbmV0ZmlsdGVyL2ZpcmV3YWxsIG1hcmtzLlxcbiA1MTI6XFx0XFxuIDUxMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNTE0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19mdy5cXG4gNTE1OlxcdFxcbiA1MTY6XFx0Y29uZmlnIE5FVF9DTFNfVTMyXFxuIDUxNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcXFwiXFxuIDUxODpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA1MTk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDo1OTo1MC41MzM2NTkwNzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjc2NjQyNjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgY2xzX3JvdXRlLmNgIGZvciBDbGFyaXR5KipcblxuT2theSwgc28gSSB3YW50IHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIHdoYXQncyBjaGFuZ2VkIHdpdGhpbiB0aGUgYG5ldC9zY2hlZC9jbHNfcm91dGUuY2AgbW9kdWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHBpbnBvaW50IHRoZSBleGFjdCBtb2RpZmljYXRpb25zIG1hZGUgdG8gdGhvc2Uga2V5IGZ1bmN0aW9ucy4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgcmVjZW50IGNvbW1pdHMgYW5kIHRoZSBkaWZmcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIHRoZSByb3V0aW5nIGNsYXNzaWZpY2F0aW9uIGxvZ2ljLCBhbnkgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBHb2luZyBkaXJlY3RseSB0byB0aGUgc291cmNlIHdpbGwgcHJvdmlkZSB0aGUgY2xlYW5lc3QgcGljdHVyZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjU4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDo1OTo1Mi44MTAzMDQ1NzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2Nsc19yb3V0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMzMDpcXHR9XFxuIDMzMTpcXHRcXG4gMzMyOlxcdHN0YXRpYyBpbnQgcm91dGU0X2RlbGV0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqYXJnLCBib29sICpsYXN0LFxcbiAzMzM6XFx0XFx0XFx0XFx0IGJvb2wgcnRubF9oZWxkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDMzNDpcXHR7XFxuIDMzNTpcXHRcXHRzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQgPSBydG5sX2RlcmVmZXJlbmNlKHRwLVxcdTAwM2Vyb290KTtcXG4gMzM2OlxcdFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmID0gYXJnO1xcbiAzMzc6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3UgKipmcDtcXG4gMzM4OlxcdFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpuZjtcXG4gMzM5OlxcdFxcdHN0cnVjdCByb3V0ZTRfYnVja2V0ICpiO1xcbiAzNDA6XFx0XFx0dW5zaWduZWQgaW50IGggPSAwO1xcbiAzNDE6XFx0XFx0aW50IGgxO1xcbiAzNDI6XFx0XFxuIDM0MzpcXHRcXHRpZiAoIWhlYWQgfHwgIWYpXFxuIDM0NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0XFx0aCA9IGYtXFx1MDAzZWhhbmRsZTtcXG4gMzQ3OlxcdFxcdGIgPSBmLVxcdTAwM2Via3Q7XFxuIDM0ODpcXHRcXG4gMzQ5OlxcdFxcdGZwID0gXFx1MDAyNmItXFx1MDAzZWh0W2Zyb21faGFzaChoIFxcdTAwM2VcXHUwMDNlIDE2KV07XFxuIDM1MDpcXHRcXHRmb3IgKG5mID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBuZjtcXG4gMzUxOlxcdFxcdCAgICAgZnAgPSBcXHUwMDI2bmYtXFx1MDAzZW5leHQsIG5mID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XFxuIDM1MjpcXHRcXHRcXHRpZiAobmYgPT0gZikge1xcbiAzNTM6XFx0XFx0XFx0XFx0LyogdW5saW5rIGl0ICovXFxuIDM1NDpcXHRcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKCpmcCwgcnRubF9kZXJlZmVyZW5jZShmLVxcdTAwM2VuZXh0KSk7XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdFxcdFxcdC8qIENsZWFyIGFueSBmYXN0bWFwIGVudHJpZXMgdGhhdCBtYXkgcmVmIHRoaXMgZmlsdGVyIGFuZFxcbiAzNTc6XFx0XFx0XFx0XFx0ICogbWFyayBpdCBkeWluZyBzbyBpbi1mbGlnaHQgcmVhZGVycyBjYW4ndCByZXB1Ymxpc2ggaXRcXG4gMzU4OlxcdFxcdFxcdFxcdCAqIGFmdGVyIHRoZSByZXNldC5cXG4gMzU5OlxcdFxcdFxcdFxcdCAqL1xcbiAzNjA6XFx0XFx0XFx0XFx0cm91dGU0X3Jlc2V0X2Zhc3RtYXAoaGVhZCwgZik7XFxuIDM2MTpcXHRcXG4gMzYyOlxcdFxcdFxcdFxcdC8qIERlbGV0ZSBpdCAqL1xcbiAzNjM6XFx0XFx0XFx0XFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFxcdTAwMjZmLVxcdTAwM2VyZXMpO1xcbiAzNjQ6XFx0XFx0XFx0XFx0dGNmX2V4dHNfZ2V0X25ldChcXHUwMDI2Zi1cXHUwMDNlZXh0cyk7XFxuIDM2NTpcXHRcXHRcXHRcXHR0Y2ZfcXVldWVfd29yayhcXHUwMDI2Zi1cXHUwMDNlcndvcmssIHJvdXRlNF9kZWxldGVfZmlsdGVyX3dvcmspO1xcbiAzNjY6XFx0XFxuIDM2NzpcXHRcXHRcXHRcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZiLVxcdTAwM2VmaWx0ZXJzX3JlZikpIHtcXG4gMzY4OlxcdFxcdFxcdFxcdFxcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cXHUwMDNldGFibGVbdG9faGFzaChoKV0sIE5VTEwpO1xcbiAzNjk6XFx0XFx0XFx0XFx0XFx0a2ZyZWVfcmN1KGIsIHJjdSk7XFxuIDM3MDpcXHRcXHRcXHRcXHR9XFxuIDM3MTpcXHRcXHRcXHRcXHRicmVhaztcXG4gMzcyOlxcdFxcdFxcdH1cXG4gMzczOlxcdFxcdH1cXG4gMzc0OlxcdFxcbiAzNzU6XFx0XFx0Kmxhc3QgPSB0cnVlO1xcbiAzNzY6XFx0XFx0Zm9yIChoMSA9IDA7IGgxIFxcdTAwM2M9IDI1NjsgaDErKykge1xcbiAzNzc6XFx0XFx0XFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihoZWFkLVxcdTAwM2V0YWJsZVtoMV0pKSB7XFxuIDM3ODpcXHRcXHRcXHRcXHQqbGFzdCA9IGZhbHNlO1xcbiAzNzk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDM4MDpcXHRcXHRcXHR9XFxuIDM4MTpcXHRcXHR9XFxuIDM4MjpcXHRcXG4gMzgzOlxcdFxcdHJldHVybiAwO1xcbiAzODQ6XFx0fVxcbiAzODU6XFx0XFxuIDM4NjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcm91dGU0X3BvbGljeVtUQ0FfUk9VVEU0X01BWCArIDFdID0ge1xcbiAzODc6XFx0XFx0W1RDQV9ST1VURTRfQ0xBU1NJRF1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuIDM4ODpcXHRcXHRbVENBX1JPVVRFNF9UT11cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIDB4RkYpLFxcbiAzODk6XFx0XFx0W1RDQV9ST1VURTRfRlJPTV1cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIDB4RkYpLFxcbiAzOTA6XFx0XFx0W1RDQV9ST1VURTRfSUlGXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMHg3RkZGKSxcXG4gMzkxOlxcdH07XFxuIDM5MjpcXHRcXG4gMzkzOlxcdHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbiAzOTQ6XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYmFzZSwgc3RydWN0IHJvdXRlNF9maWx0ZXIgKmYsXFxuIDM5NTpcXHRcXHRcXHRcXHQgICAgdTMyIGhhbmRsZSwgc3RydWN0IHJvdXRlNF9oZWFkICpoZWFkLFxcbiAzOTY6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IG5sYXR0ciAqZXN0LFxcbiAzOTc6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmb2xkLCB1MzIgZmxhZ3MsXFxuIDM5ODpcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiAzOTk6XFx0e1xcbiA0MDA6XFx0XFx0dTMyIGlkID0gMCwgdG8gPSAwLCBuaGFuZGxlID0gMHg4MDAwO1xcbiA0MDE6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZwO1xcbiA0MDI6XFx0XFx0dW5zaWduZWQgaW50IGgxO1xcbiA0MDM6XFx0XFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XFxuIDQwNDpcXHRcXHRpbnQgZXJyO1xcbiA0MDU6XFx0XFxuIDQwNjpcXHRcXHRlcnIgPSB0Y2ZfZXh0c192YWxpZGF0ZShuZXQsIHRwLCB0YiwgZXN0LCBcXHUwMDI2Zi1cXHUwMDNlZXh0cywgZmxhZ3MsIGV4dGFjayk7XFxuIDQwNzpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gNDA4OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDQwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6NTk6NTIuODEwNDA2MzIyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc3ODI4NDkyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBmb2N1c2luZyBvbiB0aGUgaW1wbGllZCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIFJvdXRpbmcgUGFyYW1ldGVyIE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgZm9yIGByb3V0ZTRfc2V0X3Bhcm1zYCBhbmQgYHJvdXRlNF9jaGFuZ2VgLiBUaGF0IHByZXZpb3VzIGNvbnRleHQgYWJvdXQgdGhlIG92ZXJhbGwgZmxvdyBhbmQgdGhlIGluaXRpYWwgZnVuY3Rpb24gY2FsbCBpcyBzdGlsbCBmcmVzaCBpbiBteSBtaW5kLiBJJ20gZm9jdXNpbmcgb24gdGhlc2UgdHdvIGZ1bmN0aW9ucyBiZWNhdXNlIHRoZXkncmUgY3JpdGljYWwgZm9yIGFjdHVhbGx5IGNvbmZpZ3VyaW5nIGFuZCBwb3RlbnRpYWxseSBtb2RpZnlpbmcgdGhlIHJvdXRpbmcgc2V0dXAsIHJpZ2h0PyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgcGFyYW1ldGVycyBhcmUgYmVpbmcgc2V0IGFuZCBob3cgY2hhbmdlcyBhcmUgYmVpbmcgaW1wbGVtZW50ZWQuIFNwZWNpZmljYWxseSwgd2hhdCdzIHRoZSBsb2dpYyB0aGVyZT8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZGlyZWN0bHkgbW9kaWZ5aW5nIGRhdGEgc3RydWN0dXJlcywgb3IgYXJlIHRoZXJlIG1vcmUgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBtb2R1bGVzIG9yIHByb2Nlc3NlcyBpbnZvbHZlZD8gSSdtIGFudGljaXBhdGluZyB0aGF0IHRoZXNlIHdpbGwgYmUgdGhlIGNvcmUgZnVuY3Rpb25zIGZvciBlaXRoZXIgaW5pdGlhbCBjb25maWd1cmF0aW9uIG9mIHRoZSByb3V0aW5nIHRhYmxlIG9yIGFkanVzdG1lbnQgb2YgdGhlc2UgcGFyYW1ldGVycyBkdXJpbmcgcnVudGltZS4gRnJvbSBleHBlcmllbmNlIEkga25vdyB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBzZWN0aW9uIHRvIHByZXZlbnQgaW5jb25zaXN0ZW50IGJlaGF2aW9yLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGF0b21pY2l0eSBpc3N1ZXMsIGFuZCBlcnJvciBoYW5kbGluZyDigJMgdGhvc2UgYXJlIGFsd2F5cyBrZXkgYXJlYXMgb2YgY29uY2VybiBpbiByb3V0aW5nIG1hbmFnZW1lbnQuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIG1hcCBvdXQgdGhlIGNvbnRyb2wgZmxvdywgbG9vayBmb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIHNlZSBob3cgd2VsbCB0aGlzIGlzIGRlc2lnbmVkIGZvciBzY2FsYWJpbGl0eSBhbmQgcm9idXN0bmVzcy4gTGV0J3Mgc2VlIGhvdyB3ZWxsIHRoZSBjb2RlIGhhbmRsZXMgZWRnZSBjYXNlcywgdG9vIC0gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gZGVhbHMgd2l0aCBhbGwgdGhlIGNvcm5lciBjYXNlcyBJIGNhbiB0aGluayBvZiwgaW5jbHVkaW5nIHdoZW4gdGhlIHJlcXVlc3RlZCBjaGFuZ2UgaXMgbm90IGFsbG93ZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3ODMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjU5OjU1LjU4ODY5NTEzNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2Nsc19yb3V0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxMCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQxMDpcXHRcXHRpZiAodGJbVENBX1JPVVRFNF9UT10pIHtcXG4gNDExOlxcdFxcdFxcdGlmICghZm9sZCBcXHUwMDI2XFx1MDAyNiBoYW5kbGUgXFx1MDAyNiAweDgwMDApIHtcXG4gNDEyOlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgaGFuZGxlXFxcIik7XFxuIDQxMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDE0OlxcdFxcdFxcdH1cXG4gNDE1OlxcdFxcdFxcdHRvID0gbmxhX2dldF91MzIodGJbVENBX1JPVVRFNF9UT10pO1xcbiA0MTY6XFx0XFx0XFx0bmhhbmRsZSA9IHRvO1xcbiA0MTc6XFx0XFx0fVxcbiA0MTg6XFx0XFxuIDQxOTpcXHRcXHRpZiAodGJbVENBX1JPVVRFNF9GUk9NXSBcXHUwMDI2XFx1MDAyNiB0YltUQ0FfUk9VVEU0X0lJRl0pIHtcXG4gNDIwOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0FUVFIoZXh0YWNrLCB0YltUQ0FfUk9VVEU0X0ZST01dLFxcbiA0MjE6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCInZnJvbScgYW5kICdmcm9taWYnIGFyZSBtdXR1YWxseSBleGNsdXNpdmVcXFwiKTtcXG4gNDIyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MjM6XFx0XFx0fVxcbiA0MjQ6XFx0XFxuIDQyNTpcXHRcXHRpZiAodGJbVENBX1JPVVRFNF9GUk9NXSkge1xcbiA0MjY6XFx0XFx0XFx0aWQgPSBubGFfZ2V0X3UzMih0YltUQ0FfUk9VVEU0X0ZST01dKTtcXG4gNDI3OlxcdFxcdFxcdG5oYW5kbGUgfD0gaWQgXFx1MDAzY1xcdTAwM2MgMTY7XFxuIDQyODpcXHRcXHR9IGVsc2UgaWYgKHRiW1RDQV9ST1VURTRfSUlGXSkge1xcbiA0Mjk6XFx0XFx0XFx0aWQgPSBubGFfZ2V0X3UzMih0YltUQ0FfUk9VVEU0X0lJRl0pO1xcbiA0MzA6XFx0XFx0XFx0bmhhbmRsZSB8PSAoaWQgfCAweDgwMDApIFxcdTAwM2NcXHUwMDNjIDE2O1xcbiA0MzE6XFx0XFx0fSBlbHNlXFxuIDQzMjpcXHRcXHRcXHRuaGFuZGxlIHw9IDB4RkZGRiBcXHUwMDNjXFx1MDAzYyAxNjtcXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0aWYgKGhhbmRsZSBcXHUwMDI2XFx1MDAyNiAoIWZvbGQgfHwgbmhhbmRsZSA9PSAoaGFuZGxlIFxcdTAwMjYgfjB4N0YwMCkpKVxcbiA0MzU6XFx0XFx0XFx0bmhhbmRsZSB8PSBoYW5kbGUgXFx1MDAyNiAweDdGMDA7XFxuIDQzNjpcXHRcXG4gNDM3OlxcdFxcdGlmIChoYW5kbGUgXFx1MDAyNlxcdTAwMjYgIWZvbGQgXFx1MDAyNlxcdTAwMjYgbmhhbmRsZSAhPSBoYW5kbGUpIHtcXG4gNDM4OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXFxuIDQzOTpcXHRcXHRcXHRcXHRcXHQgICBcXFwiSGFuZGxlIG1pc21hdGNoIGNvbnN0cnVjdGVkOiAleCAoZXhwZWN0ZWQ6ICV4KVxcXCIsXFxuIDQ0MDpcXHRcXHRcXHRcXHRcXHQgICBoYW5kbGUsIG5oYW5kbGUpO1xcbiA0NDE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ0MjpcXHRcXHR9XFxuIDQ0MzpcXHRcXG4gNDQ0OlxcdFxcdGlmICghbmhhbmRsZSkge1xcbiA0NDU6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiUmVwbGFjaW5nIHdpdGggaGFuZGxlIG9mIDAgaXMgaW52YWxpZFxcXCIpO1xcbiA0NDY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ0NzpcXHRcXHR9XFxuIDQ0ODpcXHRcXG4gNDQ5OlxcdFxcdGgxID0gdG9faGFzaChuaGFuZGxlKTtcXG4gNDUwOlxcdFxcdGIgPSBydG5sX2RlcmVmZXJlbmNlKGhlYWQtXFx1MDAzZXRhYmxlW2gxXSk7XFxuIDQ1MTpcXHRcXHRpZiAoIWIpIHtcXG4gNDUyOlxcdFxcdFxcdGIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2J1Y2tldCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gNDUzOlxcdFxcdFxcdGlmIChiID09IE5VTEwpXFxuIDQ1NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuIDQ1NTpcXHRcXG4gNDU2OlxcdFxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2Yi1cXHUwMDNlZmlsdGVyc19yZWYsIDEpO1xcbiA0NTc6XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGhlYWQtXFx1MDAzZXRhYmxlW2gxXSwgYik7XFxuIDQ1ODpcXHRcXHR9IGVsc2Uge1xcbiA0NTk6XFx0XFx0XFx0dW5zaWduZWQgaW50IGgyID0gZnJvbV9oYXNoKG5oYW5kbGUgXFx1MDAzZVxcdTAwM2UgMTYpO1xcbiA0NjA6XFx0XFxuIDQ2MTpcXHRcXHRcXHRmb3IgKGZwID0gcnRubF9kZXJlZmVyZW5jZShiLVxcdTAwM2VodFtoMl0pO1xcbiA0NjI6XFx0XFx0XFx0ICAgICBmcDtcXG4gNDYzOlxcdFxcdFxcdCAgICAgZnAgPSBydG5sX2RlcmVmZXJlbmNlKGZwLVxcdTAwM2VuZXh0KSlcXG4gNDY0OlxcdFxcdFxcdFxcdGlmIChmcCAhPSBmb2xkIFxcdTAwMjZcXHUwMDI2IGZwLVxcdTAwM2VoYW5kbGUgPT0gbmhhbmRsZSkge1xcbiA0NjU6XFx0XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcXG4gNDY2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJIYW5kbGUgJXggaXMgYWxyZWFkeSBpbiB1c2VcXFwiLFxcbiA0Njc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgbmhhbmRsZSk7XFxuIDQ2ODpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gNDY5OlxcdFxcdFxcdFxcdH1cXG4gNDcwOlxcdFxcbiA0NzE6XFx0XFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZiLVxcdTAwM2VmaWx0ZXJzX3JlZik7XFxuIDQ3MjpcXHRcXHR9XFxuIDQ3MzpcXHRcXG4gNDc0OlxcdFxcdGlmICh0YltUQ0FfUk9VVEU0X1RPXSlcXG4gNDc1OlxcdFxcdFxcdGYtXFx1MDAzZWlkID0gdG87XFxuIDQ3NjpcXHRcXG4gNDc3OlxcdFxcdGlmICh0YltUQ0FfUk9VVEU0X0ZST01dKVxcbiA0Nzg6XFx0XFx0XFx0Zi1cXHUwMDNlaWQgPSB0byB8IGlkXFx1MDAzY1xcdTAwM2MxNjtcXG4gNDc5OlxcdFxcdGVsc2UgaWYgKHRiW1RDQV9ST1VURTRfSUlGXSlcXG4gNDgwOlxcdFxcdFxcdGYtXFx1MDAzZWlpZiA9IGlkO1xcbiA0ODE6XFx0XFxuIDQ4MjpcXHRcXHRmLVxcdTAwM2VoYW5kbGUgPSBuaGFuZGxlO1xcbiA0ODM6XFx0XFx0Zi1cXHUwMDNlYmt0ID0gYjtcXG4gNDg0OlxcdFxcdGYtXFx1MDAzZXRwID0gdHA7XFxuIDQ4NTpcXHRcXG4gNDg2OlxcdFxcdGlmICh0YltUQ0FfUk9VVEU0X0NMQVNTSURdKSB7XFxuIDQ4NzpcXHRcXHRcXHRmLVxcdTAwM2VyZXMuY2xhc3NpZCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9ST1VURTRfQ0xBU1NJRF0pO1xcbiA0ODg6XFx0XFx0XFx0dGNmX2JpbmRfZmlsdGVyKHRwLCBcXHUwMDI2Zi1cXHUwMDNlcmVzLCBiYXNlKTtcXG4gNDg5OlxcdFxcdH1cXG4gNDkwOlxcdFxcbiA0OTE6XFx0XFx0cmV0dXJuIDA7XFxuIDQ5MjpcXHR9XFxuIDQ5MzpcXHRcXG4gNDk0OlxcdHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuIDQ5NTpcXHRcXHRcXHRcXHQgc3RydWN0IHRjZl9wcm90byAqdHAsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdTMyIGhhbmRsZSxcXG4gNDk2OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICoqdGNhLCB2b2lkICoqYXJnLCB1MzIgZmxhZ3MsXFxuIDQ5NzpcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA0OTg6XFx0e1xcbiA0OTk6XFx0XFx0c3RydWN0IHJvdXRlNF9oZWFkICpoZWFkID0gcnRubF9kZXJlZmVyZW5jZSh0cC1cXHUwMDNlcm9vdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjU5OjU1LjU4ODgxODE4NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTUyMjU4MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgcm91dGU0X2NoYW5nZWAgTGluZXMgNTAwLTU5MCoqXG5cbk9rYXksIEknbSBkaXZpbmcgaW50byBgcm91dGU0X2NoYW5nZWAgbm93LCBzcGVjaWZpY2FsbHkgbGluZXMgNTAwIHRvIDU5MC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY29uc2lkZXIgd2hhdCB0aGlzIHNlY3Rpb24gb2YgY29kZSAqbGlrZWx5KiBkZWFscyB3aXRoLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gYW5kIHRoZSBcImNoYW5nZVwiIGluIHRoZSBmaWxlbmFtZSwgSSdtIGFudGljaXBhdGluZyBzb21lIGZvcm0gb2Ygc3RhdGUgdHJhbnNpdGlvbiwgcGVyaGFwcyByZWxhdGVkIHRvIHJvdXRpbmcgdXBkYXRlcywgZmFpbG92ZXIgbWVjaGFuaXNtcywgb3IgbWF5YmUgZXZlbiBjb25maWd1cmF0aW9uIGNoYW5nZXMuIFRoaXMgcmFuZ2UgZmVlbHMgc2lnbmlmaWNhbnQsIHNvIGl0J3MgcHJvYmFibHkgaGFuZGxpbmcgYSBjb3JlIGxvZ2ljIGJsb2NrIHJhdGhlciB0aGFuIGEgdHJpdmlhbCBjb25kaXRpb25hbCBvciBzaW1wbGUgZGF0YSBtYW5pcHVsYXRpb24uXG5cbkknbSBtZW50YWxseSBwcmVwYXJpbmcgdG8gbG9vayBmb3Igc3BlY2lmaWMga2V5d29yZHMgYW5kIHBhdHRlcm5zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgcmVmZXJlbmNlcyB0byByb3V0ZSB0YWJsZXMsIG5ldHdvcmsgaW50ZXJmYWNlcywgcGVyaGFwcyBzb21lIHNvcnQgb2YgXCJpZi9lbHNlXCIgb3IgXCJzd2l0Y2hcIiBzdGF0ZW1lbnQgZ292ZXJuaW5nIHRoZSByb3V0aW5nIGJlaGF2aW9yLCBhbmQgaG9wZWZ1bGx5IHNvbWUgbG9nZ2luZyBvciBlcnJvciBoYW5kbGluZy4gSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBtZWNoYW5pc21zLCBlc3BlY2lhbGx5IGlmIHRoaXMgY29kZSBpcyB0b3VjaGluZyBzaGFyZWQgcmVzb3VyY2VzIG9yIGlzIG11bHRpdGhyZWFkZWQuXG5cbkZ1cnRoZXJtb3JlLCBJIGFtIGxvb2tpbmcgZm9yIHdheXMgdG8gc2VlIGhvdyB0aGlzIGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZmlsZS4gQXJlIHRoZXJlIGFueSBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkIGZyb20gdGhpcyByYW5nZSwgb3IgaXMgdGhpcyB0aGUgZnVuY3Rpb24gdGhhdCBpcyBtYWtpbmcgdGhlIGNhbGw/IEFyZSB0aGVyZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVwZGF0ZWQgb3IgcmVmZXJlbmNlZCBpbiB0aGlzIHJhbmdlLCBhbmQgd2hlcmUgZWxzZSBhcmUgdGhleSB1c2VkP1xuXG5JJ20gYWltaW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlICppbnRlbnQqIG9mIHRoaXMgYmxvY2sgZmlyc3Qg4oCTIHdoYXQncyB0aGUgZ29hbCBpdCdzIHRyeWluZyB0byBhY2hpZXZlPyBUaGVuLCBJJ2xsIGRyaWxsIGRvd24gaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0byBzZWUgaWYgdGhlIGFwcHJvYWNoIGlzIHNvdW5kLCBlZmZpY2llbnQsIGFuZCB3ZWxsLWRvY3VtZW50ZWQuIEZpbmFsbHksIEknbGwgYmUgZm9ybWluZyBhbiBpbml0aWFsIGh5cG90aGVzaXMgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtaWdodCBjb25zaWRlci4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MjUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjU5OjU4Ljc0MTA3ODkzOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2Nsc19yb3V0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHRcXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciBfX3JjdSAqKmZwO1xcbiA1MDE6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsICpmMSwgKnBmcCwgKmYgPSBOVUxMO1xcbiA1MDI6XFx0XFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XFxuIDUwMzpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfUk9VVEU0X01BWCArIDFdO1xcbiA1MDQ6XFx0XFx0dW5zaWduZWQgaW50IGg7XFxuIDUwNTpcXHRcXHRpbnQgZXJyO1xcbiA1MDY6XFx0XFxuIDUwNzpcXHRcXHRpZiAoIWhhbmRsZSkge1xcbiA1MDg6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQ3JlYXRpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkXFxcIik7XFxuIDUwOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTEwOlxcdFxcdH1cXG4gNTExOlxcdFxcbiA1MTI6XFx0XFx0aWYgKE5MX1JFUV9BVFRSX0NIRUNLKGV4dGFjaywgTlVMTCwgdGNhLCBUQ0FfT1BUSU9OUykpIHtcXG4gNTEzOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJNaXNzaW5nIG9wdGlvbnNcXFwiKTtcXG4gNTE0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MTU6XFx0XFx0fVxcbiA1MTY6XFx0XFxuIDUxNzpcXHRcXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIFRDQV9ST1VURTRfTUFYLCB0Y2FbVENBX09QVElPTlNdLFxcbiA1MTg6XFx0XFx0XFx0XFx0XFx0XFx0ICByb3V0ZTRfcG9saWN5LCBOVUxMKTtcXG4gNTE5OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiA1MjA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNTIxOlxcdFxcbiA1MjI6XFx0XFx0Zm9sZCA9ICphcmc7XFxuIDUyMzpcXHRcXHRpZiAoZm9sZCBcXHUwMDI2XFx1MDAyNiBmb2xkLVxcdTAwM2VoYW5kbGUgIT0gaGFuZGxlKVxcbiA1MjQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUyNTpcXHRcXG4gNTI2OlxcdFxcdGVyciA9IC1FTk9CVUZTO1xcbiA1Mjc6XFx0XFx0ZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb3V0ZTRfZmlsdGVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiA1Mjg6XFx0XFx0aWYgKCFmKVxcbiA1Mjk6XFx0XFx0XFx0Z290byBlcnJvdXQ7XFxuIDUzMDpcXHRcXG4gNTMxOlxcdFxcdGVyciA9IHRjZl9leHRzX2luaXQoXFx1MDAyNmYtXFx1MDAzZWV4dHMsIG5ldCwgVENBX1JPVVRFNF9BQ1QsIFRDQV9ST1VURTRfUE9MSUNFKTtcXG4gNTMyOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiA1MzM6XFx0XFx0XFx0Z290byBlcnJvdXQ7XFxuIDUzNDpcXHRcXG4gNTM1OlxcdFxcdGlmIChmb2xkKSB7XFxuIDUzNjpcXHRcXHRcXHRmLVxcdTAwM2VpZCA9IGZvbGQtXFx1MDAzZWlkO1xcbiA1Mzc6XFx0XFx0XFx0Zi1cXHUwMDNlaWlmID0gZm9sZC1cXHUwMDNlaWlmO1xcbiA1Mzg6XFx0XFx0XFx0Zi1cXHUwMDNlaGFuZGxlID0gZm9sZC1cXHUwMDNlaGFuZGxlO1xcbiA1Mzk6XFx0XFxuIDU0MDpcXHRcXHRcXHRmLVxcdTAwM2V0cCA9IGZvbGQtXFx1MDAzZXRwO1xcbiA1NDE6XFx0XFx0XFx0Zi1cXHUwMDNlYmt0ID0gZm9sZC1cXHUwMDNlYmt0O1xcbiA1NDI6XFx0XFx0fVxcbiA1NDM6XFx0XFxuIDU0NDpcXHRcXHRlcnIgPSByb3V0ZTRfc2V0X3Bhcm1zKG5ldCwgdHAsIGJhc2UsIGYsIGhhbmRsZSwgaGVhZCwgdGIsXFxuIDU0NTpcXHRcXHRcXHRcXHQgICAgICAgdGNhW1RDQV9SQVRFXSwgZm9sZCwgZmxhZ3MsIGV4dGFjayk7XFxuIDU0NjpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gNTQ3OlxcdFxcdFxcdGdvdG8gZXJyb3V0O1xcbiA1NDg6XFx0XFxuIDU0OTpcXHRcXHRoID0gZnJvbV9oYXNoKGYtXFx1MDAzZWhhbmRsZSBcXHUwMDNlXFx1MDAzZSAxNik7XFxuIDU1MDpcXHRcXHRmcCA9IFxcdTAwMjZmLVxcdTAwM2Via3QtXFx1MDAzZWh0W2hdO1xcbiA1NTE6XFx0XFx0Zm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7XFxuIDU1MjpcXHRcXHQgICAgIChmMSA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkgIT0gTlVMTDtcXG4gNTUzOlxcdFxcdCAgICAgZnAgPSBcXHUwMDI2ZjEtXFx1MDAzZW5leHQpXFxuIDU1NDpcXHRcXHRcXHRpZiAoZi1cXHUwMDNlaGFuZGxlIFxcdTAwM2MgZjEtXFx1MDAzZWhhbmRsZSlcXG4gNTU1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1NTY6XFx0XFxuIDU1NzpcXHRcXHR0Y2ZfYmxvY2tfbmV0aWZfa2VlcF9kc3QodHAtXFx1MDAzZWNoYWluLVxcdTAwM2VibG9jayk7XFxuIDU1ODpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoZi1cXHUwMDNlbmV4dCwgZjEpO1xcbiA1NTk6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZik7XFxuIDU2MDpcXHRcXG4gNTYxOlxcdFxcdGlmIChmb2xkKSB7XFxuIDU2MjpcXHRcXHRcXHRiID0gZm9sZC1cXHUwMDNlYmt0O1xcbiA1NjM6XFx0XFx0XFx0aCA9IGZyb21faGFzaChmb2xkLVxcdTAwM2VoYW5kbGUgXFx1MDAzZVxcdTAwM2UgMTYpO1xcbiA1NjQ6XFx0XFx0XFx0ZnAgPSBcXHUwMDI2Yi1cXHUwMDNlaHRbaF07XFxuIDU2NTpcXHRcXHRcXHRmb3IgKHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgcGZwO1xcbiA1NjY6XFx0XFx0XFx0ICAgICBmcCA9IFxcdTAwMjZwZnAtXFx1MDAzZW5leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkge1xcbiA1Njc6XFx0XFx0XFx0XFx0aWYgKHBmcCA9PSBmb2xkKSB7XFxuIDU2ODpcXHRcXHRcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmb2xkLVxcdTAwM2VuZXh0KTtcXG4gNTY5OlxcdFxcdFxcdFxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmItXFx1MDAzZWZpbHRlcnNfcmVmKSkge1xcbiA1NzA6XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IHRoID0gdG9faGFzaChmb2xkLVxcdTAwM2VoYW5kbGUpO1xcbiA1NzE6XFx0XFxuIDU3MjpcXHRcXHRcXHRcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtXFx1MDAzZXRhYmxlW3RoXSwgTlVMTCk7XFxuIDU3MzpcXHRcXHRcXHRcXHRcXHRcXHRrZnJlZV9yY3UoYiwgcmN1KTtcXG4gNTc0OlxcdFxcdFxcdFxcdFxcdH1cXG4gNTc1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1NzY6XFx0XFx0XFx0XFx0fVxcbiA1Nzc6XFx0XFx0XFx0fVxcbiA1Nzg6XFx0XFx0fVxcbiA1Nzk6XFx0XFxuIDU4MDpcXHRcXHRyb3V0ZTRfcmVzZXRfZmFzdG1hcChoZWFkLCBmb2xkKTtcXG4gNTgxOlxcdFxcdCphcmcgPSBmO1xcbiA1ODI6XFx0XFx0aWYgKGZvbGQpIHtcXG4gNTgzOlxcdFxcdFxcdHRjZl91bmJpbmRfZmlsdGVyKHRwLCBcXHUwMDI2Zm9sZC1cXHUwMDNlcmVzKTtcXG4gNTg0OlxcdFxcdFxcdHRjZl9leHRzX2dldF9uZXQoXFx1MDAyNmZvbGQtXFx1MDAzZWV4dHMpO1xcbiA1ODU6XFx0XFx0XFx0dGNmX3F1ZXVlX3dvcmsoXFx1MDAyNmZvbGQtXFx1MDAzZXJ3b3JrLCByb3V0ZTRfZGVsZXRlX2ZpbHRlcl93b3JrKTtcXG4gNTg2OlxcdFxcdH1cXG4gNTg3OlxcdFxcdHJldHVybiAwO1xcbiA1ODg6XFx0XFxuIDU4OTpcXHRlcnJvdXQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjU5OjU4Ljc0MTE4NzM1OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NTkzMDI3NDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0OiBjbHNfcm91dGUgUmVmYWN0b3IgaW4gbmV0L3NjaGVkKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBleHBlcnQgaW5zdGluY3RzIGFyZSB0ZWxsaW5nIG1lIHRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gV2UncmUgbG9va2luZyBhdCBhIHJlZmFjdG9yIG9mIGBjbHNfcm91dGVgLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9zY2hlZC9jbHNfcm91dGUuY2AsIHdoaWNoIGlzIGEgVHJhZmZpYyBDb250cm9sIGNsYXNzaWZpZXIgKFJPVVRFNCkgaW4gTGludXggbmV0d29ya2luZy4gVGhpcyBjb2RlIGlzIGNyaXRpY2FsLCBhcyBpdCdzIHRoZSBjb3JlIG9mIGhvdyB0cmFmZmljIGlzIHJvdXRlZCBhbmQgZmlsdGVyZWQsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayDigJMgcnRuZXRsaW5rIGFuZCBgdGNgIGNvbW1hbmRzIGxpa2UgYFJUTV9ORVdURklMVEVSYCwgYFJUTV9ERUxURklMVEVSYCwgZXRjLiBTeXprYWxsZXIgYWxyZWFkeSBleGVyY2lzZXMgdGhpcyBhcmVhLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyByZWZhY3RvcmluZyBidWNrZXQgbGlmZXRpbWUgbWFuYWdlbWVudC4gSXQncyBtb3ZpbmcgZnJvbSBpdGVyYXRpbmcgdGhyb3VnaCBidWNrZXQgZW50cmllcyB0byB1c2luZyBhIGByZWZjb3VudF90IGZpbHRlcnNfcmVmYCwgd2hpY2ggaW1wbGllcyBjaGFuZ2VzIHRvIGZpbHRlciBjaGFuZ2UsIHJlcGxhY2VtZW50LCBhbmQgaGFuZGxlIHZhbGlkYXRpb24gbG9naWMuIFRoYXQncyBhIGNsYXNzaWMgYXJlYSB3aGVyZSBzdWJ0bGUgY29uY3VycmVuY3kgYnVncyBvciBpbmNvcnJlY3QgaGFuZGxpbmcgb2YgZWRnZSBjYXNlcyBjYW4gZWFzaWx5IHNsaXAgaW4uIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiAqKldvcnRoRnV6emluZyA9IHRydWUuKipcblxuQ29uZmlnLXdpc2UsIHdlIG5lZWQgYE5FVF9DTFNfUk9VVEU0YCBlbmFibGVkLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1haW4gcmVxdWlyZW1lbnQsIHdpdGggYSBkZXBlbmRlbmN5IG9uIGBJTkVUYC4gSSdsbCBtYWtlIHN1cmUgdGhhdCdzIHNldCBpbiB0aGUgZnV6emVyIGNvbmZpZ3VyYXRpb24uIFNvLCAqKkVuYWJsZUNvbmZpZ3MqKjogYFtcIk5FVF9DTFNfUk9VVEU0XCJdYC5cblxuTG9va2luZyBhdCB0aGUgY29kZSBtb2RpZmljYXRpb25zLCB0aGUgcGF0Y2ggaGFzIHRvdWNoZWQgdGhyZWUga2V5IGZ1bmN0aW9uczogYHJvdXRlNF9kZWxldGVgLCBgcm91dGU0X3NldF9wYXJtc2AsIGFuZCBgcm91dGU0X2NoYW5nZWAuIFdoaWxlIHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gYGNsc19yb3V0ZS5jYCBhcmUgYWxzbyByZWxldmFudCwgdGhlc2UgYXJlIHRoZSBvbmVzICpkaXJlY3RseSogbW9kaWZpZWQsIHNvIEknbGwgZm9jdXMgb24gdGhlbS4gKipGb2N1c1N5bWJvbHMqKjogYFtcInJvdXRlNF9jaGFuZ2VcIiwgXCJyb3V0ZTRfZGVsZXRlXCIsIFwicm91dGU0X3NldF9wYXJtc1wiXWAuXG5cblRvIGJlIGNyeXN0YWwgY2xlYXI6IHRoZSBwYXRjaCBtb2RpZmllcyBjb2RlIChhbmQgYSBjcml0aWNhbCBkYXRhc3RydWN0dXJlKSBpbiBuZXQvc2NoZWQgZHVyaW5nIHJvdXRlIGZpbHRlciBjcmVhdGlvbiwgcmVwbGFjZW1lbnQsIGFuZCBkZWxldGlvbiAoYHJvdXRlNF9jaGFuZ2VgLCBgcm91dGU0X3NldF9wYXJtc2AsIGByb3V0ZTRfZGVsZXRlYCkuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gdGhlIG5ldHdvcmsgdHJhZmZpYyBjb250cm9sIHN1YnN5c3RlbSBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rL3RjIGZpbHRlciBjb25maWd1cmF0aW9uLiBUaGlzIHJlZmFjdG9yaW5nLCB3aXRoIGl0cyBmb2N1cyBvbiBsaWZldGltZSBtYW5hZ2VtZW50IGFuZCByZWZlcmVuY2UgY291bnRzLCBtYWtlcyB0aGlzIGEgcHJpbWUgdGFyZ2V0LlxuXG5BbHJpZ2h0LCBldmVyeXRoaW5nIGxpbmVzIHVwLiBJdCdzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBMZXQncyBnZXQgdGhpcyBmdXp6ZXIgcG9pbnRlZCBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ0NiwiT3V0cHV0VG9rZW5zIjoxNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMTowMDowOC4zMzQyMTgxMDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzU5NjgwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0NMU19ST1VURTRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyb3V0ZTRfY2hhbmdlXCIsXG4gICAgXCJyb3V0ZTRfZGVsZXRlXCIsXG4gICAgXCJyb3V0ZTRfc2V0X3Bhcm1zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNsc19yb3V0ZSBuZXR3b3JrIHRyYWZmaWMgY29udHJvbCBjbGFzc2lmaWVyIGluIG5ldC9zY2hlZC9jbHNfcm91dGUuYywgaW50cm9kdWNpbmcgYSByZWZjb3VudCAoZmlsdGVyc19yZWYpIHRvIG1hbmFnZSByb3V0ZTRfYnVja2V0IGxpZmV0aW1lcyBkdXJpbmcgcm91dGUgZmlsdGVyIG1vZGlmaWNhdGlvbiwgY3JlYXRpb24sIGFuZCBkZWxldGlvbiAocm91dGU0X2NoYW5nZSwgcm91dGU0X2RlbGV0ZSwgYW5kIHJvdXRlNF9zZXRfcGFybXMpLiBUaGlzIGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluay90YyBmaWx0ZXIgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQ0xTX1JPVVRFNFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJvdXRlNF9jaGFuZ2VcIixcbiAgICBcInJvdXRlNF9kZWxldGVcIixcbiAgICBcInJvdXRlNF9zZXRfcGFybXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2xzX3JvdXRlIG5ldHdvcmsgdHJhZmZpYyBjb250cm9sIGNsYXNzaWZpZXIgaW4gbmV0L3NjaGVkL2Nsc19yb3V0ZS5jLCBpbnRyb2R1Y2luZyBhIHJlZmNvdW50IChmaWx0ZXJzX3JlZikgdG8gbWFuYWdlIHJvdXRlNF9idWNrZXQgbGlmZXRpbWVzIGR1cmluZyByb3V0ZSBmaWx0ZXIgbW9kaWZpY2F0aW9uLCBjcmVhdGlvbiwgYW5kIGRlbGV0aW9uIChyb3V0ZTRfY2hhbmdlLCByb3V0ZTRfZGVsZXRlLCBhbmQgcm91dGU0X3NldF9wYXJtcykuIFRoaXMgaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rL3RjIGZpbHRlciBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMTowMDowOC40MTc4MjQ5MjNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNzI3ODkwMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MDA6MDguNDE4NDUxOTEyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzM3MjcyNTk2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBsaWZldGltZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nIGlzc3VlcyBpbiBjbHNfcm91dGUgKHRyYWZmaWMgY29udHJvbCByb3V0ZSBjbGFzc2lmaWVyKSB3aGVuIHVwZGF0aW5nIG9yIGRlbGV0aW5nIHJvdXRlIGZpbHRlcnMgYWNyb3NzIGJ1Y2tldHMsIGJ5IGludHJvZHVjaW5nIGEgYGZpbHRlcnNfcmVmYCByZWZjb3VudCAoYHJlZmNvdW50X3RgKSB0byBgc3RydWN0IHJvdXRlNF9idWNrZXRgLlxcblxcbkFuYWx5c2lzIG9mIG1lbW9yeSBzYW5pdGl6YXRpb24gcmVxdWlyZW1lbnRzOlxcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBLTVNBTjogQWxsIGFsbG9jYXRpb25zIChgc3RydWN0IHJvdXRlNF9idWNrZXRgIGFuZCBgc3RydWN0IHJvdXRlNF9maWx0ZXJgKSBjb250aW51ZSB0byB1c2UgYGt6YWxsb2Nfb2JqYCBlbnN1cmluZyBhbGwgbWVtb3J5IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbi4gVGhlIG5ldyBgZmlsdGVyc19yZWZgIGZpZWxkIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgcmVmY291bnRfc2V0YCBhbmQgbWFuYWdlZCB2aWEgYHJlZmNvdW50X2luY2AgLyBgcmVmY291bnRfZGVjX2FuZF90ZXN0YC4gTm8gc3RydWN0IGZpZWxkcywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UgdmlhIE5ldGxpbmsgKGFsbCBkdW1wZWQgYXR0cmlidXRlcyBhcmUgdmFsaWRhdGVkIGFuZCBwb3B1bGF0ZWQgZnJvbSBpbml0aWFsaXplZCBzY2FsYXIgdmFsdWVzKS4gVGhlcmUgaXMgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxcbi0gVUFGIC8gS0FTQU46IFRoZSBjaGFuZ2VzIG1vZGlmeSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGJ1Y2tldCBkZWFsbG9jYXRpb24gbGlmZXRpbWVzIChga2ZyZWVfcmN1YCksIHdoaWNoIGZhbGwgdW5kZXIgVXNlLUFmdGVyLUZyZWUgYW5kIHJlZmNvdW50IHNhZmV0eS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgbW9uaXRvcmVkIGFuZCBkZXRlY3RlZCBieSBLQVNBTiBhbmQgdGhlIGtlcm5lbCdzIGJ1aWx0LWluIHJlZmNvdW50IGNoZWNraW5nIChgcmVmY291bnRfdGApLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA0YjQ3MGE4YWIyOGY2ZmUzN2Q1YTRlNTdhOTA1NmJjMDhjOGU4ZTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDAwOjU5OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXG5pbmRleCAwZDEzMjRjOTA1ODM3Li4wZjIxMWYwMzBmZDlhIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcm91dGUuaFx1MDAzZVxuQEAgLTQxLDYgKzQyLDcgQEAgc3RydWN0IHJvdXRlNF9oZWFkIHtcbiBzdHJ1Y3Qgcm91dGU0X2J1Y2tldCB7XG4gXHQvKiAxNiBGUk9NIGJ1Y2tldHMgKyAxNiBJSUYgYnVja2V0cyArIDEgd2lsZGNhcmQgYnVja2V0ICovXG4gXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciBfX3JjdVx0Kmh0WzE2ICsgMTYgKyAxXTtcbitcdHJlZmNvdW50X3RcdFx0XHRmaWx0ZXJzX3JlZjtcbiBcdHN0cnVjdCByY3VfaGVhZFx0XHRcdHJjdTtcbiB9O1xuIFxuQEAgLTMzNiw3ICszMzgsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCxcbiBcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpuZjtcbiBcdHN0cnVjdCByb3V0ZTRfYnVja2V0ICpiO1xuIFx0dW5zaWduZWQgaW50IGggPSAwO1xuLVx0aW50IGksIGgxO1xuK1x0aW50IGgxO1xuIFxuIFx0aWYgKCFoZWFkIHx8ICFmKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0zNjIsMjMgKzM2NCwxNCBAQCBzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCxcbiBcdFx0XHR0Y2ZfZXh0c19nZXRfbmV0KFx1MDAyNmYtXHUwMDNlZXh0cyk7XG4gXHRcdFx0dGNmX3F1ZXVlX3dvcmsoXHUwMDI2Zi1cdTAwM2Vyd29yaywgcm91dGU0X2RlbGV0ZV9maWx0ZXJfd29yayk7XG4gXG4tXHRcdFx0LyogU3RyaXAgUlROTCBwcm90ZWN0ZWQgdHJlZSAqL1xuLVx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSAzMjsgaSsrKSB7XG4tXHRcdFx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqcnQ7XG4tXG4tXHRcdFx0XHRydCA9IHJ0bmxfZGVyZWZlcmVuY2UoYi1cdTAwM2VodFtpXSk7XG4tXHRcdFx0XHRpZiAocnQpXG4tXHRcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZikpIHtcbitcdFx0XHRcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cdTAwM2V0YWJsZVt0b19oYXNoKGgpXSwgTlVMTCk7XG4rXHRcdFx0XHRrZnJlZV9yY3UoYiwgcmN1KTtcbiBcdFx0XHR9XG4tXG4tXHRcdFx0LyogT0ssIHNlc3Npb24gaGFzIG5vIGZsb3dzICovXG4tXHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcbi1cdFx0XHRrZnJlZV9yY3UoYiwgcmN1KTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuIFxuLW91dDpcbiBcdCpsYXN0ID0gdHJ1ZTtcbiBcdGZvciAoaDEgPSAwOyBoMSBcdTAwM2M9IDI1NjsgaDErKykge1xuIFx0XHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGhlYWQtXHUwMDNldGFibGVbaDFdKSkge1xuQEAgLTQwMCw4ICszOTMsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcm91dGU0X3BvbGljeVtUQ0FfUk9VVEU0X01BWCArIDFdID0ge1xuIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGJhc2UsIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmLFxuIFx0XHRcdCAgICB1MzIgaGFuZGxlLCBzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQsXG4tXHRcdFx0ICAgIHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IG5sYXR0ciAqZXN0LCBpbnQgbmV3LFxuLVx0XHRcdCAgICB1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbitcdFx0XHQgICAgc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgbmxhdHRyICplc3QsXG4rXHRcdFx0ICAgIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmb2xkLCB1MzIgZmxhZ3MsXG4rXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHR1MzIgaWQgPSAwLCB0byA9IDAsIG5oYW5kbGUgPSAweDgwMDA7XG4gXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZnA7XG5AQCAtNDE0LDcgKzQwOCw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0aWYgKHRiW1RDQV9ST1VURTRfVE9dKSB7XG4tXHRcdGlmIChuZXcgXHUwMDI2XHUwMDI2IGhhbmRsZSBcdTAwMjYgMHg4MDAwKSB7XG4rXHRcdGlmICghZm9sZCBcdTAwMjZcdTAwMjYgaGFuZGxlIFx1MDAyNiAweDgwMDApIHtcbiBcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiSW52YWxpZCBoYW5kbGVcIik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbkBAIC00MzcsMTQgKzQzMSwxNCBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiBcdH0gZWxzZVxuIFx0XHRuaGFuZGxlIHw9IDB4RkZGRiBcdTAwM2NcdTAwM2MgMTY7XG4gXG4tXHRpZiAoaGFuZGxlIFx1MDAyNlx1MDAyNiBuZXcpIHtcbitcdGlmIChoYW5kbGUgXHUwMDI2XHUwMDI2ICghZm9sZCB8fCBuaGFuZGxlID09IChoYW5kbGUgXHUwMDI2IH4weDdGMDApKSlcbiBcdFx0bmhhbmRsZSB8PSBoYW5kbGUgXHUwMDI2IDB4N0YwMDtcbi1cdFx0aWYgKG5oYW5kbGUgIT0gaGFuZGxlKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcbi1cdFx0XHRcdFx0ICAgXCJIYW5kbGUgbWlzbWF0Y2ggY29uc3RydWN0ZWQ6ICV4IChleHBlY3RlZDogJXgpXCIsXG4tXHRcdFx0XHRcdCAgIGhhbmRsZSwgbmhhbmRsZSk7XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdH1cbitcbitcdGlmIChoYW5kbGUgXHUwMDI2XHUwMDI2ICFmb2xkIFx1MDAyNlx1MDAyNiBuaGFuZGxlICE9IGhhbmRsZSkge1xuK1x0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJIYW5kbGUgbWlzbWF0Y2ggY29uc3RydWN0ZWQ6ICV4IChleHBlY3RlZDogJXgpXCIsXG4rXHRcdFx0XHQgICBoYW5kbGUsIG5oYW5kbGUpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdGlmICghbmhhbmRsZSkge1xuQEAgLTQ1OSw2ICs0NTMsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiBcdFx0aWYgKGIgPT0gTlVMTClcbiBcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG4rXHRcdHJlZmNvdW50X3NldChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmLCAxKTtcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGhlYWQtXHUwMDNldGFibGVbaDFdLCBiKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHVuc2lnbmVkIGludCBoMiA9IGZyb21faGFzaChuaGFuZGxlIFx1MDAzZVx1MDAzZSAxNik7XG5AQCAtNDY2LDggKzQ2MSwxNCBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiBcdFx0Zm9yIChmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoYi1cdTAwM2VodFtoMl0pO1xuIFx0XHQgICAgIGZwO1xuIFx0XHQgICAgIGZwID0gcnRubF9kZXJlZmVyZW5jZShmcC1cdTAwM2VuZXh0KSlcbi1cdFx0XHRpZiAoZnAtXHUwMDNlaGFuZGxlID09IGYtXHUwMDNlaGFuZGxlKVxuK1x0XHRcdGlmIChmcCAhPSBmb2xkIFx1MDAyNlx1MDAyNiBmcC1cdTAwM2VoYW5kbGUgPT0gbmhhbmRsZSkge1xuK1x0XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcbitcdFx0XHRcdFx0XHQgICBcIkhhbmRsZSAleCBpcyBhbHJlYWR5IGluIHVzZVwiLFxuK1x0XHRcdFx0XHRcdCAgIG5oYW5kbGUpO1xuIFx0XHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXHRcdFx0fVxuK1xuK1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZik7XG4gXHR9XG4gXG4gXHRpZiAodGJbVENBX1JPVVRFNF9UT10pXG5AQCAtNTAwLDkgKzUwMSw4IEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZm9sZCwgKmYxLCAqcGZwLCAqZiA9IE5VTEw7XG4gXHRzdHJ1Y3Qgcm91dGU0X2J1Y2tldCAqYjtcbiBcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9ST1VURTRfTUFYICsgMV07XG4tXHR1bnNpZ25lZCBpbnQgaCwgdGg7XG4rXHR1bnNpZ25lZCBpbnQgaDtcbiBcdGludCBlcnI7XG4tXHRib29sIG5ldyA9IHRydWU7XG4gXG4gXHRpZiAoIWhhbmRsZSkge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiQ3JlYXRpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkXCIpO1xuQEAgLTUzOSwxMSArNTM5LDEwIEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXG4gXHRcdGYtXHUwMDNldHAgPSBmb2xkLVx1MDAzZXRwO1xuIFx0XHRmLVx1MDAzZWJrdCA9IGZvbGQtXHUwMDNlYmt0O1xuLVx0XHRuZXcgPSBmYWxzZTtcbiBcdH1cbiBcbiBcdGVyciA9IHJvdXRlNF9zZXRfcGFybXMobmV0LCB0cCwgYmFzZSwgZiwgaGFuZGxlLCBoZWFkLCB0Yixcbi1cdFx0XHQgICAgICAgdGNhW1RDQV9SQVRFXSwgbmV3LCBmbGFncywgZXh0YWNrKTtcbitcdFx0XHQgICAgICAgdGNhW1RDQV9SQVRFXSwgZm9sZCwgZmxhZ3MsIGV4dGFjayk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycm91dDtcbiBcbkBAIC01NjAsMTcgKzU1OSwyMCBAQCBzdGF0aWMgaW50IHJvdXRlNF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZik7XG4gXG4gXHRpZiAoZm9sZCkge1xuLVx0XHR0aCA9IHRvX2hhc2goZm9sZC1cdTAwM2VoYW5kbGUpO1xuK1x0XHRiID0gZm9sZC1cdTAwM2Via3Q7XG4gXHRcdGggPSBmcm9tX2hhc2goZm9sZC1cdTAwM2VoYW5kbGUgXHUwMDNlXHUwMDNlIDE2KTtcbi1cdFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UoaGVhZC1cdTAwM2V0YWJsZVt0aF0pO1xuLVx0XHRpZiAoYikge1xuLVx0XHRcdGZwID0gXHUwMDI2Yi1cdTAwM2VodFtoXTtcbi1cdFx0XHRmb3IgKHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgcGZwO1xuLVx0XHRcdCAgICAgZnAgPSBcdTAwMjZwZnAtXHUwMDNlbmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XG4tXHRcdFx0XHRpZiAocGZwID09IGZvbGQpIHtcbi1cdFx0XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC1cdTAwM2VuZXh0KTtcbi1cdFx0XHRcdFx0YnJlYWs7XG4rXHRcdGZwID0gXHUwMDI2Yi1cdTAwM2VodFtoXTtcbitcdFx0Zm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDtcbitcdFx0ICAgICBmcCA9IFx1MDAyNnBmcC1cdTAwM2VuZXh0LCBwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCkpIHtcbitcdFx0XHRpZiAocGZwID09IGZvbGQpIHtcbitcdFx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGZvbGQtXHUwMDNlbmV4dCk7XG4rXHRcdFx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYpKSB7XG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCB0aCA9IHRvX2hhc2goZm9sZC1cdTAwM2VoYW5kbGUpO1xuK1xuK1x0XHRcdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtXHUwMDNldGFibGVbdGhdLCBOVUxMKTtcbitcdFx0XHRcdFx0a2ZyZWVfcmN1KGIsIHJjdSk7XG4gXHRcdFx0XHR9XG4rXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL2ZpbHRlcnMvcm91dGUuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvZmlsdGVycy9yb3V0ZS5qc29uXG5pbmRleCAwNWNlZGNhNjdjY2FkLi4yZDU4NDNhZWJkNzI5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb25cbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvZmlsdGVycy9yb3V0ZS5qc29uXG5AQCAtMjAyLDUgKzIwMiwyMTUgQEBcbiAgICAgICAgIFwidGVhcmRvd25cIjogW1xuICAgICAgICAgICAgIFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgcGFyZW50IHJvb3QgZHJyXCJcbiAgICAgICAgIF1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcImE3ZDJcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkRlbGV0ZSBhIHJvdXRlIGZpbHRlciB0aGF0IHdhcyBtb3ZlZCB0byBhbm90aGVyIGJ1Y2tldFwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJmaWx0ZXJcIixcbisgICAgICAgICAgICBcInJvdXRlXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGNoYW5nZSBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMDAxIHJvdXRlIGZyb20gMSB0byAyIGNsYXNzaWQgMToxXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMjAwIHJvdXRlIGZyb20gNSB0byA1IGNsYXNzaWQgMTo1XCJcbisgICAgICAgIF0sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBmaWx0ZXIgZGVsIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAwMDIgcm91dGUgZnJvbSAxIHRvIDJcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyAtaiBmaWx0ZXIgc2hvdyBkZXYgJERFVjEgcGFyZW50IGZmZmY6XCIsXG4rICAgICAgICBcIm1hdGNoSlNPTlwiOiBbXG4rICAgICAgICAgICAge1xuKyAgICAgICAgICAgICAgICBcInByb3RvY29sXCI6IFwiaXBcIixcbisgICAgICAgICAgICAgICAgXCJwcmVmXCI6IDIwMCxcbisgICAgICAgICAgICAgICAgXCJraW5kXCI6IFwicm91dGVcIixcbisgICAgICAgICAgICAgICAgXCJjaGFpblwiOiAwXG4rICAgICAgICAgICAgfSxcbisgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgIFwicHJvdG9jb2xcIjogXCJpcFwiLFxuKyAgICAgICAgICAgICAgICBcInByZWZcIjogMjAwLFxuKyAgICAgICAgICAgICAgICBcImtpbmRcIjogXCJyb3V0ZVwiLFxuKyAgICAgICAgICAgICAgICBcImNoYWluXCI6IDAsXG4rICAgICAgICAgICAgICAgIFwib3B0aW9uc1wiOiB7XG4rICAgICAgICAgICAgICAgICAgICBcImZoXCI6IFwiMHg1MDAwNVwiLFxuKyAgICAgICAgICAgICAgICAgICAgXCJmbG93aWRcIjogXCIxOjVcIlxuKyAgICAgICAgICAgICAgICB9XG4rICAgICAgICAgICAgfVxuKyAgICAgICAgXSxcbisgICAgICAgIFwidGVhcmRvd25cIjogW1xuKyAgICAgICAgICAgIFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzc1wiXG4rICAgICAgICBdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCJjMDVhXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJUcnkgdG8gY2hhbmdlIGEgcm91dGUgZmlsdGVyIG9udG8gYW4gYWxyZWFkeSB1c2VkIGhhbmRsZVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJmaWx0ZXJcIixcbisgICAgICAgICAgICBcInJvdXRlXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxIGFjdGlvbiBva1wiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCByb3V0ZSBmcm9tIDIgdG8gMiBjbGFzc2lkIDE6MiBhY3Rpb24gZHJvcFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgZmlsdGVyIGNoYW5nZSBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMDAxIHJvdXRlIGZyb20gMiB0byAyIGNsYXNzaWQgMToxIGFjdGlvbiBva1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjJcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIC1qIGZpbHRlciBzaG93IGRldiAkREVWMSBwYXJlbnQgZmZmZjpcIixcbisgICAgICAgIFwibWF0Y2hKU09OXCI6IFtcbisgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgIFwicHJvdG9jb2xcIjogXCJpcFwiLFxuKyAgICAgICAgICAgICAgICBcInByZWZcIjogMTAwLFxuKyAgICAgICAgICAgICAgICBcImtpbmRcIjogXCJyb3V0ZVwiLFxuKyAgICAgICAgICAgICAgICBcImNoYWluXCI6IDBcbisgICAgICAgICAgICB9LFxuKyAgICAgICAgICAgIHtcbisgICAgICAgICAgICAgICAgXCJwcm90b2NvbFwiOiBcImlwXCIsXG4rICAgICAgICAgICAgICAgIFwicHJlZlwiOiAxMDAsXG4rICAgICAgICAgICAgICAgIFwia2luZFwiOiBcInJvdXRlXCIsXG4rICAgICAgICAgICAgICAgIFwiY2hhaW5cIjogMCxcbisgICAgICAgICAgICAgICAgXCJvcHRpb25zXCI6IHtcbisgICAgICAgICAgICAgICAgICAgIFwiZmhcIjogXCIweDEwMDAxXCIsXG4rICAgICAgICAgICAgICAgICAgICBcImZsb3dpZFwiOiBcIjE6MVwiLFxuKyAgICAgICAgICAgICAgICAgICAgXCJhY3Rpb25zXCI6IFtcbisgICAgICAgICAgICAgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JkZXJcIjogMSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJraW5kXCI6IFwiZ2FjdFwiLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xfYWN0aW9uXCI6IHtcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInBhc3NcIlxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4rICAgICAgICAgICAgICAgICAgICAgICAgfVxuKyAgICAgICAgICAgICAgICAgICAgXVxuKyAgICAgICAgICAgICAgICB9XG4rICAgICAgICAgICAgfSxcbisgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgIFwicHJvdG9jb2xcIjogXCJpcFwiLFxuKyAgICAgICAgICAgICAgICBcInByZWZcIjogMTAwLFxuKyAgICAgICAgICAgICAgICBcImtpbmRcIjogXCJyb3V0ZVwiLFxuKyAgICAgICAgICAgICAgICBcImNoYWluXCI6IDAsXG4rICAgICAgICAgICAgICAgIFwib3B0aW9uc1wiOiB7XG4rICAgICAgICAgICAgICAgICAgICBcImZoXCI6IFwiMHgyMDAwMlwiLFxuKyAgICAgICAgICAgICAgICAgICAgXCJmbG93aWRcIjogXCIxOjJcIixcbisgICAgICAgICAgICAgICAgICAgIFwiYWN0aW9uc1wiOiBbXG4rICAgICAgICAgICAgICAgICAgICAgICAge1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yZGVyXCI6IDEsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia2luZFwiOiBcImdhY3RcIixcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb250cm9sX2FjdGlvblwiOiB7XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJkcm9wXCJcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuKyAgICAgICAgICAgICAgICAgICAgICAgIH1cbisgICAgICAgICAgICAgICAgICAgIF1cbisgICAgICAgICAgICAgICAgfVxuKyAgICAgICAgICAgIH1cbisgICAgICAgIF0sXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcbisgICAgICAgICAgICBcIiRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3NcIlxuKyAgICAgICAgXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiM2YyMVwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiUmVwbGFjZSBhIHJvdXRlIGZpbHRlciB0aGF0IHNoYXJlcyBpdHMga2V5IHdpdGggYW5vdGhlciBmaWx0ZXJcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwiZmlsdGVyXCIsXG4rICAgICAgICAgICAgXCJyb3V0ZVwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW1xuKyAgICAgICAgICAgIFwiJFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzc1wiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6MVwiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDIwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6MlwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OVwiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIC1qIGZpbHRlciBzaG93IGRldiAkREVWMSBwYXJlbnQgZmZmZjpcIixcbisgICAgICAgIFwibWF0Y2hKU09OXCI6IFtcbisgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgIFwicHJvdG9jb2xcIjogXCJpcFwiLFxuKyAgICAgICAgICAgICAgICBcInByZWZcIjogMTAwLFxuKyAgICAgICAgICAgICAgICBcImtpbmRcIjogXCJyb3V0ZVwiLFxuKyAgICAgICAgICAgICAgICBcImNoYWluXCI6IDBcbisgICAgICAgICAgICB9LFxuKyAgICAgICAgICAgIHtcbisgICAgICAgICAgICAgICAgXCJwcm90b2NvbFwiOiBcImlwXCIsXG4rICAgICAgICAgICAgICAgIFwicHJlZlwiOiAxMDAsXG4rICAgICAgICAgICAgICAgIFwia2luZFwiOiBcInJvdXRlXCIsXG4rICAgICAgICAgICAgICAgIFwiY2hhaW5cIjogMCxcbisgICAgICAgICAgICAgICAgXCJvcHRpb25zXCI6IHtcbisgICAgICAgICAgICAgICAgICAgIFwiZmhcIjogXCIweDEwMTAxXCIsXG4rICAgICAgICAgICAgICAgICAgICBcImZsb3dpZFwiOiBcIjE6OVwiXG4rICAgICAgICAgICAgICAgIH1cbisgICAgICAgICAgICB9LFxuKyAgICAgICAgICAgIHtcbisgICAgICAgICAgICAgICAgXCJwcm90b2NvbFwiOiBcImlwXCIsXG4rICAgICAgICAgICAgICAgIFwicHJlZlwiOiAxMDAsXG4rICAgICAgICAgICAgICAgIFwia2luZFwiOiBcInJvdXRlXCIsXG4rICAgICAgICAgICAgICAgIFwiY2hhaW5cIjogMCxcbisgICAgICAgICAgICAgICAgXCJvcHRpb25zXCI6IHtcbisgICAgICAgICAgICAgICAgICAgIFwiZmhcIjogXCIweDEwMjAxXCIsXG4rICAgICAgICAgICAgICAgICAgICBcImZsb3dpZFwiOiBcIjE6MlwiXG4rICAgICAgICAgICAgICAgIH1cbisgICAgICAgICAgICB9XG4rICAgICAgICBdLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXCJcbisgICAgICAgIF1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcIjlkMGVcIixcbisgICAgICAgIFwibmFtZVwiOiBcIlJlcGxhY2UgYm90aCByb3V0ZSBmaWx0ZXJzIHNoYXJpbmcgYSBrZXlcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwiZmlsdGVyXCIsXG4rICAgICAgICAgICAgXCJyb3V0ZVwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW1xuKyAgICAgICAgICAgIFwiJFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzc1wiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6MVwiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDIwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6MlwiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciByZXBsYWNlIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAxMDEgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjlcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIGZpbHRlciByZXBsYWNlIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAyMDEgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjhcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyAtaiBmaWx0ZXIgc2hvdyBkZXYgJERFVjEgcGFyZW50IGZmZmY6XCIsXG4rICAgICAgICBcIm1hdGNoSlNPTlwiOiBbXG4rICAgICAgICAgICAge1xuKyAgICAgICAgICAgICAgICBcInByb3RvY29sXCI6IFwiaXBcIixcbisgICAgICAgICAgICAgICAgXCJwcmVmXCI6IDEwMCxcbisgICAgICAgICAgICAgICAgXCJraW5kXCI6IFwicm91dGVcIixcbisgICAgICAgICAgICAgICAgXCJjaGFpblwiOiAwXG4rICAgICAgICAgICAgfSxcbisgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgIFwicHJvdG9jb2xcIjogXCJpcFwiLFxuKyAgICAgICAgICAgICAgICBcInByZWZcIjogMTAwLFxuKyAgICAgICAgICAgICAgICBcImtpbmRcIjogXCJyb3V0ZVwiLFxuKyAgICAgICAgICAgICAgICBcImNoYWluXCI6IDAsXG4rICAgICAgICAgICAgICAgIFwib3B0aW9uc1wiOiB7XG4rICAgICAgICAgICAgICAgICAgICBcImZoXCI6IFwiMHgxMDEwMVwiLFxuKyAgICAgICAgICAgICAgICAgICAgXCJmbG93aWRcIjogXCIxOjlcIlxuKyAgICAgICAgICAgICAgICB9XG4rICAgICAgICAgICAgfSxcbisgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgIFwicHJvdG9jb2xcIjogXCJpcFwiLFxuKyAgICAgICAgICAgICAgICBcInByZWZcIjogMTAwLFxuKyAgICAgICAgICAgICAgICBcImtpbmRcIjogXCJyb3V0ZVwiLFxuKyAgICAgICAgICAgICAgICBcImNoYWluXCI6IDAsXG4rICAgICAgICAgICAgICAgIFwib3B0aW9uc1wiOiB7XG4rICAgICAgICAgICAgICAgICAgICBcImZoXCI6IFwiMHgxMDIwMVwiLFxuKyAgICAgICAgICAgICAgICAgICAgXCJmbG93aWRcIjogXCIxOjhcIlxuKyAgICAgICAgICAgICAgICB9XG4rICAgICAgICAgICAgfVxuKyAgICAgICAgXSxcbisgICAgICAgIFwidGVhcmRvd25cIjogW1xuKyAgICAgICAgICAgIFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzc1wiXG4rICAgICAgICBdXG4gICAgIH1cbiBdXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMTowMDowOC40MTg0NTM2ODNaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDExMzMxMDU3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb3ZpZGVkIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoIGlzIHRoYXQgaXQncyBmb2N1c2VkIG9uIHRoZSBgY2xzX3JvdXRlYCBjbGFzc2lmaWVyLCBnaXZlbiB0aGUgZmlsZSBtb2RpZmljYXRpb24gaW4gYG5ldC9zY2hlZC9jbHNfcm91dGUuY2AuIFRoZSBmYWN0IHRoYXQgdGhlcmUgYXJlIGFsc28gbmV3IHRlc3QgY2FzZXMgYWRkZWQgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL2ZpbHRlcnMvcm91dGUuanNvbmAgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgYWltZWQgYXQgaW1wcm92aW5nIG9yIGV4cGFuZGluZyB0aGUgdGVzdGluZyBjb3ZlcmFnZSBmb3IgdGhpcyBjbGFzc2lmaWVyLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGdldCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMgaW4gYGNsc19yb3V0ZS5jYC4gSSB3aWxsIGxpa2VseSBlaXRoZXIgcmVhZCB0aGUgZW50aXJlIGZpbGUgb3IgdXNlIHRvb2xzIGxpa2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGlzb2xhdGUgdGhlIHNwZWNpZmljIGNoYW5nZXMgYW5kIHRoZWlyIHN1cnJvdW5kaW5nIGNvbnRleHQuIEZyb20gdGhlcmUgSSdsbCBzY3J1dGluaXplIHRoZSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY0MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MDA6MTIuNTMxNzY2MjIxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX3JvdXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0fTtcXG4gIDQxOlxcdFxcbiAgNDI6XFx0c3RydWN0IHJvdXRlNF9idWNrZXQge1xcbiAgNDM6XFx0XFx0LyogMTYgRlJPTSBidWNrZXRzICsgMTYgSUlGIGJ1Y2tldHMgKyAxIHdpbGRjYXJkIGJ1Y2tldCAqL1xcbiAgNDQ6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3VcXHQqaHRbMTYgKyAxNiArIDFdO1xcbiAgNDU6XFx0XFx0cmVmY291bnRfdFxcdFxcdFxcdGZpbHRlcnNfcmVmO1xcbiAgNDY6XFx0XFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0XFx0cmN1O1xcbiAgNDc6XFx0fTtcXG4gIDQ4OlxcdFxcbiAgNDk6XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIge1xcbiAgNTA6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3VcXHQqbmV4dDtcXG4gIDUxOlxcdFxcdHUzMlxcdFxcdFxcdGlkO1xcbiAgNTI6XFx0XFx0aW50XFx0XFx0XFx0aWlmO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRzdHJ1Y3QgdGNmX3Jlc3VsdFxcdHJlcztcXG4gIDU1OlxcdFxcdHN0cnVjdCB0Y2ZfZXh0c1xcdFxcdGV4dHM7XFxuICA1NjpcXHRcXHR1MzJcXHRcXHRcXHRoYW5kbGU7XFxuICA1NzpcXHRcXHRib29sXFx0XFx0XFx0ZHlpbmc7XFxuICA1ODpcXHRcXHRzdHJ1Y3Qgcm91dGU0X2J1Y2tldFxcdCpia3Q7XFxuICA1OTpcXHRcXHRzdHJ1Y3QgdGNmX3Byb3RvXFx0KnRwO1xcbiAgNjA6XFx0XFx0c3RydWN0IHJjdV93b3JrXFx0XFx0cndvcms7XFxuICA2MTpcXHR9O1xcbiAgNjI6XFx0XFxuICA2MzpcXHQjZGVmaW5lIFJPVVRFNF9GQUlMVVJFICgoc3RydWN0IHJvdXRlNF9maWx0ZXIgKikoLTFMKSlcXG4gIDY0OlxcdFxcbiAgNjU6XFx0c3RhdGljIGlubGluZSBpbnQgcm91dGU0X2Zhc3RtYXBfaGFzaCh1MzIgaWQsIGludCBpaWYpXFxuICA2NjpcXHR7XFxuICA2NzpcXHRcXHRyZXR1cm4gaWQgXFx1MDAyNiAweEY7XFxuICA2ODpcXHR9XFxuICA2OTpcXHRcXG4gIDcwOlxcdHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZmFzdG1hcF9sb2NrKTtcXG4gIDcxOlxcdHN0YXRpYyB2b2lkXFxuICA3MjpcXHRyb3V0ZTRfcmVzZXRfZmFzdG1hcChzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQsIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmKVxcbiAgNzM6XFx0e1xcbiAgNzQ6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZmYXN0bWFwX2xvY2spO1xcbiAgNzU6XFx0XFx0aWYgKGYpXFxuICA3NjpcXHRcXHRcXHRmLVxcdTAwM2VkeWluZyA9IHRydWU7XFxuICA3NzpcXHRcXHRtZW1zZXQoaGVhZC1cXHUwMDNlZmFzdG1hcCwgMCwgc2l6ZW9mKGhlYWQtXFx1MDAzZWZhc3RtYXApKTtcXG4gIDc4OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZmYXN0bWFwX2xvY2spO1xcbiAgNzk6XFx0fVxcbiAgODA6XFx0XFxuICA4MTpcXHRzdGF0aWMgdm9pZFxcbiAgODI6XFx0cm91dGU0X3NldF9mYXN0bWFwKHN0cnVjdCByb3V0ZTRfaGVhZCAqaGVhZCwgdTMyIGlkLCBpbnQgaWlmLFxcbiAgODM6XFx0XFx0XFx0ICAgc3RydWN0IHJvdXRlNF9maWx0ZXIgKmYpXFxuICA4NDpcXHR7XFxuICA4NTpcXHRcXHRpbnQgaCA9IHJvdXRlNF9mYXN0bWFwX2hhc2goaWQsIGlpZik7XFxuICA4NjpcXHRcXG4gIDg3OlxcdFxcdC8qIGZhc3RtYXAgdXBkYXRlcyBtdXN0IGxvb2sgYXRvbWljIHRvIGFsaW5nIGlkLCBpZmYsIGZpbHRlciAqL1xcbiAgODg6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZmYXN0bWFwX2xvY2spO1xcbiAgODk6XFx0XFx0aWYgKGYgPT0gUk9VVEU0X0ZBSUxVUkUgfHwgIWYtXFx1MDAzZWR5aW5nKSB7XFxuICA5MDpcXHRcXHRcXHRoZWFkLVxcdTAwM2VmYXN0bWFwW2hdLmlkID0gaWQ7XFxuICA5MTpcXHRcXHRcXHRoZWFkLVxcdTAwM2VmYXN0bWFwW2hdLmlpZiA9IGlpZjtcXG4gIDkyOlxcdFxcdFxcdGhlYWQtXFx1MDAzZWZhc3RtYXBbaF0uZmlsdGVyID0gZjtcXG4gIDkzOlxcdFxcdH1cXG4gIDk0OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZmYXN0bWFwX2xvY2spO1xcbiAgOTU6XFx0fVxcbiAgOTY6XFx0XFxuICA5NzpcXHRzdGF0aWMgaW5saW5lIGludCByb3V0ZTRfaGFzaF90byh1MzIgaWQpXFxuICA5ODpcXHR7XFxuICA5OTpcXHRcXHRyZXR1cm4gaWQgXFx1MDAyNiAweEZGO1xcbiAxMDA6XFx0fVxcbiAxMDE6XFx0XFxuIDEwMjpcXHRzdGF0aWMgaW5saW5lIGludCByb3V0ZTRfaGFzaF9mcm9tKHUzMiBpZClcXG4gMTAzOlxcdHtcXG4gMTA0OlxcdFxcdHJldHVybiAoaWQgXFx1MDAzZVxcdTAwM2UgMTYpIFxcdTAwMjYgMHhGO1xcbiAxMDU6XFx0fVxcbiAxMDY6XFx0XFxuIDEwNzpcXHRzdGF0aWMgaW5saW5lIGludCByb3V0ZTRfaGFzaF9paWYoaW50IGlpZilcXG4gMTA4OlxcdHtcXG4gMTA5OlxcdFxcdHJldHVybiAxNiArICgoaWlmIFxcdTAwM2VcXHUwMDNlIDE2KSBcXHUwMDI2IDB4Rik7XFxuIDExMDpcXHR9XFxuIDExMTpcXHRcXG4gMTEyOlxcdHN0YXRpYyBpbmxpbmUgaW50IHJvdXRlNF9oYXNoX3dpbGQodm9pZClcXG4gMTEzOlxcdHtcXG4gMTE0OlxcdFxcdHJldHVybiAzMjtcXG4gMTE1OlxcdH1cXG4gMTE2OlxcdFxcbiAxMTc6XFx0I2RlZmluZSBST1VURTRfQVBQTFlfUkVTVUxUKClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDExODpcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxMTk6XFx0XFx0KnJlcyA9IGYtXFx1MDAzZXJlcztcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjAwOjEyLjUzMTkxODUzMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDU4OTk2OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgY2xzX3JvdXRlLmNgIGNvZGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyBhcm91bmQgYHJvdXRlNF9kZWxldGVgLCBgcm91dGU0X3NldF9wYXJtc2AsIGByb3V0ZTRfY2hhbmdlYCwgYW5kIHRoZSBlbnRpcmUgbGFuZHNjYXBlIG9mIGhvdyB0aGVzZSBmaWx0ZXIgYWxsb2NhdGlvbnMgYW5kIGxvb2t1cHMgYXJlIG9yY2hlc3RyYXRlZC4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIHBpY3R1cmUgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyByZWxhdGUgdG8gZWFjaCBvdGhlciwgZXNwZWNpYWxseSB3aGVyZSBmaWx0ZXJzIGNvbWUgaW50byBwbGF5LiBJdCdzIGNydWNpYWwgdG8gZ3Jhc3AgaG93IHJvdXRlcyBhcmUgbWFuaXB1bGF0ZWQsIGNyZWF0ZWQsIGFuZCBkZWxldGVkLCBhbmQgdGhlIGltcGFjdCB0aGlzIGhhcyBvbiBmaWx0ZXIgbWFuYWdlbWVudC4gVW5kZXJzdGFuZGluZyB0aGUgZmxvdyBmcm9tIGRlbGV0aW9uIHRvIHBhcmFtZXRlciBzZXR0aW5nIGFuZCBjaGFuZ2VzIGlzIHZpdGFsIHRvIG1haW50YWluaW5nIG92ZXJhbGwgc3lzdGVtIGludGVncml0eS4gTGV0J3Mgc2VlIGhvdyB0aGVzZSBhY3Rpb25zIGFyZSByZWZsZWN0ZWQgaW4gdGhlIGZpbHRlciBsb29rdXBzIGFuZCBhbGxvY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAyOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MDA6MTQuNTkwOTE4NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX3JvdXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzMwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMzMDpcXHR9XFxuIDMzMTpcXHRcXG4gMzMyOlxcdHN0YXRpYyBpbnQgcm91dGU0X2RlbGV0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqYXJnLCBib29sICpsYXN0LFxcbiAzMzM6XFx0XFx0XFx0XFx0IGJvb2wgcnRubF9oZWxkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDMzNDpcXHR7XFxuIDMzNTpcXHRcXHRzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQgPSBydG5sX2RlcmVmZXJlbmNlKHRwLVxcdTAwM2Vyb290KTtcXG4gMzM2OlxcdFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmID0gYXJnO1xcbiAzMzc6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3UgKipmcDtcXG4gMzM4OlxcdFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpuZjtcXG4gMzM5OlxcdFxcdHN0cnVjdCByb3V0ZTRfYnVja2V0ICpiO1xcbiAzNDA6XFx0XFx0dW5zaWduZWQgaW50IGggPSAwO1xcbiAzNDE6XFx0XFx0aW50IGgxO1xcbiAzNDI6XFx0XFxuIDM0MzpcXHRcXHRpZiAoIWhlYWQgfHwgIWYpXFxuIDM0NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0XFx0aCA9IGYtXFx1MDAzZWhhbmRsZTtcXG4gMzQ3OlxcdFxcdGIgPSBmLVxcdTAwM2Via3Q7XFxuIDM0ODpcXHRcXG4gMzQ5OlxcdFxcdGZwID0gXFx1MDAyNmItXFx1MDAzZWh0W2Zyb21faGFzaChoIFxcdTAwM2VcXHUwMDNlIDE2KV07XFxuIDM1MDpcXHRcXHRmb3IgKG5mID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBuZjtcXG4gMzUxOlxcdFxcdCAgICAgZnAgPSBcXHUwMDI2bmYtXFx1MDAzZW5leHQsIG5mID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XFxuIDM1MjpcXHRcXHRcXHRpZiAobmYgPT0gZikge1xcbiAzNTM6XFx0XFx0XFx0XFx0LyogdW5saW5rIGl0ICovXFxuIDM1NDpcXHRcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKCpmcCwgcnRubF9kZXJlZmVyZW5jZShmLVxcdTAwM2VuZXh0KSk7XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdFxcdFxcdC8qIENsZWFyIGFueSBmYXN0bWFwIGVudHJpZXMgdGhhdCBtYXkgcmVmIHRoaXMgZmlsdGVyIGFuZFxcbiAzNTc6XFx0XFx0XFx0XFx0ICogbWFyayBpdCBkeWluZyBzbyBpbi1mbGlnaHQgcmVhZGVycyBjYW4ndCByZXB1Ymxpc2ggaXRcXG4gMzU4OlxcdFxcdFxcdFxcdCAqIGFmdGVyIHRoZSByZXNldC5cXG4gMzU5OlxcdFxcdFxcdFxcdCAqL1xcbiAzNjA6XFx0XFx0XFx0XFx0cm91dGU0X3Jlc2V0X2Zhc3RtYXAoaGVhZCwgZik7XFxuIDM2MTpcXHRcXG4gMzYyOlxcdFxcdFxcdFxcdC8qIERlbGV0ZSBpdCAqL1xcbiAzNjM6XFx0XFx0XFx0XFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFxcdTAwMjZmLVxcdTAwM2VyZXMpO1xcbiAzNjQ6XFx0XFx0XFx0XFx0dGNmX2V4dHNfZ2V0X25ldChcXHUwMDI2Zi1cXHUwMDNlZXh0cyk7XFxuIDM2NTpcXHRcXHRcXHRcXHR0Y2ZfcXVldWVfd29yayhcXHUwMDI2Zi1cXHUwMDNlcndvcmssIHJvdXRlNF9kZWxldGVfZmlsdGVyX3dvcmspO1xcbiAzNjY6XFx0XFxuIDM2NzpcXHRcXHRcXHRcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZiLVxcdTAwM2VmaWx0ZXJzX3JlZikpIHtcXG4gMzY4OlxcdFxcdFxcdFxcdFxcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cXHUwMDNldGFibGVbdG9faGFzaChoKV0sIE5VTEwpO1xcbiAzNjk6XFx0XFx0XFx0XFx0XFx0a2ZyZWVfcmN1KGIsIHJjdSk7XFxuIDM3MDpcXHRcXHRcXHRcXHR9XFxuIDM3MTpcXHRcXHRcXHRcXHRicmVhaztcXG4gMzcyOlxcdFxcdFxcdH1cXG4gMzczOlxcdFxcdH1cXG4gMzc0OlxcdFxcbiAzNzU6XFx0XFx0Kmxhc3QgPSB0cnVlO1xcbiAzNzY6XFx0XFx0Zm9yIChoMSA9IDA7IGgxIFxcdTAwM2M9IDI1NjsgaDErKykge1xcbiAzNzc6XFx0XFx0XFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihoZWFkLVxcdTAwM2V0YWJsZVtoMV0pKSB7XFxuIDM3ODpcXHRcXHRcXHRcXHQqbGFzdCA9IGZhbHNlO1xcbiAzNzk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDM4MDpcXHRcXHRcXHR9XFxuIDM4MTpcXHRcXHR9XFxuIDM4MjpcXHRcXG4gMzgzOlxcdFxcdHJldHVybiAwO1xcbiAzODQ6XFx0fVxcbiAzODU6XFx0XFxuIDM4NjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcm91dGU0X3BvbGljeVtUQ0FfUk9VVEU0X01BWCArIDFdID0ge1xcbiAzODc6XFx0XFx0W1RDQV9ST1VURTRfQ0xBU1NJRF1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuIDM4ODpcXHRcXHRbVENBX1JPVVRFNF9UT11cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIDB4RkYpLFxcbiAzODk6XFx0XFx0W1RDQV9ST1VURTRfRlJPTV1cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIDB4RkYpLFxcbiAzOTA6XFx0XFx0W1RDQV9ST1VURTRfSUlGXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMHg3RkZGKSxcXG4gMzkxOlxcdH07XFxuIDM5MjpcXHRcXG4gMzkzOlxcdHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbiAzOTQ6XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYmFzZSwgc3RydWN0IHJvdXRlNF9maWx0ZXIgKmYsXFxuIDM5NTpcXHRcXHRcXHRcXHQgICAgdTMyIGhhbmRsZSwgc3RydWN0IHJvdXRlNF9oZWFkICpoZWFkLFxcbiAzOTY6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IG5sYXR0ciAqZXN0LFxcbiAzOTc6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmb2xkLCB1MzIgZmxhZ3MsXFxuIDM5ODpcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiAzOTk6XFx0e1xcbiA0MDA6XFx0XFx0dTMyIGlkID0gMCwgdG8gPSAwLCBuaGFuZGxlID0gMHg4MDAwO1xcbiA0MDE6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZwO1xcbiA0MDI6XFx0XFx0dW5zaWduZWQgaW50IGgxO1xcbiA0MDM6XFx0XFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XFxuIDQwNDpcXHRcXHRpbnQgZXJyO1xcbiA0MDU6XFx0XFxuIDQwNjpcXHRcXHRlcnIgPSB0Y2ZfZXh0c192YWxpZGF0ZShuZXQsIHRwLCB0YiwgZXN0LCBcXHUwMDI2Zi1cXHUwMDNlZXh0cywgZmxhZ3MsIGV4dGFjayk7XFxuIDQwNzpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gNDA4OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDQwOTpcXHRcXG4gNDEwOlxcdFxcdGlmICh0YltUQ0FfUk9VVEU0X1RPXSkge1xcbiA0MTE6XFx0XFx0XFx0aWYgKCFmb2xkIFxcdTAwMjZcXHUwMDI2IGhhbmRsZSBcXHUwMDI2IDB4ODAwMCkge1xcbiA0MTI6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBoYW5kbGVcXFwiKTtcXG4gNDEzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MTQ6XFx0XFx0XFx0fVxcbiA0MTU6XFx0XFx0XFx0dG8gPSBubGFfZ2V0X3UzMih0YltUQ0FfUk9VVEU0X1RPXSk7XFxuIDQxNjpcXHRcXHRcXHRuaGFuZGxlID0gdG87XFxuIDQxNzpcXHRcXHR9XFxuIDQxODpcXHRcXG4gNDE5OlxcdFxcdGlmICh0YltUQ0FfUk9VVEU0X0ZST01dIFxcdTAwMjZcXHUwMDI2IHRiW1RDQV9ST1VURTRfSUlGXSkge1xcbiA0MjA6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfQVRUUihleHRhY2ssIHRiW1RDQV9ST1VURTRfRlJPTV0sXFxuIDQyMTpcXHRcXHRcXHRcXHRcXHQgICAgXFxcIidmcm9tJyBhbmQgJ2Zyb21pZicgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZVxcXCIpO1xcbiA0MjI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQyMzpcXHRcXHR9XFxuIDQyNDpcXHRcXG4gNDI1OlxcdFxcdGlmICh0YltUQ0FfUk9VVEU0X0ZST01dKSB7XFxuIDQyNjpcXHRcXHRcXHRpZCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9ST1VURTRfRlJPTV0pO1xcbiA0Mjc6XFx0XFx0XFx0bmhhbmRsZSB8PSBpZCBcXHUwMDNjXFx1MDAzYyAxNjtcXG4gNDI4OlxcdFxcdH0gZWxzZSBpZiAodGJbVENBX1JPVVRFNF9JSUZdKSB7XFxuIDQyOTpcXHRcXHRcXHRpZCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9ST1VURTRfSUlGXSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjAwOjE0LjU5MTAxNzcyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNzMyOTQyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgZm9jdXNpbmcgb24gdGhlIGltcGxpZWQgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBSb3V0aW5nIFBhcmFtZXRlciBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGZvciBgcm91dGU0X3NldF9wYXJtc2AgYW5kIGByb3V0ZTRfY2hhbmdlYC4gVGhhdCBwcmV2aW91cyBjb250ZXh0IGFib3V0IHRoZSBvdmVyYWxsIGZsb3cgYW5kIHRoZSBpbml0aWFsIGZ1bmN0aW9uIGNhbGwgaXMgc3RpbGwgZnJlc2ggaW4gbXkgbWluZC4gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIHR3byBmdW5jdGlvbnMgYmVjYXVzZSB0aGV5J3JlIGNyaXRpY2FsIGZvciBhY3R1YWxseSBjb25maWd1cmluZyBhbmQgcG90ZW50aWFsbHkgbW9kaWZ5aW5nIHRoZSByb3V0aW5nIHNldHVwLCByaWdodD8gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHNldCBhbmQgaG93IGNoYW5nZXMgYXJlIGJlaW5nIGltcGxlbWVudGVkLiBTcGVjaWZpY2FsbHksIHdoYXQncyB0aGUgbG9naWMgdGhlcmU/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGRpcmVjdGx5IG1vZGlmeWluZyBkYXRhIHN0cnVjdHVyZXMsIG9yIGFyZSB0aGVyZSBtb3JlIGNvbXBsZXggaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbW9kdWxlcyBvciBwcm9jZXNzZXMgaW52b2x2ZWQ/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSB3aWxsIGJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBmb3IgZWl0aGVyIGluaXRpYWwgY29uZmlndXJhdGlvbiBvZiB0aGUgcm91dGluZyB0YWJsZSBvciBhZGp1c3RtZW50IG9mIHRoZXNlIHBhcmFtZXRlcnMgZHVyaW5nIHJ1bnRpbWUuIEZyb20gZXhwZXJpZW5jZSBJIGtub3cgdGhhdCB0aGlzIGlzIGEgY3JpdGljYWwgc2VjdGlvbiB0byBwcmV2ZW50IGluY29uc2lzdGVudCBiZWhhdmlvci4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBhdG9taWNpdHkgaXNzdWVzLCBhbmQgZXJyb3IgaGFuZGxpbmcg4oCTIHRob3NlIGFyZSBhbHdheXMga2V5IGFyZWFzIG9mIGNvbmNlcm4gaW4gcm91dGluZyBtYW5hZ2VtZW50LiBJdCdzIHRpbWUgdG8gZGlnIGluIGFuZCBtYXAgb3V0IHRoZSBjb250cm9sIGZsb3csIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFuZCBzZWUgaG93IHdlbGwgdGhpcyBpcyBkZXNpZ25lZCBmb3Igc2NhbGFiaWxpdHkgYW5kIHJvYnVzdG5lc3MuIExldCdzIHNlZSBob3cgd2VsbCB0aGUgY29kZSBoYW5kbGVzIGVkZ2UgY2FzZXMsIHRvbyAtIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGltcGxlbWVudGF0aW9uIGRlYWxzIHdpdGggYWxsIHRoZSBjb3JuZXIgY2FzZXMgSSBjYW4gdGhpbmsgb2YsIGluY2x1ZGluZyB3aGVuIHRoZSByZXF1ZXN0ZWQgY2hhbmdlIGlzIG5vdCBhbGxvd2VkLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjAwOjE3Ljc2NDMxNTE5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX3JvdXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDMwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQzMDpcXHRcXHRcXHRuaGFuZGxlIHw9IChpZCB8IDB4ODAwMCkgXFx1MDAzY1xcdTAwM2MgMTY7XFxuIDQzMTpcXHRcXHR9IGVsc2VcXG4gNDMyOlxcdFxcdFxcdG5oYW5kbGUgfD0gMHhGRkZGIFxcdTAwM2NcXHUwMDNjIDE2O1xcbiA0MzM6XFx0XFxuIDQzNDpcXHRcXHRpZiAoaGFuZGxlIFxcdTAwMjZcXHUwMDI2ICghZm9sZCB8fCBuaGFuZGxlID09IChoYW5kbGUgXFx1MDAyNiB+MHg3RjAwKSkpXFxuIDQzNTpcXHRcXHRcXHRuaGFuZGxlIHw9IGhhbmRsZSBcXHUwMDI2IDB4N0YwMDtcXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0aWYgKGhhbmRsZSBcXHUwMDI2XFx1MDAyNiAhZm9sZCBcXHUwMDI2XFx1MDAyNiBuaGFuZGxlICE9IGhhbmRsZSkge1xcbiA0Mzg6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcXG4gNDM5OlxcdFxcdFxcdFxcdFxcdCAgIFxcXCJIYW5kbGUgbWlzbWF0Y2ggY29uc3RydWN0ZWQ6ICV4IChleHBlY3RlZDogJXgpXFxcIixcXG4gNDQwOlxcdFxcdFxcdFxcdFxcdCAgIGhhbmRsZSwgbmhhbmRsZSk7XFxuIDQ0MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQyOlxcdFxcdH1cXG4gNDQzOlxcdFxcbiA0NDQ6XFx0XFx0aWYgKCFuaGFuZGxlKSB7XFxuIDQ0NTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJSZXBsYWNpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkXFxcIik7XFxuIDQ0NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQ3OlxcdFxcdH1cXG4gNDQ4OlxcdFxcbiA0NDk6XFx0XFx0aDEgPSB0b19oYXNoKG5oYW5kbGUpO1xcbiA0NTA6XFx0XFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UoaGVhZC1cXHUwMDNldGFibGVbaDFdKTtcXG4gNDUxOlxcdFxcdGlmICghYikge1xcbiA0NTI6XFx0XFx0XFx0YiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb3V0ZTRfYnVja2V0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiA0NTM6XFx0XFx0XFx0aWYgKGIgPT0gTlVMTClcXG4gNDU0OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gNDU1OlxcdFxcbiA0NTY6XFx0XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZiLVxcdTAwM2VmaWx0ZXJzX3JlZiwgMSk7XFxuIDQ1NzpcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoaGVhZC1cXHUwMDNldGFibGVbaDFdLCBiKTtcXG4gNDU4OlxcdFxcdH0gZWxzZSB7XFxuIDQ1OTpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaDIgPSBmcm9tX2hhc2gobmhhbmRsZSBcXHUwMDNlXFx1MDAzZSAxNik7XFxuIDQ2MDpcXHRcXG4gNDYxOlxcdFxcdFxcdGZvciAoZnAgPSBydG5sX2RlcmVmZXJlbmNlKGItXFx1MDAzZWh0W2gyXSk7XFxuIDQ2MjpcXHRcXHRcXHQgICAgIGZwO1xcbiA0NjM6XFx0XFx0XFx0ICAgICBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoZnAtXFx1MDAzZW5leHQpKVxcbiA0NjQ6XFx0XFx0XFx0XFx0aWYgKGZwICE9IGZvbGQgXFx1MDAyNlxcdTAwMjYgZnAtXFx1MDAzZWhhbmRsZSA9PSBuaGFuZGxlKSB7XFxuIDQ2NTpcXHRcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxcbiA0NjY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcIkhhbmRsZSAleCBpcyBhbHJlYWR5IGluIHVzZVxcXCIsXFxuIDQ2NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBuaGFuZGxlKTtcXG4gNDY4OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiA0Njk6XFx0XFx0XFx0XFx0fVxcbiA0NzA6XFx0XFxuIDQ3MTpcXHRcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmItXFx1MDAzZWZpbHRlcnNfcmVmKTtcXG4gNDcyOlxcdFxcdH1cXG4gNDczOlxcdFxcbiA0NzQ6XFx0XFx0aWYgKHRiW1RDQV9ST1VURTRfVE9dKVxcbiA0NzU6XFx0XFx0XFx0Zi1cXHUwMDNlaWQgPSB0bztcXG4gNDc2OlxcdFxcbiA0Nzc6XFx0XFx0aWYgKHRiW1RDQV9ST1VURTRfRlJPTV0pXFxuIDQ3ODpcXHRcXHRcXHRmLVxcdTAwM2VpZCA9IHRvIHwgaWRcXHUwMDNjXFx1MDAzYzE2O1xcbiA0Nzk6XFx0XFx0ZWxzZSBpZiAodGJbVENBX1JPVVRFNF9JSUZdKVxcbiA0ODA6XFx0XFx0XFx0Zi1cXHUwMDNlaWlmID0gaWQ7XFxuIDQ4MTpcXHRcXG4gNDgyOlxcdFxcdGYtXFx1MDAzZWhhbmRsZSA9IG5oYW5kbGU7XFxuIDQ4MzpcXHRcXHRmLVxcdTAwM2Via3QgPSBiO1xcbiA0ODQ6XFx0XFx0Zi1cXHUwMDNldHAgPSB0cDtcXG4gNDg1OlxcdFxcbiA0ODY6XFx0XFx0aWYgKHRiW1RDQV9ST1VURTRfQ0xBU1NJRF0pIHtcXG4gNDg3OlxcdFxcdFxcdGYtXFx1MDAzZXJlcy5jbGFzc2lkID0gbmxhX2dldF91MzIodGJbVENBX1JPVVRFNF9DTEFTU0lEXSk7XFxuIDQ4ODpcXHRcXHRcXHR0Y2ZfYmluZF9maWx0ZXIodHAsIFxcdTAwMjZmLVxcdTAwM2VyZXMsIGJhc2UpO1xcbiA0ODk6XFx0XFx0fVxcbiA0OTA6XFx0XFxuIDQ5MTpcXHRcXHRyZXR1cm4gMDtcXG4gNDkyOlxcdH1cXG4gNDkzOlxcdFxcbiA0OTQ6XFx0c3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gNDk1OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdW5zaWduZWQgbG9uZyBiYXNlLCB1MzIgaGFuZGxlLFxcbiA0OTY6XFx0XFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKip0Y2EsIHZvaWQgKiphcmcsIHUzMiBmbGFncyxcXG4gNDk3OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDQ5ODpcXHR7XFxuIDQ5OTpcXHRcXHRzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQgPSBydG5sX2RlcmVmZXJlbmNlKHRwLVxcdTAwM2Vyb290KTtcXG4gNTAwOlxcdFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyIF9fcmN1ICoqZnA7XFxuIDUwMTpcXHRcXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZm9sZCwgKmYxLCAqcGZwLCAqZiA9IE5VTEw7XFxuIDUwMjpcXHRcXHRzdHJ1Y3Qgcm91dGU0X2J1Y2tldCAqYjtcXG4gNTAzOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9ST1VURTRfTUFYICsgMV07XFxuIDUwNDpcXHRcXHR1bnNpZ25lZCBpbnQgaDtcXG4gNTA1OlxcdFxcdGludCBlcnI7XFxuIDUwNjpcXHRcXG4gNTA3OlxcdFxcdGlmICghaGFuZGxlKSB7XFxuIDUwODpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJDcmVhdGluZyB3aXRoIGhhbmRsZSBvZiAwIGlzIGludmFsaWRcXFwiKTtcXG4gNTA5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MTA6XFx0XFx0fVxcbiA1MTE6XFx0XFxuIDUxMjpcXHRcXHRpZiAoTkxfUkVRX0FUVFJfQ0hFQ0soZXh0YWNrLCBOVUxMLCB0Y2EsIFRDQV9PUFRJT05TKSkge1xcbiA1MTM6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIk1pc3Npbmcgb3B0aW9uc1xcXCIpO1xcbiA1MTQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUxNTpcXHRcXHR9XFxuIDUxNjpcXHRcXG4gNTE3OlxcdFxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgVENBX1JPVVRFNF9NQVgsIHRjYVtUQ0FfT1BUSU9OU10sXFxuIDUxODpcXHRcXHRcXHRcXHRcXHRcXHQgIHJvdXRlNF9wb2xpY3ksIE5VTEwpO1xcbiA1MTk6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDUyMDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA1MjE6XFx0XFxuIDUyMjpcXHRcXHRmb2xkID0gKmFyZztcXG4gNTIzOlxcdFxcdGlmIChmb2xkIFxcdTAwMjZcXHUwMDI2IGZvbGQtXFx1MDAzZWhhbmRsZSAhPSBoYW5kbGUpXFxuIDUyNDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTI1OlxcdFxcbiA1MjY6XFx0XFx0ZXJyID0gLUVOT0JVRlM7XFxuIDUyNzpcXHRcXHRmID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIDUyODpcXHRcXHRpZiAoIWYpXFxuIDUyOTpcXHRcXHRcXHRnb3RvIGVycm91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MDA6MTcuNzY0NDQzMjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ5MzcyNzczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgUm91dGU0IEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIHNvIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIHJlc3Qgb2YgdGhlIGNvZGUgcmVsYXRlZCB0byB0aG9zZSBgcm91dGU0YCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgcm91dGU0X2NoYW5nZWAgYW5kIGByb3V0ZTRfZHVtcGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgcm91dGluZyBzdHJ1Y3R1cmUuIFRoZSBuYW1pbmcgc3VnZ2VzdHMgdGhhdCB0aGV5IGFyZSByZWxhdGVkIHRvIGNoYW5nZXMgd2l0aGluIGFuZCBkdW1waW5nIGluZm9ybWF0aW9uIGZyb20gcm91dGU0LiBJJ2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBzY29wZSBvZiB0aGVpciByZXNwb25zaWJpbGl0eSBpbiByZWxhdGlvbiB0byB0aGUgb3RoZXIgcm91dGVzLCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGUgY29uZmlndXJhdGlvbiBhbmQgcmV0cmlldmFsIG9mIGRhdGEuIEkgd2FudCB0byBsb29rIGZvciBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiwgcGFydGljdWxhcmx5IGFyb3VuZCBjb25jdXJyZW5jeSBvciBzdGF0ZSBtYW5hZ2VtZW50LiBVbmRlcnN0YW5kaW5nIGhvdyBkYXRhIGlzIG1vZGlmaWVkIGFuZCBhY2Nlc3NlZCBpcyBrZXkgaGVyZS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgcmFjZSBjb25kaXRpb25zLCBpbmNvbnNpc3RlbmNpZXMsIG9yIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBkYXRhIGludGVncml0eSB3aGVuIEkgcmV2aWV3IHRoaXMgY29kZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIGlzIGJlaW5nIGR1bXBlZCBieSAncm91dGU0X2R1bXAnIGFuZCB3aGV0aGVyIGRhdGEgaXMgYWx0ZXJlZCBieSB0aGUgJ3JvdXRlNF9jaGFuZ2UnIGZ1bmN0aW9uLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgaG93IHRoZXkgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg2MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MDA6MjAuMjU4MTczMzE5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX3JvdXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTMwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTMwOlxcdFxcbiA1MzE6XFx0XFx0ZXJyID0gdGNmX2V4dHNfaW5pdChcXHUwMDI2Zi1cXHUwMDNlZXh0cywgbmV0LCBUQ0FfUk9VVEU0X0FDVCwgVENBX1JPVVRFNF9QT0xJQ0UpO1xcbiA1MzI6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDUzMzpcXHRcXHRcXHRnb3RvIGVycm91dDtcXG4gNTM0OlxcdFxcbiA1MzU6XFx0XFx0aWYgKGZvbGQpIHtcXG4gNTM2OlxcdFxcdFxcdGYtXFx1MDAzZWlkID0gZm9sZC1cXHUwMDNlaWQ7XFxuIDUzNzpcXHRcXHRcXHRmLVxcdTAwM2VpaWYgPSBmb2xkLVxcdTAwM2VpaWY7XFxuIDUzODpcXHRcXHRcXHRmLVxcdTAwM2VoYW5kbGUgPSBmb2xkLVxcdTAwM2VoYW5kbGU7XFxuIDUzOTpcXHRcXG4gNTQwOlxcdFxcdFxcdGYtXFx1MDAzZXRwID0gZm9sZC1cXHUwMDNldHA7XFxuIDU0MTpcXHRcXHRcXHRmLVxcdTAwM2Via3QgPSBmb2xkLVxcdTAwM2Via3Q7XFxuIDU0MjpcXHRcXHR9XFxuIDU0MzpcXHRcXG4gNTQ0OlxcdFxcdGVyciA9IHJvdXRlNF9zZXRfcGFybXMobmV0LCB0cCwgYmFzZSwgZiwgaGFuZGxlLCBoZWFkLCB0YixcXG4gNTQ1OlxcdFxcdFxcdFxcdCAgICAgICB0Y2FbVENBX1JBVEVdLCBmb2xkLCBmbGFncywgZXh0YWNrKTtcXG4gNTQ2OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiA1NDc6XFx0XFx0XFx0Z290byBlcnJvdXQ7XFxuIDU0ODpcXHRcXG4gNTQ5OlxcdFxcdGggPSBmcm9tX2hhc2goZi1cXHUwMDNlaGFuZGxlIFxcdTAwM2VcXHUwMDNlIDE2KTtcXG4gNTUwOlxcdFxcdGZwID0gXFx1MDAyNmYtXFx1MDAzZWJrdC1cXHUwMDNlaHRbaF07XFxuIDU1MTpcXHRcXHRmb3IgKHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTtcXG4gNTUyOlxcdFxcdCAgICAgKGYxID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSAhPSBOVUxMO1xcbiA1NTM6XFx0XFx0ICAgICBmcCA9IFxcdTAwMjZmMS1cXHUwMDNlbmV4dClcXG4gNTU0OlxcdFxcdFxcdGlmIChmLVxcdTAwM2VoYW5kbGUgXFx1MDAzYyBmMS1cXHUwMDNlaGFuZGxlKVxcbiA1NTU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU1NjpcXHRcXG4gNTU3OlxcdFxcdHRjZl9ibG9ja19uZXRpZl9rZWVwX2RzdCh0cC1cXHUwMDNlY2hhaW4tXFx1MDAzZWJsb2NrKTtcXG4gNTU4OlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihmLVxcdTAwM2VuZXh0LCBmMSk7XFxuIDU1OTpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmKTtcXG4gNTYwOlxcdFxcbiA1NjE6XFx0XFx0aWYgKGZvbGQpIHtcXG4gNTYyOlxcdFxcdFxcdGIgPSBmb2xkLVxcdTAwM2Via3Q7XFxuIDU2MzpcXHRcXHRcXHRoID0gZnJvbV9oYXNoKGZvbGQtXFx1MDAzZWhhbmRsZSBcXHUwMDNlXFx1MDAzZSAxNik7XFxuIDU2NDpcXHRcXHRcXHRmcCA9IFxcdTAwMjZiLVxcdTAwM2VodFtoXTtcXG4gNTY1OlxcdFxcdFxcdGZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7XFxuIDU2NjpcXHRcXHRcXHQgICAgIGZwID0gXFx1MDAyNnBmcC1cXHUwMDNlbmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XFxuIDU2NzpcXHRcXHRcXHRcXHRpZiAocGZwID09IGZvbGQpIHtcXG4gNTY4OlxcdFxcdFxcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGZvbGQtXFx1MDAzZW5leHQpO1xcbiA1Njk6XFx0XFx0XFx0XFx0XFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2Yi1cXHUwMDNlZmlsdGVyc19yZWYpKSB7XFxuIDU3MDpcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdGggPSB0b19oYXNoKGZvbGQtXFx1MDAzZWhhbmRsZSk7XFxuIDU3MTpcXHRcXG4gNTcyOlxcdFxcdFxcdFxcdFxcdFxcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cXHUwMDNldGFibGVbdGhdLCBOVUxMKTtcXG4gNTczOlxcdFxcdFxcdFxcdFxcdFxcdGtmcmVlX3JjdShiLCByY3UpO1xcbiA1NzQ6XFx0XFx0XFx0XFx0XFx0fVxcbiA1NzU6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU3NjpcXHRcXHRcXHRcXHR9XFxuIDU3NzpcXHRcXHRcXHR9XFxuIDU3ODpcXHRcXHR9XFxuIDU3OTpcXHRcXG4gNTgwOlxcdFxcdHJvdXRlNF9yZXNldF9mYXN0bWFwKGhlYWQsIGZvbGQpO1xcbiA1ODE6XFx0XFx0KmFyZyA9IGY7XFxuIDU4MjpcXHRcXHRpZiAoZm9sZCkge1xcbiA1ODM6XFx0XFx0XFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFxcdTAwMjZmb2xkLVxcdTAwM2VyZXMpO1xcbiA1ODQ6XFx0XFx0XFx0dGNmX2V4dHNfZ2V0X25ldChcXHUwMDI2Zm9sZC1cXHUwMDNlZXh0cyk7XFxuIDU4NTpcXHRcXHRcXHR0Y2ZfcXVldWVfd29yayhcXHUwMDI2Zm9sZC1cXHUwMDNlcndvcmssIHJvdXRlNF9kZWxldGVfZmlsdGVyX3dvcmspO1xcbiA1ODY6XFx0XFx0fVxcbiA1ODc6XFx0XFx0cmV0dXJuIDA7XFxuIDU4ODpcXHRcXG4gNTg5OlxcdGVycm91dDpcXG4gNTkwOlxcdFxcdGlmIChmKVxcbiA1OTE6XFx0XFx0XFx0dGNmX2V4dHNfZGVzdHJveShcXHUwMDI2Zi1cXHUwMDNlZXh0cyk7XFxuIDU5MjpcXHRcXHRrZnJlZShmKTtcXG4gNTkzOlxcdFxcdHJldHVybiBlcnI7XFxuIDU5NDpcXHR9XFxuIDU5NTpcXHRcXG4gNTk2OlxcdHN0YXRpYyB2b2lkIHJvdXRlNF93YWxrKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNmX3dhbGtlciAqYXJnLFxcbiA1OTc6XFx0XFx0XFx0XFx0Ym9vbCBydG5sX2hlbGQpXFxuIDU5ODpcXHR7XFxuIDU5OTpcXHRcXHRzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQgPSBydG5sX2RlcmVmZXJlbmNlKHRwLVxcdTAwM2Vyb290KTtcXG4gNjAwOlxcdFxcdHVuc2lnbmVkIGludCBoLCBoMTtcXG4gNjAxOlxcdFxcbiA2MDI6XFx0XFx0aWYgKGhlYWQgPT0gTlVMTCB8fCBhcmctXFx1MDAzZXN0b3ApXFxuIDYwMzpcXHRcXHRcXHRyZXR1cm47XFxuIDYwNDpcXHRcXG4gNjA1OlxcdFxcdGZvciAoaCA9IDA7IGggXFx1MDAzYz0gMjU2OyBoKyspIHtcXG4gNjA2OlxcdFxcdFxcdHN0cnVjdCByb3V0ZTRfYnVja2V0ICpiID0gcnRubF9kZXJlZmVyZW5jZShoZWFkLVxcdTAwM2V0YWJsZVtoXSk7XFxuIDYwNzpcXHRcXG4gNjA4OlxcdFxcdFxcdGlmIChiKSB7XFxuIDYwOTpcXHRcXHRcXHRcXHRmb3IgKGgxID0gMDsgaDEgXFx1MDAzYz0gMzI7IGgxKyspIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MDA6MjAuMjU4MjkyNjk5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2OTEzMTQ3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIG15IHRob3VnaHQgcHJvY2VzcyByZWdhcmRpbmcgYGNsc19yb3V0ZS5jYCwgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIGl0IG15c2VsZiwgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBjbHNfcm91dGUuYyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhpcyBgY2xzX3JvdXRlLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIHN5c3RlbSBkZXNpZ24uIFdoYXQncyBpdCBkb2luZz8gV2hhdCBraW5kIG9mIHJvdXRpbmcgbG9naWMgaXMgaW1wbGVtZW50ZWQgaGVyZT8gSXMgaXQgc2ltcGxlIGxvb2t1cHMsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggd2l0aCBwb2xpY3kgY29uc2lkZXJhdGlvbnM/IEknbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgcm91dGUgc2VsZWN0aW9uLCBjYWNoaW5nLCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlcy4gQmFzaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnV0cyBhbmQgYm9sdHMgb2YgaG93IHRoaXMgbW9kdWxlIG1ha2VzIHJvdXRpbmcgZGVjaXNpb25zLiBUaW1lIHRvIGdldCBmYW1pbGlhciB3aXRoIHRoZSBjb2RlIGFuZCBpdHMgYXBwcm9hY2ggdG8gZW5zdXJlIGVmZmljaWVudCBhbmQgcm9idXN0IG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzODIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjAwOjIxLjk0OTYxMDAyN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2Nsc19yb3V0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYxMDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZjtcXG4gNjExOlxcdFxcbiA2MTI6XFx0XFx0XFx0XFx0XFx0Zm9yIChmID0gcnRubF9kZXJlZmVyZW5jZShiLVxcdTAwM2VodFtoMV0pO1xcbiA2MTM6XFx0XFx0XFx0XFx0XFx0ICAgICBmO1xcbiA2MTQ6XFx0XFx0XFx0XFx0XFx0ICAgICBmID0gcnRubF9kZXJlZmVyZW5jZShmLVxcdTAwM2VuZXh0KSkge1xcbiA2MTU6XFx0XFx0XFx0XFx0XFx0XFx0aWYgKCF0Y19jbHNfc3RhdHNfZHVtcCh0cCwgYXJnLCBmKSlcXG4gNjE2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHJldHVybjtcXG4gNjE3OlxcdFxcdFxcdFxcdFxcdH1cXG4gNjE4OlxcdFxcdFxcdFxcdH1cXG4gNjE5OlxcdFxcdFxcdH1cXG4gNjIwOlxcdFxcdH1cXG4gNjIxOlxcdH1cXG4gNjIyOlxcdFxcbiA2MjM6XFx0c3RhdGljIGludCByb3V0ZTRfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICpmaCxcXG4gNjI0OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNtc2cgKnQsIGJvb2wgcnRubF9oZWxkKVxcbiA2MjU6XFx0e1xcbiA2MjY6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmYgPSBmaDtcXG4gNjI3OlxcdFxcdHN0cnVjdCBubGF0dHIgKm5lc3Q7XFxuIDYyODpcXHRcXHR1MzIgaWQ7XFxuIDYyOTpcXHRcXG4gNjMwOlxcdFxcdGlmIChmID09IE5VTEwpXFxuIDYzMTpcXHRcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuIDYzMjpcXHRcXG4gNjMzOlxcdFxcdHQtXFx1MDAzZXRjbV9oYW5kbGUgPSBmLVxcdTAwM2VoYW5kbGU7XFxuIDYzNDpcXHRcXG4gNjM1OlxcdFxcdG5lc3QgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcoc2tiLCBUQ0FfT1BUSU9OUyk7XFxuIDYzNjpcXHRcXHRpZiAobmVzdCA9PSBOVUxMKVxcbiA2Mzc6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDYzODpcXHRcXG4gNjM5OlxcdFxcdGlmICghKGYtXFx1MDAzZWhhbmRsZSBcXHUwMDI2IDB4ODAwMCkpIHtcXG4gNjQwOlxcdFxcdFxcdGlkID0gZi1cXHUwMDNlaWQgXFx1MDAyNiAweEZGO1xcbiA2NDE6XFx0XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgVENBX1JPVVRFNF9UTywgaWQpKVxcbiA2NDI6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDY0MzpcXHRcXHR9XFxuIDY0NDpcXHRcXHRpZiAoZi1cXHUwMDNlaGFuZGxlIFxcdTAwMjYgMHg4MDAwMDAwMCkge1xcbiA2NDU6XFx0XFx0XFx0aWYgKChmLVxcdTAwM2VoYW5kbGUgXFx1MDAzZVxcdTAwM2UgMTYpICE9IDB4RkZGRiBcXHUwMDI2XFx1MDAyNlxcbiA2NDY6XFx0XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgVENBX1JPVVRFNF9JSUYsIGYtXFx1MDAzZWlpZikpXFxuIDY0NzpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjQ4OlxcdFxcdH0gZWxzZSB7XFxuIDY0OTpcXHRcXHRcXHRpZCA9IGYtXFx1MDAzZWlkIFxcdTAwM2VcXHUwMDNlIDE2O1xcbiA2NTA6XFx0XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgVENBX1JPVVRFNF9GUk9NLCBpZCkpXFxuIDY1MTpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjUyOlxcdFxcdH1cXG4gNjUzOlxcdFxcdGlmIChmLVxcdTAwM2VyZXMuY2xhc3NpZCBcXHUwMDI2XFx1MDAyNlxcbiA2NTQ6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgVENBX1JPVVRFNF9DTEFTU0lELCBmLVxcdTAwM2VyZXMuY2xhc3NpZCkpXFxuIDY1NTpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjU2OlxcdFxcbiA2NTc6XFx0XFx0aWYgKHRjZl9leHRzX2R1bXAoc2tiLCBcXHUwMDI2Zi1cXHUwMDNlZXh0cykgXFx1MDAzYyAwKVxcbiA2NTg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDY1OTpcXHRcXG4gNjYwOlxcdFxcdG5sYV9uZXN0X2VuZChza2IsIG5lc3QpO1xcbiA2NjE6XFx0XFxuIDY2MjpcXHRcXHRpZiAodGNmX2V4dHNfZHVtcF9zdGF0cyhza2IsIFxcdTAwMjZmLVxcdTAwM2VleHRzKSBcXHUwMDNjIDApXFxuIDY2MzpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjY0OlxcdFxcbiA2NjU6XFx0XFx0cmV0dXJuIHNrYi1cXHUwMDNlbGVuO1xcbiA2NjY6XFx0XFxuIDY2NzpcXHRubGFfcHV0X2ZhaWx1cmU6XFxuIDY2ODpcXHRcXHRubGFfbmVzdF9jYW5jZWwoc2tiLCBuZXN0KTtcXG4gNjY5OlxcdFxcdHJldHVybiAtMTtcXG4gNjcwOlxcdH1cXG4gNjcxOlxcdFxcbiA2NzI6XFx0c3RhdGljIHZvaWQgcm91dGU0X2JpbmRfY2xhc3Modm9pZCAqZmgsIHUzMiBjbGFzc2lkLCB1bnNpZ25lZCBsb25nIGNsLCB2b2lkICpxLFxcbiA2NzM6XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBiYXNlKVxcbiA2NzQ6XFx0e1xcbiA2NzU6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmYgPSBmaDtcXG4gNjc2OlxcdFxcbiA2Nzc6XFx0XFx0dGNfY2xzX2JpbmRfY2xhc3MoY2xhc3NpZCwgY2wsIHEsIFxcdTAwMjZmLVxcdTAwM2VyZXMsIGJhc2UpO1xcbiA2Nzg6XFx0fVxcbiA2Nzk6XFx0XFxuIDY4MDpcXHRzdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX3JvdXRlNF9vcHMgX19yZWFkX21vc3RseSA9IHtcXG4gNjgxOlxcdFxcdC5raW5kXFx0XFx0PVxcdFxcXCJyb3V0ZVxcXCIsXFxuIDY4MjpcXHRcXHQuY2xhc3NpZnlcXHQ9XFx0cm91dGU0X2NsYXNzaWZ5LFxcbiA2ODM6XFx0XFx0LmluaXRcXHRcXHQ9XFx0cm91dGU0X2luaXQsXFxuIDY4NDpcXHRcXHQuZGVzdHJveVxcdD1cXHRyb3V0ZTRfZGVzdHJveSxcXG4gNjg1OlxcdFxcdC5nZXRcXHRcXHQ9XFx0cm91dGU0X2dldCxcXG4gNjg2OlxcdFxcdC5jaGFuZ2VcXHRcXHQ9XFx0cm91dGU0X2NoYW5nZSxcXG4gNjg3OlxcdFxcdC5kZWxldGVcXHRcXHQ9XFx0cm91dGU0X2RlbGV0ZSxcXG4gNjg4OlxcdFxcdC53YWxrXFx0XFx0PVxcdHJvdXRlNF93YWxrLFxcbiA2ODk6XFx0XFx0LmR1bXBcXHRcXHQ9XFx0cm91dGU0X2R1bXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjAwOjIxLjk0OTczMTgwN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDE5NTk1OTYyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgY2xzX3JvdXRlLmMgUGF0Y2g6IFJlZmNvdW50aW5nIGFuZCBNZW1vcnkgU2FmZXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciBgbmV0L3NjaGVkL2Nsc19yb3V0ZS5jYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhZGRyZXNzaW5nIGEgY3JpdGljYWwgaXNzdWUgaW4gaG93IHRoZSBgcm91dGU0X2J1Y2tldGAgc3RydWN0dXJlIGlzIG1hbmFnZWQsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIGZpbHRlciBkZWxldGlvbiBhbmQgbW9kaWZpY2F0aW9uLlxuXG5NeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGUgY29yZSBwcm9ibGVtIHdhcyBhIGxhY2sgb2YgcHJvcGVyIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgYHN0cnVjdCByb3V0ZTRfYnVja2V0YC4gIFByZXZpb3VzbHksIHdoZW4gYSBmaWx0ZXIgd2FzIGRlbGV0ZWQgKGByb3V0ZTRfZGVsZXRlYCksIHRoZSBjb2RlIHdvdWxkIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYnVja2V0J3MgaGFzaCB0YWJsZSAoYGItXHUwMDNlaHRbMC4uMzJdYCkgdG8gc2VlIGlmIGFueSBmaWx0ZXJzIHJlbWFpbmVkLiBJZiBpdCBmb3VuZCBub25lLCBpdCdkIGNsZWFyIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZSBoZWFkJ3MgdGFibGUgKGBoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldYCkgYW5kIGZyZWUgdGhlIGJ1Y2tldCB1c2luZyBga2ZyZWVfcmN1KGIsIHJjdSlgLiBUaGUgd2Vha25lc3MgbGllcyBpbiBob3cgZmlsdGVycyBhcmUgKmNoYW5nZWQqIChgcm91dGU0X2NoYW5nZWApLiBJZiBhIGZpbHRlcidzIGBmb2xkYCB3YXMgcmVwbGFjZWQgb3IgbW92ZWQgdG8gYSBkaWZmZXJlbnQgYnVja2V0IG9yIGhhbmRsZSwgdGhlcmUgd2FzIGEgcmlzayBvZiBjb3JydXB0aW5nIGJ1Y2tldCBhY2NvdW50aW5nIG9yIGZyZWVpbmcgdGhlIGJ1Y2tldCB3aGlsZSBmaWx0ZXJzIHdlcmUgc3RpbGwgdXNpbmcgaXQsIHdoaWNoIG1lYW5zIHdlIHBvdGVudGlhbGx5IGhhZCBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuXG5cblRoZSBwYXRjaCdzIHNvbHV0aW9uIGlzIGVsZWdhbnQ6IGl0IGludHJvZHVjZXMgYSBgcmVmY291bnRfdCBmaWx0ZXJzX3JlZmAgZmllbGQgd2l0aGluIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAuIE5vdywgaW5zdGVhZCBvZiBsb29waW5nIHRvIGRldGVybWluZSBpZiB0aGUgYnVja2V0IGlzIGVtcHR5IGR1cmluZyBkZWxldGlvbiwgYHJvdXRlNF9kZWxldGVgIHVzZXMgYHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKWAuICBJbiB0aGUgYHJvdXRlNF9zZXRfcGFybXNgIGZ1bmN0aW9uLCB3ZSBub3cgaW5jcmVtZW50IHRoZSByZWZjb3VudCB3aGVuIGFkZGluZyBhIGZpbHRlciB0byBhbiBleGlzdGluZyBidWNrZXQgb3Igc2V0IHRoZSByZWZjb3VudCB0byAxIHdoZW4gYWxsb2NhdGluZyBhIG5ldyBidWNrZXQuIFRoaXMgbWFrZXMgaXQgbXVjaCBtb3JlIHJvYnVzdC4gVGhlIGZpbHRlciByZXBsYWNlbWVudCBsb2dpYyB3aXRoaW4gYHJvdXRlNF9jaGFuZ2VgIG5vdyBhbHNvIGluY2x1ZGVzIHRoZSByZWZjb3VudCBkZWNyZW1lbnQgd2hlbiB1bmxpbmtpbmcgYSBmaWx0ZXIuIFRoZSBgaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKSlgIGNvbmRpdGlvbiBpbiBgcm91dGU0X2NoYW5nZWAgbm93IHByb3Blcmx5IGhhbmRsZXMgdGhlIGJ1Y2tldCBkZWFsbG9jYXRpb24uIEkgYWxzbyBub3RpY2VkIHRoYXQgdGhlIGNvbGxpc2lvbiBjaGVjayBpbiBgcm91dGU0X3NldF9wYXJtc2Agbm93IHdvcmtzIGNvcnJlY3RseSwgZW5zdXJpbmcgdGhhdCB0aGVyZSBhcmVuJ3QgcHJvYmxlbXMgaWYgd2UncmUgcmVwbGFjaW5nIG9yIGRldGVjdGluZyBhbiBleGlzdGluZyBmaWx0ZXIuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayBmb3IgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBlc3BlY2lhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBGb3J0dW5hdGVseSwgdGhpcyBsb29rcyBwcmV0dHkgY2xlYW4uIEJvdGggYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBhbmQgYHN0cnVjdCByb3V0ZTRfZmlsdGVyYCBhcmUgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbi4gVGhpcyBlbGltaW5hdGVzIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IGFsbG9jYXRpb24uIEZ1cnRoZXJtb3JlLCB0aGVyZSdzIG5vIGV2aWRlbmNlIG9mIGFueSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIG9yIGZpZWxkcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gIFRoZSBgcm91dGU0X2R1bXBgIGZ1bmN0aW9uIHVzZXMgYG5sYV9wdXRfdTMyYCB0byBkdW1wIHJlbGV2YW50IGZpZWxkcyBsaWtlIGBmLVx1MDAzZWlkYCwgYGYtXHUwMDNlaWlmYCwgYW5kIGBmLVx1MDAzZXJlcy5jbGFzc2lkYC4gIFRoZXNlIGFyZSBhbGwgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgZmlsdGVyIGNyZWF0aW9uL21vZGlmaWNhdGlvbiwgc28gbm8gcHJvYmxlbXMgaGVyZS4gSSBhbHNvIGRvbid0IHNlZSBhbnkgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgaXNzdWVzIGFkZHJlc3NlZCBhbmQgZml4ZWQgbG9vayBsaWtlIGNsYXNzaWMgcmVmZXJlbmNlIGNvdW50aW5nIHByb2JsZW1zIHdoaWNoIGFyZSB2ZXJ5IGVhc2lseSBjYXVnaHQgYnkgS0FTQU4gb3IgbG9ja2RlcCwgd2hpY2ggYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxuTm93LCBsZXQncyBhcHBseSBvdXIgc3RhbmRhcmQgY2hlY2tsaXN0LiAgVGhpcyBpcyB3aGF0IEkgbG9vayBmb3Igd2hlbiBkZXRlcm1pbmluZyBpZiBhIEtNU0FOIHNlc3Npb24gaXMgbmVjZXNzYXJ5OlxuXG4qICAgU3RhbmRhcmQgS0FTQU4gYnVpbGRzIChPT0IsIFVBRiwgZG91YmxlLWZyZWUsIGludmFsaWQtZnJlZSksIExPQ0tERVAsIFVCU0FOLCByZWZjb3VudCBjaGVja3M6IFRoZXNlIGFyZSBhbHJlYWR5IGVuYWJsZWQgYW5kIHdvdWxkIGhhdmUgY2F1Z2h0IGlzc3VlcyByZWxhdGVkIHRvIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZXMsIGV0Yy5cbiogICBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrczogVGhpcyBpcyB0aGUgY3JpdGljYWwgY2hlY2sgZm9yIG15IGFzc2Vzc21lbnQuXG4qICAgXCJUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLCBMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlwiXG4qICAgXCJTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMuLi5cIiAoZm9sbG93ZWQgYnkgYSBsaXN0IG9mIGNyaXRlcmlhIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS9zdHJ1Y3R1cmUgY29weWluZyB0byB1c2VyIHNwYWNlLCBldGMuKVxuXG5CYXNlZCBvbiB0aGlzLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IEtNU0FOIGlzICpub3QqIG5lZWRlZCBoZXJlLiBUaGUgcGF0Y2ggZG9lc24ndDpcblxuKiAgIENvcHkgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS5cbiogICBEZXBlbmQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gY29uZGl0aW9uYWwgbG9naWMuXG4qICAgQWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy5cbiogICBVc2UgYW55IGtpbmQgb2YgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzIGluIHN1cnJvdW5kaW5nIGNvZGUuXG5cblRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBhYm91dCBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIChgcmVmY291bnRfdGApIG9mIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAgYW5kIGZpeGluZyBzb21lIGZpbHRlciByZXBsYWNlbWVudCBsb2dpYyBidWdzIGluIGBjbHNfcm91dGVgLiBUaGUgZ29hbCBpcyB0byBtYWtlIHRoaW5ncyByb2J1c3QsIHNvIG15IGFzc2Vzc21lbnQgd291bGQgYmUgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBJIGNhbiBkZWZpbml0aXZlbHkgc3RhdGUgdGhhdCB0aGlzIGlzIGEgc2FmZSBwYXRjaCBpbiB0ZXJtcyBvZiBtZW1vcnkgc2FmZXR5LCBhbmQgc3RhbmRhcmQga2VybmVsIGJ1aWxkIHRvb2xzIHNob3VsZCBiZSBhYmxlIHRvIGNvdmVyXG5cbiIsIklucHV0VG9rZW5zIjoxNDg2OCwiT3V0cHV0VG9rZW5zIjoyOTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MDA6NDIuMTQ1NjkzN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcgaXNzdWVzIGluIGNsc19yb3V0ZSAodHJhZmZpYyBjb250cm9sIHJvdXRlIGNsYXNzaWZpZXIpIHdoZW4gdXBkYXRpbmcgb3IgZGVsZXRpbmcgcm91dGUgZmlsdGVycyBhY3Jvc3MgYnVja2V0cywgYnkgaW50cm9kdWNpbmcgYSBgZmlsdGVyc19yZWZgIHJlZmNvdW50IChgcmVmY291bnRfdGApIHRvIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAuXFxuXFxuQW5hbHlzaXMgb2YgbWVtb3J5IHNhbml0aXphdGlvbiByZXF1aXJlbWVudHM6XFxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSAvIEtNU0FOOiBBbGwgYWxsb2NhdGlvbnMgKGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAgYW5kIGBzdHJ1Y3Qgcm91dGU0X2ZpbHRlcmApIGNvbnRpbnVlIHRvIHVzZSBga3phbGxvY19vYmpgIGVuc3VyaW5nIGFsbCBtZW1vcnkgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZCB1cG9uIGNyZWF0aW9uLiBUaGUgbmV3IGBmaWx0ZXJzX3JlZmAgZmllbGQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGByZWZjb3VudF9zZXRgIGFuZCBtYW5hZ2VkIHZpYSBgcmVmY291bnRfaW5jYCAvIGByZWZjb3VudF9kZWNfYW5kX3Rlc3RgLiBObyBzdHJ1Y3QgZmllbGRzLCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSB2aWEgTmV0bGluayAoYWxsIGR1bXBlZCBhdHRyaWJ1dGVzIGFyZSB2YWxpZGF0ZWQgYW5kIHBvcHVsYXRlZCBmcm9tIGluaXRpYWxpemVkIHNjYWxhciB2YWx1ZXMpLiBUaGVyZSBpcyBubyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXFxuLSBVQUYgLyBLQVNBTjogVGhlIGNoYW5nZXMgbW9kaWZ5IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYnVja2V0IGRlYWxsb2NhdGlvbiBsaWZldGltZXMgKGBrZnJlZV9yY3VgKSwgd2hpY2ggZmFsbCB1bmRlciBVc2UtQWZ0ZXItRnJlZSBhbmQgcmVmY291bnQgc2FmZXR5LiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBtb25pdG9yZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCB0aGUga2VybmVsJ3MgYnVpbHQtaW4gcmVmY291bnQgY2hlY2tpbmcgKGByZWZjb3VudF90YCkuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcgaXNzdWVzIGluIGNsc19yb3V0ZSAodHJhZmZpYyBjb250cm9sIHJvdXRlIGNsYXNzaWZpZXIpIHdoZW4gdXBkYXRpbmcgb3IgZGVsZXRpbmcgcm91dGUgZmlsdGVycyBhY3Jvc3MgYnVja2V0cywgYnkgaW50cm9kdWNpbmcgYSBgZmlsdGVyc19yZWZgIHJlZmNvdW50IChgcmVmY291bnRfdGApIHRvIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAuXFxuXFxuQW5hbHlzaXMgb2YgbWVtb3J5IHNhbml0aXphdGlvbiByZXF1aXJlbWVudHM6XFxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSAvIEtNU0FOOiBBbGwgYWxsb2NhdGlvbnMgKGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAgYW5kIGBzdHJ1Y3Qgcm91dGU0X2ZpbHRlcmApIGNvbnRpbnVlIHRvIHVzZSBga3phbGxvY19vYmpgIGVuc3VyaW5nIGFsbCBtZW1vcnkgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZCB1cG9uIGNyZWF0aW9uLiBUaGUgbmV3IGBmaWx0ZXJzX3JlZmAgZmllbGQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGByZWZjb3VudF9zZXRgIGFuZCBtYW5hZ2VkIHZpYSBgcmVmY291bnRfaW5jYCAvIGByZWZjb3VudF9kZWNfYW5kX3Rlc3RgLiBObyBzdHJ1Y3QgZmllbGRzLCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSB2aWEgTmV0bGluayAoYWxsIGR1bXBlZCBhdHRyaWJ1dGVzIGFyZSB2YWxpZGF0ZWQgYW5kIHBvcHVsYXRlZCBmcm9tIGluaXRpYWxpemVkIHNjYWxhciB2YWx1ZXMpLiBUaGVyZSBpcyBubyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXFxuLSBVQUYgLyBLQVNBTjogVGhlIGNoYW5nZXMgbW9kaWZ5IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYnVja2V0IGRlYWxsb2NhdGlvbiBsaWZldGltZXMgKGBrZnJlZV9yY3VgKSwgd2hpY2ggZmFsbCB1bmRlciBVc2UtQWZ0ZXItRnJlZSBhbmQgcmVmY291bnQgc2FmZXR5LiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBtb25pdG9yZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCB0aGUga2VybmVsJ3MgYnVpbHQtaW4gcmVmY291bnQgY2hlY2tpbmcgKGByZWZjb3VudF90YCkuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpxhvw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 00:15:46 +0000 UTC FinishedAt: 2026-09-08 01:00:43 +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": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_CLS_ROUTE4" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_CLS_ROUTE4" ], "series_id": "74d313f7-7b34-4986-a456-9a033a25ba37" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "route4_change", "route4_delete", "route4_set_parms" ], "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+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfUk9VVEU0JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cm91dGU0X2NoYW5nZSYjMzQ7LAogICAgJiMzNDtyb3V0ZTRfZGVsZXRlJiMzNDssCiAgICAmIzM0O3JvdXRlNF9zZXRfcGFybXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSB0cmFja2luZyBpc3N1ZXMgaW4gY2xzX3JvdXRlICh0cmFmZmljIGNvbnRyb2wgcm91dGUgY2xhc3NpZmllcikgd2hlbiB1cGRhdGluZyBvciBkZWxldGluZyByb3V0ZSBmaWx0ZXJzIGFjcm9zcyBidWNrZXRzLCBieSBpbnRyb2R1Y2luZyBhIGBmaWx0ZXJzX3JlZmAgcmVmY291bnQgKGByZWZjb3VudF90YCkgdG8gYHN0cnVjdCByb3V0ZTRfYnVja2V0YC5cblxuQW5hbHlzaXMgb2YgbWVtb3J5IHNhbml0aXphdGlvbiByZXF1aXJlbWVudHM6XG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gS01TQU46IEFsbCBhbGxvY2F0aW9ucyAoYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBhbmQgYHN0cnVjdCByb3V0ZTRfZmlsdGVyYCkgY29udGludWUgdG8gdXNlIGBremFsbG9jX29iamAgZW5zdXJpbmcgYWxsIG1lbW9yeSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHVwb24gY3JlYXRpb24uIFRoZSBuZXcgYGZpbHRlcnNfcmVmYCBmaWVsZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYHJlZmNvdW50X3NldGAgYW5kIG1hbmFnZWQgdmlhIGByZWZjb3VudF9pbmNgIC8gYHJlZmNvdW50X2RlY19hbmRfdGVzdGAuIE5vIHN0cnVjdCBmaWVsZHMsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlIHZpYSBOZXRsaW5rIChhbGwgZHVtcGVkIGF0dHJpYnV0ZXMgYXJlIHZhbGlkYXRlZCBhbmQgcG9wdWxhdGVkIGZyb20gaW5pdGlhbGl6ZWQgc2NhbGFyIHZhbHVlcykuIFRoZXJlIGlzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cbi0gVUFGIC8gS0FTQU46IFRoZSBjaGFuZ2VzIG1vZGlmeSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGJ1Y2tldCBkZWFsbG9jYXRpb24gbGlmZXRpbWVzIChga2ZyZWVfcmN1YCksIHdoaWNoIGZhbGwgdW5kZXIgVXNlLUFmdGVyLUZyZWUgYW5kIHJlZmNvdW50IHNhZmV0eS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgbW9uaXRvcmVkIGFuZCBkZXRlY3RlZCBieSBLQVNBTiBhbmQgdGhlIGtlcm5lbCYjMzk7cyBidWlsdC1pbiByZWZjb3VudCBjaGVja2luZyAoYHJlZmNvdW50X3RgKS5cblxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbHNfcm91dGUgbmV0d29yayB0cmFmZmljIGNvbnRyb2wgY2xhc3NpZmllciBpbiBuZXQvc2NoZWQvY2xzX3JvdXRlLmMsIGludHJvZHVjaW5nIGEgcmVmY291bnQgKGZpbHRlcnNfcmVmKSB0byBtYW5hZ2Ugcm91dGU0X2J1Y2tldCBsaWZldGltZXMgZHVyaW5nIHJvdXRlIGZpbHRlciBtb2RpZmljYXRpb24sIGNyZWF0aW9uLCBhbmQgZGVsZXRpb24gKHJvdXRlNF9jaGFuZ2UsIHJvdXRlNF9kZWxldGUsIGFuZCByb3V0ZTRfc2V0X3Bhcm1zKS4gVGhpcyBpcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsvdGMgZmlsdGVyIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNGI0NzBhOGFiMjhmNmZlMzdkNWE0ZTU3YTkwNTZiYzA4YzhlOGUyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwMDo1OTozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmMgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbmluZGV4IDBkMTMyNGM5MDU4MzcuLjBmMjExZjAzMGZkOWEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfcm91dGUuY1xuQEAgLTExLDYgJiM0MzsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2VcbkBAIC00MSw2ICYjNDM7NDIsNyBAQCBzdHJ1Y3Qgcm91dGU0X2hlYWQge1xuIHN0cnVjdCByb3V0ZTRfYnVja2V0IHtcbiBcdC8qIDE2IEZST00gYnVja2V0cyAmIzQzOyAxNiBJSUYgYnVja2V0cyAmIzQzOyAxIHdpbGRjYXJkIGJ1Y2tldCAqL1xuIFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3VcdCpodFsxNiAmIzQzOyAxNiAmIzQzOyAxXTtcbiYjNDM7XHRyZWZjb3VudF90XHRcdFx0ZmlsdGVyc19yZWY7XG4gXHRzdHJ1Y3QgcmN1X2hlYWRcdFx0XHRyY3U7XG4gfTtcbiBcbkBAIC0zMzYsNyAmIzQzOzMzOCw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X2RlbGV0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqYXJnLCBib29sICpsYXN0LFxuIFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKm5mO1xuIFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gXHR1bnNpZ25lZCBpbnQgaCA9IDA7XG4tXHRpbnQgaSwgaDE7XG4mIzQzO1x0aW50IGgxO1xuIFxuIFx0aWYgKCFoZWFkIHx8ICFmKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0zNjIsMjMgJiM0MzszNjQsMTQgQEAgc3RhdGljIGludCByb3V0ZTRfZGVsZXRlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICphcmcsIGJvb2wgKmxhc3QsXG4gXHRcdFx0dGNmX2V4dHNfZ2V0X25ldChcdTAwMjZmLVx1MDAzZWV4dHMpO1xuIFx0XHRcdHRjZl9xdWV1ZV93b3JrKFx1MDAyNmYtXHUwMDNlcndvcmssIHJvdXRlNF9kZWxldGVfZmlsdGVyX3dvcmspO1xuIFxuLVx0XHRcdC8qIFN0cmlwIFJUTkwgcHJvdGVjdGVkIHRyZWUgKi9cbi1cdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYz0gMzI7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdFx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqcnQ7XG4tXG4tXHRcdFx0XHRydCA9IHJ0bmxfZGVyZWZlcmVuY2UoYi1cdTAwM2VodFtpXSk7XG4tXHRcdFx0XHRpZiAocnQpXG4tXHRcdFx0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYpKSB7XG4mIzQzO1x0XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcbiYjNDM7XHRcdFx0XHRrZnJlZV9yY3UoYiwgcmN1KTtcbiBcdFx0XHR9XG4tXG4tXHRcdFx0LyogT0ssIHNlc3Npb24gaGFzIG5vIGZsb3dzICovXG4tXHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcbi1cdFx0XHRrZnJlZV9yY3UoYiwgcmN1KTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuIFxuLW91dDpcbiBcdCpsYXN0ID0gdHJ1ZTtcbiBcdGZvciAoaDEgPSAwOyBoMSBcdTAwM2M9IDI1NjsgaDEmIzQzOyYjNDM7KSB7XG4gXHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoaGVhZC1cdTAwM2V0YWJsZVtoMV0pKSB7XG5AQCAtNDAwLDggJiM0MzszOTMsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcm91dGU0X3BvbGljeVtUQ0FfUk9VVEU0X01BWCAmIzQzOyAxXSA9IHtcbiBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiBcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBiYXNlLCBzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZixcbiBcdFx0XHQgICAgdTMyIGhhbmRsZSwgc3RydWN0IHJvdXRlNF9oZWFkICpoZWFkLFxuLVx0XHRcdCAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBubGF0dHIgKmVzdCwgaW50IG5ldyxcbi1cdFx0XHQgICAgdTMyIGZsYWdzLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBubGF0dHIgKmVzdCxcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmb2xkLCB1MzIgZmxhZ3MsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4ge1xuIFx0dTMyIGlkID0gMCwgdG8gPSAwLCBuaGFuZGxlID0gMHg4MDAwO1xuIFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZwO1xuQEAgLTQxNCw3ICYjNDM7NDA4LDcgQEAgc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRpZiAodGJbVENBX1JPVVRFNF9UT10pIHtcbi1cdFx0aWYgKG5ldyBcdTAwMjZcdTAwMjYgaGFuZGxlIFx1MDAyNiAweDgwMDApIHtcbiYjNDM7XHRcdGlmICghZm9sZCBcdTAwMjZcdTAwMjYgaGFuZGxlIFx1MDAyNiAweDgwMDApIHtcbiBcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O0ludmFsaWQgaGFuZGxlXCYjMzQ7KTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuQEAgLTQzNywxNCAmIzQzOzQzMSwxNCBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiBcdH0gZWxzZVxuIFx0XHRuaGFuZGxlIHw9IDB4RkZGRiBcdTAwM2NcdTAwM2MgMTY7XG4gXG4tXHRpZiAoaGFuZGxlIFx1MDAyNlx1MDAyNiBuZXcpIHtcbiYjNDM7XHRpZiAoaGFuZGxlIFx1MDAyNlx1MDAyNiAoIWZvbGQgfHwgbmhhbmRsZSA9PSAoaGFuZGxlIFx1MDAyNiB+MHg3RjAwKSkpXG4gXHRcdG5oYW5kbGUgfD0gaGFuZGxlIFx1MDAyNiAweDdGMDA7XG4tXHRcdGlmIChuaGFuZGxlICE9IGhhbmRsZSkge1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXG4tXHRcdFx0XHRcdCAgIFwmIzM0O0hhbmRsZSBtaXNtYXRjaCBjb25zdHJ1Y3RlZDogJXggKGV4cGVjdGVkOiAleClcJiMzNDssXG4tXHRcdFx0XHRcdCAgIGhhbmRsZSwgbmhhbmRsZSk7XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGhhbmRsZSBcdTAwMjZcdTAwMjYgIWZvbGQgXHUwMDI2XHUwMDI2IG5oYW5kbGUgIT0gaGFuZGxlKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O0hhbmRsZSBtaXNtYXRjaCBjb25zdHJ1Y3RlZDogJXggKGV4cGVjdGVkOiAleClcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgaGFuZGxlLCBuaGFuZGxlKTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuIFx0aWYgKCFuaGFuZGxlKSB7XG5AQCAtNDU5LDYgJiM0Mzs0NTMsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiBcdFx0aWYgKGIgPT0gTlVMTClcbiBcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG4mIzQzO1x0XHRyZWZjb3VudF9zZXQoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZiwgMSk7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcihoZWFkLVx1MDAzZXRhYmxlW2gxXSwgYik7XG4gXHR9IGVsc2Uge1xuIFx0XHR1bnNpZ25lZCBpbnQgaDIgPSBmcm9tX2hhc2gobmhhbmRsZSBcdTAwM2VcdTAwM2UgMTYpO1xuQEAgLTQ2Niw4ICYjNDM7NDYxLDE0IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0XHRmb3IgKGZwID0gcnRubF9kZXJlZmVyZW5jZShiLVx1MDAzZWh0W2gyXSk7XG4gXHRcdCAgICAgZnA7XG4gXHRcdCAgICAgZnAgPSBydG5sX2RlcmVmZXJlbmNlKGZwLVx1MDAzZW5leHQpKVxuLVx0XHRcdGlmIChmcC1cdTAwM2VoYW5kbGUgPT0gZi1cdTAwM2VoYW5kbGUpXG4mIzQzO1x0XHRcdGlmIChmcCAhPSBmb2xkIFx1MDAyNlx1MDAyNiBmcC1cdTAwM2VoYW5kbGUgPT0gbmhhbmRsZSkge1xuJiM0MztcdFx0XHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFwmIzM0O0hhbmRsZSAleCBpcyBhbHJlYWR5IGluIHVzZVwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgbmhhbmRsZSk7XG4gXHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHJlZmNvdW50X2luYyhcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKTtcbiBcdH1cbiBcbiBcdGlmICh0YltUQ0FfUk9VVEU0X1RPXSlcbkBAIC01MDAsOSAmIzQzOzUwMSw4IEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZm9sZCwgKmYxLCAqcGZwLCAqZiA9IE5VTEw7XG4gXHRzdHJ1Y3Qgcm91dGU0X2J1Y2tldCAqYjtcbiBcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9ST1VURTRfTUFYICYjNDM7IDFdO1xuLVx0dW5zaWduZWQgaW50IGgsIHRoO1xuJiM0MztcdHVuc2lnbmVkIGludCBoO1xuIFx0aW50IGVycjtcbi1cdGJvb2wgbmV3ID0gdHJ1ZTtcbiBcbiBcdGlmICghaGFuZGxlKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q3JlYXRpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkXCYjMzQ7KTtcbkBAIC01MzksMTEgJiM0Mzs1MzksMTAgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcbiBcdFx0Zi1cdTAwM2V0cCA9IGZvbGQtXHUwMDNldHA7XG4gXHRcdGYtXHUwMDNlYmt0ID0gZm9sZC1cdTAwM2Via3Q7XG4tXHRcdG5ldyA9IGZhbHNlO1xuIFx0fVxuIFxuIFx0ZXJyID0gcm91dGU0X3NldF9wYXJtcyhuZXQsIHRwLCBiYXNlLCBmLCBoYW5kbGUsIGhlYWQsIHRiLFxuLVx0XHRcdCAgICAgICB0Y2FbVENBX1JBVEVdLCBuZXcsIGZsYWdzLCBleHRhY2spO1xuJiM0MztcdFx0XHQgICAgICAgdGNhW1RDQV9SQVRFXSwgZm9sZCwgZmxhZ3MsIGV4dGFjayk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycm91dDtcbiBcbkBAIC01NjAsMTcgJiM0Mzs1NTksMjAgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdHJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGYpO1xuIFxuIFx0aWYgKGZvbGQpIHtcbi1cdFx0dGggPSB0b19oYXNoKGZvbGQtXHUwMDNlaGFuZGxlKTtcbiYjNDM7XHRcdGIgPSBmb2xkLVx1MDAzZWJrdDtcbiBcdFx0aCA9IGZyb21faGFzaChmb2xkLVx1MDAzZWhhbmRsZSBcdTAwM2VcdTAwM2UgMTYpO1xuLVx0XHRiID0gcnRubF9kZXJlZmVyZW5jZShoZWFkLVx1MDAzZXRhYmxlW3RoXSk7XG4tXHRcdGlmIChiKSB7XG4tXHRcdFx0ZnAgPSBcdTAwMjZiLVx1MDAzZWh0W2hdO1xuLVx0XHRcdGZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7XG4tXHRcdFx0ICAgICBmcCA9IFx1MDAyNnBmcC1cdTAwM2VuZXh0LCBwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCkpIHtcbi1cdFx0XHRcdGlmIChwZnAgPT0gZm9sZCkge1xuLVx0XHRcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmb2xkLVx1MDAzZW5leHQpO1xuLVx0XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdGZwID0gXHUwMDI2Yi1cdTAwM2VodFtoXTtcbiYjNDM7XHRcdGZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7XG4mIzQzO1x0XHQgICAgIGZwID0gXHUwMDI2cGZwLVx1MDAzZW5leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkge1xuJiM0MztcdFx0XHRpZiAocGZwID09IGZvbGQpIHtcbiYjNDM7XHRcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmb2xkLVx1MDAzZW5leHQpO1xuJiM0MztcdFx0XHRcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZikpIHtcbiYjNDM7XHRcdFx0XHRcdHVuc2lnbmVkIGludCB0aCA9IHRvX2hhc2goZm9sZC1cdTAwM2VoYW5kbGUpO1xuJiM0MztcbiYjNDM7XHRcdFx0XHRcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cdTAwM2V0YWJsZVt0aF0sIE5VTEwpO1xuJiM0MztcdFx0XHRcdFx0a2ZyZWVfcmN1KGIsIHJjdSk7XG4gXHRcdFx0XHR9XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHR9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb24gYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL2ZpbHRlcnMvcm91dGUuanNvblxuaW5kZXggMDVjZWRjYTY3Y2NhZC4uMmQ1ODQzYWViZDcyOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvZmlsdGVycy9yb3V0ZS5qc29uXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL2ZpbHRlcnMvcm91dGUuanNvblxuQEAgLTIwMiw1ICYjNDM7MjAyLDIxNSBAQFxuICAgICAgICAgXCYjMzQ7dGVhcmRvd25cJiMzNDs6IFtcbiAgICAgICAgICAgICBcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBwYXJlbnQgcm9vdCBkcnJcJiMzNDtcbiAgICAgICAgIF1cbiYjNDM7ICAgIH0sXG4mIzQzOyAgICB7XG4mIzQzOyAgICAgICAgXCYjMzQ7aWRcJiMzNDs6IFwmIzM0O2E3ZDJcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7bmFtZVwmIzM0OzogXCYjMzQ7RGVsZXRlIGEgcm91dGUgZmlsdGVyIHRoYXQgd2FzIG1vdmVkIHRvIGFub3RoZXIgYnVja2V0XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2ZpbHRlclwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cm91dGVcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgZmlsdGVyIGNoYW5nZSBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMDAxIHJvdXRlIGZyb20gMSB0byAyIGNsYXNzaWQgMToxXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMjAwIHJvdXRlIGZyb20gNSB0byA1IGNsYXNzaWQgMTo1XCYjMzQ7XG4mIzQzOyAgICAgICAgXSxcbiYjNDM7ICAgICAgICBcJiMzNDtjbWRVbmRlclRlc3RcJiMzNDs6IFwmIzM0OyRUQyBmaWx0ZXIgZGVsIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAwMDIgcm91dGUgZnJvbSAxIHRvIDJcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7ZXhwRXhpdENvZGVcJiMzNDs6IFwmIzM0OzBcJiMzNDssXG4mIzQzOyAgICAgICAgXCYjMzQ7dmVyaWZ5Q21kXCYjMzQ7OiBcJiMzNDskVEMgLWogZmlsdGVyIHNob3cgZGV2ICRERVYxIHBhcmVudCBmZmZmOlwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDttYXRjaEpTT05cJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAge1xuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7cHJvdG9jb2xcJiMzNDs6IFwmIzM0O2lwXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7cHJlZlwmIzM0OzogMjAwLFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7a2luZFwmIzM0OzogXCYjMzQ7cm91dGVcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtjaGFpblwmIzM0OzogMFxuJiM0MzsgICAgICAgICAgICB9LFxuJiM0MzsgICAgICAgICAgICB7XG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtwcm90b2NvbFwmIzM0OzogXCYjMzQ7aXBcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtwcmVmXCYjMzQ7OiAyMDAsXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtraW5kXCYjMzQ7OiBcJiMzNDtyb3V0ZVwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O2NoYWluXCYjMzQ7OiAwLFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7b3B0aW9uc1wmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICAgICAgICAgIFwmIzM0O2ZoXCYjMzQ7OiBcJiMzNDsweDUwMDA1XCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgICAgIFwmIzM0O2Zsb3dpZFwmIzM0OzogXCYjMzQ7MTo1XCYjMzQ7XG4mIzQzOyAgICAgICAgICAgICAgICB9XG4mIzQzOyAgICAgICAgICAgIH1cbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3RlYXJkb3duXCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3NcJiMzNDtcbiYjNDM7ICAgICAgICBdXG4mIzQzOyAgICB9LFxuJiM0MzsgICAge1xuJiM0MzsgICAgICAgIFwmIzM0O2lkXCYjMzQ7OiBcJiMzNDtjMDVhXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O25hbWVcJiMzNDs6IFwmIzM0O1RyeSB0byBjaGFuZ2UgYSByb3V0ZSBmaWx0ZXIgb250byBhbiBhbHJlYWR5IHVzZWQgaGFuZGxlXCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2ZpbHRlclwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cm91dGVcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxIGFjdGlvbiBva1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCByb3V0ZSBmcm9tIDIgdG8gMiBjbGFzc2lkIDE6MiBhY3Rpb24gZHJvcFwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgZmlsdGVyIGNoYW5nZSBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMDAxIHJvdXRlIGZyb20gMiB0byAyIGNsYXNzaWQgMToxIGFjdGlvbiBva1wmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtleHBFeGl0Q29kZVwmIzM0OzogXCYjMzQ7MlwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyAtaiBmaWx0ZXIgc2hvdyBkZXYgJERFVjEgcGFyZW50IGZmZmY6XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoSlNPTlwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICB7XG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtwcm90b2NvbFwmIzM0OzogXCYjMzQ7aXBcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtwcmVmXCYjMzQ7OiAxMDAsXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtraW5kXCYjMzQ7OiBcJiMzNDtyb3V0ZVwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O2NoYWluXCYjMzQ7OiAwXG4mIzQzOyAgICAgICAgICAgIH0sXG4mIzQzOyAgICAgICAgICAgIHtcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O3Byb3RvY29sXCYjMzQ7OiBcJiMzNDtpcFwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O3ByZWZcJiMzNDs6IDEwMCxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O2tpbmRcJiMzNDs6IFwmIzM0O3JvdXRlXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7Y2hhaW5cJiMzNDs6IDAsXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtvcHRpb25zXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7ZmhcJiMzNDs6IFwmIzM0OzB4MTAwMDFcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7Zmxvd2lkXCYjMzQ7OiBcJiMzNDsxOjFcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7YWN0aW9uc1wmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtvcmRlclwmIzM0OzogMSxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O2tpbmRcJiMzNDs6IFwmIzM0O2dhY3RcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJiMzNDtjb250cm9sX2FjdGlvblwmIzM0Ozoge1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O3R5cGVcJiMzNDs6IFwmIzM0O3Bhc3NcJiMzNDtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgfVxuJiM0MzsgICAgICAgICAgICAgICAgICAgIF1cbiYjNDM7ICAgICAgICAgICAgICAgIH1cbiYjNDM7ICAgICAgICAgICAgfSxcbiYjNDM7ICAgICAgICAgICAge1xuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7cHJvdG9jb2xcJiMzNDs6IFwmIzM0O2lwXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7cHJlZlwmIzM0OzogMTAwLFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7a2luZFwmIzM0OzogXCYjMzQ7cm91dGVcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtjaGFpblwmIzM0OzogMCxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O29wdGlvbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDtmaFwmIzM0OzogXCYjMzQ7MHgyMDAwMlwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDtmbG93aWRcJiMzNDs6IFwmIzM0OzE6MlwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDthY3Rpb25zXCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O29yZGVyXCYjMzQ7OiAxLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7a2luZFwmIzM0OzogXCYjMzQ7Z2FjdFwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwmIzM0O2NvbnRyb2xfYWN0aW9uXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCYjMzQ7dHlwZVwmIzM0OzogXCYjMzQ7ZHJvcFwmIzM0O1xuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB9XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXVxuJiM0MzsgICAgICAgICAgICAgICAgfVxuJiM0MzsgICAgICAgICAgICB9XG4mIzQzOyAgICAgICAgXSxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXCYjMzQ7XG4mIzQzOyAgICAgICAgXVxuJiM0MzsgICAgfSxcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7M2YyMVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtSZXBsYWNlIGEgcm91dGUgZmlsdGVyIHRoYXQgc2hhcmVzIGl0cyBrZXkgd2l0aCBhbm90aGVyIGZpbHRlclwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtjYXRlZ29yeVwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDtmaWx0ZXJcJiMzNDssXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3JvdXRlXCYjMzQ7XG4mIzQzOyAgICAgICAgXSxcbiYjNDM7ICAgICAgICBcJiMzNDtwbHVnaW5zXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgIFwmIzM0O3JlcXVpcmVzXCYjMzQ7OiBcJiMzNDtuc1BsdWdpblwmIzM0O1xuJiM0MzsgICAgICAgIH0sXG4mIzQzOyAgICAgICAgXCYjMzQ7c2V0dXBcJiMzNDs6IFtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzc1wmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6MVwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7JFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDIwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6MlwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtleHBFeGl0Q29kZVwmIzM0OzogXCYjMzQ7MFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyAtaiBmaWx0ZXIgc2hvdyBkZXYgJERFVjEgcGFyZW50IGZmZmY6XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoSlNPTlwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICB7XG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtwcm90b2NvbFwmIzM0OzogXCYjMzQ7aXBcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtwcmVmXCYjMzQ7OiAxMDAsXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtraW5kXCYjMzQ7OiBcJiMzNDtyb3V0ZVwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O2NoYWluXCYjMzQ7OiAwXG4mIzQzOyAgICAgICAgICAgIH0sXG4mIzQzOyAgICAgICAgICAgIHtcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O3Byb3RvY29sXCYjMzQ7OiBcJiMzNDtpcFwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O3ByZWZcJiMzNDs6IDEwMCxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O2tpbmRcJiMzNDs6IFwmIzM0O3JvdXRlXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7Y2hhaW5cJiMzNDs6IDAsXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtvcHRpb25zXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7ZmhcJiMzNDs6IFwmIzM0OzB4MTAxMDFcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7Zmxvd2lkXCYjMzQ7OiBcJiMzNDsxOjlcJiMzNDtcbiYjNDM7ICAgICAgICAgICAgICAgIH1cbiYjNDM7ICAgICAgICAgICAgfSxcbiYjNDM7ICAgICAgICAgICAge1xuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7cHJvdG9jb2xcJiMzNDs6IFwmIzM0O2lwXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7cHJlZlwmIzM0OzogMTAwLFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7a2luZFwmIzM0OzogXCYjMzQ7cm91dGVcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtjaGFpblwmIzM0OzogMCxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O29wdGlvbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDtmaFwmIzM0OzogXCYjMzQ7MHgxMDIwMVwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDtmbG93aWRcJiMzNDs6IFwmIzM0OzE6MlwmIzM0O1xuJiM0MzsgICAgICAgICAgICAgICAgfVxuJiM0MzsgICAgICAgICAgICB9XG4mIzQzOyAgICAgICAgXSxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXCYjMzQ7XG4mIzQzOyAgICAgICAgXVxuJiM0MzsgICAgfSxcbiYjNDM7ICAgIHtcbiYjNDM7ICAgICAgICBcJiMzNDtpZFwmIzM0OzogXCYjMzQ7OWQwZVwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtuYW1lXCYjMzQ7OiBcJiMzNDtSZXBsYWNlIGJvdGggcm91dGUgZmlsdGVycyBzaGFyaW5nIGEga2V5XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O2NhdGVnb3J5XCYjMzQ7OiBbXG4mIzQzOyAgICAgICAgICAgIFwmIzM0O2ZpbHRlclwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cm91dGVcJiMzNDtcbiYjNDM7ICAgICAgICBdLFxuJiM0MzsgICAgICAgIFwmIzM0O3BsdWdpbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgXCYjMzQ7cmVxdWlyZXNcJiMzNDs6IFwmIzM0O25zUGx1Z2luXCYjMzQ7XG4mIzQzOyAgICAgICAgfSxcbiYjNDM7ICAgICAgICBcJiMzNDtzZXR1cFwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMjAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToyXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OVwmIzM0O1xuJiM0MzsgICAgICAgIF0sXG4mIzQzOyAgICAgICAgXCYjMzQ7Y21kVW5kZXJUZXN0XCYjMzQ7OiBcJiMzNDskVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDIwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDtleHBFeGl0Q29kZVwmIzM0OzogXCYjMzQ7MFwmIzM0OyxcbiYjNDM7ICAgICAgICBcJiMzNDt2ZXJpZnlDbWRcJiMzNDs6IFwmIzM0OyRUQyAtaiBmaWx0ZXIgc2hvdyBkZXYgJERFVjEgcGFyZW50IGZmZmY6XCYjMzQ7LFxuJiM0MzsgICAgICAgIFwmIzM0O21hdGNoSlNPTlwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICB7XG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtwcm90b2NvbFwmIzM0OzogXCYjMzQ7aXBcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtwcmVmXCYjMzQ7OiAxMDAsXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtraW5kXCYjMzQ7OiBcJiMzNDtyb3V0ZVwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O2NoYWluXCYjMzQ7OiAwXG4mIzQzOyAgICAgICAgICAgIH0sXG4mIzQzOyAgICAgICAgICAgIHtcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O3Byb3RvY29sXCYjMzQ7OiBcJiMzNDtpcFwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O3ByZWZcJiMzNDs6IDEwMCxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O2tpbmRcJiMzNDs6IFwmIzM0O3JvdXRlXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7Y2hhaW5cJiMzNDs6IDAsXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtvcHRpb25zXCYjMzQ7OiB7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7ZmhcJiMzNDs6IFwmIzM0OzB4MTAxMDFcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7Zmxvd2lkXCYjMzQ7OiBcJiMzNDsxOjlcJiMzNDtcbiYjNDM7ICAgICAgICAgICAgICAgIH1cbiYjNDM7ICAgICAgICAgICAgfSxcbiYjNDM7ICAgICAgICAgICAge1xuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7cHJvdG9jb2xcJiMzNDs6IFwmIzM0O2lwXCYjMzQ7LFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7cHJlZlwmIzM0OzogMTAwLFxuJiM0MzsgICAgICAgICAgICAgICAgXCYjMzQ7a2luZFwmIzM0OzogXCYjMzQ7cm91dGVcJiMzNDssXG4mIzQzOyAgICAgICAgICAgICAgICBcJiMzNDtjaGFpblwmIzM0OzogMCxcbiYjNDM7ICAgICAgICAgICAgICAgIFwmIzM0O29wdGlvbnNcJiMzNDs6IHtcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDtmaFwmIzM0OzogXCYjMzQ7MHgxMDIwMVwmIzM0OyxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICBcJiMzNDtmbG93aWRcJiMzNDs6IFwmIzM0OzE6OFwmIzM0O1xuJiM0MzsgICAgICAgICAgICAgICAgfVxuJiM0MzsgICAgICAgICAgICB9XG4mIzQzOyAgICAgICAgXSxcbiYjNDM7ICAgICAgICBcJiMzNDt0ZWFyZG93blwmIzM0OzogW1xuJiM0MzsgICAgICAgICAgICBcJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXCYjMzQ7XG4mIzQzOyAgICAgICAgXVxuICAgICB9XG4gXVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfUk9VVEU0JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cm91dGU0X2NoYW5nZSYjMzQ7LAogICAgJiMzNDtyb3V0ZTRfZGVsZXRlJiMzNDssCiAgICAmIzM0O3JvdXRlNF9zZXRfcGFybXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNsc19yb3V0ZSBuZXR3b3JrIHRyYWZmaWMgY29udHJvbCBjbGFzc2lmaWVyIGluIG5ldC9zY2hlZC9jbHNfcm91dGUuYywgaW50cm9kdWNpbmcgYSByZWZjb3VudCAoZmlsdGVyc19yZWYpIHRvIG1hbmFnZSByb3V0ZTRfYnVja2V0IGxpZmV0aW1lcyBkdXJpbmcgcm91dGUgZmlsdGVyIG1vZGlmaWNhdGlvbiwgY3JlYXRpb24sIGFuZCBkZWxldGlvbiAocm91dGU0X2NoYW5nZSwgcm91dGU0X2RlbGV0ZSwgYW5kIHJvdXRlNF9zZXRfcGFybXMpLiBUaGlzIGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluay90YyBmaWx0ZXIgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA0YjQ3MGE4YWIyOGY2ZmUzN2Q1YTRlNTdhOTA1NmJjMDhjOGU4ZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDAwOjU5OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jCmluZGV4IDBkMTMyNGM5MDU4MzcuLjBmMjExZjAzMGZkOWEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfcm91dGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmMKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmVmY291bnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZHN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3JvdXRlLmgmZ3Q7CkBAIC00MSw2ICYjNDM7NDIsNyBAQCBzdHJ1Y3Qgcm91dGU0X2hlYWQgewogc3RydWN0IHJvdXRlNF9idWNrZXQgewogCS8qIDE2IEZST00gYnVja2V0cyAmIzQzOyAxNiBJSUYgYnVja2V0cyAmIzQzOyAxIHdpbGRjYXJkIGJ1Y2tldCAqLwogCXN0cnVjdCByb3V0ZTRfZmlsdGVyIF9fcmN1CSpodFsxNiAmIzQzOyAxNiAmIzQzOyAxXTsKJiM0MzsJcmVmY291bnRfdAkJCWZpbHRlcnNfcmVmOwogCXN0cnVjdCByY3VfaGVhZAkJCXJjdTsKIH07CiAKQEAgLTMzNiw3ICYjNDM7MzM4LDcgQEAgc3RhdGljIGludCByb3V0ZTRfZGVsZXRlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICphcmcsIGJvb2wgKmxhc3QsCiAJc3RydWN0IHJvdXRlNF9maWx0ZXIgKm5mOwogCXN0cnVjdCByb3V0ZTRfYnVja2V0ICpiOwogCXVuc2lnbmVkIGludCBoID0gMDsKLQlpbnQgaSwgaDE7CiYjNDM7CWludCBoMTsKIAogCWlmICghaGVhZCB8fCAhZikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNjIsMjMgJiM0MzszNjQsMTQgQEAgc3RhdGljIGludCByb3V0ZTRfZGVsZXRlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICphcmcsIGJvb2wgKmxhc3QsCiAJCQl0Y2ZfZXh0c19nZXRfbmV0KCZhbXA7Zi0mZ3Q7ZXh0cyk7CiAJCQl0Y2ZfcXVldWVfd29yaygmYW1wO2YtJmd0O3J3b3JrLCByb3V0ZTRfZGVsZXRlX2ZpbHRlcl93b3JrKTsKIAotCQkJLyogU3RyaXAgUlROTCBwcm90ZWN0ZWQgdHJlZSAqLwotCQkJZm9yIChpID0gMDsgaSAmbHQ7PSAzMjsgaSYjNDM7JiM0MzspIHsKLQkJCQlzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqcnQ7Ci0KLQkJCQlydCA9IHJ0bmxfZGVyZWZlcmVuY2UoYi0mZ3Q7aHRbaV0pOwotCQkJCWlmIChydCkKLQkJCQkJZ290byBvdXQ7CiYjNDM7CQkJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKSkgewomIzQzOwkJCQlSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtJmd0O3RhYmxlW3RvX2hhc2goaCldLCBOVUxMKTsKJiM0MzsJCQkJa2ZyZWVfcmN1KGIsIHJjdSk7CiAJCQl9Ci0KLQkJCS8qIE9LLCBzZXNzaW9uIGhhcyBubyBmbG93cyAqLwotCQkJUkNVX0lOSVRfUE9JTlRFUihoZWFkLSZndDt0YWJsZVt0b19oYXNoKGgpXSwgTlVMTCk7Ci0JCQlrZnJlZV9yY3UoYiwgcmN1KTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCi1vdXQ6CiAJKmxhc3QgPSB0cnVlOwogCWZvciAoaDEgPSAwOyBoMSAmbHQ7PSAyNTY7IGgxJiM0MzsmIzQzOykgewogCQlpZiAocmN1X2FjY2Vzc19wb2ludGVyKGhlYWQtJmd0O3RhYmxlW2gxXSkpIHsKQEAgLTQwMCw4ICYjNDM7MzkzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJvdXRlNF9wb2xpY3lbVENBX1JPVVRFNF9NQVggJiM0MzsgMV0gPSB7CiBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGJhc2UsIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmLAogCQkJICAgIHUzMiBoYW5kbGUsIHN0cnVjdCByb3V0ZTRfaGVhZCAqaGVhZCwKLQkJCSAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBubGF0dHIgKmVzdCwgaW50IG5ldywKLQkJCSAgICB1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0MzsJCQkgICAgc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgbmxhdHRyICplc3QsCiYjNDM7CQkJICAgIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmb2xkLCB1MzIgZmxhZ3MsCiYjNDM7CQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAl1MzIgaWQgPSAwLCB0byA9IDAsIG5oYW5kbGUgPSAweDgwMDA7CiAJc3RydWN0IHJvdXRlNF9maWx0ZXIgKmZwOwpAQCAtNDE0LDcgJiM0Mzs0MDgsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwKIAkJcmV0dXJuIGVycjsKIAogCWlmICh0YltUQ0FfUk9VVEU0X1RPXSkgewotCQlpZiAobmV3ICZhbXA7JmFtcDsgaGFuZGxlICZhbXA7IDB4ODAwMCkgewomIzQzOwkJaWYgKCFmb2xkICZhbXA7JmFtcDsgaGFuZGxlICZhbXA7IDB4ODAwMCkgewogCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O0ludmFsaWQgaGFuZGxlJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTQzNywxNCAmIzQzOzQzMSwxNCBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwKIAl9IGVsc2UKIAkJbmhhbmRsZSB8PSAweEZGRkYgJmx0OyZsdDsgMTY7CiAKLQlpZiAoaGFuZGxlICZhbXA7JmFtcDsgbmV3KSB7CiYjNDM7CWlmIChoYW5kbGUgJmFtcDsmYW1wOyAoIWZvbGQgfHwgbmhhbmRsZSA9PSAoaGFuZGxlICZhbXA7IH4weDdGMDApKSkKIAkJbmhhbmRsZSB8PSBoYW5kbGUgJmFtcDsgMHg3RjAwOwotCQlpZiAobmhhbmRsZSAhPSBoYW5kbGUpIHsKLQkJCU5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssCi0JCQkJCSAgICYjMzQ7SGFuZGxlIG1pc21hdGNoIGNvbnN0cnVjdGVkOiAleCAoZXhwZWN0ZWQ6ICV4KSYjMzQ7LAotCQkJCQkgICBoYW5kbGUsIG5oYW5kbGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KJiM0MzsKJiM0MzsJaWYgKGhhbmRsZSAmYW1wOyZhbXA7ICFmb2xkICZhbXA7JmFtcDsgbmhhbmRsZSAhPSBoYW5kbGUpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7SGFuZGxlIG1pc21hdGNoIGNvbnN0cnVjdGVkOiAleCAoZXhwZWN0ZWQ6ICV4KSYjMzQ7LAomIzQzOwkJCQkgICBoYW5kbGUsIG5oYW5kbGUpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKCFuaGFuZGxlKSB7CkBAIC00NTksNiAmIzQzOzQ1Myw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLAogCQlpZiAoYiA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9CVUZTOwogCiYjNDM7CQlyZWZjb3VudF9zZXQoJmFtcDtiLSZndDtmaWx0ZXJzX3JlZiwgMSk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihoZWFkLSZndDt0YWJsZVtoMV0sIGIpOwogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGludCBoMiA9IGZyb21faGFzaChuaGFuZGxlICZndDsmZ3Q7IDE2KTsKQEAgLTQ2Niw4ICYjNDM7NDYxLDE0IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLAogCQlmb3IgKGZwID0gcnRubF9kZXJlZmVyZW5jZShiLSZndDtodFtoMl0pOwogCQkgICAgIGZwOwogCQkgICAgIGZwID0gcnRubF9kZXJlZmVyZW5jZShmcC0mZ3Q7bmV4dCkpCi0JCQlpZiAoZnAtJmd0O2hhbmRsZSA9PSBmLSZndDtoYW5kbGUpCiYjNDM7CQkJaWYgKGZwICE9IGZvbGQgJmFtcDsmYW1wOyBmcC0mZ3Q7aGFuZGxlID09IG5oYW5kbGUpIHsKJiM0MzsJCQkJTkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywKJiM0MzsJCQkJCQkgICAmIzM0O0hhbmRsZSAleCBpcyBhbHJlYWR5IGluIHVzZSYjMzQ7LAomIzQzOwkJCQkJCSAgIG5oYW5kbGUpOwogCQkJCXJldHVybiAtRUVYSVNUOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCXJlZmNvdW50X2luYygmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKTsKIAl9CiAKIAlpZiAodGJbVENBX1JPVVRFNF9UT10pCkBAIC01MDAsOSAmIzQzOzUwMSw4IEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJc3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsICpmMSwgKnBmcCwgKmYgPSBOVUxMOwogCXN0cnVjdCByb3V0ZTRfYnVja2V0ICpiOwogCXN0cnVjdCBubGF0dHIgKnRiW1RDQV9ST1VURTRfTUFYICYjNDM7IDFdOwotCXVuc2lnbmVkIGludCBoLCB0aDsKJiM0MzsJdW5zaWduZWQgaW50IGg7CiAJaW50IGVycjsKLQlib29sIG5ldyA9IHRydWU7CiAKIAlpZiAoIWhhbmRsZSkgewogCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7Q3JlYXRpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkJiMzNDspOwpAQCAtNTM5LDExICYjNDM7NTM5LDEwIEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAKIAkJZi0mZ3Q7dHAgPSBmb2xkLSZndDt0cDsKIAkJZi0mZ3Q7Ymt0ID0gZm9sZC0mZ3Q7Ymt0OwotCQluZXcgPSBmYWxzZTsKIAl9CiAKIAllcnIgPSByb3V0ZTRfc2V0X3Bhcm1zKG5ldCwgdHAsIGJhc2UsIGYsIGhhbmRsZSwgaGVhZCwgdGIsCi0JCQkgICAgICAgdGNhW1RDQV9SQVRFXSwgbmV3LCBmbGFncywgZXh0YWNrKTsKJiM0MzsJCQkgICAgICAgdGNhW1RDQV9SQVRFXSwgZm9sZCwgZmxhZ3MsIGV4dGFjayk7CiAJaWYgKGVyciAmbHQ7IDApCiAJCWdvdG8gZXJyb3V0OwogCkBAIC01NjAsMTcgJiM0Mzs1NTksMjAgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAlyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmKTsKIAogCWlmIChmb2xkKSB7Ci0JCXRoID0gdG9faGFzaChmb2xkLSZndDtoYW5kbGUpOwomIzQzOwkJYiA9IGZvbGQtJmd0O2JrdDsKIAkJaCA9IGZyb21faGFzaChmb2xkLSZndDtoYW5kbGUgJmd0OyZndDsgMTYpOwotCQliID0gcnRubF9kZXJlZmVyZW5jZShoZWFkLSZndDt0YWJsZVt0aF0pOwotCQlpZiAoYikgewotCQkJZnAgPSAmYW1wO2ItJmd0O2h0W2hdOwotCQkJZm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDsKLQkJCSAgICAgZnAgPSAmYW1wO3BmcC0mZ3Q7bmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7Ci0JCQkJaWYgKHBmcCA9PSBmb2xkKSB7Ci0JCQkJCXJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGZvbGQtJmd0O25leHQpOwotCQkJCQlicmVhazsKJiM0MzsJCWZwID0gJmFtcDtiLSZndDtodFtoXTsKJiM0MzsJCWZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7CiYjNDM7CQkgICAgIGZwID0gJmFtcDtwZnAtJmd0O25leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkgewomIzQzOwkJCWlmIChwZnAgPT0gZm9sZCkgewomIzQzOwkJCQlyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmb2xkLSZndDtuZXh0KTsKJiM0MzsJCQkJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKSkgewomIzQzOwkJCQkJdW5zaWduZWQgaW50IHRoID0gdG9faGFzaChmb2xkLSZndDtoYW5kbGUpOwomIzQzOwomIzQzOwkJCQkJUkNVX0lOSVRfUE9JTlRFUihoZWFkLSZndDt0YWJsZVt0aF0sIE5VTEwpOwomIzQzOwkJCQkJa2ZyZWVfcmN1KGIsIHJjdSk7CiAJCQkJfQomIzQzOwkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvZmlsdGVycy9yb3V0ZS5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb24KaW5kZXggMDVjZWRjYTY3Y2NhZC4uMmQ1ODQzYWViZDcyOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb24KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb24KQEAgLTIwMiw1ICYjNDM7MjAyLDIxNSBAQAogICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKICAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgcGFyZW50IHJvb3QgZHJyJiMzNDsKICAgICAgICAgXQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7YTdkMiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7RGVsZXRlIGEgcm91dGUgZmlsdGVyIHRoYXQgd2FzIG1vdmVkIHRvIGFub3RoZXIgYnVja2V0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O2ZpbHRlciYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7cm91dGUmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjEmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgY2hhbmdlIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAwMDEgcm91dGUgZnJvbSAxIHRvIDIgY2xhc3NpZCAxOjEmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAyMDAgcm91dGUgZnJvbSA1IHRvIDUgY2xhc3NpZCAxOjUmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIGZpbHRlciBkZWwgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDAwMiByb3V0ZSBmcm9tIDEgdG8gMiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIC1qIGZpbHRlciBzaG93IGRldiAkREVWMSBwYXJlbnQgZmZmZjomIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hKU09OJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICB7CiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJvdG9jb2wmIzM0OzogJiMzNDtpcCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3ByZWYmIzM0OzogMjAwLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O2tpbmQmIzM0OzogJiMzNDtyb3V0ZSYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O2NoYWluJiMzNDs6IDAKJiM0MzsgICAgICAgICAgICB9LAomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAyMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtvcHRpb25zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7ZmgmIzM0OzogJiMzNDsweDUwMDA1JiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2Zsb3dpZCYjMzQ7OiAmIzM0OzE6NSYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICB9CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzJiMzNDsKJiM0MzsgICAgICAgIF0KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0O2MwNWEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O1RyeSB0byBjaGFuZ2UgYSByb3V0ZSBmaWx0ZXIgb250byBhbiBhbHJlYWR5IHVzZWQgaGFuZGxlJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O2ZpbHRlciYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7cm91dGUmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjEgYWN0aW9uIG9rJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIHJvdXRlIGZyb20gMiB0byAyIGNsYXNzaWQgMToyIGFjdGlvbiBkcm9wJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBmaWx0ZXIgY2hhbmdlIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAwMDEgcm91dGUgZnJvbSAyIHRvIDIgY2xhc3NpZCAxOjEgYWN0aW9uIG9rJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgLWogZmlsdGVyIHNob3cgZGV2ICRERVYxIHBhcmVudCBmZmZmOiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaEpTT04mIzM0OzogWwomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAxMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMAomIzQzOyAgICAgICAgICAgIH0sCiYjNDM7ICAgICAgICAgICAgewomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3Byb3RvY29sJiMzNDs6ICYjMzQ7aXAmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcmVmJiMzNDs6IDEwMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtraW5kJiMzNDs6ICYjMzQ7cm91dGUmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtjaGFpbiYjMzQ7OiAwLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O29wdGlvbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzNDtmaCYjMzQ7OiAmIzM0OzB4MTAwMDEmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7Zmxvd2lkJiMzNDs6ICYjMzQ7MToxJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2FjdGlvbnMmIzM0OzogWwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDtvcmRlciYjMzQ7OiAxLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O2tpbmQmIzM0OzogJiMzNDtnYWN0JiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7Y29udHJvbF9hY3Rpb24mIzM0OzogewomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDt0eXBlJiMzNDs6ICYjMzQ7cGFzcyYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB9CiYjNDM7ICAgICAgICAgICAgICAgICAgICBdCiYjNDM7ICAgICAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICB9LAomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAxMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtvcHRpb25zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7ZmgmIzM0OzogJiMzNDsweDIwMDAyJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2Zsb3dpZCYjMzQ7OiAmIzM0OzE6MiYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzNDthY3Rpb25zJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7b3JkZXImIzM0OzogMSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDtraW5kJiMzNDs6ICYjMzQ7Z2FjdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O2NvbnRyb2xfYWN0aW9uJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7dHlwZSYjMzQ7OiAmIzM0O2Ryb3AmIzM0OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgfQomIzQzOyAgICAgICAgICAgICAgICAgICAgXQomIzQzOyAgICAgICAgICAgICAgICB9CiYjNDM7ICAgICAgICAgICAgfQomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzcyYjMzQ7CiYjNDM7ICAgICAgICBdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDszZjIxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtSZXBsYWNlIGEgcm91dGUgZmlsdGVyIHRoYXQgc2hhcmVzIGl0cyBrZXkgd2l0aCBhbm90aGVyIGZpbHRlciYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtmaWx0ZXImIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O3JvdXRlJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMjAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToyJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBmaWx0ZXIgcmVwbGFjZSBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMTo5JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgLWogZmlsdGVyIHNob3cgZGV2ICRERVYxIHBhcmVudCBmZmZmOiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaEpTT04mIzM0OzogWwomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAxMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMAomIzQzOyAgICAgICAgICAgIH0sCiYjNDM7ICAgICAgICAgICAgewomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3Byb3RvY29sJiMzNDs6ICYjMzQ7aXAmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcmVmJiMzNDs6IDEwMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtraW5kJiMzNDs6ICYjMzQ7cm91dGUmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtjaGFpbiYjMzQ7OiAwLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O29wdGlvbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzNDtmaCYjMzQ7OiAmIzM0OzB4MTAxMDEmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7Zmxvd2lkJiMzNDs6ICYjMzQ7MTo5JiMzNDsKJiM0MzsgICAgICAgICAgICAgICAgfQomIzQzOyAgICAgICAgICAgIH0sCiYjNDM7ICAgICAgICAgICAgewomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3Byb3RvY29sJiMzNDs6ICYjMzQ7aXAmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcmVmJiMzNDs6IDEwMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtraW5kJiMzNDs6ICYjMzQ7cm91dGUmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtjaGFpbiYjMzQ7OiAwLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O29wdGlvbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzNDtmaCYjMzQ7OiAmIzM0OzB4MTAyMDEmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7Zmxvd2lkJiMzNDs6ICYjMzQ7MToyJiMzNDsKJiM0MzsgICAgICAgICAgICAgICAgfQomIzQzOyAgICAgICAgICAgIH0KJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OwomIzQzOyAgICAgICAgXQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7OWQwZSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7UmVwbGFjZSBib3RoIHJvdXRlIGZpbHRlcnMgc2hhcmluZyBhIGtleSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtmaWx0ZXImIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O3JvdXRlJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMjAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToyJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OSYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDIwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIC1qIGZpbHRlciBzaG93IGRldiAkREVWMSBwYXJlbnQgZmZmZjomIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hKU09OJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICB7CiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJvdG9jb2wmIzM0OzogJiMzNDtpcCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3ByZWYmIzM0OzogMTAwLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O2tpbmQmIzM0OzogJiMzNDtyb3V0ZSYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O2NoYWluJiMzNDs6IDAKJiM0MzsgICAgICAgICAgICB9LAomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAxMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtvcHRpb25zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7ZmgmIzM0OzogJiMzNDsweDEwMTAxJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2Zsb3dpZCYjMzQ7OiAmIzM0OzE6OSYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICB9LAomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAxMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtvcHRpb25zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7ZmgmIzM0OzogJiMzNDsweDEwMjAxJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2Zsb3dpZCYjMzQ7OiAmIzM0OzE6OCYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICB9CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzJiMzNDsKJiM0MzsgICAgICAgIF0KICAgICB9CiBdCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MzAKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBBbmFseXNpczogUm91dGUgQ2xhc3NpZmllciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duIGFuZCBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIGZ1enotd29ydGh5LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgcG9pbnRzOiB0aGUgY29uZmlndXJhdGlvbiBwcmVyZXF1aXNpdGVzLCBhbmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBvciBzdHJ1Y3R1cmVzIHRoYXQgZGVzZXJ2ZSB0aGUgbW9zdCBhdHRlbnRpb24gZHVyaW5nIGZ1enppbmcuCgpBbHJpZ2h0LCB0aGUgY2hhbmdlcyBpbnZvbHZlIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgIGFuZCBhIGNvcnJlc3BvbmRpbmcgc2VsZnRlc3QgdXBkYXRlIGluIGByb3V0ZS5qc29uYC4gVGhlIGNvZGUgY2hhbmdlcyBpbiBgY2xzX3JvdXRlLmNgIGFyZSB3aGF0IGludHJpZ3VlIG1lLiBXZSYjMzk7cmUgc2VlaW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGByb3V0ZTRfYnVja2V0YCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSB0aGUgYWRkaXRpb24gb2YgYHJlZmNvdW50X3QgZmlsdGVyc19yZWY7YC4gVGhpcyBoaW50cyBhdCBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCBhbHdheXMgYSBnb29kIHNpZ24gZm9yIGZ1enppbmcgdGFyZ2V0cyEKCkxvb2tpbmcgY2xvc2VyOiB0aGUgYHJvdXRlNF9kZWxldGUoKWAgZnVuY3Rpb24gbm93IGluY2x1ZGVzIHJlZmNvdW50IGhhbmRsaW5nIGFuZCBidWNrZXQgZnJlZWluZyBsb2dpYy4gYHJvdXRlNF9zZXRfcGFybXMoKWAgaGFzIHZhbGlkYXRpb24sIGR1cGxpY2F0ZSBjaGVja3MsIGFuZCByZWZjb3VudCBtYW5hZ2VtZW50IOKAkyBhbGwgYWRkaW5nIGVudHJ5IHBvaW50cyBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gRmluYWxseSwgYHJvdXRlNF9jaGFuZ2UoKWAgdG91Y2hlcyBgZm9sZGAsIGJ1Y2tldCBoYW5kbGluZywgYW5kLCBjcml0aWNhbGx5LCBgcmVmY291bnRfZGVjX2FuZF90ZXN0YC4gVGhhdCBsYXN0IG9uZSBpcyBzY3JlYW1pbmcgZm9yIHNvbWUgZm9jdXNlZCBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIEtjb25maWcgZm9yIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgLiBOZWVkIHRvIGtub3cgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgdG8gZW5hYmxlIHRoaXMgY29kZS4gSSYjMzk7bGwgdXNlIGBncmVwcGVyYCAob3IganVzdCByZWFkIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUsIG9mIGNvdXJzZSkgdG8gbWFrZSBzdXJlIEkga25vdyBob3cgdG8gY29uZmlndXJlIHRoZSBrZXJuZWwgdG8gaGl0IHRoZXNlIGNvZGUgcGF0aHMuIEtub3dpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGJlIGtleSB0byBjcmVhdGluZyBhIGZvY3VzZWQgZnV6emluZyBjYW1wYWlnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbHNfcm91dGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NDk0PWNvbmZpZyBORVRfQ0xTX1JPVVRFNFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTUwMy1cdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxubmV0L3NjaGVkL0tjb25maWc6NTA0Olx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX3JvdXRlLlxubmV0L3NjaGVkL0tjb25maWctNTA1LVxuLS1cbm5ldC9zY2hlZC9NYWtlZmlsZT02OD1vYmotJChDT05GSUdfTkVUX0NMU19VMzIpXHQmIzQzOz0gY2xzX3UzMi5vXG5uZXQvc2NoZWQvTWFrZWZpbGU6Njk6b2JqLSQoQ09ORklHX05FVF9DTFNfUk9VVEU0KVx0JiM0Mzs9IGNsc19yb3V0ZS5vXG5uZXQvc2NoZWQvTWFrZWZpbGUtNzAtb2JqLSQoQ09ORklHX05FVF9DTFNfRlcpXHQmIzQzOz0gY2xzX2Z3Lm9cbi0tXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtMi0vKlxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjM6ICogbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXHRST1VURTQgY2xhc3NpZmllci5cbm5ldC9zY2hlZC9jbHNfcm91dGUuYy00LSAqXG4tLVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jPTY3Mj1zdGF0aWMgdm9pZCByb3V0ZTRfYmluZF9jbGFzcyh2b2lkICpmaCwgdTMyIGNsYXNzaWQsIHVuc2lnbmVkIGxvbmcgY2wsIHZvaWQgKnEsXG4tLVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTY3OS1cbm5ldC9zY2hlZC9jbHNfcm91dGUuYzo2ODA6c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc19yb3V0ZTRfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjgxLVx0LmtpbmRcdFx0PVx0XCYjMzQ7cm91dGVcJiMzNDssXG4tLVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jPTY5NT1zdGF0aWMgaW50IF9faW5pdCBpbml0X3JvdXRlNCh2b2lkKVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTY5Ni17XG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM6Njk3Olx0cmV0dXJuIHJlZ2lzdGVyX3RjZl9wcm90b19vcHMoXHUwMDI2Y2xzX3JvdXRlNF9vcHMpO1xubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTY5OC19XG4tLVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jPTcwMD1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yb3V0ZTQodm9pZClcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy03MDEte1xubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjcwMjpcdHVucmVnaXN0ZXJfdGNmX3Byb3RvX29wcyhcdTAwMjZjbHNfcm91dGU0X29wcyk7XG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNzAzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTE3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgdGhlIEtjb25maWcgZm9yIE5ldHdvcmsgU2NoZWR1bGluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBuZXR3b3JrIHNjaGVkdWxlciB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0IG1lIG9wZW4gdXAgYG5ldC9zY2hlZC9LY29uZmlnYCBhbmQgem9vbSBpbiBvbiBsaW5lIDQ5NC4gSG9wZWZ1bGx5LCB0aGF0IGxvY2F0aW9uIHdpbGwgdHJpZ2dlciBhIGtleSBzZWN0aW9uLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWV0aGluZyBzcGVjaWZpYyByZWxhdGVkIHRvIHRoZSBzaGFwaW5nIG9yIHF1ZXVpbmcgZGlzY2lwbGluZXMgdGhhdCBJIGhhdmUgYmVlbiByZXNlYXJjaGluZy4gSSB3aWxsIHNlZSB3aGF0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIHByb2JsZW0gSSBhbSB0cnlpbmcgdG8gc29sdmUuIEkgd2lsbCBsaWtlbHkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlZmF1bHQgc2V0dGluZ3MgdG8gbWFrZSB0aGUgYmVzdCBkZWNpc2lvbiBmb3IgbXkgY3VycmVudCBuZWVkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0ODA6XHRcbiA0ODE6XHRjb25maWcgTkVUX0NMU1xuIDQ4MjpcdFx0Ym9vbFxuIDQ4MzpcdFxuIDQ4NDpcdGNvbmZpZyBORVRfQ0xTX0JBU0lDXG4gNDg1Olx0XHR0cmlzdGF0ZSBcJiMzNDtFbGVtZW50YXJ5IGNsYXNzaWZpY2F0aW9uIChCQVNJQylcJiMzNDtcbiA0ODY6XHRcdHNlbGVjdCBORVRfQ0xTXG4gNDg3Olx0XHRoZWxwXG4gNDg4Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzIHVzaW5nXG4gNDg5Olx0XHQgIG9ubHkgZXh0ZW5kZWQgbWF0Y2hlcyBhbmQgYWN0aW9ucy5cbiA0OTA6XHRcbiA0OTE6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDQ5MjpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX2Jhc2ljLlxuIDQ5MzpcdFxuIDQ5NDpcdGNvbmZpZyBORVRfQ0xTX1JPVVRFNFxuIDQ5NTpcdFx0dHJpc3RhdGUgXCYjMzQ7Um91dGluZyBkZWNpc2lvbiAoUk9VVEUpXCYjMzQ7XG4gNDk2Olx0XHRkZXBlbmRzIG9uIElORVRcbiA0OTc6XHRcdHNlbGVjdCBJUF9ST1VURV9DTEFTU0lEXG4gNDk4Olx0XHRzZWxlY3QgTkVUX0NMU1xuIDQ5OTpcdFx0aGVscFxuIDUwMDpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzXG4gNTAxOlx0XHQgIGFjY29yZGluZyB0byB0aGUgcm91dGUgdGFibGUgZW50cnkgdGhleSBtYXRjaGVkLlxuIDUwMjpcdFxuIDUwMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNTA0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfcm91dGUuXG4gNTA1Olx0XG4gNTA2Olx0Y29uZmlnIE5FVF9DTFNfRldcbiA1MDc6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBtYXJrIChGVylcJiMzNDtcbiA1MDg6XHRcdHNlbGVjdCBORVRfQ0xTXG4gNTA5Olx0XHRoZWxwXG4gNTEwOlx0XHQgIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHNcbiA1MTE6XHRcdCAgYWNjb3JkaW5nIHRvIG5ldGZpbHRlci9maXJld2FsbCBtYXJrcy5cbiA1MTI6XHRcbiA1MTM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuIDUxNDpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX2Z3LlxuIDUxNTpcdFxuIDUxNjpcdGNvbmZpZyBORVRfQ0xTX1UzMlxuIDUxNzpcdFx0dHJpc3RhdGUgXCYjMzQ7VW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcJiMzNDtcbiA1MTg6XHRcdHNlbGVjdCBORVRfQ0xTXG4gNTE5Olx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI1OAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBjbHNfcm91dGUuY2AgZm9yIENsYXJpdHkqKgoKT2theSwgc28gSSB3YW50IHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIHdoYXQmIzM5O3MgY2hhbmdlZCB3aXRoaW4gdGhlIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgIG1vZHVsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBwaW5wb2ludCB0aGUgZXhhY3QgbW9kaWZpY2F0aW9ucyBtYWRlIHRvIHRob3NlIGtleSBmdW5jdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBjb2RlIGl0c2VsZiwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSByZWNlbnQgY29tbWl0cyBhbmQgdGhlIGRpZmZzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIHRoZSByb3V0aW5nIGNsYXNzaWZpY2F0aW9uIGxvZ2ljLCBhbnkgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBHb2luZyBkaXJlY3RseSB0byB0aGUgc291cmNlIHdpbGwgcHJvdmlkZSB0aGUgY2xlYW5lc3QgcGljdHVyZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3JvdXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzMDpcdH1cbiAzMzE6XHRcbiAzMzI6XHRzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCxcbiAzMzM6XHRcdFx0XHQgYm9vbCBydG5sX2hlbGQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAzMzQ6XHR7XG4gMzM1Olx0XHRzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQgPSBydG5sX2RlcmVmZXJlbmNlKHRwLVx1MDAzZXJvb3QpO1xuIDMzNjpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmYgPSBhcmc7XG4gMzM3Olx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciBfX3JjdSAqKmZwO1xuIDMzODpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKm5mO1xuIDMzOTpcdFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gMzQwOlx0XHR1bnNpZ25lZCBpbnQgaCA9IDA7XG4gMzQxOlx0XHRpbnQgaDE7XG4gMzQyOlx0XG4gMzQzOlx0XHRpZiAoIWhlYWQgfHwgIWYpXG4gMzQ0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM0NTpcdFxuIDM0NjpcdFx0aCA9IGYtXHUwMDNlaGFuZGxlO1xuIDM0NzpcdFx0YiA9IGYtXHUwMDNlYmt0O1xuIDM0ODpcdFxuIDM0OTpcdFx0ZnAgPSBcdTAwMjZiLVx1MDAzZWh0W2Zyb21faGFzaChoIFx1MDAzZVx1MDAzZSAxNildO1xuIDM1MDpcdFx0Zm9yIChuZiA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgbmY7XG4gMzUxOlx0XHQgICAgIGZwID0gXHUwMDI2bmYtXHUwMDNlbmV4dCwgbmYgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCkpIHtcbiAzNTI6XHRcdFx0aWYgKG5mID09IGYpIHtcbiAzNTM6XHRcdFx0XHQvKiB1bmxpbmsgaXQgKi9cbiAzNTQ6XHRcdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKCpmcCwgcnRubF9kZXJlZmVyZW5jZShmLVx1MDAzZW5leHQpKTtcbiAzNTU6XHRcbiAzNTY6XHRcdFx0XHQvKiBDbGVhciBhbnkgZmFzdG1hcCBlbnRyaWVzIHRoYXQgbWF5IHJlZiB0aGlzIGZpbHRlciBhbmRcbiAzNTc6XHRcdFx0XHQgKiBtYXJrIGl0IGR5aW5nIHNvIGluLWZsaWdodCByZWFkZXJzIGNhbiYjMzk7dCByZXB1Ymxpc2ggaXRcbiAzNTg6XHRcdFx0XHQgKiBhZnRlciB0aGUgcmVzZXQuXG4gMzU5Olx0XHRcdFx0ICovXG4gMzYwOlx0XHRcdFx0cm91dGU0X3Jlc2V0X2Zhc3RtYXAoaGVhZCwgZik7XG4gMzYxOlx0XG4gMzYyOlx0XHRcdFx0LyogRGVsZXRlIGl0ICovXG4gMzYzOlx0XHRcdFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFx1MDAyNmYtXHUwMDNlcmVzKTtcbiAzNjQ6XHRcdFx0XHR0Y2ZfZXh0c19nZXRfbmV0KFx1MDAyNmYtXHUwMDNlZXh0cyk7XG4gMzY1Olx0XHRcdFx0dGNmX3F1ZXVlX3dvcmsoXHUwMDI2Zi1cdTAwM2Vyd29yaywgcm91dGU0X2RlbGV0ZV9maWx0ZXJfd29yayk7XG4gMzY2Olx0XG4gMzY3Olx0XHRcdFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKSkge1xuIDM2ODpcdFx0XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcbiAzNjk6XHRcdFx0XHRcdGtmcmVlX3JjdShiLCByY3UpO1xuIDM3MDpcdFx0XHRcdH1cbiAzNzE6XHRcdFx0XHRicmVhaztcbiAzNzI6XHRcdFx0fVxuIDM3MzpcdFx0fVxuIDM3NDpcdFxuIDM3NTpcdFx0Kmxhc3QgPSB0cnVlO1xuIDM3NjpcdFx0Zm9yIChoMSA9IDA7IGgxIFx1MDAzYz0gMjU2OyBoMSYjNDM7JiM0MzspIHtcbiAzNzc6XHRcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihoZWFkLVx1MDAzZXRhYmxlW2gxXSkpIHtcbiAzNzg6XHRcdFx0XHQqbGFzdCA9IGZhbHNlO1xuIDM3OTpcdFx0XHRcdGJyZWFrO1xuIDM4MDpcdFx0XHR9XG4gMzgxOlx0XHR9XG4gMzgyOlx0XG4gMzgzOlx0XHRyZXR1cm4gMDtcbiAzODQ6XHR9XG4gMzg1Olx0XG4gMzg2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJvdXRlNF9wb2xpY3lbVENBX1JPVVRFNF9NQVggJiM0MzsgMV0gPSB7XG4gMzg3Olx0XHRbVENBX1JPVVRFNF9DTEFTU0lEXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIDM4ODpcdFx0W1RDQV9ST1VURTRfVE9dXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMHhGRiksXG4gMzg5Olx0XHRbVENBX1JPVVRFNF9GUk9NXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAweEZGKSxcbiAzOTA6XHRcdFtUQ0FfUk9VVEU0X0lJRl1cdD0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMHg3RkZGKSxcbiAzOTE6XHR9O1xuIDM5MjpcdFxuIDM5MzpcdHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIDM5NDpcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGJhc2UsIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmLFxuIDM5NTpcdFx0XHRcdCAgICB1MzIgaGFuZGxlLCBzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQsXG4gMzk2Olx0XHRcdFx0ICAgIHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IG5sYXR0ciAqZXN0LFxuIDM5NzpcdFx0XHRcdCAgICBzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZm9sZCwgdTMyIGZsYWdzLFxuIDM5ODpcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gMzk5Olx0e1xuIDQwMDpcdFx0dTMyIGlkID0gMCwgdG8gPSAwLCBuaGFuZGxlID0gMHg4MDAwO1xuIDQwMTpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZwO1xuIDQwMjpcdFx0dW5zaWduZWQgaW50IGgxO1xuIDQwMzpcdFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gNDA0Olx0XHRpbnQgZXJyO1xuIDQwNTpcdFxuIDQwNjpcdFx0ZXJyID0gdGNmX2V4dHNfdmFsaWRhdGUobmV0LCB0cCwgdGIsIGVzdCwgXHUwMDI2Zi1cdTAwM2VleHRzLCBmbGFncywgZXh0YWNrKTtcbiA0MDc6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNDA4Olx0XHRcdHJldHVybiBlcnI7XG4gNDA5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3ODMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgZm9jdXNpbmcgb24gdGhlIGltcGxpZWQgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgRGVlcGVyIGludG8gUm91dGluZyBQYXJhbWV0ZXIgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGZvciBgcm91dGU0X3NldF9wYXJtc2AgYW5kIGByb3V0ZTRfY2hhbmdlYC4gVGhhdCBwcmV2aW91cyBjb250ZXh0IGFib3V0IHRoZSBvdmVyYWxsIGZsb3cgYW5kIHRoZSBpbml0aWFsIGZ1bmN0aW9uIGNhbGwgaXMgc3RpbGwgZnJlc2ggaW4gbXkgbWluZC4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGVzZSB0d28gZnVuY3Rpb25zIGJlY2F1c2UgdGhleSYjMzk7cmUgY3JpdGljYWwgZm9yIGFjdHVhbGx5IGNvbmZpZ3VyaW5nIGFuZCBwb3RlbnRpYWxseSBtb2RpZnlpbmcgdGhlIHJvdXRpbmcgc2V0dXAsIHJpZ2h0PyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgcGFyYW1ldGVycyBhcmUgYmVpbmcgc2V0IGFuZCBob3cgY2hhbmdlcyBhcmUgYmVpbmcgaW1wbGVtZW50ZWQuIFNwZWNpZmljYWxseSwgd2hhdCYjMzk7cyB0aGUgbG9naWMgdGhlcmU/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGRpcmVjdGx5IG1vZGlmeWluZyBkYXRhIHN0cnVjdHVyZXMsIG9yIGFyZSB0aGVyZSBtb3JlIGNvbXBsZXggaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbW9kdWxlcyBvciBwcm9jZXNzZXMgaW52b2x2ZWQ/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgdGhlc2Ugd2lsbCBiZSB0aGUgY29yZSBmdW5jdGlvbnMgZm9yIGVpdGhlciBpbml0aWFsIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHJvdXRpbmcgdGFibGUgb3IgYWRqdXN0bWVudCBvZiB0aGVzZSBwYXJhbWV0ZXJzIGR1cmluZyBydW50aW1lLiBGcm9tIGV4cGVyaWVuY2UgSSBrbm93IHRoYXQgdGhpcyBpcyBhIGNyaXRpY2FsIHNlY3Rpb24gdG8gcHJldmVudCBpbmNvbnNpc3RlbnQgYmVoYXZpb3IuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGF0b21pY2l0eSBpc3N1ZXMsIGFuZCBlcnJvciBoYW5kbGluZyDigJMgdGhvc2UgYXJlIGFsd2F5cyBrZXkgYXJlYXMgb2YgY29uY2VybiBpbiByb3V0aW5nIG1hbmFnZW1lbnQuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGluIGFuZCBtYXAgb3V0IHRoZSBjb250cm9sIGZsb3csIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFuZCBzZWUgaG93IHdlbGwgdGhpcyBpcyBkZXNpZ25lZCBmb3Igc2NhbGFiaWxpdHkgYW5kIHJvYnVzdG5lc3MuIExldCYjMzk7cyBzZWUgaG93IHdlbGwgdGhlIGNvZGUgaGFuZGxlcyBlZGdlIGNhc2VzLCB0b28gLSBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBkZWFscyB3aXRoIGFsbCB0aGUgY29ybmVyIGNhc2VzIEkgY2FuIHRoaW5rIG9mLCBpbmNsdWRpbmcgd2hlbiB0aGUgcmVxdWVzdGVkIGNoYW5nZSBpcyBub3QgYWxsb3dlZC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfcm91dGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDEwOlx0XHRpZiAodGJbVENBX1JPVVRFNF9UT10pIHtcbiA0MTE6XHRcdFx0aWYgKCFmb2xkIFx1MDAyNlx1MDAyNiBoYW5kbGUgXHUwMDI2IDB4ODAwMCkge1xuIDQxMjpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBoYW5kbGVcJiMzNDspO1xuIDQxMzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQxNDpcdFx0XHR9XG4gNDE1Olx0XHRcdHRvID0gbmxhX2dldF91MzIodGJbVENBX1JPVVRFNF9UT10pO1xuIDQxNjpcdFx0XHRuaGFuZGxlID0gdG87XG4gNDE3Olx0XHR9XG4gNDE4Olx0XG4gNDE5Olx0XHRpZiAodGJbVENBX1JPVVRFNF9GUk9NXSBcdTAwMjZcdTAwMjYgdGJbVENBX1JPVVRFNF9JSUZdKSB7XG4gNDIwOlx0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoZXh0YWNrLCB0YltUQ0FfUk9VVEU0X0ZST01dLFxuIDQyMTpcdFx0XHRcdFx0ICAgIFwmIzM0OyYjMzk7ZnJvbSYjMzk7IGFuZCAmIzM5O2Zyb21pZiYjMzk7IGFyZSBtdXR1YWxseSBleGNsdXNpdmVcJiMzNDspO1xuIDQyMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0MjM6XHRcdH1cbiA0MjQ6XHRcbiA0MjU6XHRcdGlmICh0YltUQ0FfUk9VVEU0X0ZST01dKSB7XG4gNDI2Olx0XHRcdGlkID0gbmxhX2dldF91MzIodGJbVENBX1JPVVRFNF9GUk9NXSk7XG4gNDI3Olx0XHRcdG5oYW5kbGUgfD0gaWQgXHUwMDNjXHUwMDNjIDE2O1xuIDQyODpcdFx0fSBlbHNlIGlmICh0YltUQ0FfUk9VVEU0X0lJRl0pIHtcbiA0Mjk6XHRcdFx0aWQgPSBubGFfZ2V0X3UzMih0YltUQ0FfUk9VVEU0X0lJRl0pO1xuIDQzMDpcdFx0XHRuaGFuZGxlIHw9IChpZCB8IDB4ODAwMCkgXHUwMDNjXHUwMDNjIDE2O1xuIDQzMTpcdFx0fSBlbHNlXG4gNDMyOlx0XHRcdG5oYW5kbGUgfD0gMHhGRkZGIFx1MDAzY1x1MDAzYyAxNjtcbiA0MzM6XHRcbiA0MzQ6XHRcdGlmIChoYW5kbGUgXHUwMDI2XHUwMDI2ICghZm9sZCB8fCBuaGFuZGxlID09IChoYW5kbGUgXHUwMDI2IH4weDdGMDApKSlcbiA0MzU6XHRcdFx0bmhhbmRsZSB8PSBoYW5kbGUgXHUwMDI2IDB4N0YwMDtcbiA0MzY6XHRcbiA0Mzc6XHRcdGlmIChoYW5kbGUgXHUwMDI2XHUwMDI2ICFmb2xkIFx1MDAyNlx1MDAyNiBuaGFuZGxlICE9IGhhbmRsZSkge1xuIDQzODpcdFx0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuIDQzOTpcdFx0XHRcdFx0ICAgXCYjMzQ7SGFuZGxlIG1pc21hdGNoIGNvbnN0cnVjdGVkOiAleCAoZXhwZWN0ZWQ6ICV4KVwmIzM0OyxcbiA0NDA6XHRcdFx0XHRcdCAgIGhhbmRsZSwgbmhhbmRsZSk7XG4gNDQxOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ0MjpcdFx0fVxuIDQ0MzpcdFxuIDQ0NDpcdFx0aWYgKCFuaGFuZGxlKSB7XG4gNDQ1Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7UmVwbGFjaW5nIHdpdGggaGFuZGxlIG9mIDAgaXMgaW52YWxpZFwmIzM0Oyk7XG4gNDQ2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQ0NzpcdFx0fVxuIDQ0ODpcdFxuIDQ0OTpcdFx0aDEgPSB0b19oYXNoKG5oYW5kbGUpO1xuIDQ1MDpcdFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UoaGVhZC1cdTAwM2V0YWJsZVtoMV0pO1xuIDQ1MTpcdFx0aWYgKCFiKSB7XG4gNDUyOlx0XHRcdGIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2J1Y2tldCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiA0NTM6XHRcdFx0aWYgKGIgPT0gTlVMTClcbiA0NTQ6XHRcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gNDU1Olx0XG4gNDU2Olx0XHRcdHJlZmNvdW50X3NldChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmLCAxKTtcbiA0NTc6XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGhlYWQtXHUwMDNldGFibGVbaDFdLCBiKTtcbiA0NTg6XHRcdH0gZWxzZSB7XG4gNDU5Olx0XHRcdHVuc2lnbmVkIGludCBoMiA9IGZyb21faGFzaChuaGFuZGxlIFx1MDAzZVx1MDAzZSAxNik7XG4gNDYwOlx0XG4gNDYxOlx0XHRcdGZvciAoZnAgPSBydG5sX2RlcmVmZXJlbmNlKGItXHUwMDNlaHRbaDJdKTtcbiA0NjI6XHRcdFx0ICAgICBmcDtcbiA0NjM6XHRcdFx0ICAgICBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoZnAtXHUwMDNlbmV4dCkpXG4gNDY0Olx0XHRcdFx0aWYgKGZwICE9IGZvbGQgXHUwMDI2XHUwMDI2IGZwLVx1MDAzZWhhbmRsZSA9PSBuaGFuZGxlKSB7XG4gNDY1Olx0XHRcdFx0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuIDQ2NjpcdFx0XHRcdFx0XHRcdCAgIFwmIzM0O0hhbmRsZSAleCBpcyBhbHJlYWR5IGluIHVzZVwmIzM0OyxcbiA0Njc6XHRcdFx0XHRcdFx0XHQgICBuaGFuZGxlKTtcbiA0Njg6XHRcdFx0XHRcdHJldHVybiAtRUVYSVNUO1xuIDQ2OTpcdFx0XHRcdH1cbiA0NzA6XHRcbiA0NzE6XHRcdFx0cmVmY291bnRfaW5jKFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYpO1xuIDQ3MjpcdFx0fVxuIDQ3MzpcdFxuIDQ3NDpcdFx0aWYgKHRiW1RDQV9ST1VURTRfVE9dKVxuIDQ3NTpcdFx0XHRmLVx1MDAzZWlkID0gdG87XG4gNDc2Olx0XG4gNDc3Olx0XHRpZiAodGJbVENBX1JPVVRFNF9GUk9NXSlcbiA0Nzg6XHRcdFx0Zi1cdTAwM2VpZCA9IHRvIHwgaWRcdTAwM2NcdTAwM2MxNjtcbiA0Nzk6XHRcdGVsc2UgaWYgKHRiW1RDQV9ST1VURTRfSUlGXSlcbiA0ODA6XHRcdFx0Zi1cdTAwM2VpaWYgPSBpZDtcbiA0ODE6XHRcbiA0ODI6XHRcdGYtXHUwMDNlaGFuZGxlID0gbmhhbmRsZTtcbiA0ODM6XHRcdGYtXHUwMDNlYmt0ID0gYjtcbiA0ODQ6XHRcdGYtXHUwMDNldHAgPSB0cDtcbiA0ODU6XHRcbiA0ODY6XHRcdGlmICh0YltUQ0FfUk9VVEU0X0NMQVNTSURdKSB7XG4gNDg3Olx0XHRcdGYtXHUwMDNlcmVzLmNsYXNzaWQgPSBubGFfZ2V0X3UzMih0YltUQ0FfUk9VVEU0X0NMQVNTSURdKTtcbiA0ODg6XHRcdFx0dGNmX2JpbmRfZmlsdGVyKHRwLCBcdTAwMjZmLVx1MDAzZXJlcywgYmFzZSk7XG4gNDg5Olx0XHR9XG4gNDkwOlx0XG4gNDkxOlx0XHRyZXR1cm4gMDtcbiA0OTI6XHR9XG4gNDkzOlx0XG4gNDk0Olx0c3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiA0OTU6XHRcdFx0XHQgc3RydWN0IHRjZl9wcm90byAqdHAsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdTMyIGhhbmRsZSxcbiA0OTY6XHRcdFx0XHQgc3RydWN0IG5sYXR0ciAqKnRjYSwgdm9pZCAqKmFyZywgdTMyIGZsYWdzLFxuIDQ5NzpcdFx0XHRcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gNDk4Olx0e1xuIDQ5OTpcdFx0c3RydWN0IHJvdXRlNF9oZWFkICpoZWFkID0gcnRubF9kZXJlZmVyZW5jZSh0cC1cdTAwM2Vyb290KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2MjUKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgcm91dGU0X2NoYW5nZWAgTGluZXMgNTAwLTU5MCoqCgpPa2F5LCBJJiMzOTttIGRpdmluZyBpbnRvIGByb3V0ZTRfY2hhbmdlYCBub3csIHNwZWNpZmljYWxseSBsaW5lcyA1MDAgdG8gNTkwLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjb25zaWRlciB3aGF0IHRoaXMgc2VjdGlvbiBvZiBjb2RlICpsaWtlbHkqIGRlYWxzIHdpdGguIEdpdmVuIHRoZSBuYW1pbmcgY29udmVudGlvbiBhbmQgdGhlICYjMzQ7Y2hhbmdlJiMzNDsgaW4gdGhlIGZpbGVuYW1lLCBJJiMzOTttIGFudGljaXBhdGluZyBzb21lIGZvcm0gb2Ygc3RhdGUgdHJhbnNpdGlvbiwgcGVyaGFwcyByZWxhdGVkIHRvIHJvdXRpbmcgdXBkYXRlcywgZmFpbG92ZXIgbWVjaGFuaXNtcywgb3IgbWF5YmUgZXZlbiBjb25maWd1cmF0aW9uIGNoYW5nZXMuIFRoaXMgcmFuZ2UgZmVlbHMgc2lnbmlmaWNhbnQsIHNvIGl0JiMzOTtzIHByb2JhYmx5IGhhbmRsaW5nIGEgY29yZSBsb2dpYyBibG9jayByYXRoZXIgdGhhbiBhIHRyaXZpYWwgY29uZGl0aW9uYWwgb3Igc2ltcGxlIGRhdGEgbWFuaXB1bGF0aW9uLgoKSSYjMzk7bSBtZW50YWxseSBwcmVwYXJpbmcgdG8gbG9vayBmb3Igc3BlY2lmaWMga2V5d29yZHMgYW5kIHBhdHRlcm5zLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHJlZmVyZW5jZXMgdG8gcm91dGUgdGFibGVzLCBuZXR3b3JrIGludGVyZmFjZXMsIHBlcmhhcHMgc29tZSBzb3J0IG9mICYjMzQ7aWYvZWxzZSYjMzQ7IG9yICYjMzQ7c3dpdGNoJiMzNDsgc3RhdGVtZW50IGdvdmVybmluZyB0aGUgcm91dGluZyBiZWhhdmlvciwgYW5kIGhvcGVmdWxseSBzb21lIGxvZ2dpbmcgb3IgZXJyb3IgaGFuZGxpbmcuIEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBsb2NraW5nIG1lY2hhbmlzbXMsIGVzcGVjaWFsbHkgaWYgdGhpcyBjb2RlIGlzIHRvdWNoaW5nIHNoYXJlZCByZXNvdXJjZXMgb3IgaXMgbXVsdGl0aHJlYWRlZC4KCkZ1cnRoZXJtb3JlLCBJIGFtIGxvb2tpbmcgZm9yIHdheXMgdG8gc2VlIGhvdyB0aGlzIGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZmlsZS4gQXJlIHRoZXJlIGFueSBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkIGZyb20gdGhpcyByYW5nZSwgb3IgaXMgdGhpcyB0aGUgZnVuY3Rpb24gdGhhdCBpcyBtYWtpbmcgdGhlIGNhbGw/IEFyZSB0aGVyZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVwZGF0ZWQgb3IgcmVmZXJlbmNlZCBpbiB0aGlzIHJhbmdlLCBhbmQgd2hlcmUgZWxzZSBhcmUgdGhleSB1c2VkPwoKSSYjMzk7bSBhaW1pbmcgdG8gcXVpY2tseSBncmFzcCB0aGUgKmludGVudCogb2YgdGhpcyBibG9jayBmaXJzdCDigJMgd2hhdCYjMzk7cyB0aGUgZ29hbCBpdCYjMzk7cyB0cnlpbmcgdG8gYWNoaWV2ZT8gVGhlbiwgSSYjMzk7bGwgZHJpbGwgZG93biBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHRvIHNlZSBpZiB0aGUgYXBwcm9hY2ggaXMgc291bmQsIGVmZmljaWVudCwgYW5kIHdlbGwtZG9jdW1lbnRlZC4gRmluYWxseSwgSSYjMzk7bGwgYmUgZm9ybWluZyBhbiBpbml0aWFsIGh5cG90aGVzaXMgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtaWdodCBjb25zaWRlci4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfcm91dGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTAwOlx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciBfX3JjdSAqKmZwO1xuIDUwMTpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsICpmMSwgKnBmcCwgKmYgPSBOVUxMO1xuIDUwMjpcdFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gNTAzOlx0XHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfUk9VVEU0X01BWCAmIzQzOyAxXTtcbiA1MDQ6XHRcdHVuc2lnbmVkIGludCBoO1xuIDUwNTpcdFx0aW50IGVycjtcbiA1MDY6XHRcbiA1MDc6XHRcdGlmICghaGFuZGxlKSB7XG4gNTA4Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q3JlYXRpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkXCYjMzQ7KTtcbiA1MDk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTEwOlx0XHR9XG4gNTExOlx0XG4gNTEyOlx0XHRpZiAoTkxfUkVRX0FUVFJfQ0hFQ0soZXh0YWNrLCBOVUxMLCB0Y2EsIFRDQV9PUFRJT05TKSkge1xuIDUxMzpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtNaXNzaW5nIG9wdGlvbnNcJiMzNDspO1xuIDUxNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MTU6XHRcdH1cbiA1MTY6XHRcbiA1MTc6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgVENBX1JPVVRFNF9NQVgsIHRjYVtUQ0FfT1BUSU9OU10sXG4gNTE4Olx0XHRcdFx0XHRcdCAgcm91dGU0X3BvbGljeSwgTlVMTCk7XG4gNTE5Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDUyMDpcdFx0XHRyZXR1cm4gZXJyO1xuIDUyMTpcdFxuIDUyMjpcdFx0Zm9sZCA9ICphcmc7XG4gNTIzOlx0XHRpZiAoZm9sZCBcdTAwMjZcdTAwMjYgZm9sZC1cdTAwM2VoYW5kbGUgIT0gaGFuZGxlKVxuIDUyNDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDUyNTpcdFxuIDUyNjpcdFx0ZXJyID0gLUVOT0JVRlM7XG4gNTI3Olx0XHRmID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gNTI4Olx0XHRpZiAoIWYpXG4gNTI5Olx0XHRcdGdvdG8gZXJyb3V0O1xuIDUzMDpcdFxuIDUzMTpcdFx0ZXJyID0gdGNmX2V4dHNfaW5pdChcdTAwMjZmLVx1MDAzZWV4dHMsIG5ldCwgVENBX1JPVVRFNF9BQ1QsIFRDQV9ST1VURTRfUE9MSUNFKTtcbiA1MzI6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNTMzOlx0XHRcdGdvdG8gZXJyb3V0O1xuIDUzNDpcdFxuIDUzNTpcdFx0aWYgKGZvbGQpIHtcbiA1MzY6XHRcdFx0Zi1cdTAwM2VpZCA9IGZvbGQtXHUwMDNlaWQ7XG4gNTM3Olx0XHRcdGYtXHUwMDNlaWlmID0gZm9sZC1cdTAwM2VpaWY7XG4gNTM4Olx0XHRcdGYtXHUwMDNlaGFuZGxlID0gZm9sZC1cdTAwM2VoYW5kbGU7XG4gNTM5Olx0XG4gNTQwOlx0XHRcdGYtXHUwMDNldHAgPSBmb2xkLVx1MDAzZXRwO1xuIDU0MTpcdFx0XHRmLVx1MDAzZWJrdCA9IGZvbGQtXHUwMDNlYmt0O1xuIDU0MjpcdFx0fVxuIDU0MzpcdFxuIDU0NDpcdFx0ZXJyID0gcm91dGU0X3NldF9wYXJtcyhuZXQsIHRwLCBiYXNlLCBmLCBoYW5kbGUsIGhlYWQsIHRiLFxuIDU0NTpcdFx0XHRcdCAgICAgICB0Y2FbVENBX1JBVEVdLCBmb2xkLCBmbGFncywgZXh0YWNrKTtcbiA1NDY6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNTQ3Olx0XHRcdGdvdG8gZXJyb3V0O1xuIDU0ODpcdFxuIDU0OTpcdFx0aCA9IGZyb21faGFzaChmLVx1MDAzZWhhbmRsZSBcdTAwM2VcdTAwM2UgMTYpO1xuIDU1MDpcdFx0ZnAgPSBcdTAwMjZmLVx1MDAzZWJrdC1cdTAwM2VodFtoXTtcbiA1NTE6XHRcdGZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApO1xuIDU1MjpcdFx0ICAgICAoZjEgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCkpICE9IE5VTEw7XG4gNTUzOlx0XHQgICAgIGZwID0gXHUwMDI2ZjEtXHUwMDNlbmV4dClcbiA1NTQ6XHRcdFx0aWYgKGYtXHUwMDNlaGFuZGxlIFx1MDAzYyBmMS1cdTAwM2VoYW5kbGUpXG4gNTU1Olx0XHRcdFx0YnJlYWs7XG4gNTU2Olx0XG4gNTU3Olx0XHR0Y2ZfYmxvY2tfbmV0aWZfa2VlcF9kc3QodHAtXHUwMDNlY2hhaW4tXHUwMDNlYmxvY2spO1xuIDU1ODpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGYtXHUwMDNlbmV4dCwgZjEpO1xuIDU1OTpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZik7XG4gNTYwOlx0XG4gNTYxOlx0XHRpZiAoZm9sZCkge1xuIDU2MjpcdFx0XHRiID0gZm9sZC1cdTAwM2Via3Q7XG4gNTYzOlx0XHRcdGggPSBmcm9tX2hhc2goZm9sZC1cdTAwM2VoYW5kbGUgXHUwMDNlXHUwMDNlIDE2KTtcbiA1NjQ6XHRcdFx0ZnAgPSBcdTAwMjZiLVx1MDAzZWh0W2hdO1xuIDU2NTpcdFx0XHRmb3IgKHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgcGZwO1xuIDU2NjpcdFx0XHQgICAgIGZwID0gXHUwMDI2cGZwLVx1MDAzZW5leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkge1xuIDU2NzpcdFx0XHRcdGlmIChwZnAgPT0gZm9sZCkge1xuIDU2ODpcdFx0XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC1cdTAwM2VuZXh0KTtcbiA1Njk6XHRcdFx0XHRcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZikpIHtcbiA1NzA6XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IHRoID0gdG9faGFzaChmb2xkLVx1MDAzZWhhbmRsZSk7XG4gNTcxOlx0XG4gNTcyOlx0XHRcdFx0XHRcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cdTAwM2V0YWJsZVt0aF0sIE5VTEwpO1xuIDU3MzpcdFx0XHRcdFx0XHRrZnJlZV9yY3UoYiwgcmN1KTtcbiA1NzQ6XHRcdFx0XHRcdH1cbiA1NzU6XHRcdFx0XHRcdGJyZWFrO1xuIDU3NjpcdFx0XHRcdH1cbiA1Nzc6XHRcdFx0fVxuIDU3ODpcdFx0fVxuIDU3OTpcdFxuIDU4MDpcdFx0cm91dGU0X3Jlc2V0X2Zhc3RtYXAoaGVhZCwgZm9sZCk7XG4gNTgxOlx0XHQqYXJnID0gZjtcbiA1ODI6XHRcdGlmIChmb2xkKSB7XG4gNTgzOlx0XHRcdHRjZl91bmJpbmRfZmlsdGVyKHRwLCBcdTAwMjZmb2xkLVx1MDAzZXJlcyk7XG4gNTg0Olx0XHRcdHRjZl9leHRzX2dldF9uZXQoXHUwMDI2Zm9sZC1cdTAwM2VleHRzKTtcbiA1ODU6XHRcdFx0dGNmX3F1ZXVlX3dvcmsoXHUwMDI2Zm9sZC1cdTAwM2Vyd29yaywgcm91dGU0X2RlbGV0ZV9maWx0ZXJfd29yayk7XG4gNTg2Olx0XHR9XG4gNTg3Olx0XHRyZXR1cm4gMDtcbiA1ODg6XHRcbiA1ODk6XHRlcnJvdXQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAwOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDQ2CgkJCQkJCQlvdXRwdXQ6IDE0NgoJCQkJCQkJdGhvdWdodHM6IDYxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldDogY2xzX3JvdXRlIFJlZmFjdG9yIGluIG5ldC9zY2hlZCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBleHBlcnQgaW5zdGluY3RzIGFyZSB0ZWxsaW5nIG1lIHRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSByZWZhY3RvciBvZiBgY2xzX3JvdXRlYCwgc3BlY2lmaWNhbGx5IGluIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgLCB3aGljaCBpcyBhIFRyYWZmaWMgQ29udHJvbCBjbGFzc2lmaWVyIChST1VURTQpIGluIExpbnV4IG5ldHdvcmtpbmcuIFRoaXMgY29kZSBpcyBjcml0aWNhbCwgYXMgaXQmIzM5O3MgdGhlIGNvcmUgb2YgaG93IHRyYWZmaWMgaXMgcm91dGVkIGFuZCBmaWx0ZXJlZCwgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rIOKAkyBydG5ldGxpbmsgYW5kIGB0Y2AgY29tbWFuZHMgbGlrZSBgUlRNX05FV1RGSUxURVJgLCBgUlRNX0RFTFRGSUxURVJgLCBldGMuIFN5emthbGxlciBhbHJlYWR5IGV4ZXJjaXNlcyB0aGlzIGFyZWEsIHdoaWNoIGlzIGEgZ29vZCBzaWduLgoKVGhlIHBhdGNoIGl0c2VsZiBpcyByZWZhY3RvcmluZyBidWNrZXQgbGlmZXRpbWUgbWFuYWdlbWVudC4gSXQmIzM5O3MgbW92aW5nIGZyb20gaXRlcmF0aW5nIHRocm91Z2ggYnVja2V0IGVudHJpZXMgdG8gdXNpbmcgYSBgcmVmY291bnRfdCBmaWx0ZXJzX3JlZmAsIHdoaWNoIGltcGxpZXMgY2hhbmdlcyB0byBmaWx0ZXIgY2hhbmdlLCByZXBsYWNlbWVudCwgYW5kIGhhbmRsZSB2YWxpZGF0aW9uIGxvZ2ljLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBhcmVhIHdoZXJlIHN1YnRsZSBjb25jdXJyZW5jeSBidWdzIG9yIGluY29ycmVjdCBoYW5kbGluZyBvZiBlZGdlIGNhc2VzIGNhbiBlYXNpbHkgc2xpcCBpbi4gVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuICoqV29ydGhGdXp6aW5nID0gdHJ1ZS4qKgoKQ29uZmlnLXdpc2UsIHdlIG5lZWQgYE5FVF9DTFNfUk9VVEU0YCBlbmFibGVkLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1haW4gcmVxdWlyZW1lbnQsIHdpdGggYSBkZXBlbmRlbmN5IG9uIGBJTkVUYC4gSSYjMzk7bGwgbWFrZSBzdXJlIHRoYXQmIzM5O3Mgc2V0IGluIHRoZSBmdXp6ZXIgY29uZmlndXJhdGlvbi4gU28sICoqRW5hYmxlQ29uZmlncyoqOiBgWyYjMzQ7TkVUX0NMU19ST1VURTQmIzM0O11gLgoKTG9va2luZyBhdCB0aGUgY29kZSBtb2RpZmljYXRpb25zLCB0aGUgcGF0Y2ggaGFzIHRvdWNoZWQgdGhyZWUga2V5IGZ1bmN0aW9uczogYHJvdXRlNF9kZWxldGVgLCBgcm91dGU0X3NldF9wYXJtc2AsIGFuZCBgcm91dGU0X2NoYW5nZWAuIFdoaWxlIHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gYGNsc19yb3V0ZS5jYCBhcmUgYWxzbyByZWxldmFudCwgdGhlc2UgYXJlIHRoZSBvbmVzICpkaXJlY3RseSogbW9kaWZpZWQsIHNvIEkmIzM5O2xsIGZvY3VzIG9uIHRoZW0uICoqRm9jdXNTeW1ib2xzKio6IGBbJiMzNDtyb3V0ZTRfY2hhbmdlJiMzNDssICYjMzQ7cm91dGU0X2RlbGV0ZSYjMzQ7LCAmIzM0O3JvdXRlNF9zZXRfcGFybXMmIzM0O11gLgoKVG8gYmUgY3J5c3RhbCBjbGVhcjogdGhlIHBhdGNoIG1vZGlmaWVzIGNvZGUgKGFuZCBhIGNyaXRpY2FsIGRhdGFzdHJ1Y3R1cmUpIGluIG5ldC9zY2hlZCBkdXJpbmcgcm91dGUgZmlsdGVyIGNyZWF0aW9uLCByZXBsYWNlbWVudCwgYW5kIGRlbGV0aW9uIChgcm91dGU0X2NoYW5nZWAsIGByb3V0ZTRfc2V0X3Bhcm1zYCwgYHJvdXRlNF9kZWxldGVgKS4gVGhlc2UgY2hhbmdlcyBtb2RpZnkgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpbiB0aGUgbmV0d29yayB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsvdGMgZmlsdGVyIGNvbmZpZ3VyYXRpb24uIFRoaXMgcmVmYWN0b3JpbmcsIHdpdGggaXRzIGZvY3VzIG9uIGxpZmV0aW1lIG1hbmFnZW1lbnQgYW5kIHJlZmVyZW5jZSBjb3VudHMsIG1ha2VzIHRoaXMgYSBwcmltZSB0YXJnZXQuCgpBbHJpZ2h0LCBldmVyeXRoaW5nIGxpbmVzIHVwLiBJdCYjMzk7cyB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gTGV0JiMzOTtzIGdldCB0aGlzIGZ1enplciBwb2ludGVkIGluIHRoZSByaWdodCBkaXJlY3Rpb24hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfQ0xTX1JPVVRFNCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JvdXRlNF9jaGFuZ2UmIzM0OywKICAgICYjMzQ7cm91dGU0X2RlbGV0ZSYjMzQ7LAogICAgJiMzNDtyb3V0ZTRfc2V0X3Bhcm1zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbHNfcm91dGUgbmV0d29yayB0cmFmZmljIGNvbnRyb2wgY2xhc3NpZmllciBpbiBuZXQvc2NoZWQvY2xzX3JvdXRlLmMsIGludHJvZHVjaW5nIGEgcmVmY291bnQgKGZpbHRlcnNfcmVmKSB0byBtYW5hZ2Ugcm91dGU0X2J1Y2tldCBsaWZldGltZXMgZHVyaW5nIHJvdXRlIGZpbHRlciBtb2RpZmljYXRpb24sIGNyZWF0aW9uLCBhbmQgZGVsZXRpb24gKHJvdXRlNF9jaGFuZ2UsIHJvdXRlNF9kZWxldGUsIGFuZCByb3V0ZTRfc2V0X3Bhcm1zKS4gVGhpcyBpcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsvdGMgZmlsdGVyIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9DTFNfUk9VVEU0JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cm91dGU0X2NoYW5nZSYjMzQ7LAogICAgJiMzNDtyb3V0ZTRfZGVsZXRlJiMzNDssCiAgICAmIzM0O3JvdXRlNF9zZXRfcGFybXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNsc19yb3V0ZSBuZXR3b3JrIHRyYWZmaWMgY29udHJvbCBjbGFzc2lmaWVyIGluIG5ldC9zY2hlZC9jbHNfcm91dGUuYywgaW50cm9kdWNpbmcgYSByZWZjb3VudCAoZmlsdGVyc19yZWYpIHRvIG1hbmFnZSByb3V0ZTRfYnVja2V0IGxpZmV0aW1lcyBkdXJpbmcgcm91dGUgZmlsdGVyIG1vZGlmaWNhdGlvbiwgY3JlYXRpb24sIGFuZCBkZWxldGlvbiAocm91dGU0X2NoYW5nZSwgcm91dGU0X2RlbGV0ZSwgYW5kIHJvdXRlNF9zZXRfcGFybXMpLiBUaGlzIGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluay90YyBmaWx0ZXIgb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTowMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBsaWZldGltZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nIGlzc3VlcyBpbiBjbHNfcm91dGUgKHRyYWZmaWMgY29udHJvbCByb3V0ZSBjbGFzc2lmaWVyKSB3aGVuIHVwZGF0aW5nIG9yIGRlbGV0aW5nIHJvdXRlIGZpbHRlcnMgYWNyb3NzIGJ1Y2tldHMsIGJ5IGludHJvZHVjaW5nIGEgYGZpbHRlcnNfcmVmYCByZWZjb3VudCAoYHJlZmNvdW50X3RgKSB0byBgc3RydWN0IHJvdXRlNF9idWNrZXRgLlxuXG5BbmFseXNpcyBvZiBtZW1vcnkgc2FuaXRpemF0aW9uIHJlcXVpcmVtZW50czpcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBLTVNBTjogQWxsIGFsbG9jYXRpb25zIChgc3RydWN0IHJvdXRlNF9idWNrZXRgIGFuZCBgc3RydWN0IHJvdXRlNF9maWx0ZXJgKSBjb250aW51ZSB0byB1c2UgYGt6YWxsb2Nfb2JqYCBlbnN1cmluZyBhbGwgbWVtb3J5IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbi4gVGhlIG5ldyBgZmlsdGVyc19yZWZgIGZpZWxkIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgcmVmY291bnRfc2V0YCBhbmQgbWFuYWdlZCB2aWEgYHJlZmNvdW50X2luY2AgLyBgcmVmY291bnRfZGVjX2FuZF90ZXN0YC4gTm8gc3RydWN0IGZpZWxkcywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UgdmlhIE5ldGxpbmsgKGFsbCBkdW1wZWQgYXR0cmlidXRlcyBhcmUgdmFsaWRhdGVkIGFuZCBwb3B1bGF0ZWQgZnJvbSBpbml0aWFsaXplZCBzY2FsYXIgdmFsdWVzKS4gVGhlcmUgaXMgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuLSBVQUYgLyBLQVNBTjogVGhlIGNoYW5nZXMgbW9kaWZ5IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYnVja2V0IGRlYWxsb2NhdGlvbiBsaWZldGltZXMgKGBrZnJlZV9yY3VgKSwgd2hpY2ggZmFsbCB1bmRlciBVc2UtQWZ0ZXItRnJlZSBhbmQgcmVmY291bnQgc2FmZXR5LiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBtb25pdG9yZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCB0aGUga2VybmVsJiMzOTtzIGJ1aWx0LWluIHJlZmNvdW50IGNoZWNraW5nIChgcmVmY291bnRfdGApLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDA0YjQ3MGE4YWIyOGY2ZmUzN2Q1YTRlNTdhOTA1NmJjMDhjOGU4ZTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDAwOjU5OjMzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jCmluZGV4IDBkMTMyNGM5MDU4MzcuLjBmMjExZjAzMGZkOWEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfcm91dGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmMKQEAgLTExLDYgJiM0MzsxMSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZXJybm8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmVmY291bnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9za2J1ZmYuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZHN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L3JvdXRlLmgmZ3Q7CkBAIC00MSw2ICYjNDM7NDIsNyBAQCBzdHJ1Y3Qgcm91dGU0X2hlYWQgewogc3RydWN0IHJvdXRlNF9idWNrZXQgewogCS8qIDE2IEZST00gYnVja2V0cyAmIzQzOyAxNiBJSUYgYnVja2V0cyAmIzQzOyAxIHdpbGRjYXJkIGJ1Y2tldCAqLwogCXN0cnVjdCByb3V0ZTRfZmlsdGVyIF9fcmN1CSpodFsxNiAmIzQzOyAxNiAmIzQzOyAxXTsKJiM0MzsJcmVmY291bnRfdAkJCWZpbHRlcnNfcmVmOwogCXN0cnVjdCByY3VfaGVhZAkJCXJjdTsKIH07CiAKQEAgLTMzNiw3ICYjNDM7MzM4LDcgQEAgc3RhdGljIGludCByb3V0ZTRfZGVsZXRlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICphcmcsIGJvb2wgKmxhc3QsCiAJc3RydWN0IHJvdXRlNF9maWx0ZXIgKm5mOwogCXN0cnVjdCByb3V0ZTRfYnVja2V0ICpiOwogCXVuc2lnbmVkIGludCBoID0gMDsKLQlpbnQgaSwgaDE7CiYjNDM7CWludCBoMTsKIAogCWlmICghaGVhZCB8fCAhZikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNjIsMjMgJiM0MzszNjQsMTQgQEAgc3RhdGljIGludCByb3V0ZTRfZGVsZXRlKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICphcmcsIGJvb2wgKmxhc3QsCiAJCQl0Y2ZfZXh0c19nZXRfbmV0KCZhbXA7Zi0mZ3Q7ZXh0cyk7CiAJCQl0Y2ZfcXVldWVfd29yaygmYW1wO2YtJmd0O3J3b3JrLCByb3V0ZTRfZGVsZXRlX2ZpbHRlcl93b3JrKTsKIAotCQkJLyogU3RyaXAgUlROTCBwcm90ZWN0ZWQgdHJlZSAqLwotCQkJZm9yIChpID0gMDsgaSAmbHQ7PSAzMjsgaSYjNDM7JiM0MzspIHsKLQkJCQlzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqcnQ7Ci0KLQkJCQlydCA9IHJ0bmxfZGVyZWZlcmVuY2UoYi0mZ3Q7aHRbaV0pOwotCQkJCWlmIChydCkKLQkJCQkJZ290byBvdXQ7CiYjNDM7CQkJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKSkgewomIzQzOwkJCQlSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtJmd0O3RhYmxlW3RvX2hhc2goaCldLCBOVUxMKTsKJiM0MzsJCQkJa2ZyZWVfcmN1KGIsIHJjdSk7CiAJCQl9Ci0KLQkJCS8qIE9LLCBzZXNzaW9uIGhhcyBubyBmbG93cyAqLwotCQkJUkNVX0lOSVRfUE9JTlRFUihoZWFkLSZndDt0YWJsZVt0b19oYXNoKGgpXSwgTlVMTCk7Ci0JCQlrZnJlZV9yY3UoYiwgcmN1KTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCi1vdXQ6CiAJKmxhc3QgPSB0cnVlOwogCWZvciAoaDEgPSAwOyBoMSAmbHQ7PSAyNTY7IGgxJiM0MzsmIzQzOykgewogCQlpZiAocmN1X2FjY2Vzc19wb2ludGVyKGhlYWQtJmd0O3RhYmxlW2gxXSkpIHsKQEAgLTQwMCw4ICYjNDM7MzkzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJvdXRlNF9wb2xpY3lbVENBX1JPVVRFNF9NQVggJiM0MzsgMV0gPSB7CiBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGJhc2UsIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmLAogCQkJICAgIHUzMiBoYW5kbGUsIHN0cnVjdCByb3V0ZTRfaGVhZCAqaGVhZCwKLQkJCSAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBubGF0dHIgKmVzdCwgaW50IG5ldywKLQkJCSAgICB1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0MzsJCQkgICAgc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgbmxhdHRyICplc3QsCiYjNDM7CQkJICAgIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmb2xkLCB1MzIgZmxhZ3MsCiYjNDM7CQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAl1MzIgaWQgPSAwLCB0byA9IDAsIG5oYW5kbGUgPSAweDgwMDA7CiAJc3RydWN0IHJvdXRlNF9maWx0ZXIgKmZwOwpAQCAtNDE0LDcgJiM0Mzs0MDgsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwKIAkJcmV0dXJuIGVycjsKIAogCWlmICh0YltUQ0FfUk9VVEU0X1RPXSkgewotCQlpZiAobmV3ICZhbXA7JmFtcDsgaGFuZGxlICZhbXA7IDB4ODAwMCkgewomIzQzOwkJaWYgKCFmb2xkICZhbXA7JmFtcDsgaGFuZGxlICZhbXA7IDB4ODAwMCkgewogCQkJTkxfU0VUX0VSUl9NU0coZXh0YWNrLCAmIzM0O0ludmFsaWQgaGFuZGxlJiMzNDspOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTQzNywxNCAmIzQzOzQzMSwxNCBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwKIAl9IGVsc2UKIAkJbmhhbmRsZSB8PSAweEZGRkYgJmx0OyZsdDsgMTY7CiAKLQlpZiAoaGFuZGxlICZhbXA7JmFtcDsgbmV3KSB7CiYjNDM7CWlmIChoYW5kbGUgJmFtcDsmYW1wOyAoIWZvbGQgfHwgbmhhbmRsZSA9PSAoaGFuZGxlICZhbXA7IH4weDdGMDApKSkKIAkJbmhhbmRsZSB8PSBoYW5kbGUgJmFtcDsgMHg3RjAwOwotCQlpZiAobmhhbmRsZSAhPSBoYW5kbGUpIHsKLQkJCU5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssCi0JCQkJCSAgICYjMzQ7SGFuZGxlIG1pc21hdGNoIGNvbnN0cnVjdGVkOiAleCAoZXhwZWN0ZWQ6ICV4KSYjMzQ7LAotCQkJCQkgICBoYW5kbGUsIG5oYW5kbGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KJiM0MzsKJiM0MzsJaWYgKGhhbmRsZSAmYW1wOyZhbXA7ICFmb2xkICZhbXA7JmFtcDsgbmhhbmRsZSAhPSBoYW5kbGUpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7SGFuZGxlIG1pc21hdGNoIGNvbnN0cnVjdGVkOiAleCAoZXhwZWN0ZWQ6ICV4KSYjMzQ7LAomIzQzOwkJCQkgICBoYW5kbGUsIG5oYW5kbGUpOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKCFuaGFuZGxlKSB7CkBAIC00NTksNiAmIzQzOzQ1Myw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLAogCQlpZiAoYiA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9CVUZTOwogCiYjNDM7CQlyZWZjb3VudF9zZXQoJmFtcDtiLSZndDtmaWx0ZXJzX3JlZiwgMSk7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihoZWFkLSZndDt0YWJsZVtoMV0sIGIpOwogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGludCBoMiA9IGZyb21faGFzaChuaGFuZGxlICZndDsmZ3Q7IDE2KTsKQEAgLTQ2Niw4ICYjNDM7NDYxLDE0IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLAogCQlmb3IgKGZwID0gcnRubF9kZXJlZmVyZW5jZShiLSZndDtodFtoMl0pOwogCQkgICAgIGZwOwogCQkgICAgIGZwID0gcnRubF9kZXJlZmVyZW5jZShmcC0mZ3Q7bmV4dCkpCi0JCQlpZiAoZnAtJmd0O2hhbmRsZSA9PSBmLSZndDtoYW5kbGUpCiYjNDM7CQkJaWYgKGZwICE9IGZvbGQgJmFtcDsmYW1wOyBmcC0mZ3Q7aGFuZGxlID09IG5oYW5kbGUpIHsKJiM0MzsJCQkJTkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjaywKJiM0MzsJCQkJCQkgICAmIzM0O0hhbmRsZSAleCBpcyBhbHJlYWR5IGluIHVzZSYjMzQ7LAomIzQzOwkJCQkJCSAgIG5oYW5kbGUpOwogCQkJCXJldHVybiAtRUVYSVNUOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCXJlZmNvdW50X2luYygmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKTsKIAl9CiAKIAlpZiAodGJbVENBX1JPVVRFNF9UT10pCkBAIC01MDAsOSAmIzQzOzUwMSw4IEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAJc3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsICpmMSwgKnBmcCwgKmYgPSBOVUxMOwogCXN0cnVjdCByb3V0ZTRfYnVja2V0ICpiOwogCXN0cnVjdCBubGF0dHIgKnRiW1RDQV9ST1VURTRfTUFYICYjNDM7IDFdOwotCXVuc2lnbmVkIGludCBoLCB0aDsKJiM0MzsJdW5zaWduZWQgaW50IGg7CiAJaW50IGVycjsKLQlib29sIG5ldyA9IHRydWU7CiAKIAlpZiAoIWhhbmRsZSkgewogCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7Q3JlYXRpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkJiMzNDspOwpAQCAtNTM5LDExICYjNDM7NTM5LDEwIEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsCiAKIAkJZi0mZ3Q7dHAgPSBmb2xkLSZndDt0cDsKIAkJZi0mZ3Q7Ymt0ID0gZm9sZC0mZ3Q7Ymt0OwotCQluZXcgPSBmYWxzZTsKIAl9CiAKIAllcnIgPSByb3V0ZTRfc2V0X3Bhcm1zKG5ldCwgdHAsIGJhc2UsIGYsIGhhbmRsZSwgaGVhZCwgdGIsCi0JCQkgICAgICAgdGNhW1RDQV9SQVRFXSwgbmV3LCBmbGFncywgZXh0YWNrKTsKJiM0MzsJCQkgICAgICAgdGNhW1RDQV9SQVRFXSwgZm9sZCwgZmxhZ3MsIGV4dGFjayk7CiAJaWYgKGVyciAmbHQ7IDApCiAJCWdvdG8gZXJyb3V0OwogCkBAIC01NjAsMTcgJiM0Mzs1NTksMjAgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKIAlyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmKTsKIAogCWlmIChmb2xkKSB7Ci0JCXRoID0gdG9faGFzaChmb2xkLSZndDtoYW5kbGUpOwomIzQzOwkJYiA9IGZvbGQtJmd0O2JrdDsKIAkJaCA9IGZyb21faGFzaChmb2xkLSZndDtoYW5kbGUgJmd0OyZndDsgMTYpOwotCQliID0gcnRubF9kZXJlZmVyZW5jZShoZWFkLSZndDt0YWJsZVt0aF0pOwotCQlpZiAoYikgewotCQkJZnAgPSAmYW1wO2ItJmd0O2h0W2hdOwotCQkJZm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDsKLQkJCSAgICAgZnAgPSAmYW1wO3BmcC0mZ3Q7bmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7Ci0JCQkJaWYgKHBmcCA9PSBmb2xkKSB7Ci0JCQkJCXJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGZvbGQtJmd0O25leHQpOwotCQkJCQlicmVhazsKJiM0MzsJCWZwID0gJmFtcDtiLSZndDtodFtoXTsKJiM0MzsJCWZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7CiYjNDM7CQkgICAgIGZwID0gJmFtcDtwZnAtJmd0O25leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkgewomIzQzOwkJCWlmIChwZnAgPT0gZm9sZCkgewomIzQzOwkJCQlyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmb2xkLSZndDtuZXh0KTsKJiM0MzsJCQkJaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKSkgewomIzQzOwkJCQkJdW5zaWduZWQgaW50IHRoID0gdG9faGFzaChmb2xkLSZndDtoYW5kbGUpOwomIzQzOwomIzQzOwkJCQkJUkNVX0lOSVRfUE9JTlRFUihoZWFkLSZndDt0YWJsZVt0aF0sIE5VTEwpOwomIzQzOwkJCQkJa2ZyZWVfcmN1KGIsIHJjdSk7CiAJCQkJfQomIzQzOwkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvZmlsdGVycy9yb3V0ZS5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb24KaW5kZXggMDVjZWRjYTY3Y2NhZC4uMmQ1ODQzYWViZDcyOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb24KJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb24KQEAgLTIwMiw1ICYjNDM7MjAyLDIxNSBAQAogICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKICAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgcGFyZW50IHJvb3QgZHJyJiMzNDsKICAgICAgICAgXQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7YTdkMiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7RGVsZXRlIGEgcm91dGUgZmlsdGVyIHRoYXQgd2FzIG1vdmVkIHRvIGFub3RoZXIgYnVja2V0JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O2ZpbHRlciYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7cm91dGUmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjEmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgY2hhbmdlIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAwMDEgcm91dGUgZnJvbSAxIHRvIDIgY2xhc3NpZCAxOjEmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAyMDAgcm91dGUgZnJvbSA1IHRvIDUgY2xhc3NpZCAxOjUmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7Y21kVW5kZXJUZXN0JiMzNDs6ICYjMzQ7JFRDIGZpbHRlciBkZWwgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDAwMiByb3V0ZSBmcm9tIDEgdG8gMiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIC1qIGZpbHRlciBzaG93IGRldiAkREVWMSBwYXJlbnQgZmZmZjomIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hKU09OJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICB7CiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJvdG9jb2wmIzM0OzogJiMzNDtpcCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3ByZWYmIzM0OzogMjAwLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O2tpbmQmIzM0OzogJiMzNDtyb3V0ZSYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O2NoYWluJiMzNDs6IDAKJiM0MzsgICAgICAgICAgICB9LAomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAyMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtvcHRpb25zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7ZmgmIzM0OzogJiMzNDsweDUwMDA1JiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2Zsb3dpZCYjMzQ7OiAmIzM0OzE6NSYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICB9CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzJiMzNDsKJiM0MzsgICAgICAgIF0KJiM0MzsgICAgfSwKJiM0MzsgICAgewomIzQzOyAgICAgICAgJiMzNDtpZCYjMzQ7OiAmIzM0O2MwNWEmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bmFtZSYjMzQ7OiAmIzM0O1RyeSB0byBjaGFuZ2UgYSByb3V0ZSBmaWx0ZXIgb250byBhbiBhbHJlYWR5IHVzZWQgaGFuZGxlJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2NhdGVnb3J5JiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0O2ZpbHRlciYjMzQ7LAomIzQzOyAgICAgICAgICAgICYjMzQ7cm91dGUmIzM0OwomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7cGx1Z2lucyYjMzQ7OiB7CiYjNDM7ICAgICAgICAgICAgJiMzNDtyZXF1aXJlcyYjMzQ7OiAmIzM0O25zUGx1Z2luJiMzNDsKJiM0MzsgICAgICAgIH0sCiYjNDM7ICAgICAgICAmIzM0O3NldHVwJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjEgYWN0aW9uIG9rJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIHJvdXRlIGZyb20gMiB0byAyIGNsYXNzaWQgMToyIGFjdGlvbiBkcm9wJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBmaWx0ZXIgY2hhbmdlIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAwMDEgcm91dGUgZnJvbSAyIHRvIDIgY2xhc3NpZCAxOjEgYWN0aW9uIG9rJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgLWogZmlsdGVyIHNob3cgZGV2ICRERVYxIHBhcmVudCBmZmZmOiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaEpTT04mIzM0OzogWwomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAxMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMAomIzQzOyAgICAgICAgICAgIH0sCiYjNDM7ICAgICAgICAgICAgewomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3Byb3RvY29sJiMzNDs6ICYjMzQ7aXAmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcmVmJiMzNDs6IDEwMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtraW5kJiMzNDs6ICYjMzQ7cm91dGUmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtjaGFpbiYjMzQ7OiAwLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O29wdGlvbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzNDtmaCYjMzQ7OiAmIzM0OzB4MTAwMDEmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7Zmxvd2lkJiMzNDs6ICYjMzQ7MToxJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2FjdGlvbnMmIzM0OzogWwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDtvcmRlciYjMzQ7OiAxLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O2tpbmQmIzM0OzogJiMzNDtnYWN0JiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7Y29udHJvbF9hY3Rpb24mIzM0OzogewomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDt0eXBlJiMzNDs6ICYjMzQ7cGFzcyYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB9CiYjNDM7ICAgICAgICAgICAgICAgICAgICBdCiYjNDM7ICAgICAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICB9LAomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAxMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtvcHRpb25zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7ZmgmIzM0OzogJiMzNDsweDIwMDAyJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2Zsb3dpZCYjMzQ7OiAmIzM0OzE6MiYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzNDthY3Rpb25zJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICB7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7b3JkZXImIzM0OzogMSwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiMzNDtraW5kJiMzNDs6ICYjMzQ7Z2FjdCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzM0O2NvbnRyb2xfYWN0aW9uJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYjMzQ7dHlwZSYjMzQ7OiAmIzM0O2Ryb3AmIzM0OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgfQomIzQzOyAgICAgICAgICAgICAgICAgICAgXQomIzQzOyAgICAgICAgICAgICAgICB9CiYjNDM7ICAgICAgICAgICAgfQomIzQzOyAgICAgICAgXSwKJiM0MzsgICAgICAgICYjMzQ7dGVhcmRvd24mIzM0OzogWwomIzQzOyAgICAgICAgICAgICYjMzQ7JFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzcyYjMzQ7CiYjNDM7ICAgICAgICBdCiYjNDM7ICAgIH0sCiYjNDM7ICAgIHsKJiM0MzsgICAgICAgICYjMzQ7aWQmIzM0OzogJiMzNDszZjIxJiMzNDssCiYjNDM7ICAgICAgICAmIzM0O25hbWUmIzM0OzogJiMzNDtSZXBsYWNlIGEgcm91dGUgZmlsdGVyIHRoYXQgc2hhcmVzIGl0cyBrZXkgd2l0aCBhbm90aGVyIGZpbHRlciYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtmaWx0ZXImIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O3JvdXRlJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMjAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToyJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O2NtZFVuZGVyVGVzdCYjMzQ7OiAmIzM0OyRUQyBmaWx0ZXIgcmVwbGFjZSBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMTo5JiMzNDssCiYjNDM7ICAgICAgICAmIzM0O2V4cEV4aXRDb2RlJiMzNDs6ICYjMzQ7MCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDt2ZXJpZnlDbWQmIzM0OzogJiMzNDskVEMgLWogZmlsdGVyIHNob3cgZGV2ICRERVYxIHBhcmVudCBmZmZmOiYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDttYXRjaEpTT04mIzM0OzogWwomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAxMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMAomIzQzOyAgICAgICAgICAgIH0sCiYjNDM7ICAgICAgICAgICAgewomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3Byb3RvY29sJiMzNDs6ICYjMzQ7aXAmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcmVmJiMzNDs6IDEwMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtraW5kJiMzNDs6ICYjMzQ7cm91dGUmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtjaGFpbiYjMzQ7OiAwLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O29wdGlvbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzNDtmaCYjMzQ7OiAmIzM0OzB4MTAxMDEmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7Zmxvd2lkJiMzNDs6ICYjMzQ7MTo5JiMzNDsKJiM0MzsgICAgICAgICAgICAgICAgfQomIzQzOyAgICAgICAgICAgIH0sCiYjNDM7ICAgICAgICAgICAgewomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3Byb3RvY29sJiMzNDs6ICYjMzQ7aXAmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcmVmJiMzNDs6IDEwMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtraW5kJiMzNDs6ICYjMzQ7cm91dGUmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtjaGFpbiYjMzQ7OiAwLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O29wdGlvbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICAgICAgICAgJiMzNDtmaCYjMzQ7OiAmIzM0OzB4MTAyMDEmIzM0OywKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7Zmxvd2lkJiMzNDs6ICYjMzQ7MToyJiMzNDsKJiM0MzsgICAgICAgICAgICAgICAgfQomIzQzOyAgICAgICAgICAgIH0KJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3RlYXJkb3duJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICAmIzM0OyRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3MmIzM0OwomIzQzOyAgICAgICAgXQomIzQzOyAgICB9LAomIzQzOyAgICB7CiYjNDM7ICAgICAgICAmIzM0O2lkJiMzNDs6ICYjMzQ7OWQwZSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtuYW1lJiMzNDs6ICYjMzQ7UmVwbGFjZSBib3RoIHJvdXRlIGZpbHRlcnMgc2hhcmluZyBhIGtleSYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtjYXRlZ29yeSYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDtmaWx0ZXImIzM0OywKJiM0MzsgICAgICAgICAgICAmIzM0O3JvdXRlJiMzNDsKJiM0MzsgICAgICAgIF0sCiYjNDM7ICAgICAgICAmIzM0O3BsdWdpbnMmIzM0OzogewomIzQzOyAgICAgICAgICAgICYjMzQ7cmVxdWlyZXMmIzM0OzogJiMzNDtuc1BsdWdpbiYjMzQ7CiYjNDM7ICAgICAgICB9LAomIzQzOyAgICAgICAgJiMzNDtzZXR1cCYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMjAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToyJiMzNDssCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OSYjMzQ7CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDtjbWRVbmRlclRlc3QmIzM0OzogJiMzNDskVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDIwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OCYjMzQ7LAomIzQzOyAgICAgICAgJiMzNDtleHBFeGl0Q29kZSYjMzQ7OiAmIzM0OzAmIzM0OywKJiM0MzsgICAgICAgICYjMzQ7dmVyaWZ5Q21kJiMzNDs6ICYjMzQ7JFRDIC1qIGZpbHRlciBzaG93IGRldiAkREVWMSBwYXJlbnQgZmZmZjomIzM0OywKJiM0MzsgICAgICAgICYjMzQ7bWF0Y2hKU09OJiMzNDs6IFsKJiM0MzsgICAgICAgICAgICB7CiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJvdG9jb2wmIzM0OzogJiMzNDtpcCYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O3ByZWYmIzM0OzogMTAwLAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O2tpbmQmIzM0OzogJiMzNDtyb3V0ZSYjMzQ7LAomIzQzOyAgICAgICAgICAgICAgICAmIzM0O2NoYWluJiMzNDs6IDAKJiM0MzsgICAgICAgICAgICB9LAomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAxMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtvcHRpb25zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7ZmgmIzM0OzogJiMzNDsweDEwMTAxJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2Zsb3dpZCYjMzQ7OiAmIzM0OzE6OSYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICB9LAomIzQzOyAgICAgICAgICAgIHsKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtwcm90b2NvbCYjMzQ7OiAmIzM0O2lwJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7cHJlZiYjMzQ7OiAxMDAsCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7a2luZCYjMzQ7OiAmIzM0O3JvdXRlJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICYjMzQ7Y2hhaW4mIzM0OzogMCwKJiM0MzsgICAgICAgICAgICAgICAgJiMzNDtvcHRpb25zJiMzNDs6IHsKJiM0MzsgICAgICAgICAgICAgICAgICAgICYjMzQ7ZmgmIzM0OzogJiMzNDsweDEwMjAxJiMzNDssCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O2Zsb3dpZCYjMzQ7OiAmIzM0OzE6OCYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgIH0KJiM0MzsgICAgICAgICAgICB9CiYjNDM7ICAgICAgICBdLAomIzQzOyAgICAgICAgJiMzNDt0ZWFyZG93biYjMzQ7OiBbCiYjNDM7ICAgICAgICAgICAgJiMzNDskVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzJiMzNDsKJiM0MzsgICAgICAgIF0KICAgICB9CiBdCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjQyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm92aWRlZCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoIGlzIHRoYXQgaXQmIzM5O3MgZm9jdXNlZCBvbiB0aGUgYGNsc19yb3V0ZWAgY2xhc3NpZmllciwgZ2l2ZW4gdGhlIGZpbGUgbW9kaWZpY2F0aW9uIGluIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgLiBUaGUgZmFjdCB0aGF0IHRoZXJlIGFyZSBhbHNvIG5ldyB0ZXN0IGNhc2VzIGFkZGVkIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb25gIHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGFpbWVkIGF0IGltcHJvdmluZyBvciBleHBhbmRpbmcgdGhlIHRlc3RpbmcgY292ZXJhZ2UgZm9yIHRoaXMgY2xhc3NpZmllci4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBnZXQgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSBtb2RpZmljYXRpb25zIGluIGBjbHNfcm91dGUuY2AuIEkgd2lsbCBsaWtlbHkgZWl0aGVyIHJlYWQgdGhlIGVudGlyZSBmaWxlIG9yIHVzZSB0b29scyBsaWtlIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byBpc29sYXRlIHRoZSBzcGVjaWZpYyBjaGFuZ2VzIGFuZCB0aGVpciBzdXJyb3VuZGluZyBjb250ZXh0LiBGcm9tIHRoZXJlIEkmIzM5O2xsIHNjcnV0aW5pemUgdGhlIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfcm91dGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHR9O1xuICA0MTpcdFxuICA0MjpcdHN0cnVjdCByb3V0ZTRfYnVja2V0IHtcbiAgNDM6XHRcdC8qIDE2IEZST00gYnVja2V0cyAmIzQzOyAxNiBJSUYgYnVja2V0cyAmIzQzOyAxIHdpbGRjYXJkIGJ1Y2tldCAqL1xuICA0NDpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3VcdCpodFsxNiAmIzQzOyAxNiAmIzQzOyAxXTtcbiAgNDU6XHRcdHJlZmNvdW50X3RcdFx0XHRmaWx0ZXJzX3JlZjtcbiAgNDY6XHRcdHN0cnVjdCByY3VfaGVhZFx0XHRcdHJjdTtcbiAgNDc6XHR9O1xuICA0ODpcdFxuICA0OTpcdHN0cnVjdCByb3V0ZTRfZmlsdGVyIHtcbiAgNTA6XHRcdHN0cnVjdCByb3V0ZTRfZmlsdGVyIF9fcmN1XHQqbmV4dDtcbiAgNTE6XHRcdHUzMlx0XHRcdGlkO1xuICA1MjpcdFx0aW50XHRcdFx0aWlmO1xuICA1MzpcdFxuICA1NDpcdFx0c3RydWN0IHRjZl9yZXN1bHRcdHJlcztcbiAgNTU6XHRcdHN0cnVjdCB0Y2ZfZXh0c1x0XHRleHRzO1xuICA1NjpcdFx0dTMyXHRcdFx0aGFuZGxlO1xuICA1NzpcdFx0Ym9vbFx0XHRcdGR5aW5nO1xuICA1ODpcdFx0c3RydWN0IHJvdXRlNF9idWNrZXRcdCpia3Q7XG4gIDU5Olx0XHRzdHJ1Y3QgdGNmX3Byb3RvXHQqdHA7XG4gIDYwOlx0XHRzdHJ1Y3QgcmN1X3dvcmtcdFx0cndvcms7XG4gIDYxOlx0fTtcbiAgNjI6XHRcbiAgNjM6XHQjZGVmaW5lIFJPVVRFNF9GQUlMVVJFICgoc3RydWN0IHJvdXRlNF9maWx0ZXIgKikoLTFMKSlcbiAgNjQ6XHRcbiAgNjU6XHRzdGF0aWMgaW5saW5lIGludCByb3V0ZTRfZmFzdG1hcF9oYXNoKHUzMiBpZCwgaW50IGlpZilcbiAgNjY6XHR7XG4gIDY3Olx0XHRyZXR1cm4gaWQgXHUwMDI2IDB4RjtcbiAgNjg6XHR9XG4gIDY5Olx0XG4gIDcwOlx0c3RhdGljIERFRklORV9TUElOTE9DSyhmYXN0bWFwX2xvY2spO1xuICA3MTpcdHN0YXRpYyB2b2lkXG4gIDcyOlx0cm91dGU0X3Jlc2V0X2Zhc3RtYXAoc3RydWN0IHJvdXRlNF9oZWFkICpoZWFkLCBzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZilcbiAgNzM6XHR7XG4gIDc0Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2ZmFzdG1hcF9sb2NrKTtcbiAgNzU6XHRcdGlmIChmKVxuICA3NjpcdFx0XHRmLVx1MDAzZWR5aW5nID0gdHJ1ZTtcbiAgNzc6XHRcdG1lbXNldChoZWFkLVx1MDAzZWZhc3RtYXAsIDAsIHNpemVvZihoZWFkLVx1MDAzZWZhc3RtYXApKTtcbiAgNzg6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmZhc3RtYXBfbG9jayk7XG4gIDc5Olx0fVxuICA4MDpcdFxuICA4MTpcdHN0YXRpYyB2b2lkXG4gIDgyOlx0cm91dGU0X3NldF9mYXN0bWFwKHN0cnVjdCByb3V0ZTRfaGVhZCAqaGVhZCwgdTMyIGlkLCBpbnQgaWlmLFxuICA4MzpcdFx0XHQgICBzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZilcbiAgODQ6XHR7XG4gIDg1Olx0XHRpbnQgaCA9IHJvdXRlNF9mYXN0bWFwX2hhc2goaWQsIGlpZik7XG4gIDg2Olx0XG4gIDg3Olx0XHQvKiBmYXN0bWFwIHVwZGF0ZXMgbXVzdCBsb29rIGF0b21pYyB0byBhbGluZyBpZCwgaWZmLCBmaWx0ZXIgKi9cbiAgODg6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZmYXN0bWFwX2xvY2spO1xuICA4OTpcdFx0aWYgKGYgPT0gUk9VVEU0X0ZBSUxVUkUgfHwgIWYtXHUwMDNlZHlpbmcpIHtcbiAgOTA6XHRcdFx0aGVhZC1cdTAwM2VmYXN0bWFwW2hdLmlkID0gaWQ7XG4gIDkxOlx0XHRcdGhlYWQtXHUwMDNlZmFzdG1hcFtoXS5paWYgPSBpaWY7XG4gIDkyOlx0XHRcdGhlYWQtXHUwMDNlZmFzdG1hcFtoXS5maWx0ZXIgPSBmO1xuICA5MzpcdFx0fVxuICA5NDpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2ZmFzdG1hcF9sb2NrKTtcbiAgOTU6XHR9XG4gIDk2Olx0XG4gIDk3Olx0c3RhdGljIGlubGluZSBpbnQgcm91dGU0X2hhc2hfdG8odTMyIGlkKVxuICA5ODpcdHtcbiAgOTk6XHRcdHJldHVybiBpZCBcdTAwMjYgMHhGRjtcbiAxMDA6XHR9XG4gMTAxOlx0XG4gMTAyOlx0c3RhdGljIGlubGluZSBpbnQgcm91dGU0X2hhc2hfZnJvbSh1MzIgaWQpXG4gMTAzOlx0e1xuIDEwNDpcdFx0cmV0dXJuIChpZCBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweEY7XG4gMTA1Olx0fVxuIDEwNjpcdFxuIDEwNzpcdHN0YXRpYyBpbmxpbmUgaW50IHJvdXRlNF9oYXNoX2lpZihpbnQgaWlmKVxuIDEwODpcdHtcbiAxMDk6XHRcdHJldHVybiAxNiAmIzQzOyAoKGlpZiBcdTAwM2VcdTAwM2UgMTYpIFx1MDAyNiAweEYpO1xuIDExMDpcdH1cbiAxMTE6XHRcbiAxMTI6XHRzdGF0aWMgaW5saW5lIGludCByb3V0ZTRfaGFzaF93aWxkKHZvaWQpXG4gMTEzOlx0e1xuIDExNDpcdFx0cmV0dXJuIDMyO1xuIDExNTpcdH1cbiAxMTY6XHRcbiAxMTc6XHQjZGVmaW5lIFJPVVRFNF9BUFBMWV9SRVNVTFQoKVx0XHRcdFx0XHRcXFxuIDExODpcdHtcdFx0XHRcdFx0XHRcdFx0XFxcbiAxMTk6XHRcdCpyZXMgPSBmLVx1MDAzZXJlcztcdFx0XHRcdFx0XHRcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDI5CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgY2xzX3JvdXRlLmNgIGNvZGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyBhcm91bmQgYHJvdXRlNF9kZWxldGVgLCBgcm91dGU0X3NldF9wYXJtc2AsIGByb3V0ZTRfY2hhbmdlYCwgYW5kIHRoZSBlbnRpcmUgbGFuZHNjYXBlIG9mIGhvdyB0aGVzZSBmaWx0ZXIgYWxsb2NhdGlvbnMgYW5kIGxvb2t1cHMgYXJlIG9yY2hlc3RyYXRlZC4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIHBpY3R1cmUgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyByZWxhdGUgdG8gZWFjaCBvdGhlciwgZXNwZWNpYWxseSB3aGVyZSBmaWx0ZXJzIGNvbWUgaW50byBwbGF5LiBJdCYjMzk7cyBjcnVjaWFsIHRvIGdyYXNwIGhvdyByb3V0ZXMgYXJlIG1hbmlwdWxhdGVkLCBjcmVhdGVkLCBhbmQgZGVsZXRlZCwgYW5kIHRoZSBpbXBhY3QgdGhpcyBoYXMgb24gZmlsdGVyIG1hbmFnZW1lbnQuIFVuZGVyc3RhbmRpbmcgdGhlIGZsb3cgZnJvbSBkZWxldGlvbiB0byBwYXJhbWV0ZXIgc2V0dGluZyBhbmQgY2hhbmdlcyBpcyB2aXRhbCB0byBtYWludGFpbmluZyBvdmVyYWxsIHN5c3RlbSBpbnRlZ3JpdHkuIExldCYjMzk7cyBzZWUgaG93IHRoZXNlIGFjdGlvbnMgYXJlIHJlZmxlY3RlZCBpbiB0aGUgZmlsdGVyIGxvb2t1cHMgYW5kIGFsbG9jYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfcm91dGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMzMDpcdH1cbiAzMzE6XHRcbiAzMzI6XHRzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCxcbiAzMzM6XHRcdFx0XHQgYm9vbCBydG5sX2hlbGQsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAzMzQ6XHR7XG4gMzM1Olx0XHRzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQgPSBydG5sX2RlcmVmZXJlbmNlKHRwLVx1MDAzZXJvb3QpO1xuIDMzNjpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmYgPSBhcmc7XG4gMzM3Olx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciBfX3JjdSAqKmZwO1xuIDMzODpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKm5mO1xuIDMzOTpcdFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gMzQwOlx0XHR1bnNpZ25lZCBpbnQgaCA9IDA7XG4gMzQxOlx0XHRpbnQgaDE7XG4gMzQyOlx0XG4gMzQzOlx0XHRpZiAoIWhlYWQgfHwgIWYpXG4gMzQ0Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDM0NTpcdFxuIDM0NjpcdFx0aCA9IGYtXHUwMDNlaGFuZGxlO1xuIDM0NzpcdFx0YiA9IGYtXHUwMDNlYmt0O1xuIDM0ODpcdFxuIDM0OTpcdFx0ZnAgPSBcdTAwMjZiLVx1MDAzZWh0W2Zyb21faGFzaChoIFx1MDAzZVx1MDAzZSAxNildO1xuIDM1MDpcdFx0Zm9yIChuZiA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgbmY7XG4gMzUxOlx0XHQgICAgIGZwID0gXHUwMDI2bmYtXHUwMDNlbmV4dCwgbmYgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCkpIHtcbiAzNTI6XHRcdFx0aWYgKG5mID09IGYpIHtcbiAzNTM6XHRcdFx0XHQvKiB1bmxpbmsgaXQgKi9cbiAzNTQ6XHRcdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKCpmcCwgcnRubF9kZXJlZmVyZW5jZShmLVx1MDAzZW5leHQpKTtcbiAzNTU6XHRcbiAzNTY6XHRcdFx0XHQvKiBDbGVhciBhbnkgZmFzdG1hcCBlbnRyaWVzIHRoYXQgbWF5IHJlZiB0aGlzIGZpbHRlciBhbmRcbiAzNTc6XHRcdFx0XHQgKiBtYXJrIGl0IGR5aW5nIHNvIGluLWZsaWdodCByZWFkZXJzIGNhbiYjMzk7dCByZXB1Ymxpc2ggaXRcbiAzNTg6XHRcdFx0XHQgKiBhZnRlciB0aGUgcmVzZXQuXG4gMzU5Olx0XHRcdFx0ICovXG4gMzYwOlx0XHRcdFx0cm91dGU0X3Jlc2V0X2Zhc3RtYXAoaGVhZCwgZik7XG4gMzYxOlx0XG4gMzYyOlx0XHRcdFx0LyogRGVsZXRlIGl0ICovXG4gMzYzOlx0XHRcdFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFx1MDAyNmYtXHUwMDNlcmVzKTtcbiAzNjQ6XHRcdFx0XHR0Y2ZfZXh0c19nZXRfbmV0KFx1MDAyNmYtXHUwMDNlZXh0cyk7XG4gMzY1Olx0XHRcdFx0dGNmX3F1ZXVlX3dvcmsoXHUwMDI2Zi1cdTAwM2Vyd29yaywgcm91dGU0X2RlbGV0ZV9maWx0ZXJfd29yayk7XG4gMzY2Olx0XG4gMzY3Olx0XHRcdFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKSkge1xuIDM2ODpcdFx0XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcbiAzNjk6XHRcdFx0XHRcdGtmcmVlX3JjdShiLCByY3UpO1xuIDM3MDpcdFx0XHRcdH1cbiAzNzE6XHRcdFx0XHRicmVhaztcbiAzNzI6XHRcdFx0fVxuIDM3MzpcdFx0fVxuIDM3NDpcdFxuIDM3NTpcdFx0Kmxhc3QgPSB0cnVlO1xuIDM3NjpcdFx0Zm9yIChoMSA9IDA7IGgxIFx1MDAzYz0gMjU2OyBoMSYjNDM7JiM0MzspIHtcbiAzNzc6XHRcdFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihoZWFkLVx1MDAzZXRhYmxlW2gxXSkpIHtcbiAzNzg6XHRcdFx0XHQqbGFzdCA9IGZhbHNlO1xuIDM3OTpcdFx0XHRcdGJyZWFrO1xuIDM4MDpcdFx0XHR9XG4gMzgxOlx0XHR9XG4gMzgyOlx0XG4gMzgzOlx0XHRyZXR1cm4gMDtcbiAzODQ6XHR9XG4gMzg1Olx0XG4gMzg2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJvdXRlNF9wb2xpY3lbVENBX1JPVVRFNF9NQVggJiM0MzsgMV0gPSB7XG4gMzg3Olx0XHRbVENBX1JPVVRFNF9DTEFTU0lEXVx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuIDM4ODpcdFx0W1RDQV9ST1VURTRfVE9dXHRcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMHhGRiksXG4gMzg5Olx0XHRbVENBX1JPVVRFNF9GUk9NXVx0PSBOTEFfUE9MSUNZX01BWChOTEFfVTMyLCAweEZGKSxcbiAzOTA6XHRcdFtUQ0FfUk9VVEU0X0lJRl1cdD0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMHg3RkZGKSxcbiAzOTE6XHR9O1xuIDM5MjpcdFxuIDM5MzpcdHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIDM5NDpcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGJhc2UsIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmLFxuIDM5NTpcdFx0XHRcdCAgICB1MzIgaGFuZGxlLCBzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQsXG4gMzk2Olx0XHRcdFx0ICAgIHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IG5sYXR0ciAqZXN0LFxuIDM5NzpcdFx0XHRcdCAgICBzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZm9sZCwgdTMyIGZsYWdzLFxuIDM5ODpcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gMzk5Olx0e1xuIDQwMDpcdFx0dTMyIGlkID0gMCwgdG8gPSAwLCBuaGFuZGxlID0gMHg4MDAwO1xuIDQwMTpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZwO1xuIDQwMjpcdFx0dW5zaWduZWQgaW50IGgxO1xuIDQwMzpcdFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gNDA0Olx0XHRpbnQgZXJyO1xuIDQwNTpcdFxuIDQwNjpcdFx0ZXJyID0gdGNmX2V4dHNfdmFsaWRhdGUobmV0LCB0cCwgdGIsIGVzdCwgXHUwMDI2Zi1cdTAwM2VleHRzLCBmbGFncywgZXh0YWNrKTtcbiA0MDc6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNDA4Olx0XHRcdHJldHVybiBlcnI7XG4gNDA5Olx0XG4gNDEwOlx0XHRpZiAodGJbVENBX1JPVVRFNF9UT10pIHtcbiA0MTE6XHRcdFx0aWYgKCFmb2xkIFx1MDAyNlx1MDAyNiBoYW5kbGUgXHUwMDI2IDB4ODAwMCkge1xuIDQxMjpcdFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7SW52YWxpZCBoYW5kbGVcJiMzNDspO1xuIDQxMzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDQxNDpcdFx0XHR9XG4gNDE1Olx0XHRcdHRvID0gbmxhX2dldF91MzIodGJbVENBX1JPVVRFNF9UT10pO1xuIDQxNjpcdFx0XHRuaGFuZGxlID0gdG87XG4gNDE3Olx0XHR9XG4gNDE4Olx0XG4gNDE5Olx0XHRpZiAodGJbVENBX1JPVVRFNF9GUk9NXSBcdTAwMjZcdTAwMjYgdGJbVENBX1JPVVRFNF9JSUZdKSB7XG4gNDIwOlx0XHRcdE5MX1NFVF9FUlJfTVNHX0FUVFIoZXh0YWNrLCB0YltUQ0FfUk9VVEU0X0ZST01dLFxuIDQyMTpcdFx0XHRcdFx0ICAgIFwmIzM0OyYjMzk7ZnJvbSYjMzk7IGFuZCAmIzM5O2Zyb21pZiYjMzk7IGFyZSBtdXR1YWxseSBleGNsdXNpdmVcJiMzNDspO1xuIDQyMjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0MjM6XHRcdH1cbiA0MjQ6XHRcbiA0MjU6XHRcdGlmICh0YltUQ0FfUk9VVEU0X0ZST01dKSB7XG4gNDI2Olx0XHRcdGlkID0gbmxhX2dldF91MzIodGJbVENBX1JPVVRFNF9GUk9NXSk7XG4gNDI3Olx0XHRcdG5oYW5kbGUgfD0gaWQgXHUwMDNjXHUwMDNjIDE2O1xuIDQyODpcdFx0fSBlbHNlIGlmICh0YltUQ0FfUk9VVEU0X0lJRl0pIHtcbiA0Mjk6XHRcdFx0aWQgPSBubGFfZ2V0X3UzMih0YltUQ0FfUk9VVEU0X0lJRl0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5OTMxCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGZvY3VzaW5nIG9uIHRoZSBpbXBsaWVkIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIERlZXBlciBpbnRvIFJvdXRpbmcgUGFyYW1ldGVyIE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBmb3IgYHJvdXRlNF9zZXRfcGFybXNgIGFuZCBgcm91dGU0X2NoYW5nZWAuIFRoYXQgcHJldmlvdXMgY29udGV4dCBhYm91dCB0aGUgb3ZlcmFsbCBmbG93IGFuZCB0aGUgaW5pdGlhbCBmdW5jdGlvbiBjYWxsIGlzIHN0aWxsIGZyZXNoIGluIG15IG1pbmQuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2UgdHdvIGZ1bmN0aW9ucyBiZWNhdXNlIHRoZXkmIzM5O3JlIGNyaXRpY2FsIGZvciBhY3R1YWxseSBjb25maWd1cmluZyBhbmQgcG90ZW50aWFsbHkgbW9kaWZ5aW5nIHRoZSByb3V0aW5nIHNldHVwLCByaWdodD8gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHNldCBhbmQgaG93IGNoYW5nZXMgYXJlIGJlaW5nIGltcGxlbWVudGVkLiBTcGVjaWZpY2FsbHksIHdoYXQmIzM5O3MgdGhlIGxvZ2ljIHRoZXJlPyBBcmUgd2UgdGFsa2luZyBhYm91dCBkaXJlY3RseSBtb2RpZnlpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBvciBhcmUgdGhlcmUgbW9yZSBjb21wbGV4IGludGVyYWN0aW9ucyB3aXRoIG90aGVyIG1vZHVsZXMgb3IgcHJvY2Vzc2VzIGludm9sdmVkPyBJJiMzOTttIGFudGljaXBhdGluZyB0aGF0IHRoZXNlIHdpbGwgYmUgdGhlIGNvcmUgZnVuY3Rpb25zIGZvciBlaXRoZXIgaW5pdGlhbCBjb25maWd1cmF0aW9uIG9mIHRoZSByb3V0aW5nIHRhYmxlIG9yIGFkanVzdG1lbnQgb2YgdGhlc2UgcGFyYW1ldGVycyBkdXJpbmcgcnVudGltZS4gRnJvbSBleHBlcmllbmNlIEkga25vdyB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBzZWN0aW9uIHRvIHByZXZlbnQgaW5jb25zaXN0ZW50IGJlaGF2aW9yLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBhdG9taWNpdHkgaXNzdWVzLCBhbmQgZXJyb3IgaGFuZGxpbmcg4oCTIHRob3NlIGFyZSBhbHdheXMga2V5IGFyZWFzIG9mIGNvbmNlcm4gaW4gcm91dGluZyBtYW5hZ2VtZW50LiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgbWFwIG91dCB0aGUgY29udHJvbCBmbG93LCBsb29rIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBhbmQgc2VlIGhvdyB3ZWxsIHRoaXMgaXMgZGVzaWduZWQgZm9yIHNjYWxhYmlsaXR5IGFuZCByb2J1c3RuZXNzLiBMZXQmIzM5O3Mgc2VlIGhvdyB3ZWxsIHRoZSBjb2RlIGhhbmRsZXMgZWRnZSBjYXNlcywgdG9vIC0gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gZGVhbHMgd2l0aCBhbGwgdGhlIGNvcm5lciBjYXNlcyBJIGNhbiB0aGluayBvZiwgaW5jbHVkaW5nIHdoZW4gdGhlIHJlcXVlc3RlZCBjaGFuZ2UgaXMgbm90IGFsbG93ZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3JvdXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0MzA6XHRcdFx0bmhhbmRsZSB8PSAoaWQgfCAweDgwMDApIFx1MDAzY1x1MDAzYyAxNjtcbiA0MzE6XHRcdH0gZWxzZVxuIDQzMjpcdFx0XHRuaGFuZGxlIHw9IDB4RkZGRiBcdTAwM2NcdTAwM2MgMTY7XG4gNDMzOlx0XG4gNDM0Olx0XHRpZiAoaGFuZGxlIFx1MDAyNlx1MDAyNiAoIWZvbGQgfHwgbmhhbmRsZSA9PSAoaGFuZGxlIFx1MDAyNiB+MHg3RjAwKSkpXG4gNDM1Olx0XHRcdG5oYW5kbGUgfD0gaGFuZGxlIFx1MDAyNiAweDdGMDA7XG4gNDM2Olx0XG4gNDM3Olx0XHRpZiAoaGFuZGxlIFx1MDAyNlx1MDAyNiAhZm9sZCBcdTAwMjZcdTAwMjYgbmhhbmRsZSAhPSBoYW5kbGUpIHtcbiA0Mzg6XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcbiA0Mzk6XHRcdFx0XHRcdCAgIFwmIzM0O0hhbmRsZSBtaXNtYXRjaCBjb25zdHJ1Y3RlZDogJXggKGV4cGVjdGVkOiAleClcJiMzNDssXG4gNDQwOlx0XHRcdFx0XHQgICBoYW5kbGUsIG5oYW5kbGUpO1xuIDQ0MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0NDI6XHRcdH1cbiA0NDM6XHRcbiA0NDQ6XHRcdGlmICghbmhhbmRsZSkge1xuIDQ0NTpcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O1JlcGxhY2luZyB3aXRoIGhhbmRsZSBvZiAwIGlzIGludmFsaWRcJiMzNDspO1xuIDQ0NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA0NDc6XHRcdH1cbiA0NDg6XHRcbiA0NDk6XHRcdGgxID0gdG9faGFzaChuaGFuZGxlKTtcbiA0NTA6XHRcdGIgPSBydG5sX2RlcmVmZXJlbmNlKGhlYWQtXHUwMDNldGFibGVbaDFdKTtcbiA0NTE6XHRcdGlmICghYikge1xuIDQ1MjpcdFx0XHRiID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9idWNrZXQsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gNDUzOlx0XHRcdGlmIChiID09IE5VTEwpXG4gNDU0Olx0XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIDQ1NTpcdFxuIDQ1NjpcdFx0XHRyZWZjb3VudF9zZXQoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZiwgMSk7XG4gNDU3Olx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihoZWFkLVx1MDAzZXRhYmxlW2gxXSwgYik7XG4gNDU4Olx0XHR9IGVsc2Uge1xuIDQ1OTpcdFx0XHR1bnNpZ25lZCBpbnQgaDIgPSBmcm9tX2hhc2gobmhhbmRsZSBcdTAwM2VcdTAwM2UgMTYpO1xuIDQ2MDpcdFxuIDQ2MTpcdFx0XHRmb3IgKGZwID0gcnRubF9kZXJlZmVyZW5jZShiLVx1MDAzZWh0W2gyXSk7XG4gNDYyOlx0XHRcdCAgICAgZnA7XG4gNDYzOlx0XHRcdCAgICAgZnAgPSBydG5sX2RlcmVmZXJlbmNlKGZwLVx1MDAzZW5leHQpKVxuIDQ2NDpcdFx0XHRcdGlmIChmcCAhPSBmb2xkIFx1MDAyNlx1MDAyNiBmcC1cdTAwM2VoYW5kbGUgPT0gbmhhbmRsZSkge1xuIDQ2NTpcdFx0XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcbiA0NjY6XHRcdFx0XHRcdFx0XHQgICBcJiMzNDtIYW5kbGUgJXggaXMgYWxyZWFkeSBpbiB1c2VcJiMzNDssXG4gNDY3Olx0XHRcdFx0XHRcdFx0ICAgbmhhbmRsZSk7XG4gNDY4Olx0XHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbiA0Njk6XHRcdFx0XHR9XG4gNDcwOlx0XG4gNDcxOlx0XHRcdHJlZmNvdW50X2luYyhcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKTtcbiA0NzI6XHRcdH1cbiA0NzM6XHRcbiA0NzQ6XHRcdGlmICh0YltUQ0FfUk9VVEU0X1RPXSlcbiA0NzU6XHRcdFx0Zi1cdTAwM2VpZCA9IHRvO1xuIDQ3NjpcdFxuIDQ3NzpcdFx0aWYgKHRiW1RDQV9ST1VURTRfRlJPTV0pXG4gNDc4Olx0XHRcdGYtXHUwMDNlaWQgPSB0byB8IGlkXHUwMDNjXHUwMDNjMTY7XG4gNDc5Olx0XHRlbHNlIGlmICh0YltUQ0FfUk9VVEU0X0lJRl0pXG4gNDgwOlx0XHRcdGYtXHUwMDNlaWlmID0gaWQ7XG4gNDgxOlx0XG4gNDgyOlx0XHRmLVx1MDAzZWhhbmRsZSA9IG5oYW5kbGU7XG4gNDgzOlx0XHRmLVx1MDAzZWJrdCA9IGI7XG4gNDg0Olx0XHRmLVx1MDAzZXRwID0gdHA7XG4gNDg1Olx0XG4gNDg2Olx0XHRpZiAodGJbVENBX1JPVVRFNF9DTEFTU0lEXSkge1xuIDQ4NzpcdFx0XHRmLVx1MDAzZXJlcy5jbGFzc2lkID0gbmxhX2dldF91MzIodGJbVENBX1JPVVRFNF9DTEFTU0lEXSk7XG4gNDg4Olx0XHRcdHRjZl9iaW5kX2ZpbHRlcih0cCwgXHUwMDI2Zi1cdTAwM2VyZXMsIGJhc2UpO1xuIDQ4OTpcdFx0fVxuIDQ5MDpcdFxuIDQ5MTpcdFx0cmV0dXJuIDA7XG4gNDkyOlx0fVxuIDQ5MzpcdFxuIDQ5NDpcdHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gNDk1Olx0XHRcdFx0IHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1bnNpZ25lZCBsb25nIGJhc2UsIHUzMiBoYW5kbGUsXG4gNDk2Olx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKip0Y2EsIHZvaWQgKiphcmcsIHUzMiBmbGFncyxcbiA0OTc6XHRcdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDQ5ODpcdHtcbiA0OTk6XHRcdHN0cnVjdCByb3V0ZTRfaGVhZCAqaGVhZCA9IHJ0bmxfZGVyZWZlcmVuY2UodHAtXHUwMDNlcm9vdCk7XG4gNTAwOlx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciBfX3JjdSAqKmZwO1xuIDUwMTpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsICpmMSwgKnBmcCwgKmYgPSBOVUxMO1xuIDUwMjpcdFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gNTAzOlx0XHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfUk9VVEU0X01BWCAmIzQzOyAxXTtcbiA1MDQ6XHRcdHVuc2lnbmVkIGludCBoO1xuIDUwNTpcdFx0aW50IGVycjtcbiA1MDY6XHRcbiA1MDc6XHRcdGlmICghaGFuZGxlKSB7XG4gNTA4Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7Q3JlYXRpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkXCYjMzQ7KTtcbiA1MDk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gNTEwOlx0XHR9XG4gNTExOlx0XG4gNTEyOlx0XHRpZiAoTkxfUkVRX0FUVFJfQ0hFQ0soZXh0YWNrLCBOVUxMLCB0Y2EsIFRDQV9PUFRJT05TKSkge1xuIDUxMzpcdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtNaXNzaW5nIG9wdGlvbnNcJiMzNDspO1xuIDUxNDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA1MTU6XHRcdH1cbiA1MTY6XHRcbiA1MTc6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgVENBX1JPVVRFNF9NQVgsIHRjYVtUQ0FfT1BUSU9OU10sXG4gNTE4Olx0XHRcdFx0XHRcdCAgcm91dGU0X3BvbGljeSwgTlVMTCk7XG4gNTE5Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDUyMDpcdFx0XHRyZXR1cm4gZXJyO1xuIDUyMTpcdFxuIDUyMjpcdFx0Zm9sZCA9ICphcmc7XG4gNTIzOlx0XHRpZiAoZm9sZCBcdTAwMjZcdTAwMjYgZm9sZC1cdTAwM2VoYW5kbGUgIT0gaGFuZGxlKVxuIDUyNDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDUyNTpcdFxuIDUyNjpcdFx0ZXJyID0gLUVOT0JVRlM7XG4gNTI3Olx0XHRmID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4gNTI4Olx0XHRpZiAoIWYpXG4gNTI5Olx0XHRcdGdvdG8gZXJyb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg2MAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIFJvdXRlNCBGdW5jdGlvbnMqKgoKQWxyaWdodCwgc28gdGhlIG9idmlvdXMgbmV4dCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgcmVzdCBvZiB0aGUgY29kZSByZWxhdGVkIHRvIHRob3NlIGByb3V0ZTRgIGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5IGByb3V0ZTRfY2hhbmdlYCBhbmQgYHJvdXRlNF9kdW1wYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCByb3V0aW5nIHN0cnVjdHVyZS4gVGhlIG5hbWluZyBzdWdnZXN0cyB0aGF0IHRoZXkgYXJlIHJlbGF0ZWQgdG8gY2hhbmdlcyB3aXRoaW4gYW5kIGR1bXBpbmcgaW5mb3JtYXRpb24gZnJvbSByb3V0ZTQuIEkmIzM5O2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBzY29wZSBvZiB0aGVpciByZXNwb25zaWJpbGl0eSBpbiByZWxhdGlvbiB0byB0aGUgb3RoZXIgcm91dGVzLCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGUgY29uZmlndXJhdGlvbiBhbmQgcmV0cmlldmFsIG9mIGRhdGEuIEkgd2FudCB0byBsb29rIGZvciBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiwgcGFydGljdWxhcmx5IGFyb3VuZCBjb25jdXJyZW5jeSBvciBzdGF0ZSBtYW5hZ2VtZW50LiBVbmRlcnN0YW5kaW5nIGhvdyBkYXRhIGlzIG1vZGlmaWVkIGFuZCBhY2Nlc3NlZCBpcyBrZXkgaGVyZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIHJhY2UgY29uZGl0aW9ucywgaW5jb25zaXN0ZW5jaWVzLCBvciBhbnkgaXNzdWVzIHJlbGF0ZWQgdG8gZGF0YSBpbnRlZ3JpdHkgd2hlbiBJIHJldmlldyB0aGlzIGNvZGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZGF0YSBpcyBiZWluZyBkdW1wZWQgYnkgJiMzOTtyb3V0ZTRfZHVtcCYjMzk7IGFuZCB3aGV0aGVyIGRhdGEgaXMgYWx0ZXJlZCBieSB0aGUgJiMzOTtyb3V0ZTRfY2hhbmdlJiMzOTsgZnVuY3Rpb24uIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgaG93IHRoZXkgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfcm91dGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTMwOlx0XG4gNTMxOlx0XHRlcnIgPSB0Y2ZfZXh0c19pbml0KFx1MDAyNmYtXHUwMDNlZXh0cywgbmV0LCBUQ0FfUk9VVEU0X0FDVCwgVENBX1JPVVRFNF9QT0xJQ0UpO1xuIDUzMjpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiA1MzM6XHRcdFx0Z290byBlcnJvdXQ7XG4gNTM0Olx0XG4gNTM1Olx0XHRpZiAoZm9sZCkge1xuIDUzNjpcdFx0XHRmLVx1MDAzZWlkID0gZm9sZC1cdTAwM2VpZDtcbiA1Mzc6XHRcdFx0Zi1cdTAwM2VpaWYgPSBmb2xkLVx1MDAzZWlpZjtcbiA1Mzg6XHRcdFx0Zi1cdTAwM2VoYW5kbGUgPSBmb2xkLVx1MDAzZWhhbmRsZTtcbiA1Mzk6XHRcbiA1NDA6XHRcdFx0Zi1cdTAwM2V0cCA9IGZvbGQtXHUwMDNldHA7XG4gNTQxOlx0XHRcdGYtXHUwMDNlYmt0ID0gZm9sZC1cdTAwM2Via3Q7XG4gNTQyOlx0XHR9XG4gNTQzOlx0XG4gNTQ0Olx0XHRlcnIgPSByb3V0ZTRfc2V0X3Bhcm1zKG5ldCwgdHAsIGJhc2UsIGYsIGhhbmRsZSwgaGVhZCwgdGIsXG4gNTQ1Olx0XHRcdFx0ICAgICAgIHRjYVtUQ0FfUkFURV0sIGZvbGQsIGZsYWdzLCBleHRhY2spO1xuIDU0NjpcdFx0aWYgKGVyciBcdTAwM2MgMClcbiA1NDc6XHRcdFx0Z290byBlcnJvdXQ7XG4gNTQ4Olx0XG4gNTQ5Olx0XHRoID0gZnJvbV9oYXNoKGYtXHUwMDNlaGFuZGxlIFx1MDAzZVx1MDAzZSAxNik7XG4gNTUwOlx0XHRmcCA9IFx1MDAyNmYtXHUwMDNlYmt0LVx1MDAzZWh0W2hdO1xuIDU1MTpcdFx0Zm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7XG4gNTUyOlx0XHQgICAgIChmMSA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkgIT0gTlVMTDtcbiA1NTM6XHRcdCAgICAgZnAgPSBcdTAwMjZmMS1cdTAwM2VuZXh0KVxuIDU1NDpcdFx0XHRpZiAoZi1cdTAwM2VoYW5kbGUgXHUwMDNjIGYxLVx1MDAzZWhhbmRsZSlcbiA1NTU6XHRcdFx0XHRicmVhaztcbiA1NTY6XHRcbiA1NTc6XHRcdHRjZl9ibG9ja19uZXRpZl9rZWVwX2RzdCh0cC1cdTAwM2VjaGFpbi1cdTAwM2VibG9jayk7XG4gNTU4Olx0XHRyY3VfYXNzaWduX3BvaW50ZXIoZi1cdTAwM2VuZXh0LCBmMSk7XG4gNTU5Olx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmKTtcbiA1NjA6XHRcbiA1NjE6XHRcdGlmIChmb2xkKSB7XG4gNTYyOlx0XHRcdGIgPSBmb2xkLVx1MDAzZWJrdDtcbiA1NjM6XHRcdFx0aCA9IGZyb21faGFzaChmb2xkLVx1MDAzZWhhbmRsZSBcdTAwM2VcdTAwM2UgMTYpO1xuIDU2NDpcdFx0XHRmcCA9IFx1MDAyNmItXHUwMDNlaHRbaF07XG4gNTY1Olx0XHRcdGZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7XG4gNTY2Olx0XHRcdCAgICAgZnAgPSBcdTAwMjZwZnAtXHUwMDNlbmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XG4gNTY3Olx0XHRcdFx0aWYgKHBmcCA9PSBmb2xkKSB7XG4gNTY4Olx0XHRcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmb2xkLVx1MDAzZW5leHQpO1xuIDU2OTpcdFx0XHRcdFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKSkge1xuIDU3MDpcdFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgdGggPSB0b19oYXNoKGZvbGQtXHUwMDNlaGFuZGxlKTtcbiA1NzE6XHRcbiA1NzI6XHRcdFx0XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RoXSwgTlVMTCk7XG4gNTczOlx0XHRcdFx0XHRcdGtmcmVlX3JjdShiLCByY3UpO1xuIDU3NDpcdFx0XHRcdFx0fVxuIDU3NTpcdFx0XHRcdFx0YnJlYWs7XG4gNTc2Olx0XHRcdFx0fVxuIDU3NzpcdFx0XHR9XG4gNTc4Olx0XHR9XG4gNTc5Olx0XG4gNTgwOlx0XHRyb3V0ZTRfcmVzZXRfZmFzdG1hcChoZWFkLCBmb2xkKTtcbiA1ODE6XHRcdCphcmcgPSBmO1xuIDU4MjpcdFx0aWYgKGZvbGQpIHtcbiA1ODM6XHRcdFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFx1MDAyNmZvbGQtXHUwMDNlcmVzKTtcbiA1ODQ6XHRcdFx0dGNmX2V4dHNfZ2V0X25ldChcdTAwMjZmb2xkLVx1MDAzZWV4dHMpO1xuIDU4NTpcdFx0XHR0Y2ZfcXVldWVfd29yayhcdTAwMjZmb2xkLVx1MDAzZXJ3b3JrLCByb3V0ZTRfZGVsZXRlX2ZpbHRlcl93b3JrKTtcbiA1ODY6XHRcdH1cbiA1ODc6XHRcdHJldHVybiAwO1xuIDU4ODpcdFxuIDU4OTpcdGVycm91dDpcbiA1OTA6XHRcdGlmIChmKVxuIDU5MTpcdFx0XHR0Y2ZfZXh0c19kZXN0cm95KFx1MDAyNmYtXHUwMDNlZXh0cyk7XG4gNTkyOlx0XHRrZnJlZShmKTtcbiA1OTM6XHRcdHJldHVybiBlcnI7XG4gNTk0Olx0fVxuIDU5NTpcdFxuIDU5NjpcdHN0YXRpYyB2b2lkIHJvdXRlNF93YWxrKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNmX3dhbGtlciAqYXJnLFxuIDU5NzpcdFx0XHRcdGJvb2wgcnRubF9oZWxkKVxuIDU5ODpcdHtcbiA1OTk6XHRcdHN0cnVjdCByb3V0ZTRfaGVhZCAqaGVhZCA9IHJ0bmxfZGVyZWZlcmVuY2UodHAtXHUwMDNlcm9vdCk7XG4gNjAwOlx0XHR1bnNpZ25lZCBpbnQgaCwgaDE7XG4gNjAxOlx0XG4gNjAyOlx0XHRpZiAoaGVhZCA9PSBOVUxMIHx8IGFyZy1cdTAwM2VzdG9wKVxuIDYwMzpcdFx0XHRyZXR1cm47XG4gNjA0Olx0XG4gNjA1Olx0XHRmb3IgKGggPSAwOyBoIFx1MDAzYz0gMjU2OyBoJiM0MzsmIzQzOykge1xuIDYwNjpcdFx0XHRzdHJ1Y3Qgcm91dGU0X2J1Y2tldCAqYiA9IHJ0bmxfZGVyZWZlcmVuY2UoaGVhZC1cdTAwM2V0YWJsZVtoXSk7XG4gNjA3Olx0XG4gNjA4Olx0XHRcdGlmIChiKSB7XG4gNjA5Olx0XHRcdFx0Zm9yIChoMSA9IDA7IGgxIFx1MDAzYz0gMzI7IGgxJiM0MzsmIzQzOykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzM4MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzIHJlZ2FyZGluZyBgY2xzX3JvdXRlLmNgLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgaXQgbXlzZWxmLCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBjbHNfcm91dGUuYyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoaXMgYGNsc19yb3V0ZS5jYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24gd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQuIExldCYjMzk7cyBkaWcgaW4gYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIG92ZXJhbGwgc3lzdGVtIGRlc2lnbi4gV2hhdCYjMzk7cyBpdCBkb2luZz8gV2hhdCBraW5kIG9mIHJvdXRpbmcgbG9naWMgaXMgaW1wbGVtZW50ZWQgaGVyZT8gSXMgaXQgc2ltcGxlIGxvb2t1cHMsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggd2l0aCBwb2xpY3kgY29uc2lkZXJhdGlvbnM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyBpdCBoYW5kbGVzIHJvdXRlIHNlbGVjdGlvbiwgY2FjaGluZywgYW5kIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGludGVyZmFjZXMuIEJhc2ljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG51dHMgYW5kIGJvbHRzIG9mIGhvdyB0aGlzIG1vZHVsZSBtYWtlcyByb3V0aW5nIGRlY2lzaW9ucy4gVGltZSB0byBnZXQgZmFtaWxpYXIgd2l0aCB0aGUgY29kZSBhbmQgaXRzIGFwcHJvYWNoIHRvIGVuc3VyZSBlZmZpY2llbnQgYW5kIHJvYnVzdCBvcGVyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19yb3V0ZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MTA6XHRcdFx0XHRcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmO1xuIDYxMTpcdFxuIDYxMjpcdFx0XHRcdFx0Zm9yIChmID0gcnRubF9kZXJlZmVyZW5jZShiLVx1MDAzZWh0W2gxXSk7XG4gNjEzOlx0XHRcdFx0XHQgICAgIGY7XG4gNjE0Olx0XHRcdFx0XHQgICAgIGYgPSBydG5sX2RlcmVmZXJlbmNlKGYtXHUwMDNlbmV4dCkpIHtcbiA2MTU6XHRcdFx0XHRcdFx0aWYgKCF0Y19jbHNfc3RhdHNfZHVtcCh0cCwgYXJnLCBmKSlcbiA2MTY6XHRcdFx0XHRcdFx0XHRyZXR1cm47XG4gNjE3Olx0XHRcdFx0XHR9XG4gNjE4Olx0XHRcdFx0fVxuIDYxOTpcdFx0XHR9XG4gNjIwOlx0XHR9XG4gNjIxOlx0fVxuIDYyMjpcdFxuIDYyMzpcdHN0YXRpYyBpbnQgcm91dGU0X2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqZmgsXG4gNjI0Olx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNtc2cgKnQsIGJvb2wgcnRubF9oZWxkKVxuIDYyNTpcdHtcbiA2MjY6XHRcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmID0gZmg7XG4gNjI3Olx0XHRzdHJ1Y3QgbmxhdHRyICpuZXN0O1xuIDYyODpcdFx0dTMyIGlkO1xuIDYyOTpcdFxuIDYzMDpcdFx0aWYgKGYgPT0gTlVMTClcbiA2MzE6XHRcdFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4gNjMyOlx0XG4gNjMzOlx0XHR0LVx1MDAzZXRjbV9oYW5kbGUgPSBmLVx1MDAzZWhhbmRsZTtcbiA2MzQ6XHRcbiA2MzU6XHRcdG5lc3QgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcoc2tiLCBUQ0FfT1BUSU9OUyk7XG4gNjM2Olx0XHRpZiAobmVzdCA9PSBOVUxMKVxuIDYzNzpcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA2Mzg6XHRcbiA2Mzk6XHRcdGlmICghKGYtXHUwMDNlaGFuZGxlIFx1MDAyNiAweDgwMDApKSB7XG4gNjQwOlx0XHRcdGlkID0gZi1cdTAwM2VpZCBcdTAwMjYgMHhGRjtcbiA2NDE6XHRcdFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgVENBX1JPVVRFNF9UTywgaWQpKVxuIDY0MjpcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDY0MzpcdFx0fVxuIDY0NDpcdFx0aWYgKGYtXHUwMDNlaGFuZGxlIFx1MDAyNiAweDgwMDAwMDAwKSB7XG4gNjQ1Olx0XHRcdGlmICgoZi1cdTAwM2VoYW5kbGUgXHUwMDNlXHUwMDNlIDE2KSAhPSAweEZGRkYgXHUwMDI2XHUwMDI2XG4gNjQ2Olx0XHRcdCAgICBubGFfcHV0X3UzMihza2IsIFRDQV9ST1VURTRfSUlGLCBmLVx1MDAzZWlpZikpXG4gNjQ3Olx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gNjQ4Olx0XHR9IGVsc2Uge1xuIDY0OTpcdFx0XHRpZCA9IGYtXHUwMDNlaWQgXHUwMDNlXHUwMDNlIDE2O1xuIDY1MDpcdFx0XHRpZiAobmxhX3B1dF91MzIoc2tiLCBUQ0FfUk9VVEU0X0ZST00sIGlkKSlcbiA2NTE6XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiA2NTI6XHRcdH1cbiA2NTM6XHRcdGlmIChmLVx1MDAzZXJlcy5jbGFzc2lkIFx1MDAyNlx1MDAyNlxuIDY1NDpcdFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgVENBX1JPVVRFNF9DTEFTU0lELCBmLVx1MDAzZXJlcy5jbGFzc2lkKSlcbiA2NTU6XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gNjU2Olx0XG4gNjU3Olx0XHRpZiAodGNmX2V4dHNfZHVtcChza2IsIFx1MDAyNmYtXHUwMDNlZXh0cykgXHUwMDNjIDApXG4gNjU4Olx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDY1OTpcdFxuIDY2MDpcdFx0bmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7XG4gNjYxOlx0XG4gNjYyOlx0XHRpZiAodGNmX2V4dHNfZHVtcF9zdGF0cyhza2IsIFx1MDAyNmYtXHUwMDNlZXh0cykgXHUwMDNjIDApXG4gNjYzOlx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIDY2NDpcdFxuIDY2NTpcdFx0cmV0dXJuIHNrYi1cdTAwM2VsZW47XG4gNjY2Olx0XG4gNjY3Olx0bmxhX3B1dF9mYWlsdXJlOlxuIDY2ODpcdFx0bmxhX25lc3RfY2FuY2VsKHNrYiwgbmVzdCk7XG4gNjY5Olx0XHRyZXR1cm4gLTE7XG4gNjcwOlx0fVxuIDY3MTpcdFxuIDY3MjpcdHN0YXRpYyB2b2lkIHJvdXRlNF9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcbiA2NzM6XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGJhc2UpXG4gNjc0Olx0e1xuIDY3NTpcdFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmYgPSBmaDtcbiA2NzY6XHRcbiA2Nzc6XHRcdHRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCBcdTAwMjZmLVx1MDAzZXJlcywgYmFzZSk7XG4gNjc4Olx0fVxuIDY3OTpcdFxuIDY4MDpcdHN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfcm91dGU0X29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuIDY4MTpcdFx0LmtpbmRcdFx0PVx0XCYjMzQ7cm91dGVcJiMzNDssXG4gNjgyOlx0XHQuY2xhc3NpZnlcdD1cdHJvdXRlNF9jbGFzc2lmeSxcbiA2ODM6XHRcdC5pbml0XHRcdD1cdHJvdXRlNF9pbml0LFxuIDY4NDpcdFx0LmRlc3Ryb3lcdD1cdHJvdXRlNF9kZXN0cm95LFxuIDY4NTpcdFx0LmdldFx0XHQ9XHRyb3V0ZTRfZ2V0LFxuIDY4NjpcdFx0LmNoYW5nZVx0XHQ9XHRyb3V0ZTRfY2hhbmdlLFxuIDY4NzpcdFx0LmRlbGV0ZVx0XHQ9XHRyb3V0ZTRfZGVsZXRlLFxuIDY4ODpcdFx0LndhbGtcdFx0PVx0cm91dGU0X3dhbGssXG4gNjg5Olx0XHQuZHVtcFx0XHQ9XHRyb3V0ZTRfZHVtcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4NjgKCQkJCQkJCW91dHB1dDogMjkzCgkJCQkJCQl0aG91Z2h0czogMTEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgY2xzX3JvdXRlLmMgUGF0Y2g6IFJlZmNvdW50aW5nIGFuZCBNZW1vcnkgU2FmZXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggZm9yIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhZGRyZXNzaW5nIGEgY3JpdGljYWwgaXNzdWUgaW4gaG93IHRoZSBgcm91dGU0X2J1Y2tldGAgc3RydWN0dXJlIGlzIG1hbmFnZWQsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIGZpbHRlciBkZWxldGlvbiBhbmQgbW9kaWZpY2F0aW9uLgoKTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlIGNvcmUgcHJvYmxlbSB3YXMgYSBsYWNrIG9mIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgZm9yIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAuICBQcmV2aW91c2x5LCB3aGVuIGEgZmlsdGVyIHdhcyBkZWxldGVkIChgcm91dGU0X2RlbGV0ZWApLCB0aGUgY29kZSB3b3VsZCBpdGVyYXRlIHRocm91Z2ggdGhlIGJ1Y2tldCYjMzk7cyBoYXNoIHRhYmxlIChgYi0mZ3Q7aHRbMC4uMzJdYCkgdG8gc2VlIGlmIGFueSBmaWx0ZXJzIHJlbWFpbmVkLiBJZiBpdCBmb3VuZCBub25lLCBpdCYjMzk7ZCBjbGVhciB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiB0aGUgaGVhZCYjMzk7cyB0YWJsZSAoYGhlYWQtJmd0O3RhYmxlW3RvX2hhc2goaCldYCkgYW5kIGZyZWUgdGhlIGJ1Y2tldCB1c2luZyBga2ZyZWVfcmN1KGIsIHJjdSlgLiBUaGUgd2Vha25lc3MgbGllcyBpbiBob3cgZmlsdGVycyBhcmUgKmNoYW5nZWQqIChgcm91dGU0X2NoYW5nZWApLiBJZiBhIGZpbHRlciYjMzk7cyBgZm9sZGAgd2FzIHJlcGxhY2VkIG9yIG1vdmVkIHRvIGEgZGlmZmVyZW50IGJ1Y2tldCBvciBoYW5kbGUsIHRoZXJlIHdhcyBhIHJpc2sgb2YgY29ycnVwdGluZyBidWNrZXQgYWNjb3VudGluZyBvciBmcmVlaW5nIHRoZSBidWNrZXQgd2hpbGUgZmlsdGVycyB3ZXJlIHN0aWxsIHVzaW5nIGl0LCB3aGljaCBtZWFucyB3ZSBwb3RlbnRpYWxseSBoYWQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLgoKVGhlIHBhdGNoJiMzOTtzIHNvbHV0aW9uIGlzIGVsZWdhbnQ6IGl0IGludHJvZHVjZXMgYSBgcmVmY291bnRfdCBmaWx0ZXJzX3JlZmAgZmllbGQgd2l0aGluIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAuIE5vdywgaW5zdGVhZCBvZiBsb29waW5nIHRvIGRldGVybWluZSBpZiB0aGUgYnVja2V0IGlzIGVtcHR5IGR1cmluZyBkZWxldGlvbiwgYHJvdXRlNF9kZWxldGVgIHVzZXMgYHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKWAuICBJbiB0aGUgYHJvdXRlNF9zZXRfcGFybXNgIGZ1bmN0aW9uLCB3ZSBub3cgaW5jcmVtZW50IHRoZSByZWZjb3VudCB3aGVuIGFkZGluZyBhIGZpbHRlciB0byBhbiBleGlzdGluZyBidWNrZXQgb3Igc2V0IHRoZSByZWZjb3VudCB0byAxIHdoZW4gYWxsb2NhdGluZyBhIG5ldyBidWNrZXQuIFRoaXMgbWFrZXMgaXQgbXVjaCBtb3JlIHJvYnVzdC4gVGhlIGZpbHRlciByZXBsYWNlbWVudCBsb2dpYyB3aXRoaW4gYHJvdXRlNF9jaGFuZ2VgIG5vdyBhbHNvIGluY2x1ZGVzIHRoZSByZWZjb3VudCBkZWNyZW1lbnQgd2hlbiB1bmxpbmtpbmcgYSBmaWx0ZXIuIFRoZSBgaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2ItJmd0O2ZpbHRlcnNfcmVmKSlgIGNvbmRpdGlvbiBpbiBgcm91dGU0X2NoYW5nZWAgbm93IHByb3Blcmx5IGhhbmRsZXMgdGhlIGJ1Y2tldCBkZWFsbG9jYXRpb24uIEkgYWxzbyBub3RpY2VkIHRoYXQgdGhlIGNvbGxpc2lvbiBjaGVjayBpbiBgcm91dGU0X3NldF9wYXJtc2Agbm93IHdvcmtzIGNvcnJlY3RseSwgZW5zdXJpbmcgdGhhdCB0aGVyZSBhcmVuJiMzOTt0IHByb2JsZW1zIGlmIHdlJiMzOTtyZSByZXBsYWNpbmcgb3IgZGV0ZWN0aW5nIGFuIGV4aXN0aW5nIGZpbHRlci4KCk5leHQsIEkgbmVlZCB0byBjaGVjayBmb3IgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBlc3BlY2lhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBGb3J0dW5hdGVseSwgdGhpcyBsb29rcyBwcmV0dHkgY2xlYW4uIEJvdGggYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBhbmQgYHN0cnVjdCByb3V0ZTRfZmlsdGVyYCBhcmUgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbi4gVGhpcyBlbGltaW5hdGVzIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IGFsbG9jYXRpb24uIEZ1cnRoZXJtb3JlLCB0aGVyZSYjMzk7cyBubyBldmlkZW5jZSBvZiBhbnkgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgcGFkZGluZyBvciBmaWVsZHMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UuICBUaGUgYHJvdXRlNF9kdW1wYCBmdW5jdGlvbiB1c2VzIGBubGFfcHV0X3UzMmAgdG8gZHVtcCByZWxldmFudCBmaWVsZHMgbGlrZSBgZi0mZ3Q7aWRgLCBgZi0mZ3Q7aWlmYCwgYW5kIGBmLSZndDtyZXMuY2xhc3NpZGAuICBUaGVzZSBhcmUgYWxsIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIGZpbHRlciBjcmVhdGlvbi9tb2RpZmljYXRpb24sIHNvIG5vIHByb2JsZW1zIGhlcmUuIEkgYWxzbyBkb24mIzM5O3Qgc2VlIGFueSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSBpc3N1ZXMgYWRkcmVzc2VkIGFuZCBmaXhlZCBsb29rIGxpa2UgY2xhc3NpYyByZWZlcmVuY2UgY291bnRpbmcgcHJvYmxlbXMgd2hpY2ggYXJlIHZlcnkgZWFzaWx5IGNhdWdodCBieSBLQVNBTiBvciBsb2NrZGVwLCB3aGljaCBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LgoKTm93LCBsZXQmIzM5O3MgYXBwbHkgb3VyIHN0YW5kYXJkIGNoZWNrbGlzdC4gIFRoaXMgaXMgd2hhdCBJIGxvb2sgZm9yIHdoZW4gZGV0ZXJtaW5pbmcgaWYgYSBLTVNBTiBzZXNzaW9uIGlzIG5lY2Vzc2FyeToKCiogICBTdGFuZGFyZCBLQVNBTiBidWlsZHMgKE9PQiwgVUFGLCBkb3VibGUtZnJlZSwgaW52YWxpZC1mcmVlKSwgTE9DS0RFUCwgVUJTQU4sIHJlZmNvdW50IGNoZWNrczogVGhlc2UgYXJlIGFscmVhZHkgZW5hYmxlZCBhbmQgd291bGQgaGF2ZSBjYXVnaHQgaXNzdWVzIHJlbGF0ZWQgdG8gdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlcywgZXRjLgoqICAgS01TQU4gZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3M6IFRoaXMgaXMgdGhlIGNyaXRpY2FsIGNoZWNrIGZvciBteSBhc3Nlc3NtZW50LgoqICAgJiMzNDtUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLCBMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLiYjMzQ7CiogICAmIzM0O1NldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcy4uLiYjMzQ7IChmb2xsb3dlZCBieSBhIGxpc3Qgb2YgY3JpdGVyaWEgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5L3N0cnVjdHVyZSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UsIGV0Yy4pCgpCYXNlZCBvbiB0aGlzLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBLTVNBTiBpcyAqbm90KiBuZWVkZWQgaGVyZS4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0OgoKKiAgIENvcHkgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4KKiAgIERlcGVuZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBjb25kaXRpb25hbCBsb2dpYy4KKiAgIEFsbG9jYXRlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuCiogICBVc2UgYW55IGtpbmQgb2YgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzIGluIHN1cnJvdW5kaW5nIGNvZGUuCgpUaGUgY2hhbmdlcyBhcmUgc3RyaWN0bHkgYWJvdXQgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSBjb3VudGluZyAoYHJlZmNvdW50X3RgKSBvZiBgc3RydWN0IHJvdXRlNF9idWNrZXRgIGFuZCBmaXhpbmcgc29tZSBmaWx0ZXIgcmVwbGFjZW1lbnQgbG9naWMgYnVncyBpbiBgY2xzX3JvdXRlYC4gVGhlIGdvYWwgaXMgdG8gbWFrZSB0aGluZ3Mgcm9idXN0LCBzbyBteSBhc3Nlc3NtZW50IHdvdWxkIGJlIHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYC4gSSBjYW4gZGVmaW5pdGl2ZWx5IHN0YXRlIHRoYXQgdGhpcyBpcyBhIHNhZmUgcGF0Y2ggaW4gdGVybXMgb2YgbWVtb3J5IHNhZmV0eSwgYW5kIHN0YW5kYXJkIGtlcm5lbCBidWlsZCB0b29scyBzaG91bGQgYmUgYWJsZSB0byBjb3ZlcgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDAxOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBsaWZldGltZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nIGlzc3VlcyBpbiBjbHNfcm91dGUgKHRyYWZmaWMgY29udHJvbCByb3V0ZSBjbGFzc2lmaWVyKSB3aGVuIHVwZGF0aW5nIG9yIGRlbGV0aW5nIHJvdXRlIGZpbHRlcnMgYWNyb3NzIGJ1Y2tldHMsIGJ5IGludHJvZHVjaW5nIGEgYGZpbHRlcnNfcmVmYCByZWZjb3VudCAoYHJlZmNvdW50X3RgKSB0byBgc3RydWN0IHJvdXRlNF9idWNrZXRgLlxuXG5BbmFseXNpcyBvZiBtZW1vcnkgc2FuaXRpemF0aW9uIHJlcXVpcmVtZW50czpcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBLTVNBTjogQWxsIGFsbG9jYXRpb25zIChgc3RydWN0IHJvdXRlNF9idWNrZXRgIGFuZCBgc3RydWN0IHJvdXRlNF9maWx0ZXJgKSBjb250aW51ZSB0byB1c2UgYGt6YWxsb2Nfb2JqYCBlbnN1cmluZyBhbGwgbWVtb3J5IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbi4gVGhlIG5ldyBgZmlsdGVyc19yZWZgIGZpZWxkIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgcmVmY291bnRfc2V0YCBhbmQgbWFuYWdlZCB2aWEgYHJlZmNvdW50X2luY2AgLyBgcmVmY291bnRfZGVjX2FuZF90ZXN0YC4gTm8gc3RydWN0IGZpZWxkcywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UgdmlhIE5ldGxpbmsgKGFsbCBkdW1wZWQgYXR0cmlidXRlcyBhcmUgdmFsaWRhdGVkIGFuZCBwb3B1bGF0ZWQgZnJvbSBpbml0aWFsaXplZCBzY2FsYXIgdmFsdWVzKS4gVGhlcmUgaXMgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuLSBVQUYgLyBLQVNBTjogVGhlIGNoYW5nZXMgbW9kaWZ5IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYnVja2V0IGRlYWxsb2NhdGlvbiBsaWZldGltZXMgKGBrZnJlZV9yY3VgKSwgd2hpY2ggZmFsbCB1bmRlciBVc2UtQWZ0ZXItRnJlZSBhbmQgcmVmY291bnQgc2FmZXR5LiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBtb25pdG9yZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCB0aGUga2VybmVsJiMzOTtzIGJ1aWx0LWluIHJlZmNvdW50IGNoZWNraW5nIChgcmVmY291bnRfdGApLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBsaWZldGltZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nIGlzc3VlcyBpbiBjbHNfcm91dGUgKHRyYWZmaWMgY29udHJvbCByb3V0ZSBjbGFzc2lmaWVyKSB3aGVuIHVwZGF0aW5nIG9yIGRlbGV0aW5nIHJvdXRlIGZpbHRlcnMgYWNyb3NzIGJ1Y2tldHMsIGJ5IGludHJvZHVjaW5nIGEgYGZpbHRlcnNfcmVmYCByZWZjb3VudCAoYHJlZmNvdW50X3RgKSB0byBgc3RydWN0IHJvdXRlNF9idWNrZXRgLlxuXG5BbmFseXNpcyBvZiBtZW1vcnkgc2FuaXRpemF0aW9uIHJlcXVpcmVtZW50czpcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBLTVNBTjogQWxsIGFsbG9jYXRpb25zIChgc3RydWN0IHJvdXRlNF9idWNrZXRgIGFuZCBgc3RydWN0IHJvdXRlNF9maWx0ZXJgKSBjb250aW51ZSB0byB1c2UgYGt6YWxsb2Nfb2JqYCBlbnN1cmluZyBhbGwgbWVtb3J5IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbi4gVGhlIG5ldyBgZmlsdGVyc19yZWZgIGZpZWxkIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgcmVmY291bnRfc2V0YCBhbmQgbWFuYWdlZCB2aWEgYHJlZmNvdW50X2luY2AgLyBgcmVmY291bnRfZGVjX2FuZF90ZXN0YC4gTm8gc3RydWN0IGZpZWxkcywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UgdmlhIE5ldGxpbmsgKGFsbCBkdW1wZWQgYXR0cmlidXRlcyBhcmUgdmFsaWRhdGVkIGFuZCBwb3B1bGF0ZWQgZnJvbSBpbml0aWFsaXplZCBzY2FsYXIgdmFsdWVzKS4gVGhlcmUgaXMgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxuLSBVQUYgLyBLQVNBTjogVGhlIGNoYW5nZXMgbW9kaWZ5IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYnVja2V0IGRlYWxsb2NhdGlvbiBsaWZldGltZXMgKGBrZnJlZV9yY3VgKSwgd2hpY2ggZmFsbCB1bmRlciBVc2UtQWZ0ZXItRnJlZSBhbmQgcmVmY291bnQgc2FmZXR5LiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBtb25pdG9yZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCB0aGUga2VybmVsJiMzOTtzIGJ1aWx0LWluIHJlZmNvdW50IGNoZWNraW5nIChgcmVmY291bnRfdGApLlxuXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6NTk6MzQuODYxNDcxNTM4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjcyODQyNjExMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0NMU19ST1VURTRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyb3V0ZTRfY2hhbmdlXCIsXG4gICAgXCJyb3V0ZTRfZGVsZXRlXCIsXG4gICAgXCJyb3V0ZTRfc2V0X3Bhcm1zXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgbGlmZXRpbWUgYW5kIHJlZmVyZW5jZSB0cmFja2luZyBpc3N1ZXMgaW4gY2xzX3JvdXRlICh0cmFmZmljIGNvbnRyb2wgcm91dGUgY2xhc3NpZmllcikgd2hlbiB1cGRhdGluZyBvciBkZWxldGluZyByb3V0ZSBmaWx0ZXJzIGFjcm9zcyBidWNrZXRzLCBieSBpbnRyb2R1Y2luZyBhIGBmaWx0ZXJzX3JlZmAgcmVmY291bnQgKGByZWZjb3VudF90YCkgdG8gYHN0cnVjdCByb3V0ZTRfYnVja2V0YC5cXG5cXG5BbmFseXNpcyBvZiBtZW1vcnkgc2FuaXRpemF0aW9uIHJlcXVpcmVtZW50czpcXG4tIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gS01TQU46IEFsbCBhbGxvY2F0aW9ucyAoYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBhbmQgYHN0cnVjdCByb3V0ZTRfZmlsdGVyYCkgY29udGludWUgdG8gdXNlIGBremFsbG9jX29iamAgZW5zdXJpbmcgYWxsIG1lbW9yeSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHVwb24gY3JlYXRpb24uIFRoZSBuZXcgYGZpbHRlcnNfcmVmYCBmaWVsZCBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYHJlZmNvdW50X3NldGAgYW5kIG1hbmFnZWQgdmlhIGByZWZjb3VudF9pbmNgIC8gYHJlZmNvdW50X2RlY19hbmRfdGVzdGAuIE5vIHN0cnVjdCBmaWVsZHMsIHBhZGRpbmcsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVycyBhcmUgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlIHZpYSBOZXRsaW5rIChhbGwgZHVtcGVkIGF0dHJpYnV0ZXMgYXJlIHZhbGlkYXRlZCBhbmQgcG9wdWxhdGVkIGZyb20gaW5pdGlhbGl6ZWQgc2NhbGFyIHZhbHVlcykuIFRoZXJlIGlzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy5cXG4tIFVBRiAvIEtBU0FOOiBUaGUgY2hhbmdlcyBtb2RpZnkgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBidWNrZXQgZGVhbGxvY2F0aW9uIGxpZmV0aW1lcyAoYGtmcmVlX3JjdWApLCB3aGljaCBmYWxsIHVuZGVyIFVzZS1BZnRlci1GcmVlIGFuZCByZWZjb3VudCBzYWZldHkuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIG1vbml0b3JlZCBhbmQgZGV0ZWN0ZWQgYnkgS0FTQU4gYW5kIHRoZSBrZXJuZWwncyBidWlsdC1pbiByZWZjb3VudCBjaGVja2luZyAoYHJlZmNvdW50X3RgKS5cXG5cXG5UaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2xzX3JvdXRlIG5ldHdvcmsgdHJhZmZpYyBjb250cm9sIGNsYXNzaWZpZXIgaW4gbmV0L3NjaGVkL2Nsc19yb3V0ZS5jLCBpbnRyb2R1Y2luZyBhIHJlZmNvdW50IChmaWx0ZXJzX3JlZikgdG8gbWFuYWdlIHJvdXRlNF9idWNrZXQgbGlmZXRpbWVzIGR1cmluZyByb3V0ZSBmaWx0ZXIgbW9kaWZpY2F0aW9uLCBjcmVhdGlvbiwgYW5kIGRlbGV0aW9uIChyb3V0ZTRfY2hhbmdlLCByb3V0ZTRfZGVsZXRlLCBhbmQgcm91dGU0X3NldF9wYXJtcykuIFRoaXMgaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rL3RjIGZpbHRlciBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDo1OTozNC44NjE0NzYwOThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjM2NzE0MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAwNGI0NzBhOGFiMjhmNmZlMzdkNWE0ZTU3YTkwNTZiYzA4YzhlOGUyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMDA6NTk6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXFxuaW5kZXggMGQxMzI0YzkwNTgzNy4uMGYyMTFmMDMwZmQ5YSAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcXG4rKysgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcXG5AQCAtMTEsNiArMTEsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9yZWZjb3VudC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvZHN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvcm91dGUuaFxcdTAwM2VcXG5AQCAtNDEsNiArNDIsNyBAQCBzdHJ1Y3Qgcm91dGU0X2hlYWQge1xcbiBzdHJ1Y3Qgcm91dGU0X2J1Y2tldCB7XFxuIFxcdC8qIDE2IEZST00gYnVja2V0cyArIDE2IElJRiBidWNrZXRzICsgMSB3aWxkY2FyZCBidWNrZXQgKi9cXG4gXFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3VcXHQqaHRbMTYgKyAxNiArIDFdO1xcbitcXHRyZWZjb3VudF90XFx0XFx0XFx0ZmlsdGVyc19yZWY7XFxuIFxcdHN0cnVjdCByY3VfaGVhZFxcdFxcdFxcdHJjdTtcXG4gfTtcXG4gXFxuQEAgLTMzNiw3ICszMzgsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCxcXG4gXFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKm5mO1xcbiBcXHRzdHJ1Y3Qgcm91dGU0X2J1Y2tldCAqYjtcXG4gXFx0dW5zaWduZWQgaW50IGggPSAwO1xcbi1cXHRpbnQgaSwgaDE7XFxuK1xcdGludCBoMTtcXG4gXFxuIFxcdGlmICghaGVhZCB8fCAhZilcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTM2MiwyMyArMzY0LDE0IEBAIHN0YXRpYyBpbnQgcm91dGU0X2RlbGV0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqYXJnLCBib29sICpsYXN0LFxcbiBcXHRcXHRcXHR0Y2ZfZXh0c19nZXRfbmV0KFxcdTAwMjZmLVxcdTAwM2VleHRzKTtcXG4gXFx0XFx0XFx0dGNmX3F1ZXVlX3dvcmsoXFx1MDAyNmYtXFx1MDAzZXJ3b3JrLCByb3V0ZTRfZGVsZXRlX2ZpbHRlcl93b3JrKTtcXG4gXFxuLVxcdFxcdFxcdC8qIFN0cmlwIFJUTkwgcHJvdGVjdGVkIHRyZWUgKi9cXG4tXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjPSAzMjsgaSsrKSB7XFxuLVxcdFxcdFxcdFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpydDtcXG4tXFxuLVxcdFxcdFxcdFxcdHJ0ID0gcnRubF9kZXJlZmVyZW5jZShiLVxcdTAwM2VodFtpXSk7XFxuLVxcdFxcdFxcdFxcdGlmIChydClcXG4tXFx0XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmItXFx1MDAzZWZpbHRlcnNfcmVmKSkge1xcbitcXHRcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtXFx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0a2ZyZWVfcmN1KGIsIHJjdSk7XFxuIFxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdC8qIE9LLCBzZXNzaW9uIGhhcyBubyBmbG93cyAqL1xcbi1cXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtXFx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcXG4tXFx0XFx0XFx0a2ZyZWVfcmN1KGIsIHJjdSk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLW91dDpcXG4gXFx0Kmxhc3QgPSB0cnVlO1xcbiBcXHRmb3IgKGgxID0gMDsgaDEgXFx1MDAzYz0gMjU2OyBoMSsrKSB7XFxuIFxcdFxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoaGVhZC1cXHUwMDNldGFibGVbaDFdKSkge1xcbkBAIC00MDAsOCArMzkzLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJvdXRlNF9wb2xpY3lbVENBX1JPVVRFNF9NQVggKyAxXSA9IHtcXG4gc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXFxuIFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGJhc2UsIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmLFxcbiBcXHRcXHRcXHQgICAgdTMyIGhhbmRsZSwgc3RydWN0IHJvdXRlNF9oZWFkICpoZWFkLFxcbi1cXHRcXHRcXHQgICAgc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgbmxhdHRyICplc3QsIGludCBuZXcsXFxuLVxcdFxcdFxcdCAgICB1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IG5sYXR0ciAqZXN0LFxcbitcXHRcXHRcXHQgICAgc3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsIHUzMiBmbGFncyxcXG4rXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4ge1xcbiBcXHR1MzIgaWQgPSAwLCB0byA9IDAsIG5oYW5kbGUgPSAweDgwMDA7XFxuIFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmcDtcXG5AQCAtNDE0LDcgKzQwOCw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4gXFx0aWYgKHRiW1RDQV9ST1VURTRfVE9dKSB7XFxuLVxcdFxcdGlmIChuZXcgXFx1MDAyNlxcdTAwMjYgaGFuZGxlIFxcdTAwMjYgMHg4MDAwKSB7XFxuK1xcdFxcdGlmICghZm9sZCBcXHUwMDI2XFx1MDAyNiBoYW5kbGUgXFx1MDAyNiAweDgwMDApIHtcXG4gXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBoYW5kbGVcXFwiKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG5AQCAtNDM3LDE0ICs0MzEsMTQgQEAgc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXFxuIFxcdH0gZWxzZVxcbiBcXHRcXHRuaGFuZGxlIHw9IDB4RkZGRiBcXHUwMDNjXFx1MDAzYyAxNjtcXG4gXFxuLVxcdGlmIChoYW5kbGUgXFx1MDAyNlxcdTAwMjYgbmV3KSB7XFxuK1xcdGlmIChoYW5kbGUgXFx1MDAyNlxcdTAwMjYgKCFmb2xkIHx8IG5oYW5kbGUgPT0gKGhhbmRsZSBcXHUwMDI2IH4weDdGMDApKSlcXG4gXFx0XFx0bmhhbmRsZSB8PSBoYW5kbGUgXFx1MDAyNiAweDdGMDA7XFxuLVxcdFxcdGlmIChuaGFuZGxlICE9IGhhbmRsZSkge1xcbi1cXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxcbi1cXHRcXHRcXHRcXHRcXHQgICBcXFwiSGFuZGxlIG1pc21hdGNoIGNvbnN0cnVjdGVkOiAleCAoZXhwZWN0ZWQ6ICV4KVxcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIGhhbmRsZSwgbmhhbmRsZSk7XFxuLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXHRcXHR9XFxuK1xcbitcXHRpZiAoaGFuZGxlIFxcdTAwMjZcXHUwMDI2ICFmb2xkIFxcdTAwMjZcXHUwMDI2IG5oYW5kbGUgIT0gaGFuZGxlKSB7XFxuK1xcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdCAgIFxcXCJIYW5kbGUgbWlzbWF0Y2ggY29uc3RydWN0ZWQ6ICV4IChleHBlY3RlZDogJXgpXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgaGFuZGxlLCBuaGFuZGxlKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICghbmhhbmRsZSkge1xcbkBAIC00NTksNiArNDUzLDcgQEAgc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXFxuIFxcdFxcdGlmIChiID09IE5VTEwpXFxuIFxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gXFxuK1xcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2Yi1cXHUwMDNlZmlsdGVyc19yZWYsIDEpO1xcbiBcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoaGVhZC1cXHUwMDNldGFibGVbaDFdLCBiKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0dW5zaWduZWQgaW50IGgyID0gZnJvbV9oYXNoKG5oYW5kbGUgXFx1MDAzZVxcdTAwM2UgMTYpO1xcbkBAIC00NjYsOCArNDYxLDE0IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbiBcXHRcXHRmb3IgKGZwID0gcnRubF9kZXJlZmVyZW5jZShiLVxcdTAwM2VodFtoMl0pO1xcbiBcXHRcXHQgICAgIGZwO1xcbiBcXHRcXHQgICAgIGZwID0gcnRubF9kZXJlZmVyZW5jZShmcC1cXHUwMDNlbmV4dCkpXFxuLVxcdFxcdFxcdGlmIChmcC1cXHUwMDNlaGFuZGxlID09IGYtXFx1MDAzZWhhbmRsZSlcXG4rXFx0XFx0XFx0aWYgKGZwICE9IGZvbGQgXFx1MDAyNlxcdTAwMjYgZnAtXFx1MDAzZWhhbmRsZSA9PSBuaGFuZGxlKSB7XFxuK1xcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJIYW5kbGUgJXggaXMgYWxyZWFkeSBpbiB1c2VcXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBuaGFuZGxlKTtcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2Yi1cXHUwMDNlZmlsdGVyc19yZWYpO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAodGJbVENBX1JPVVRFNF9UT10pXFxuQEAgLTUwMCw5ICs1MDEsOCBAQCBzdGF0aWMgaW50IHJvdXRlNF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbiBcXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZm9sZCwgKmYxLCAqcGZwLCAqZiA9IE5VTEw7XFxuIFxcdHN0cnVjdCByb3V0ZTRfYnVja2V0ICpiO1xcbiBcXHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfUk9VVEU0X01BWCArIDFdO1xcbi1cXHR1bnNpZ25lZCBpbnQgaCwgdGg7XFxuK1xcdHVuc2lnbmVkIGludCBoO1xcbiBcXHRpbnQgZXJyO1xcbi1cXHRib29sIG5ldyA9IHRydWU7XFxuIFxcbiBcXHRpZiAoIWhhbmRsZSkge1xcbiBcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJDcmVhdGluZyB3aXRoIGhhbmRsZSBvZiAwIGlzIGludmFsaWRcXFwiKTtcXG5AQCAtNTM5LDExICs1MzksMTAgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gXFxuIFxcdFxcdGYtXFx1MDAzZXRwID0gZm9sZC1cXHUwMDNldHA7XFxuIFxcdFxcdGYtXFx1MDAzZWJrdCA9IGZvbGQtXFx1MDAzZWJrdDtcXG4tXFx0XFx0bmV3ID0gZmFsc2U7XFxuIFxcdH1cXG4gXFxuIFxcdGVyciA9IHJvdXRlNF9zZXRfcGFybXMobmV0LCB0cCwgYmFzZSwgZiwgaGFuZGxlLCBoZWFkLCB0YixcXG4tXFx0XFx0XFx0ICAgICAgIHRjYVtUQ0FfUkFURV0sIG5ldywgZmxhZ3MsIGV4dGFjayk7XFxuK1xcdFxcdFxcdCAgICAgICB0Y2FbVENBX1JBVEVdLCBmb2xkLCBmbGFncywgZXh0YWNrKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyb3V0O1xcbiBcXG5AQCAtNTYwLDE3ICs1NTksMjAgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gXFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZik7XFxuIFxcbiBcXHRpZiAoZm9sZCkge1xcbi1cXHRcXHR0aCA9IHRvX2hhc2goZm9sZC1cXHUwMDNlaGFuZGxlKTtcXG4rXFx0XFx0YiA9IGZvbGQtXFx1MDAzZWJrdDtcXG4gXFx0XFx0aCA9IGZyb21faGFzaChmb2xkLVxcdTAwM2VoYW5kbGUgXFx1MDAzZVxcdTAwM2UgMTYpO1xcbi1cXHRcXHRiID0gcnRubF9kZXJlZmVyZW5jZShoZWFkLVxcdTAwM2V0YWJsZVt0aF0pO1xcbi1cXHRcXHRpZiAoYikge1xcbi1cXHRcXHRcXHRmcCA9IFxcdTAwMjZiLVxcdTAwM2VodFtoXTtcXG4tXFx0XFx0XFx0Zm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDtcXG4tXFx0XFx0XFx0ICAgICBmcCA9IFxcdTAwMjZwZnAtXFx1MDAzZW5leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkge1xcbi1cXHRcXHRcXHRcXHRpZiAocGZwID09IGZvbGQpIHtcXG4tXFx0XFx0XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC1cXHUwMDNlbmV4dCk7XFxuLVxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRmcCA9IFxcdTAwMjZiLVxcdTAwM2VodFtoXTtcXG4rXFx0XFx0Zm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDtcXG4rXFx0XFx0ICAgICBmcCA9IFxcdTAwMjZwZnAtXFx1MDAzZW5leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkge1xcbitcXHRcXHRcXHRpZiAocGZwID09IGZvbGQpIHtcXG4rXFx0XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC1cXHUwMDNlbmV4dCk7XFxuK1xcdFxcdFxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmItXFx1MDAzZWZpbHRlcnNfcmVmKSkge1xcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdGggPSB0b19oYXNoKGZvbGQtXFx1MDAzZWhhbmRsZSk7XFxuK1xcbitcXHRcXHRcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtXFx1MDAzZXRhYmxlW3RoXSwgTlVMTCk7XFxuK1xcdFxcdFxcdFxcdFxcdGtmcmVlX3JjdShiLCByY3UpO1xcbiBcXHRcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0fVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL2ZpbHRlcnMvcm91dGUuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvZmlsdGVycy9yb3V0ZS5qc29uXFxuaW5kZXggMDVjZWRjYTY3Y2NhZC4uMmQ1ODQzYWViZDcyOSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL2ZpbHRlcnMvcm91dGUuanNvblxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvZmlsdGVycy9yb3V0ZS5qc29uXFxuQEAgLTIwMiw1ICsyMDIsMjE1IEBAXFxuICAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcbiAgICAgICAgICAgICBcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgcGFyZW50IHJvb3QgZHJyXFxcIlxcbiAgICAgICAgIF1cXG4rICAgIH0sXFxuKyAgICB7XFxuKyAgICAgICAgXFxcImlkXFxcIjogXFxcImE3ZDJcXFwiLFxcbisgICAgICAgIFxcXCJuYW1lXFxcIjogXFxcIkRlbGV0ZSBhIHJvdXRlIGZpbHRlciB0aGF0IHdhcyBtb3ZlZCB0byBhbm90aGVyIGJ1Y2tldFxcXCIsXFxuKyAgICAgICAgXFxcImNhdGVnb3J5XFxcIjogW1xcbisgICAgICAgICAgICBcXFwiZmlsdGVyXFxcIixcXG4rICAgICAgICAgICAgXFxcInJvdXRlXFxcIlxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcInBsdWdpbnNcXFwiOiB7XFxuKyAgICAgICAgICAgIFxcXCJyZXF1aXJlc1xcXCI6IFxcXCJuc1BsdWdpblxcXCJcXG4rICAgICAgICB9LFxcbisgICAgICAgIFxcXCJzZXR1cFxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcIiRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3NcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6MVxcXCIsXFxuKyAgICAgICAgICAgIFxcXCIkVEMgZmlsdGVyIGNoYW5nZSBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMDAxIHJvdXRlIGZyb20gMSB0byAyIGNsYXNzaWQgMToxXFxcIixcXG4rICAgICAgICAgICAgXFxcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAyMDAgcm91dGUgZnJvbSA1IHRvIDUgY2xhc3NpZCAxOjVcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwiY21kVW5kZXJUZXN0XFxcIjogXFxcIiRUQyBmaWx0ZXIgZGVsIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAwMDIgcm91dGUgZnJvbSAxIHRvIDJcXFwiLFxcbisgICAgICAgIFxcXCJleHBFeGl0Q29kZVxcXCI6IFxcXCIwXFxcIixcXG4rICAgICAgICBcXFwidmVyaWZ5Q21kXFxcIjogXFxcIiRUQyAtaiBmaWx0ZXIgc2hvdyBkZXYgJERFVjEgcGFyZW50IGZmZmY6XFxcIixcXG4rICAgICAgICBcXFwibWF0Y2hKU09OXFxcIjogW1xcbisgICAgICAgICAgICB7XFxuKyAgICAgICAgICAgICAgICBcXFwicHJvdG9jb2xcXFwiOiBcXFwiaXBcXFwiLFxcbisgICAgICAgICAgICAgICAgXFxcInByZWZcXFwiOiAyMDAsXFxuKyAgICAgICAgICAgICAgICBcXFwia2luZFxcXCI6IFxcXCJyb3V0ZVxcXCIsXFxuKyAgICAgICAgICAgICAgICBcXFwiY2hhaW5cXFwiOiAwXFxuKyAgICAgICAgICAgIH0sXFxuKyAgICAgICAgICAgIHtcXG4rICAgICAgICAgICAgICAgIFxcXCJwcm90b2NvbFxcXCI6IFxcXCJpcFxcXCIsXFxuKyAgICAgICAgICAgICAgICBcXFwicHJlZlxcXCI6IDIwMCxcXG4rICAgICAgICAgICAgICAgIFxcXCJraW5kXFxcIjogXFxcInJvdXRlXFxcIixcXG4rICAgICAgICAgICAgICAgIFxcXCJjaGFpblxcXCI6IDAsXFxuKyAgICAgICAgICAgICAgICBcXFwib3B0aW9uc1xcXCI6IHtcXG4rICAgICAgICAgICAgICAgICAgICBcXFwiZmhcXFwiOiBcXFwiMHg1MDAwNVxcXCIsXFxuKyAgICAgICAgICAgICAgICAgICAgXFxcImZsb3dpZFxcXCI6IFxcXCIxOjVcXFwiXFxuKyAgICAgICAgICAgICAgICB9XFxuKyAgICAgICAgICAgIH1cXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJ0ZWFyZG93blxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcIiRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3NcXFwiXFxuKyAgICAgICAgXVxcbisgICAgfSxcXG4rICAgIHtcXG4rICAgICAgICBcXFwiaWRcXFwiOiBcXFwiYzA1YVxcXCIsXFxuKyAgICAgICAgXFxcIm5hbWVcXFwiOiBcXFwiVHJ5IHRvIGNoYW5nZSBhIHJvdXRlIGZpbHRlciBvbnRvIGFuIGFscmVhZHkgdXNlZCBoYW5kbGVcXFwiLFxcbisgICAgICAgIFxcXCJjYXRlZ29yeVxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcImZpbHRlclxcXCIsXFxuKyAgICAgICAgICAgIFxcXCJyb3V0ZVxcXCJcXG4rICAgICAgICBdLFxcbisgICAgICAgIFxcXCJwbHVnaW5zXFxcIjoge1xcbisgICAgICAgICAgICBcXFwicmVxdWlyZXNcXFwiOiBcXFwibnNQbHVnaW5cXFwiXFxuKyAgICAgICAgfSxcXG4rICAgICAgICBcXFwic2V0dXBcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCIkVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzXFxcIixcXG4rICAgICAgICAgICAgXFxcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjEgYWN0aW9uIG9rXFxcIixcXG4rICAgICAgICAgICAgXFxcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgcm91dGUgZnJvbSAyIHRvIDIgY2xhc3NpZCAxOjIgYWN0aW9uIGRyb3BcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwiY21kVW5kZXJUZXN0XFxcIjogXFxcIiRUQyBmaWx0ZXIgY2hhbmdlIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAwMDEgcm91dGUgZnJvbSAyIHRvIDIgY2xhc3NpZCAxOjEgYWN0aW9uIG9rXFxcIixcXG4rICAgICAgICBcXFwiZXhwRXhpdENvZGVcXFwiOiBcXFwiMlxcXCIsXFxuKyAgICAgICAgXFxcInZlcmlmeUNtZFxcXCI6IFxcXCIkVEMgLWogZmlsdGVyIHNob3cgZGV2ICRERVYxIHBhcmVudCBmZmZmOlxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoSlNPTlxcXCI6IFtcXG4rICAgICAgICAgICAge1xcbisgICAgICAgICAgICAgICAgXFxcInByb3RvY29sXFxcIjogXFxcImlwXFxcIixcXG4rICAgICAgICAgICAgICAgIFxcXCJwcmVmXFxcIjogMTAwLFxcbisgICAgICAgICAgICAgICAgXFxcImtpbmRcXFwiOiBcXFwicm91dGVcXFwiLFxcbisgICAgICAgICAgICAgICAgXFxcImNoYWluXFxcIjogMFxcbisgICAgICAgICAgICB9LFxcbisgICAgICAgICAgICB7XFxuKyAgICAgICAgICAgICAgICBcXFwicHJvdG9jb2xcXFwiOiBcXFwiaXBcXFwiLFxcbisgICAgICAgICAgICAgICAgXFxcInByZWZcXFwiOiAxMDAsXFxuKyAgICAgICAgICAgICAgICBcXFwia2luZFxcXCI6IFxcXCJyb3V0ZVxcXCIsXFxuKyAgICAgICAgICAgICAgICBcXFwiY2hhaW5cXFwiOiAwLFxcbisgICAgICAgICAgICAgICAgXFxcIm9wdGlvbnNcXFwiOiB7XFxuKyAgICAgICAgICAgICAgICAgICAgXFxcImZoXFxcIjogXFxcIjB4MTAwMDFcXFwiLFxcbisgICAgICAgICAgICAgICAgICAgIFxcXCJmbG93aWRcXFwiOiBcXFwiMToxXFxcIixcXG4rICAgICAgICAgICAgICAgICAgICBcXFwiYWN0aW9uc1xcXCI6IFtcXG4rICAgICAgICAgICAgICAgICAgICAgICAge1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIm9yZGVyXFxcIjogMSxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJraW5kXFxcIjogXFxcImdhY3RcXFwiLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImNvbnRyb2xfYWN0aW9uXFxcIjoge1xcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ0eXBlXFxcIjogXFxcInBhc3NcXFwiXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuKyAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4rICAgICAgICAgICAgICAgICAgICBdXFxuKyAgICAgICAgICAgICAgICB9XFxuKyAgICAgICAgICAgIH0sXFxuKyAgICAgICAgICAgIHtcXG4rICAgICAgICAgICAgICAgIFxcXCJwcm90b2NvbFxcXCI6IFxcXCJpcFxcXCIsXFxuKyAgICAgICAgICAgICAgICBcXFwicHJlZlxcXCI6IDEwMCxcXG4rICAgICAgICAgICAgICAgIFxcXCJraW5kXFxcIjogXFxcInJvdXRlXFxcIixcXG4rICAgICAgICAgICAgICAgIFxcXCJjaGFpblxcXCI6IDAsXFxuKyAgICAgICAgICAgICAgICBcXFwib3B0aW9uc1xcXCI6IHtcXG4rICAgICAgICAgICAgICAgICAgICBcXFwiZmhcXFwiOiBcXFwiMHgyMDAwMlxcXCIsXFxuKyAgICAgICAgICAgICAgICAgICAgXFxcImZsb3dpZFxcXCI6IFxcXCIxOjJcXFwiLFxcbisgICAgICAgICAgICAgICAgICAgIFxcXCJhY3Rpb25zXFxcIjogW1xcbisgICAgICAgICAgICAgICAgICAgICAgICB7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwib3JkZXJcXFwiOiAxLFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImtpbmRcXFwiOiBcXFwiZ2FjdFxcXCIsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiY29udHJvbF9hY3Rpb25cXFwiOiB7XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInR5cGVcXFwiOiBcXFwiZHJvcFxcXCJcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4rICAgICAgICAgICAgICAgICAgICAgICAgfVxcbisgICAgICAgICAgICAgICAgICAgIF1cXG4rICAgICAgICAgICAgICAgIH1cXG4rICAgICAgICAgICAgfVxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcbisgICAgICAgICAgICBcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzc1xcXCJcXG4rICAgICAgICBdXFxuKyAgICB9LFxcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCIzZjIxXFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJSZXBsYWNlIGEgcm91dGUgZmlsdGVyIHRoYXQgc2hhcmVzIGl0cyBrZXkgd2l0aCBhbm90aGVyIGZpbHRlclxcXCIsXFxuKyAgICAgICAgXFxcImNhdGVnb3J5XFxcIjogW1xcbisgICAgICAgICAgICBcXFwiZmlsdGVyXFxcIixcXG4rICAgICAgICAgICAgXFxcInJvdXRlXFxcIlxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcInBsdWdpbnNcXFwiOiB7XFxuKyAgICAgICAgICAgIFxcXCJyZXF1aXJlc1xcXCI6IFxcXCJuc1BsdWdpblxcXCJcXG4rICAgICAgICB9LFxcbisgICAgICAgIFxcXCJzZXR1cFxcXCI6IFtcXG4rICAgICAgICAgICAgXFxcIiRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3NcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6MVxcXCIsXFxuKyAgICAgICAgICAgIFxcXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMjAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToyXFxcIlxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcImNtZFVuZGVyVGVzdFxcXCI6IFxcXCIkVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OVxcXCIsXFxuKyAgICAgICAgXFxcImV4cEV4aXRDb2RlXFxcIjogXFxcIjBcXFwiLFxcbisgICAgICAgIFxcXCJ2ZXJpZnlDbWRcXFwiOiBcXFwiJFRDIC1qIGZpbHRlciBzaG93IGRldiAkREVWMSBwYXJlbnQgZmZmZjpcXFwiLFxcbisgICAgICAgIFxcXCJtYXRjaEpTT05cXFwiOiBbXFxuKyAgICAgICAgICAgIHtcXG4rICAgICAgICAgICAgICAgIFxcXCJwcm90b2NvbFxcXCI6IFxcXCJpcFxcXCIsXFxuKyAgICAgICAgICAgICAgICBcXFwicHJlZlxcXCI6IDEwMCxcXG4rICAgICAgICAgICAgICAgIFxcXCJraW5kXFxcIjogXFxcInJvdXRlXFxcIixcXG4rICAgICAgICAgICAgICAgIFxcXCJjaGFpblxcXCI6IDBcXG4rICAgICAgICAgICAgfSxcXG4rICAgICAgICAgICAge1xcbisgICAgICAgICAgICAgICAgXFxcInByb3RvY29sXFxcIjogXFxcImlwXFxcIixcXG4rICAgICAgICAgICAgICAgIFxcXCJwcmVmXFxcIjogMTAwLFxcbisgICAgICAgICAgICAgICAgXFxcImtpbmRcXFwiOiBcXFwicm91dGVcXFwiLFxcbisgICAgICAgICAgICAgICAgXFxcImNoYWluXFxcIjogMCxcXG4rICAgICAgICAgICAgICAgIFxcXCJvcHRpb25zXFxcIjoge1xcbisgICAgICAgICAgICAgICAgICAgIFxcXCJmaFxcXCI6IFxcXCIweDEwMTAxXFxcIixcXG4rICAgICAgICAgICAgICAgICAgICBcXFwiZmxvd2lkXFxcIjogXFxcIjE6OVxcXCJcXG4rICAgICAgICAgICAgICAgIH1cXG4rICAgICAgICAgICAgfSxcXG4rICAgICAgICAgICAge1xcbisgICAgICAgICAgICAgICAgXFxcInByb3RvY29sXFxcIjogXFxcImlwXFxcIixcXG4rICAgICAgICAgICAgICAgIFxcXCJwcmVmXFxcIjogMTAwLFxcbisgICAgICAgICAgICAgICAgXFxcImtpbmRcXFwiOiBcXFwicm91dGVcXFwiLFxcbisgICAgICAgICAgICAgICAgXFxcImNoYWluXFxcIjogMCxcXG4rICAgICAgICAgICAgICAgIFxcXCJvcHRpb25zXFxcIjoge1xcbisgICAgICAgICAgICAgICAgICAgIFxcXCJmaFxcXCI6IFxcXCIweDEwMjAxXFxcIixcXG4rICAgICAgICAgICAgICAgICAgICBcXFwiZmxvd2lkXFxcIjogXFxcIjE6MlxcXCJcXG4rICAgICAgICAgICAgICAgIH1cXG4rICAgICAgICAgICAgfVxcbisgICAgICAgIF0sXFxuKyAgICAgICAgXFxcInRlYXJkb3duXFxcIjogW1xcbisgICAgICAgICAgICBcXFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzc1xcXCJcXG4rICAgICAgICBdXFxuKyAgICB9LFxcbisgICAge1xcbisgICAgICAgIFxcXCJpZFxcXCI6IFxcXCI5ZDBlXFxcIixcXG4rICAgICAgICBcXFwibmFtZVxcXCI6IFxcXCJSZXBsYWNlIGJvdGggcm91dGUgZmlsdGVycyBzaGFyaW5nIGEga2V5XFxcIixcXG4rICAgICAgICBcXFwiY2F0ZWdvcnlcXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCJmaWx0ZXJcXFwiLFxcbisgICAgICAgICAgICBcXFwicm91dGVcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwicGx1Z2luc1xcXCI6IHtcXG4rICAgICAgICAgICAgXFxcInJlcXVpcmVzXFxcIjogXFxcIm5zUGx1Z2luXFxcIlxcbisgICAgICAgIH0sXFxuKyAgICAgICAgXFxcInNldHVwXFxcIjogW1xcbisgICAgICAgICAgICBcXFwiJFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzc1xcXCIsXFxuKyAgICAgICAgICAgIFxcXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxXFxcIixcXG4rICAgICAgICAgICAgXFxcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAyMDEgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjJcXFwiLFxcbisgICAgICAgICAgICBcXFwiJFRDIGZpbHRlciByZXBsYWNlIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAxMDEgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjlcXFwiXFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwiY21kVW5kZXJUZXN0XFxcIjogXFxcIiRUQyBmaWx0ZXIgcmVwbGFjZSBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMjAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMTo4XFxcIixcXG4rICAgICAgICBcXFwiZXhwRXhpdENvZGVcXFwiOiBcXFwiMFxcXCIsXFxuKyAgICAgICAgXFxcInZlcmlmeUNtZFxcXCI6IFxcXCIkVEMgLWogZmlsdGVyIHNob3cgZGV2ICRERVYxIHBhcmVudCBmZmZmOlxcXCIsXFxuKyAgICAgICAgXFxcIm1hdGNoSlNPTlxcXCI6IFtcXG4rICAgICAgICAgICAge1xcbisgICAgICAgICAgICAgICAgXFxcInByb3RvY29sXFxcIjogXFxcImlwXFxcIixcXG4rICAgICAgICAgICAgICAgIFxcXCJwcmVmXFxcIjogMTAwLFxcbisgICAgICAgICAgICAgICAgXFxcImtpbmRcXFwiOiBcXFwicm91dGVcXFwiLFxcbisgICAgICAgICAgICAgICAgXFxcImNoYWluXFxcIjogMFxcbisgICAgICAgICAgICB9LFxcbisgICAgICAgICAgICB7XFxuKyAgICAgICAgICAgICAgICBcXFwicHJvdG9jb2xcXFwiOiBcXFwiaXBcXFwiLFxcbisgICAgICAgICAgICAgICAgXFxcInByZWZcXFwiOiAxMDAsXFxuKyAgICAgICAgICAgICAgICBcXFwia2luZFxcXCI6IFxcXCJyb3V0ZVxcXCIsXFxuKyAgICAgICAgICAgICAgICBcXFwiY2hhaW5cXFwiOiAwLFxcbisgICAgICAgICAgICAgICAgXFxcIm9wdGlvbnNcXFwiOiB7XFxuKyAgICAgICAgICAgICAgICAgICAgXFxcImZoXFxcIjogXFxcIjB4MTAxMDFcXFwiLFxcbisgICAgICAgICAgICAgICAgICAgIFxcXCJmbG93aWRcXFwiOiBcXFwiMTo5XFxcIlxcbisgICAgICAgICAgICAgICAgfVxcbisgICAgICAgICAgICB9LFxcbisgICAgICAgICAgICB7XFxuKyAgICAgICAgICAgICAgICBcXFwicHJvdG9jb2xcXFwiOiBcXFwiaXBcXFwiLFxcbisgICAgICAgICAgICAgICAgXFxcInByZWZcXFwiOiAxMDAsXFxuKyAgICAgICAgICAgICAgICBcXFwia2luZFxcXCI6IFxcXCJyb3V0ZVxcXCIsXFxuKyAgICAgICAgICAgICAgICBcXFwiY2hhaW5cXFwiOiAwLFxcbisgICAgICAgICAgICAgICAgXFxcIm9wdGlvbnNcXFwiOiB7XFxuKyAgICAgICAgICAgICAgICAgICAgXFxcImZoXFxcIjogXFxcIjB4MTAyMDFcXFwiLFxcbisgICAgICAgICAgICAgICAgICAgIFxcXCJmbG93aWRcXFwiOiBcXFwiMTo4XFxcIlxcbisgICAgICAgICAgICAgICAgfVxcbisgICAgICAgICAgICB9XFxuKyAgICAgICAgXSxcXG4rICAgICAgICBcXFwidGVhcmRvd25cXFwiOiBbXFxuKyAgICAgICAgICAgIFxcXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXFxcIlxcbisgICAgICAgIF1cXG4gICAgIH1cXG4gXVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDo1OTozNi4zMjU4MjY2NDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMyMDkxOTkzMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9DTFNfUk9VVEU0XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicm91dGU0X2NoYW5nZVwiLFxuICAgIFwicm91dGU0X2RlbGV0ZVwiLFxuICAgIFwicm91dGU0X3NldF9wYXJtc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjbHNfcm91dGUgbmV0d29yayB0cmFmZmljIGNvbnRyb2wgY2xhc3NpZmllciBpbiBuZXQvc2NoZWQvY2xzX3JvdXRlLmMsIGludHJvZHVjaW5nIGEgcmVmY291bnQgKGZpbHRlcnNfcmVmKSB0byBtYW5hZ2Ugcm91dGU0X2J1Y2tldCBsaWZldGltZXMgZHVyaW5nIHJvdXRlIGZpbHRlciBtb2RpZmljYXRpb24sIGNyZWF0aW9uLCBhbmQgZGVsZXRpb24gKHJvdXRlNF9jaGFuZ2UsIHJvdXRlNF9kZWxldGUsIGFuZCByb3V0ZTRfc2V0X3Bhcm1zKS4gVGhpcyBpcyByZWFjaGFibGUgbmV0d29ya2luZyBjb2RlIGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsvdGMgZmlsdGVyIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDRiNDcwYThhYjI4ZjZmZTM3ZDVhNGU1N2E5MDU2YmMwOGM4ZThlMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDA6NTk6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmMgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbmluZGV4IDBkMTMyNGM5MDU4MzcuLjBmMjExZjAzMGZkOWEgMTAwNjQ0XG4tLS0gYS9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbisrKyBiL25ldC9zY2hlZC9jbHNfcm91dGUuY1xuQEAgLTExLDYgKzExLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kc3QuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG5AQCAtNDEsNiArNDIsNyBAQCBzdHJ1Y3Qgcm91dGU0X2hlYWQge1xuIHN0cnVjdCByb3V0ZTRfYnVja2V0IHtcbiBcdC8qIDE2IEZST00gYnVja2V0cyArIDE2IElJRiBidWNrZXRzICsgMSB3aWxkY2FyZCBidWNrZXQgKi9cbiBcdHN0cnVjdCByb3V0ZTRfZmlsdGVyIF9fcmN1XHQqaHRbMTYgKyAxNiArIDFdO1xuK1x0cmVmY291bnRfdFx0XHRcdGZpbHRlcnNfcmVmO1xuIFx0c3RydWN0IHJjdV9oZWFkXHRcdFx0cmN1O1xuIH07XG4gXG5AQCAtMzM2LDcgKzMzOCw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X2RlbGV0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqYXJnLCBib29sICpsYXN0LFxuIFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKm5mO1xuIFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XG4gXHR1bnNpZ25lZCBpbnQgaCA9IDA7XG4tXHRpbnQgaSwgaDE7XG4rXHRpbnQgaDE7XG4gXG4gXHRpZiAoIWhlYWQgfHwgIWYpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTM2MiwyMyArMzY0LDE0IEBAIHN0YXRpYyBpbnQgcm91dGU0X2RlbGV0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqYXJnLCBib29sICpsYXN0LFxuIFx0XHRcdHRjZl9leHRzX2dldF9uZXQoXHUwMDI2Zi1cdTAwM2VleHRzKTtcbiBcdFx0XHR0Y2ZfcXVldWVfd29yayhcdTAwMjZmLVx1MDAzZXJ3b3JrLCByb3V0ZTRfZGVsZXRlX2ZpbHRlcl93b3JrKTtcbiBcbi1cdFx0XHQvKiBTdHJpcCBSVE5MIHByb3RlY3RlZCB0cmVlICovXG4tXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2M9IDMyOyBpKyspIHtcbi1cdFx0XHRcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpydDtcbi1cbi1cdFx0XHRcdHJ0ID0gcnRubF9kZXJlZmVyZW5jZShiLVx1MDAzZWh0W2ldKTtcbi1cdFx0XHRcdGlmIChydClcbi1cdFx0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKSkge1xuK1x0XHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcbitcdFx0XHRcdGtmcmVlX3JjdShiLCByY3UpO1xuIFx0XHRcdH1cbi1cbi1cdFx0XHQvKiBPSywgc2Vzc2lvbiBoYXMgbm8gZmxvd3MgKi9cbi1cdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtXHUwMDNldGFibGVbdG9faGFzaChoKV0sIE5VTEwpO1xuLVx0XHRcdGtmcmVlX3JjdShiLCByY3UpO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXHR9XG4gXG4tb3V0OlxuIFx0Kmxhc3QgPSB0cnVlO1xuIFx0Zm9yIChoMSA9IDA7IGgxIFx1MDAzYz0gMjU2OyBoMSsrKSB7XG4gXHRcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoaGVhZC1cdTAwM2V0YWJsZVtoMV0pKSB7XG5AQCAtNDAwLDggKzM5Myw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSByb3V0ZTRfcG9saWN5W1RDQV9ST1VURTRfTUFYICsgMV0gPSB7XG4gc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG4gXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYmFzZSwgc3RydWN0IHJvdXRlNF9maWx0ZXIgKmYsXG4gXHRcdFx0ICAgIHUzMiBoYW5kbGUsIHN0cnVjdCByb3V0ZTRfaGVhZCAqaGVhZCxcbi1cdFx0XHQgICAgc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgbmxhdHRyICplc3QsIGludCBuZXcsXG4tXHRcdFx0ICAgIHUzMiBmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK1x0XHRcdCAgICBzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCBubGF0dHIgKmVzdCxcbitcdFx0XHQgICAgc3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsIHUzMiBmbGFncyxcbitcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHUzMiBpZCA9IDAsIHRvID0gMCwgbmhhbmRsZSA9IDB4ODAwMDtcbiBcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmcDtcbkBAIC00MTQsNyArNDA4LDcgQEAgc3RhdGljIGludCByb3V0ZTRfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHRpZiAodGJbVENBX1JPVVRFNF9UT10pIHtcbi1cdFx0aWYgKG5ldyBcdTAwMjZcdTAwMjYgaGFuZGxlIFx1MDAyNiAweDgwMDApIHtcbitcdFx0aWYgKCFmb2xkIFx1MDAyNlx1MDAyNiBoYW5kbGUgXHUwMDI2IDB4ODAwMCkge1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJJbnZhbGlkIGhhbmRsZVwiKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuQEAgLTQzNywxNCArNDMxLDE0IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0fSBlbHNlXG4gXHRcdG5oYW5kbGUgfD0gMHhGRkZGIFx1MDAzY1x1MDAzYyAxNjtcbiBcbi1cdGlmIChoYW5kbGUgXHUwMDI2XHUwMDI2IG5ldykge1xuK1x0aWYgKGhhbmRsZSBcdTAwMjZcdTAwMjYgKCFmb2xkIHx8IG5oYW5kbGUgPT0gKGhhbmRsZSBcdTAwMjYgfjB4N0YwMCkpKVxuIFx0XHRuaGFuZGxlIHw9IGhhbmRsZSBcdTAwMjYgMHg3RjAwO1xuLVx0XHRpZiAobmhhbmRsZSAhPSBoYW5kbGUpIHtcbi1cdFx0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuLVx0XHRcdFx0XHQgICBcIkhhbmRsZSBtaXNtYXRjaCBjb25zdHJ1Y3RlZDogJXggKGV4cGVjdGVkOiAleClcIixcbi1cdFx0XHRcdFx0ICAgaGFuZGxlLCBuaGFuZGxlKTtcbi1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cdFx0fVxuK1xuK1x0aWYgKGhhbmRsZSBcdTAwMjZcdTAwMjYgIWZvbGQgXHUwMDI2XHUwMDI2IG5oYW5kbGUgIT0gaGFuZGxlKSB7XG4rXHRcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXG4rXHRcdFx0XHQgICBcIkhhbmRsZSBtaXNtYXRjaCBjb25zdHJ1Y3RlZDogJXggKGV4cGVjdGVkOiAleClcIixcbitcdFx0XHRcdCAgIGhhbmRsZSwgbmhhbmRsZSk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuIFx0aWYgKCFuaGFuZGxlKSB7XG5AQCAtNDU5LDYgKzQ1Myw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0XHRpZiAoYiA9PSBOVUxMKVxuIFx0XHRcdHJldHVybiAtRU5PQlVGUztcbiBcbitcdFx0cmVmY291bnRfc2V0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYsIDEpO1xuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoaGVhZC1cdTAwM2V0YWJsZVtoMV0sIGIpO1xuIFx0fSBlbHNlIHtcbiBcdFx0dW5zaWduZWQgaW50IGgyID0gZnJvbV9oYXNoKG5oYW5kbGUgXHUwMDNlXHUwMDNlIDE2KTtcbkBAIC00NjYsOCArNDYxLDE0IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0XHRmb3IgKGZwID0gcnRubF9kZXJlZmVyZW5jZShiLVx1MDAzZWh0W2gyXSk7XG4gXHRcdCAgICAgZnA7XG4gXHRcdCAgICAgZnAgPSBydG5sX2RlcmVmZXJlbmNlKGZwLVx1MDAzZW5leHQpKVxuLVx0XHRcdGlmIChmcC1cdTAwM2VoYW5kbGUgPT0gZi1cdTAwM2VoYW5kbGUpXG4rXHRcdFx0aWYgKGZwICE9IGZvbGQgXHUwMDI2XHUwMDI2IGZwLVx1MDAzZWhhbmRsZSA9PSBuaGFuZGxlKSB7XG4rXHRcdFx0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuK1x0XHRcdFx0XHRcdCAgIFwiSGFuZGxlICV4IGlzIGFscmVhZHkgaW4gdXNlXCIsXG4rXHRcdFx0XHRcdFx0ICAgbmhhbmRsZSk7XG4gXHRcdFx0XHRyZXR1cm4gLUVFWElTVDtcbitcdFx0XHR9XG4rXG4rXHRcdHJlZmNvdW50X2luYyhcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKTtcbiBcdH1cbiBcbiBcdGlmICh0YltUQ0FfUk9VVEU0X1RPXSlcbkBAIC01MDAsOSArNTAxLDggQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmb2xkLCAqZjEsICpwZnAsICpmID0gTlVMTDtcbiBcdHN0cnVjdCByb3V0ZTRfYnVja2V0ICpiO1xuIFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX1JPVVRFNF9NQVggKyAxXTtcbi1cdHVuc2lnbmVkIGludCBoLCB0aDtcbitcdHVuc2lnbmVkIGludCBoO1xuIFx0aW50IGVycjtcbi1cdGJvb2wgbmV3ID0gdHJ1ZTtcbiBcbiBcdGlmICghaGFuZGxlKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCJDcmVhdGluZyB3aXRoIGhhbmRsZSBvZiAwIGlzIGludmFsaWRcIik7XG5AQCAtNTM5LDExICs1MzksMTAgQEAgc3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbiBcbiBcdFx0Zi1cdTAwM2V0cCA9IGZvbGQtXHUwMDNldHA7XG4gXHRcdGYtXHUwMDNlYmt0ID0gZm9sZC1cdTAwM2Via3Q7XG4tXHRcdG5ldyA9IGZhbHNlO1xuIFx0fVxuIFxuIFx0ZXJyID0gcm91dGU0X3NldF9wYXJtcyhuZXQsIHRwLCBiYXNlLCBmLCBoYW5kbGUsIGhlYWQsIHRiLFxuLVx0XHRcdCAgICAgICB0Y2FbVENBX1JBVEVdLCBuZXcsIGZsYWdzLCBleHRhY2spO1xuK1x0XHRcdCAgICAgICB0Y2FbVENBX1JBVEVdLCBmb2xkLCBmbGFncywgZXh0YWNrKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyb3V0O1xuIFxuQEAgLTU2MCwxNyArNTU5LDIwIEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmKTtcbiBcbiBcdGlmIChmb2xkKSB7XG4tXHRcdHRoID0gdG9faGFzaChmb2xkLVx1MDAzZWhhbmRsZSk7XG4rXHRcdGIgPSBmb2xkLVx1MDAzZWJrdDtcbiBcdFx0aCA9IGZyb21faGFzaChmb2xkLVx1MDAzZWhhbmRsZSBcdTAwM2VcdTAwM2UgMTYpO1xuLVx0XHRiID0gcnRubF9kZXJlZmVyZW5jZShoZWFkLVx1MDAzZXRhYmxlW3RoXSk7XG4tXHRcdGlmIChiKSB7XG4tXHRcdFx0ZnAgPSBcdTAwMjZiLVx1MDAzZWh0W2hdO1xuLVx0XHRcdGZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7XG4tXHRcdFx0ICAgICBmcCA9IFx1MDAyNnBmcC1cdTAwM2VuZXh0LCBwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCkpIHtcbi1cdFx0XHRcdGlmIChwZnAgPT0gZm9sZCkge1xuLVx0XHRcdFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmb2xkLVx1MDAzZW5leHQpO1xuLVx0XHRcdFx0XHRicmVhaztcbitcdFx0ZnAgPSBcdTAwMjZiLVx1MDAzZWh0W2hdO1xuK1x0XHRmb3IgKHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgcGZwO1xuK1x0XHQgICAgIGZwID0gXHUwMDI2cGZwLVx1MDAzZW5leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkge1xuK1x0XHRcdGlmIChwZnAgPT0gZm9sZCkge1xuK1x0XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC1cdTAwM2VuZXh0KTtcbitcdFx0XHRcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZikpIHtcbitcdFx0XHRcdFx0dW5zaWduZWQgaW50IHRoID0gdG9faGFzaChmb2xkLVx1MDAzZWhhbmRsZSk7XG4rXG4rXHRcdFx0XHRcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cdTAwM2V0YWJsZVt0aF0sIE5VTEwpO1xuK1x0XHRcdFx0XHRrZnJlZV9yY3UoYiwgcmN1KTtcbiBcdFx0XHRcdH1cbitcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvZmlsdGVycy9yb3V0ZS5qc29uIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb25cbmluZGV4IDA1Y2VkY2E2N2NjYWQuLjJkNTg0M2FlYmQ3MjkgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL2ZpbHRlcnMvcm91dGUuanNvblxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb25cbkBAIC0yMDIsNSArMjAyLDIxNSBAQFxuICAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4gICAgICAgICAgICAgXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBwYXJlbnQgcm9vdCBkcnJcIlxuICAgICAgICAgXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiYTdkMlwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiRGVsZXRlIGEgcm91dGUgZmlsdGVyIHRoYXQgd2FzIG1vdmVkIHRvIGFub3RoZXIgYnVja2V0XCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcImZpbHRlclwiLFxuKyAgICAgICAgICAgIFwicm91dGVcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtcbisgICAgICAgICAgICBcIiRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3NcIixcbisgICAgICAgICAgICBcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjFcIixcbisgICAgICAgICAgICBcIiRUQyBmaWx0ZXIgY2hhbmdlIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAwMDEgcm91dGUgZnJvbSAxIHRvIDIgY2xhc3NpZCAxOjFcIixcbisgICAgICAgICAgICBcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAyMDAgcm91dGUgZnJvbSA1IHRvIDUgY2xhc3NpZCAxOjVcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIGZpbHRlciBkZWwgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDAwMiByb3V0ZSBmcm9tIDEgdG8gMlwiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIC1qIGZpbHRlciBzaG93IGRldiAkREVWMSBwYXJlbnQgZmZmZjpcIixcbisgICAgICAgIFwibWF0Y2hKU09OXCI6IFtcbisgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgIFwicHJvdG9jb2xcIjogXCJpcFwiLFxuKyAgICAgICAgICAgICAgICBcInByZWZcIjogMjAwLFxuKyAgICAgICAgICAgICAgICBcImtpbmRcIjogXCJyb3V0ZVwiLFxuKyAgICAgICAgICAgICAgICBcImNoYWluXCI6IDBcbisgICAgICAgICAgICB9LFxuKyAgICAgICAgICAgIHtcbisgICAgICAgICAgICAgICAgXCJwcm90b2NvbFwiOiBcImlwXCIsXG4rICAgICAgICAgICAgICAgIFwicHJlZlwiOiAyMDAsXG4rICAgICAgICAgICAgICAgIFwia2luZFwiOiBcInJvdXRlXCIsXG4rICAgICAgICAgICAgICAgIFwiY2hhaW5cIjogMCxcbisgICAgICAgICAgICAgICAgXCJvcHRpb25zXCI6IHtcbisgICAgICAgICAgICAgICAgICAgIFwiZmhcIjogXCIweDUwMDA1XCIsXG4rICAgICAgICAgICAgICAgICAgICBcImZsb3dpZFwiOiBcIjE6NVwiXG4rICAgICAgICAgICAgICAgIH1cbisgICAgICAgICAgICB9XG4rICAgICAgICBdLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXCJcbisgICAgICAgIF1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcImMwNWFcIixcbisgICAgICAgIFwibmFtZVwiOiBcIlRyeSB0byBjaGFuZ2UgYSByb3V0ZSBmaWx0ZXIgb250byBhbiBhbHJlYWR5IHVzZWQgaGFuZGxlXCIsXG4rICAgICAgICBcImNhdGVnb3J5XCI6IFtcbisgICAgICAgICAgICBcImZpbHRlclwiLFxuKyAgICAgICAgICAgIFwicm91dGVcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwicGx1Z2luc1wiOiB7XG4rICAgICAgICAgICAgXCJyZXF1aXJlc1wiOiBcIm5zUGx1Z2luXCJcbisgICAgICAgIH0sXG4rICAgICAgICBcInNldHVwXCI6IFtcbisgICAgICAgICAgICBcIiRUQyBxZGlzYyBhZGQgZGV2ICRERVYxIGluZ3Jlc3NcIixcbisgICAgICAgICAgICBcIiRUQyBmaWx0ZXIgYWRkIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjEgYWN0aW9uIG9rXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIHJvdXRlIGZyb20gMiB0byAyIGNsYXNzaWQgMToyIGFjdGlvbiBkcm9wXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBmaWx0ZXIgY2hhbmdlIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAwMDEgcm91dGUgZnJvbSAyIHRvIDIgY2xhc3NpZCAxOjEgYWN0aW9uIG9rXCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMlwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgLWogZmlsdGVyIHNob3cgZGV2ICRERVYxIHBhcmVudCBmZmZmOlwiLFxuKyAgICAgICAgXCJtYXRjaEpTT05cIjogW1xuKyAgICAgICAgICAgIHtcbisgICAgICAgICAgICAgICAgXCJwcm90b2NvbFwiOiBcImlwXCIsXG4rICAgICAgICAgICAgICAgIFwicHJlZlwiOiAxMDAsXG4rICAgICAgICAgICAgICAgIFwia2luZFwiOiBcInJvdXRlXCIsXG4rICAgICAgICAgICAgICAgIFwiY2hhaW5cIjogMFxuKyAgICAgICAgICAgIH0sXG4rICAgICAgICAgICAge1xuKyAgICAgICAgICAgICAgICBcInByb3RvY29sXCI6IFwiaXBcIixcbisgICAgICAgICAgICAgICAgXCJwcmVmXCI6IDEwMCxcbisgICAgICAgICAgICAgICAgXCJraW5kXCI6IFwicm91dGVcIixcbisgICAgICAgICAgICAgICAgXCJjaGFpblwiOiAwLFxuKyAgICAgICAgICAgICAgICBcIm9wdGlvbnNcIjoge1xuKyAgICAgICAgICAgICAgICAgICAgXCJmaFwiOiBcIjB4MTAwMDFcIixcbisgICAgICAgICAgICAgICAgICAgIFwiZmxvd2lkXCI6IFwiMToxXCIsXG4rICAgICAgICAgICAgICAgICAgICBcImFjdGlvbnNcIjogW1xuKyAgICAgICAgICAgICAgICAgICAgICAgIHtcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmRlclwiOiAxLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImtpbmRcIjogXCJnYWN0XCIsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udHJvbF9hY3Rpb25cIjoge1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwicGFzc1wiXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbisgICAgICAgICAgICAgICAgICAgICAgICB9XG4rICAgICAgICAgICAgICAgICAgICBdXG4rICAgICAgICAgICAgICAgIH1cbisgICAgICAgICAgICB9LFxuKyAgICAgICAgICAgIHtcbisgICAgICAgICAgICAgICAgXCJwcm90b2NvbFwiOiBcImlwXCIsXG4rICAgICAgICAgICAgICAgIFwicHJlZlwiOiAxMDAsXG4rICAgICAgICAgICAgICAgIFwia2luZFwiOiBcInJvdXRlXCIsXG4rICAgICAgICAgICAgICAgIFwiY2hhaW5cIjogMCxcbisgICAgICAgICAgICAgICAgXCJvcHRpb25zXCI6IHtcbisgICAgICAgICAgICAgICAgICAgIFwiZmhcIjogXCIweDIwMDAyXCIsXG4rICAgICAgICAgICAgICAgICAgICBcImZsb3dpZFwiOiBcIjE6MlwiLFxuKyAgICAgICAgICAgICAgICAgICAgXCJhY3Rpb25zXCI6IFtcbisgICAgICAgICAgICAgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JkZXJcIjogMSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJraW5kXCI6IFwiZ2FjdFwiLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xfYWN0aW9uXCI6IHtcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcImRyb3BcIlxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4rICAgICAgICAgICAgICAgICAgICAgICAgfVxuKyAgICAgICAgICAgICAgICAgICAgXVxuKyAgICAgICAgICAgICAgICB9XG4rICAgICAgICAgICAgfVxuKyAgICAgICAgXSxcbisgICAgICAgIFwidGVhcmRvd25cIjogW1xuKyAgICAgICAgICAgIFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzc1wiXG4rICAgICAgICBdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCIzZjIxXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJSZXBsYWNlIGEgcm91dGUgZmlsdGVyIHRoYXQgc2hhcmVzIGl0cyBrZXkgd2l0aCBhbm90aGVyIGZpbHRlclwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJmaWx0ZXJcIixcbisgICAgICAgICAgICBcInJvdXRlXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMjAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToyXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBmaWx0ZXIgcmVwbGFjZSBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMTo5XCIsXG4rICAgICAgICBcImV4cEV4aXRDb2RlXCI6IFwiMFwiLFxuKyAgICAgICAgXCJ2ZXJpZnlDbWRcIjogXCIkVEMgLWogZmlsdGVyIHNob3cgZGV2ICRERVYxIHBhcmVudCBmZmZmOlwiLFxuKyAgICAgICAgXCJtYXRjaEpTT05cIjogW1xuKyAgICAgICAgICAgIHtcbisgICAgICAgICAgICAgICAgXCJwcm90b2NvbFwiOiBcImlwXCIsXG4rICAgICAgICAgICAgICAgIFwicHJlZlwiOiAxMDAsXG4rICAgICAgICAgICAgICAgIFwia2luZFwiOiBcInJvdXRlXCIsXG4rICAgICAgICAgICAgICAgIFwiY2hhaW5cIjogMFxuKyAgICAgICAgICAgIH0sXG4rICAgICAgICAgICAge1xuKyAgICAgICAgICAgICAgICBcInByb3RvY29sXCI6IFwiaXBcIixcbisgICAgICAgICAgICAgICAgXCJwcmVmXCI6IDEwMCxcbisgICAgICAgICAgICAgICAgXCJraW5kXCI6IFwicm91dGVcIixcbisgICAgICAgICAgICAgICAgXCJjaGFpblwiOiAwLFxuKyAgICAgICAgICAgICAgICBcIm9wdGlvbnNcIjoge1xuKyAgICAgICAgICAgICAgICAgICAgXCJmaFwiOiBcIjB4MTAxMDFcIixcbisgICAgICAgICAgICAgICAgICAgIFwiZmxvd2lkXCI6IFwiMTo5XCJcbisgICAgICAgICAgICAgICAgfVxuKyAgICAgICAgICAgIH0sXG4rICAgICAgICAgICAge1xuKyAgICAgICAgICAgICAgICBcInByb3RvY29sXCI6IFwiaXBcIixcbisgICAgICAgICAgICAgICAgXCJwcmVmXCI6IDEwMCxcbisgICAgICAgICAgICAgICAgXCJraW5kXCI6IFwicm91dGVcIixcbisgICAgICAgICAgICAgICAgXCJjaGFpblwiOiAwLFxuKyAgICAgICAgICAgICAgICBcIm9wdGlvbnNcIjoge1xuKyAgICAgICAgICAgICAgICAgICAgXCJmaFwiOiBcIjB4MTAyMDFcIixcbisgICAgICAgICAgICAgICAgICAgIFwiZmxvd2lkXCI6IFwiMToyXCJcbisgICAgICAgICAgICAgICAgfVxuKyAgICAgICAgICAgIH1cbisgICAgICAgIF0sXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcbisgICAgICAgICAgICBcIiRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3NcIlxuKyAgICAgICAgXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiOWQwZVwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiUmVwbGFjZSBib3RoIHJvdXRlIGZpbHRlcnMgc2hhcmluZyBhIGtleVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJmaWx0ZXJcIixcbisgICAgICAgICAgICBcInJvdXRlXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMTAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMjAxIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToyXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OVwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDIwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OFwiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIC1qIGZpbHRlciBzaG93IGRldiAkREVWMSBwYXJlbnQgZmZmZjpcIixcbisgICAgICAgIFwibWF0Y2hKU09OXCI6IFtcbisgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgIFwicHJvdG9jb2xcIjogXCJpcFwiLFxuKyAgICAgICAgICAgICAgICBcInByZWZcIjogMTAwLFxuKyAgICAgICAgICAgICAgICBcImtpbmRcIjogXCJyb3V0ZVwiLFxuKyAgICAgICAgICAgICAgICBcImNoYWluXCI6IDBcbisgICAgICAgICAgICB9LFxuKyAgICAgICAgICAgIHtcbisgICAgICAgICAgICAgICAgXCJwcm90b2NvbFwiOiBcImlwXCIsXG4rICAgICAgICAgICAgICAgIFwicHJlZlwiOiAxMDAsXG4rICAgICAgICAgICAgICAgIFwia2luZFwiOiBcInJvdXRlXCIsXG4rICAgICAgICAgICAgICAgIFwiY2hhaW5cIjogMCxcbisgICAgICAgICAgICAgICAgXCJvcHRpb25zXCI6IHtcbisgICAgICAgICAgICAgICAgICAgIFwiZmhcIjogXCIweDEwMTAxXCIsXG4rICAgICAgICAgICAgICAgICAgICBcImZsb3dpZFwiOiBcIjE6OVwiXG4rICAgICAgICAgICAgICAgIH1cbisgICAgICAgICAgICB9LFxuKyAgICAgICAgICAgIHtcbisgICAgICAgICAgICAgICAgXCJwcm90b2NvbFwiOiBcImlwXCIsXG4rICAgICAgICAgICAgICAgIFwicHJlZlwiOiAxMDAsXG4rICAgICAgICAgICAgICAgIFwia2luZFwiOiBcInJvdXRlXCIsXG4rICAgICAgICAgICAgICAgIFwiY2hhaW5cIjogMCxcbisgICAgICAgICAgICAgICAgXCJvcHRpb25zXCI6IHtcbisgICAgICAgICAgICAgICAgICAgIFwiZmhcIjogXCIweDEwMjAxXCIsXG4rICAgICAgICAgICAgICAgICAgICBcImZsb3dpZFwiOiBcIjE6OFwiXG4rICAgICAgICAgICAgICAgIH1cbisgICAgICAgICAgICB9XG4rICAgICAgICBdLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXCJcbisgICAgICAgIF1cbiAgICAgfVxuIF1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjU5OjM2LjMyNTgyODIyM1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNTMyNjA5NTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IFJvdXRlIENsYXNzaWZpZXIgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIHBhdGNoIGRvd24gYW5kIGZpZ3VyZSBvdXQgaWYgaXQncyBmdXp6LXdvcnRoeS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBjcnVjaWFsIHBvaW50czogdGhlIGNvbmZpZ3VyYXRpb24gcHJlcmVxdWlzaXRlcywgYW5kIHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgb3Igc3RydWN0dXJlcyB0aGF0IGRlc2VydmUgdGhlIG1vc3QgYXR0ZW50aW9uIGR1cmluZyBmdXp6aW5nLlxuXG5BbHJpZ2h0LCB0aGUgY2hhbmdlcyBpbnZvbHZlIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgIGFuZCBhIGNvcnJlc3BvbmRpbmcgc2VsZnRlc3QgdXBkYXRlIGluIGByb3V0ZS5qc29uYC4gVGhlIGNvZGUgY2hhbmdlcyBpbiBgY2xzX3JvdXRlLmNgIGFyZSB3aGF0IGludHJpZ3VlIG1lLiBXZSdyZSBzZWVpbmcgbW9kaWZpY2F0aW9ucyB0byB0aGUgYHJvdXRlNF9idWNrZXRgIHN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IHRoZSBhZGRpdGlvbiBvZiBgcmVmY291bnRfdCBmaWx0ZXJzX3JlZjtgLiBUaGlzIGhpbnRzIGF0IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIGFsd2F5cyBhIGdvb2Qgc2lnbiBmb3IgZnV6emluZyB0YXJnZXRzIVxuXG5Mb29raW5nIGNsb3NlcjogdGhlIGByb3V0ZTRfZGVsZXRlKClgIGZ1bmN0aW9uIG5vdyBpbmNsdWRlcyByZWZjb3VudCBoYW5kbGluZyBhbmQgYnVja2V0IGZyZWVpbmcgbG9naWMuIGByb3V0ZTRfc2V0X3Bhcm1zKClgIGhhcyB2YWxpZGF0aW9uLCBkdXBsaWNhdGUgY2hlY2tzLCBhbmQgcmVmY291bnQgbWFuYWdlbWVudCDigJMgYWxsIGFkZGluZyBlbnRyeSBwb2ludHMgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIEZpbmFsbHksIGByb3V0ZTRfY2hhbmdlKClgIHRvdWNoZXMgYGZvbGRgLCBidWNrZXQgaGFuZGxpbmcsIGFuZCwgY3JpdGljYWxseSwgYHJlZmNvdW50X2RlY19hbmRfdGVzdGAuIFRoYXQgbGFzdCBvbmUgaXMgc2NyZWFtaW5nIGZvciBzb21lIGZvY3VzZWQgZnV6emluZy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIEtjb25maWcgZm9yIGBuZXQvc2NoZWQvY2xzX3JvdXRlLmNgLiBOZWVkIHRvIGtub3cgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgdG8gZW5hYmxlIHRoaXMgY29kZS4gSSdsbCB1c2UgYGdyZXBwZXJgIChvciBqdXN0IHJlYWQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSwgb2YgY291cnNlKSB0byBtYWtlIHN1cmUgSSBrbm93IGhvdyB0byBjb25maWd1cmUgdGhlIGtlcm5lbCB0byBoaXQgdGhlc2UgY29kZSBwYXRocy4gS25vd2luZyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUga2V5IHRvIGNyZWF0aW5nIGEgZm9jdXNlZCBmdXp6aW5nIGNhbXBhaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDMwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6NTk6NDcuODU4NDQwMjM4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2Mzg2MjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNsc19yb3V0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9NDk0PWNvbmZpZyBORVRfQ0xTX1JPVVRFNFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNTAzLVxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbm5ldC9zY2hlZC9LY29uZmlnOjUwNDpcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfcm91dGUuXFxubmV0L3NjaGVkL0tjb25maWctNTA1LVxcbi0tXFxubmV0L3NjaGVkL01ha2VmaWxlPTY4PW9iai0kKENPTkZJR19ORVRfQ0xTX1UzMilcXHQrPSBjbHNfdTMyLm9cXG5uZXQvc2NoZWQvTWFrZWZpbGU6Njk6b2JqLSQoQ09ORklHX05FVF9DTFNfUk9VVEU0KVxcdCs9IGNsc19yb3V0ZS5vXFxubmV0L3NjaGVkL01ha2VmaWxlLTcwLW9iai0kKENPTkZJR19ORVRfQ0xTX0ZXKVxcdCs9IGNsc19mdy5vXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtMi0vKlxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYzozOiAqIG5ldC9zY2hlZC9jbHNfcm91dGUuY1xcdFJPVVRFNCBjbGFzc2lmaWVyLlxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy00LSAqXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM9NjcyPXN0YXRpYyB2b2lkIHJvdXRlNF9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy02NzktXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjY4MDpzdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX3JvdXRlNF9vcHMgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjgxLVxcdC5raW5kXFx0XFx0PVxcdFxcXCJyb3V0ZVxcXCIsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM9Njk1PXN0YXRpYyBpbnQgX19pbml0IGluaXRfcm91dGU0KHZvaWQpXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTY5Ni17XFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjY5NzpcXHRyZXR1cm4gcmVnaXN0ZXJfdGNmX3Byb3RvX29wcyhcXHUwMDI2Y2xzX3JvdXRlNF9vcHMpO1xcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy02OTgtfVxcbi0tXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jPTcwMD1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9yb3V0ZTQodm9pZClcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNzAxLXtcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM6NzAyOlxcdHVucmVnaXN0ZXJfdGNmX3Byb3RvX29wcyhcXHUwMDI2Y2xzX3JvdXRlNF9vcHMpO1xcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy03MDMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDo1OTo0Ny45MDQ4MzExMTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjI4NzM2NjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyB0aGUgS2NvbmZpZyBmb3IgTmV0d29yayBTY2hlZHVsaW5nKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBuZXR3b3JrIHNjaGVkdWxlciB3aXRoaW4gdGhlIGtlcm5lbC4gTGV0IG1lIG9wZW4gdXAgYG5ldC9zY2hlZC9LY29uZmlnYCBhbmQgem9vbSBpbiBvbiBsaW5lIDQ5NC4gSG9wZWZ1bGx5LCB0aGF0IGxvY2F0aW9uIHdpbGwgdHJpZ2dlciBhIGtleSBzZWN0aW9uLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgc29tZXRoaW5nIHNwZWNpZmljIHJlbGF0ZWQgdG8gdGhlIHNoYXBpbmcgb3IgcXVldWluZyBkaXNjaXBsaW5lcyB0aGF0IEkgaGF2ZSBiZWVuIHJlc2VhcmNoaW5nLiBJIHdpbGwgc2VlIHdoYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgcHJvYmxlbSBJIGFtIHRyeWluZyB0byBzb2x2ZS4gSSB3aWxsIGxpa2VseSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgZGVmYXVsdCBzZXR0aW5ncyB0byBtYWtlIHRoZSBiZXN0IGRlY2lzaW9uIGZvciBteSBjdXJyZW50IG5lZWRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4NTE3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6NTk6NTAuNTMzNTcwMzY4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDgwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDgwOlxcdFxcbiA0ODE6XFx0Y29uZmlnIE5FVF9DTFNcXG4gNDgyOlxcdFxcdGJvb2xcXG4gNDgzOlxcdFxcbiA0ODQ6XFx0Y29uZmlnIE5FVF9DTFNfQkFTSUNcXG4gNDg1OlxcdFxcdHRyaXN0YXRlIFxcXCJFbGVtZW50YXJ5IGNsYXNzaWZpY2F0aW9uIChCQVNJQylcXFwiXFxuIDQ4NjpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA0ODc6XFx0XFx0aGVscFxcbiA0ODg6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyB1c2luZ1xcbiA0ODk6XFx0XFx0ICBvbmx5IGV4dGVuZGVkIG1hdGNoZXMgYW5kIGFjdGlvbnMuXFxuIDQ5MDpcXHRcXG4gNDkxOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA0OTI6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX2Jhc2ljLlxcbiA0OTM6XFx0XFxuIDQ5NDpcXHRjb25maWcgTkVUX0NMU19ST1VURTRcXG4gNDk1OlxcdFxcdHRyaXN0YXRlIFxcXCJSb3V0aW5nIGRlY2lzaW9uIChST1VURSlcXFwiXFxuIDQ5NjpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gNDk3OlxcdFxcdHNlbGVjdCBJUF9ST1VURV9DTEFTU0lEXFxuIDQ5ODpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA0OTk6XFx0XFx0aGVscFxcbiA1MDA6XFx0XFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBjbGFzc2lmeSBwYWNrZXRzXFxuIDUwMTpcXHRcXHQgIGFjY29yZGluZyB0byB0aGUgcm91dGUgdGFibGUgZW50cnkgdGhleSBtYXRjaGVkLlxcbiA1MDI6XFx0XFxuIDUwMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNTA0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19yb3V0ZS5cXG4gNTA1OlxcdFxcbiA1MDY6XFx0Y29uZmlnIE5FVF9DTFNfRldcXG4gNTA3OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbWFyayAoRlcpXFxcIlxcbiA1MDg6XFx0XFx0c2VsZWN0IE5FVF9DTFNcXG4gNTA5OlxcdFxcdGhlbHBcXG4gNTEwOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3aWxsIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0c1xcbiA1MTE6XFx0XFx0ICBhY2NvcmRpbmcgdG8gbmV0ZmlsdGVyL2ZpcmV3YWxsIG1hcmtzLlxcbiA1MTI6XFx0XFxuIDUxMzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gNTE0OlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNsc19mdy5cXG4gNTE1OlxcdFxcbiA1MTY6XFx0Y29uZmlnIE5FVF9DTFNfVTMyXFxuIDUxNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcXFwiXFxuIDUxODpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA1MTk6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDo1OTo1MC41MzM2NTkwNzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjc2NjQyNjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgY2xzX3JvdXRlLmNgIGZvciBDbGFyaXR5KipcblxuT2theSwgc28gSSB3YW50IHRvIGdldCBhIHNvbGlkIGdyYXNwIG9uIHdoYXQncyBjaGFuZ2VkIHdpdGhpbiB0aGUgYG5ldC9zY2hlZC9jbHNfcm91dGUuY2AgbW9kdWxlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHBpbnBvaW50IHRoZSBleGFjdCBtb2RpZmljYXRpb25zIG1hZGUgdG8gdGhvc2Uga2V5IGZ1bmN0aW9ucy4gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgY29kZSBpdHNlbGYsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgcmVjZW50IGNvbW1pdHMgYW5kIHRoZSBkaWZmcy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIHRoZSByb3V0aW5nIGNsYXNzaWZpY2F0aW9uIGxvZ2ljLCBhbnkgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucywgYW5kIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBHb2luZyBkaXJlY3RseSB0byB0aGUgc291cmNlIHdpbGwgcHJvdmlkZSB0aGUgY2xlYW5lc3QgcGljdHVyZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjU4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMDo1OTo1Mi44MTAzMDQ1NzJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2Nsc19yb3V0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMzMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMzMDpcXHR9XFxuIDMzMTpcXHRcXG4gMzMyOlxcdHN0YXRpYyBpbnQgcm91dGU0X2RlbGV0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqYXJnLCBib29sICpsYXN0LFxcbiAzMzM6XFx0XFx0XFx0XFx0IGJvb2wgcnRubF9oZWxkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDMzNDpcXHR7XFxuIDMzNTpcXHRcXHRzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQgPSBydG5sX2RlcmVmZXJlbmNlKHRwLVxcdTAwM2Vyb290KTtcXG4gMzM2OlxcdFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmID0gYXJnO1xcbiAzMzc6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3UgKipmcDtcXG4gMzM4OlxcdFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpuZjtcXG4gMzM5OlxcdFxcdHN0cnVjdCByb3V0ZTRfYnVja2V0ICpiO1xcbiAzNDA6XFx0XFx0dW5zaWduZWQgaW50IGggPSAwO1xcbiAzNDE6XFx0XFx0aW50IGgxO1xcbiAzNDI6XFx0XFxuIDM0MzpcXHRcXHRpZiAoIWhlYWQgfHwgIWYpXFxuIDM0NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0XFx0aCA9IGYtXFx1MDAzZWhhbmRsZTtcXG4gMzQ3OlxcdFxcdGIgPSBmLVxcdTAwM2Via3Q7XFxuIDM0ODpcXHRcXG4gMzQ5OlxcdFxcdGZwID0gXFx1MDAyNmItXFx1MDAzZWh0W2Zyb21faGFzaChoIFxcdTAwM2VcXHUwMDNlIDE2KV07XFxuIDM1MDpcXHRcXHRmb3IgKG5mID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBuZjtcXG4gMzUxOlxcdFxcdCAgICAgZnAgPSBcXHUwMDI2bmYtXFx1MDAzZW5leHQsIG5mID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XFxuIDM1MjpcXHRcXHRcXHRpZiAobmYgPT0gZikge1xcbiAzNTM6XFx0XFx0XFx0XFx0LyogdW5saW5rIGl0ICovXFxuIDM1NDpcXHRcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKCpmcCwgcnRubF9kZXJlZmVyZW5jZShmLVxcdTAwM2VuZXh0KSk7XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdFxcdFxcdC8qIENsZWFyIGFueSBmYXN0bWFwIGVudHJpZXMgdGhhdCBtYXkgcmVmIHRoaXMgZmlsdGVyIGFuZFxcbiAzNTc6XFx0XFx0XFx0XFx0ICogbWFyayBpdCBkeWluZyBzbyBpbi1mbGlnaHQgcmVhZGVycyBjYW4ndCByZXB1Ymxpc2ggaXRcXG4gMzU4OlxcdFxcdFxcdFxcdCAqIGFmdGVyIHRoZSByZXNldC5cXG4gMzU5OlxcdFxcdFxcdFxcdCAqL1xcbiAzNjA6XFx0XFx0XFx0XFx0cm91dGU0X3Jlc2V0X2Zhc3RtYXAoaGVhZCwgZik7XFxuIDM2MTpcXHRcXG4gMzYyOlxcdFxcdFxcdFxcdC8qIERlbGV0ZSBpdCAqL1xcbiAzNjM6XFx0XFx0XFx0XFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFxcdTAwMjZmLVxcdTAwM2VyZXMpO1xcbiAzNjQ6XFx0XFx0XFx0XFx0dGNmX2V4dHNfZ2V0X25ldChcXHUwMDI2Zi1cXHUwMDNlZXh0cyk7XFxuIDM2NTpcXHRcXHRcXHRcXHR0Y2ZfcXVldWVfd29yayhcXHUwMDI2Zi1cXHUwMDNlcndvcmssIHJvdXRlNF9kZWxldGVfZmlsdGVyX3dvcmspO1xcbiAzNjY6XFx0XFxuIDM2NzpcXHRcXHRcXHRcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZiLVxcdTAwM2VmaWx0ZXJzX3JlZikpIHtcXG4gMzY4OlxcdFxcdFxcdFxcdFxcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cXHUwMDNldGFibGVbdG9faGFzaChoKV0sIE5VTEwpO1xcbiAzNjk6XFx0XFx0XFx0XFx0XFx0a2ZyZWVfcmN1KGIsIHJjdSk7XFxuIDM3MDpcXHRcXHRcXHRcXHR9XFxuIDM3MTpcXHRcXHRcXHRcXHRicmVhaztcXG4gMzcyOlxcdFxcdFxcdH1cXG4gMzczOlxcdFxcdH1cXG4gMzc0OlxcdFxcbiAzNzU6XFx0XFx0Kmxhc3QgPSB0cnVlO1xcbiAzNzY6XFx0XFx0Zm9yIChoMSA9IDA7IGgxIFxcdTAwM2M9IDI1NjsgaDErKykge1xcbiAzNzc6XFx0XFx0XFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihoZWFkLVxcdTAwM2V0YWJsZVtoMV0pKSB7XFxuIDM3ODpcXHRcXHRcXHRcXHQqbGFzdCA9IGZhbHNlO1xcbiAzNzk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDM4MDpcXHRcXHRcXHR9XFxuIDM4MTpcXHRcXHR9XFxuIDM4MjpcXHRcXG4gMzgzOlxcdFxcdHJldHVybiAwO1xcbiAzODQ6XFx0fVxcbiAzODU6XFx0XFxuIDM4NjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcm91dGU0X3BvbGljeVtUQ0FfUk9VVEU0X01BWCArIDFdID0ge1xcbiAzODc6XFx0XFx0W1RDQV9ST1VURTRfQ0xBU1NJRF1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuIDM4ODpcXHRcXHRbVENBX1JPVVRFNF9UT11cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIDB4RkYpLFxcbiAzODk6XFx0XFx0W1RDQV9ST1VURTRfRlJPTV1cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIDB4RkYpLFxcbiAzOTA6XFx0XFx0W1RDQV9ST1VURTRfSUlGXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMHg3RkZGKSxcXG4gMzkxOlxcdH07XFxuIDM5MjpcXHRcXG4gMzkzOlxcdHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbiAzOTQ6XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYmFzZSwgc3RydWN0IHJvdXRlNF9maWx0ZXIgKmYsXFxuIDM5NTpcXHRcXHRcXHRcXHQgICAgdTMyIGhhbmRsZSwgc3RydWN0IHJvdXRlNF9oZWFkICpoZWFkLFxcbiAzOTY6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IG5sYXR0ciAqZXN0LFxcbiAzOTc6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmb2xkLCB1MzIgZmxhZ3MsXFxuIDM5ODpcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiAzOTk6XFx0e1xcbiA0MDA6XFx0XFx0dTMyIGlkID0gMCwgdG8gPSAwLCBuaGFuZGxlID0gMHg4MDAwO1xcbiA0MDE6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZwO1xcbiA0MDI6XFx0XFx0dW5zaWduZWQgaW50IGgxO1xcbiA0MDM6XFx0XFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XFxuIDQwNDpcXHRcXHRpbnQgZXJyO1xcbiA0MDU6XFx0XFxuIDQwNjpcXHRcXHRlcnIgPSB0Y2ZfZXh0c192YWxpZGF0ZShuZXQsIHRwLCB0YiwgZXN0LCBcXHUwMDI2Zi1cXHUwMDNlZXh0cywgZmxhZ3MsIGV4dGFjayk7XFxuIDQwNzpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gNDA4OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDQwOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDA6NTk6NTIuODEwNDA2MzIyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc3ODI4NDkyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBmb2N1c2luZyBvbiB0aGUgaW1wbGllZCB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXBlciBpbnRvIFJvdXRpbmcgUGFyYW1ldGVyIE1hbmFnZW1lbnQqKlxuXG5BbHJpZ2h0LCBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgZm9yIGByb3V0ZTRfc2V0X3Bhcm1zYCBhbmQgYHJvdXRlNF9jaGFuZ2VgLiBUaGF0IHByZXZpb3VzIGNvbnRleHQgYWJvdXQgdGhlIG92ZXJhbGwgZmxvdyBhbmQgdGhlIGluaXRpYWwgZnVuY3Rpb24gY2FsbCBpcyBzdGlsbCBmcmVzaCBpbiBteSBtaW5kLiBJJ20gZm9jdXNpbmcgb24gdGhlc2UgdHdvIGZ1bmN0aW9ucyBiZWNhdXNlIHRoZXkncmUgY3JpdGljYWwgZm9yIGFjdHVhbGx5IGNvbmZpZ3VyaW5nIGFuZCBwb3RlbnRpYWxseSBtb2RpZnlpbmcgdGhlIHJvdXRpbmcgc2V0dXAsIHJpZ2h0PyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgcGFyYW1ldGVycyBhcmUgYmVpbmcgc2V0IGFuZCBob3cgY2hhbmdlcyBhcmUgYmVpbmcgaW1wbGVtZW50ZWQuIFNwZWNpZmljYWxseSwgd2hhdCdzIHRoZSBsb2dpYyB0aGVyZT8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZGlyZWN0bHkgbW9kaWZ5aW5nIGRhdGEgc3RydWN0dXJlcywgb3IgYXJlIHRoZXJlIG1vcmUgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBtb2R1bGVzIG9yIHByb2Nlc3NlcyBpbnZvbHZlZD8gSSdtIGFudGljaXBhdGluZyB0aGF0IHRoZXNlIHdpbGwgYmUgdGhlIGNvcmUgZnVuY3Rpb25zIGZvciBlaXRoZXIgaW5pdGlhbCBjb25maWd1cmF0aW9uIG9mIHRoZSByb3V0aW5nIHRhYmxlIG9yIGFkanVzdG1lbnQgb2YgdGhlc2UgcGFyYW1ldGVycyBkdXJpbmcgcnVudGltZS4gRnJvbSBleHBlcmllbmNlIEkga25vdyB0aGF0IHRoaXMgaXMgYSBjcml0aWNhbCBzZWN0aW9uIHRvIHByZXZlbnQgaW5jb25zaXN0ZW50IGJlaGF2aW9yLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGF0b21pY2l0eSBpc3N1ZXMsIGFuZCBlcnJvciBoYW5kbGluZyDigJMgdGhvc2UgYXJlIGFsd2F5cyBrZXkgYXJlYXMgb2YgY29uY2VybiBpbiByb3V0aW5nIG1hbmFnZW1lbnQuIEl0J3MgdGltZSB0byBkaWcgaW4gYW5kIG1hcCBvdXQgdGhlIGNvbnRyb2wgZmxvdywgbG9vayBmb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcywgYW5kIHNlZSBob3cgd2VsbCB0aGlzIGlzIGRlc2lnbmVkIGZvciBzY2FsYWJpbGl0eSBhbmQgcm9idXN0bmVzcy4gTGV0J3Mgc2VlIGhvdyB3ZWxsIHRoZSBjb2RlIGhhbmRsZXMgZWRnZSBjYXNlcywgdG9vIC0gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gZGVhbHMgd2l0aCBhbGwgdGhlIGNvcm5lciBjYXNlcyBJIGNhbiB0aGluayBvZiwgaW5jbHVkaW5nIHdoZW4gdGhlIHJlcXVlc3RlZCBjaGFuZ2UgaXMgbm90IGFsbG93ZWQuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3ODMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjU5OjU1LjU4ODY5NTEzNVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2Nsc19yb3V0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxMCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQxMDpcXHRcXHRpZiAodGJbVENBX1JPVVRFNF9UT10pIHtcXG4gNDExOlxcdFxcdFxcdGlmICghZm9sZCBcXHUwMDI2XFx1MDAyNiBoYW5kbGUgXFx1MDAyNiAweDgwMDApIHtcXG4gNDEyOlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIkludmFsaWQgaGFuZGxlXFxcIik7XFxuIDQxMzpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDE0OlxcdFxcdFxcdH1cXG4gNDE1OlxcdFxcdFxcdHRvID0gbmxhX2dldF91MzIodGJbVENBX1JPVVRFNF9UT10pO1xcbiA0MTY6XFx0XFx0XFx0bmhhbmRsZSA9IHRvO1xcbiA0MTc6XFx0XFx0fVxcbiA0MTg6XFx0XFxuIDQxOTpcXHRcXHRpZiAodGJbVENBX1JPVVRFNF9GUk9NXSBcXHUwMDI2XFx1MDAyNiB0YltUQ0FfUk9VVEU0X0lJRl0pIHtcXG4gNDIwOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0FUVFIoZXh0YWNrLCB0YltUQ0FfUk9VVEU0X0ZST01dLFxcbiA0MjE6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCInZnJvbScgYW5kICdmcm9taWYnIGFyZSBtdXR1YWxseSBleGNsdXNpdmVcXFwiKTtcXG4gNDIyOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MjM6XFx0XFx0fVxcbiA0MjQ6XFx0XFxuIDQyNTpcXHRcXHRpZiAodGJbVENBX1JPVVRFNF9GUk9NXSkge1xcbiA0MjY6XFx0XFx0XFx0aWQgPSBubGFfZ2V0X3UzMih0YltUQ0FfUk9VVEU0X0ZST01dKTtcXG4gNDI3OlxcdFxcdFxcdG5oYW5kbGUgfD0gaWQgXFx1MDAzY1xcdTAwM2MgMTY7XFxuIDQyODpcXHRcXHR9IGVsc2UgaWYgKHRiW1RDQV9ST1VURTRfSUlGXSkge1xcbiA0Mjk6XFx0XFx0XFx0aWQgPSBubGFfZ2V0X3UzMih0YltUQ0FfUk9VVEU0X0lJRl0pO1xcbiA0MzA6XFx0XFx0XFx0bmhhbmRsZSB8PSAoaWQgfCAweDgwMDApIFxcdTAwM2NcXHUwMDNjIDE2O1xcbiA0MzE6XFx0XFx0fSBlbHNlXFxuIDQzMjpcXHRcXHRcXHRuaGFuZGxlIHw9IDB4RkZGRiBcXHUwMDNjXFx1MDAzYyAxNjtcXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0aWYgKGhhbmRsZSBcXHUwMDI2XFx1MDAyNiAoIWZvbGQgfHwgbmhhbmRsZSA9PSAoaGFuZGxlIFxcdTAwMjYgfjB4N0YwMCkpKVxcbiA0MzU6XFx0XFx0XFx0bmhhbmRsZSB8PSBoYW5kbGUgXFx1MDAyNiAweDdGMDA7XFxuIDQzNjpcXHRcXG4gNDM3OlxcdFxcdGlmIChoYW5kbGUgXFx1MDAyNlxcdTAwMjYgIWZvbGQgXFx1MDAyNlxcdTAwMjYgbmhhbmRsZSAhPSBoYW5kbGUpIHtcXG4gNDM4OlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX0ZNVChleHRhY2ssXFxuIDQzOTpcXHRcXHRcXHRcXHRcXHQgICBcXFwiSGFuZGxlIG1pc21hdGNoIGNvbnN0cnVjdGVkOiAleCAoZXhwZWN0ZWQ6ICV4KVxcXCIsXFxuIDQ0MDpcXHRcXHRcXHRcXHRcXHQgICBoYW5kbGUsIG5oYW5kbGUpO1xcbiA0NDE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ0MjpcXHRcXHR9XFxuIDQ0MzpcXHRcXG4gNDQ0OlxcdFxcdGlmICghbmhhbmRsZSkge1xcbiA0NDU6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiUmVwbGFjaW5nIHdpdGggaGFuZGxlIG9mIDAgaXMgaW52YWxpZFxcXCIpO1xcbiA0NDY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQ0NzpcXHRcXHR9XFxuIDQ0ODpcXHRcXG4gNDQ5OlxcdFxcdGgxID0gdG9faGFzaChuaGFuZGxlKTtcXG4gNDUwOlxcdFxcdGIgPSBydG5sX2RlcmVmZXJlbmNlKGhlYWQtXFx1MDAzZXRhYmxlW2gxXSk7XFxuIDQ1MTpcXHRcXHRpZiAoIWIpIHtcXG4gNDUyOlxcdFxcdFxcdGIgPSBremFsbG9jX29iaihzdHJ1Y3Qgcm91dGU0X2J1Y2tldCwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4gNDUzOlxcdFxcdFxcdGlmIChiID09IE5VTEwpXFxuIDQ1NDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuIDQ1NTpcXHRcXG4gNDU2OlxcdFxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2Yi1cXHUwMDNlZmlsdGVyc19yZWYsIDEpO1xcbiA0NTc6XFx0XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGhlYWQtXFx1MDAzZXRhYmxlW2gxXSwgYik7XFxuIDQ1ODpcXHRcXHR9IGVsc2Uge1xcbiA0NTk6XFx0XFx0XFx0dW5zaWduZWQgaW50IGgyID0gZnJvbV9oYXNoKG5oYW5kbGUgXFx1MDAzZVxcdTAwM2UgMTYpO1xcbiA0NjA6XFx0XFxuIDQ2MTpcXHRcXHRcXHRmb3IgKGZwID0gcnRubF9kZXJlZmVyZW5jZShiLVxcdTAwM2VodFtoMl0pO1xcbiA0NjI6XFx0XFx0XFx0ICAgICBmcDtcXG4gNDYzOlxcdFxcdFxcdCAgICAgZnAgPSBydG5sX2RlcmVmZXJlbmNlKGZwLVxcdTAwM2VuZXh0KSlcXG4gNDY0OlxcdFxcdFxcdFxcdGlmIChmcCAhPSBmb2xkIFxcdTAwMjZcXHUwMDI2IGZwLVxcdTAwM2VoYW5kbGUgPT0gbmhhbmRsZSkge1xcbiA0NjU6XFx0XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcXG4gNDY2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcXCJIYW5kbGUgJXggaXMgYWxyZWFkeSBpbiB1c2VcXFwiLFxcbiA0Njc6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgbmhhbmRsZSk7XFxuIDQ2ODpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gNDY5OlxcdFxcdFxcdFxcdH1cXG4gNDcwOlxcdFxcbiA0NzE6XFx0XFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZiLVxcdTAwM2VmaWx0ZXJzX3JlZik7XFxuIDQ3MjpcXHRcXHR9XFxuIDQ3MzpcXHRcXG4gNDc0OlxcdFxcdGlmICh0YltUQ0FfUk9VVEU0X1RPXSlcXG4gNDc1OlxcdFxcdFxcdGYtXFx1MDAzZWlkID0gdG87XFxuIDQ3NjpcXHRcXG4gNDc3OlxcdFxcdGlmICh0YltUQ0FfUk9VVEU0X0ZST01dKVxcbiA0Nzg6XFx0XFx0XFx0Zi1cXHUwMDNlaWQgPSB0byB8IGlkXFx1MDAzY1xcdTAwM2MxNjtcXG4gNDc5OlxcdFxcdGVsc2UgaWYgKHRiW1RDQV9ST1VURTRfSUlGXSlcXG4gNDgwOlxcdFxcdFxcdGYtXFx1MDAzZWlpZiA9IGlkO1xcbiA0ODE6XFx0XFxuIDQ4MjpcXHRcXHRmLVxcdTAwM2VoYW5kbGUgPSBuaGFuZGxlO1xcbiA0ODM6XFx0XFx0Zi1cXHUwMDNlYmt0ID0gYjtcXG4gNDg0OlxcdFxcdGYtXFx1MDAzZXRwID0gdHA7XFxuIDQ4NTpcXHRcXG4gNDg2OlxcdFxcdGlmICh0YltUQ0FfUk9VVEU0X0NMQVNTSURdKSB7XFxuIDQ4NzpcXHRcXHRcXHRmLVxcdTAwM2VyZXMuY2xhc3NpZCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9ST1VURTRfQ0xBU1NJRF0pO1xcbiA0ODg6XFx0XFx0XFx0dGNmX2JpbmRfZmlsdGVyKHRwLCBcXHUwMDI2Zi1cXHUwMDNlcmVzLCBiYXNlKTtcXG4gNDg5OlxcdFxcdH1cXG4gNDkwOlxcdFxcbiA0OTE6XFx0XFx0cmV0dXJuIDA7XFxuIDQ5MjpcXHR9XFxuIDQ5MzpcXHRcXG4gNDk0OlxcdHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXFxuIDQ5NTpcXHRcXHRcXHRcXHQgc3RydWN0IHRjZl9wcm90byAqdHAsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdTMyIGhhbmRsZSxcXG4gNDk2OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICoqdGNhLCB2b2lkICoqYXJnLCB1MzIgZmxhZ3MsXFxuIDQ5NzpcXHRcXHRcXHRcXHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiA0OTg6XFx0e1xcbiA0OTk6XFx0XFx0c3RydWN0IHJvdXRlNF9oZWFkICpoZWFkID0gcnRubF9kZXJlZmVyZW5jZSh0cC1cXHUwMDNlcm9vdCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjU5OjU1LjU4ODgxODE4NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMTUyMjU4MTI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgcm91dGU0X2NoYW5nZWAgTGluZXMgNTAwLTU5MCoqXG5cbk9rYXksIEknbSBkaXZpbmcgaW50byBgcm91dGU0X2NoYW5nZWAgbm93LCBzcGVjaWZpY2FsbHkgbGluZXMgNTAwIHRvIDU5MC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY29uc2lkZXIgd2hhdCB0aGlzIHNlY3Rpb24gb2YgY29kZSAqbGlrZWx5KiBkZWFscyB3aXRoLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24gYW5kIHRoZSBcImNoYW5nZVwiIGluIHRoZSBmaWxlbmFtZSwgSSdtIGFudGljaXBhdGluZyBzb21lIGZvcm0gb2Ygc3RhdGUgdHJhbnNpdGlvbiwgcGVyaGFwcyByZWxhdGVkIHRvIHJvdXRpbmcgdXBkYXRlcywgZmFpbG92ZXIgbWVjaGFuaXNtcywgb3IgbWF5YmUgZXZlbiBjb25maWd1cmF0aW9uIGNoYW5nZXMuIFRoaXMgcmFuZ2UgZmVlbHMgc2lnbmlmaWNhbnQsIHNvIGl0J3MgcHJvYmFibHkgaGFuZGxpbmcgYSBjb3JlIGxvZ2ljIGJsb2NrIHJhdGhlciB0aGFuIGEgdHJpdmlhbCBjb25kaXRpb25hbCBvciBzaW1wbGUgZGF0YSBtYW5pcHVsYXRpb24uXG5cbkknbSBtZW50YWxseSBwcmVwYXJpbmcgdG8gbG9vayBmb3Igc3BlY2lmaWMga2V5d29yZHMgYW5kIHBhdHRlcm5zLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgcmVmZXJlbmNlcyB0byByb3V0ZSB0YWJsZXMsIG5ldHdvcmsgaW50ZXJmYWNlcywgcGVyaGFwcyBzb21lIHNvcnQgb2YgXCJpZi9lbHNlXCIgb3IgXCJzd2l0Y2hcIiBzdGF0ZW1lbnQgZ292ZXJuaW5nIHRoZSByb3V0aW5nIGJlaGF2aW9yLCBhbmQgaG9wZWZ1bGx5IHNvbWUgbG9nZ2luZyBvciBlcnJvciBoYW5kbGluZy4gSSdsbCBiZSBrZWVwaW5nIGFuIGV5ZSBvdXQgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgbG9ja2luZyBtZWNoYW5pc21zLCBlc3BlY2lhbGx5IGlmIHRoaXMgY29kZSBpcyB0b3VjaGluZyBzaGFyZWQgcmVzb3VyY2VzIG9yIGlzIG11bHRpdGhyZWFkZWQuXG5cbkZ1cnRoZXJtb3JlLCBJIGFtIGxvb2tpbmcgZm9yIHdheXMgdG8gc2VlIGhvdyB0aGlzIGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgZmlsZS4gQXJlIHRoZXJlIGFueSBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkIGZyb20gdGhpcyByYW5nZSwgb3IgaXMgdGhpcyB0aGUgZnVuY3Rpb24gdGhhdCBpcyBtYWtpbmcgdGhlIGNhbGw/IEFyZSB0aGVyZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHVwZGF0ZWQgb3IgcmVmZXJlbmNlZCBpbiB0aGlzIHJhbmdlLCBhbmQgd2hlcmUgZWxzZSBhcmUgdGhleSB1c2VkP1xuXG5JJ20gYWltaW5nIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlICppbnRlbnQqIG9mIHRoaXMgYmxvY2sgZmlyc3Qg4oCTIHdoYXQncyB0aGUgZ29hbCBpdCdzIHRyeWluZyB0byBhY2hpZXZlPyBUaGVuLCBJJ2xsIGRyaWxsIGRvd24gaW50byB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0byBzZWUgaWYgdGhlIGFwcHJvYWNoIGlzIHNvdW5kLCBlZmZpY2llbnQsIGFuZCB3ZWxsLWRvY3VtZW50ZWQuIEZpbmFsbHksIEknbGwgYmUgZm9ybWluZyBhbiBpbml0aWFsIGh5cG90aGVzaXMgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgSSBtaWdodCBjb25zaWRlci4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2MjUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjU5OjU4Ljc0MTA3ODkzOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDcwODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2Nsc19yb3V0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUwMCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDUwMDpcXHRcXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciBfX3JjdSAqKmZwO1xcbiA1MDE6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZvbGQsICpmMSwgKnBmcCwgKmYgPSBOVUxMO1xcbiA1MDI6XFx0XFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XFxuIDUwMzpcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltUQ0FfUk9VVEU0X01BWCArIDFdO1xcbiA1MDQ6XFx0XFx0dW5zaWduZWQgaW50IGg7XFxuIDUwNTpcXHRcXHRpbnQgZXJyO1xcbiA1MDY6XFx0XFxuIDUwNzpcXHRcXHRpZiAoIWhhbmRsZSkge1xcbiA1MDg6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQ3JlYXRpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkXFxcIik7XFxuIDUwOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTEwOlxcdFxcdH1cXG4gNTExOlxcdFxcbiA1MTI6XFx0XFx0aWYgKE5MX1JFUV9BVFRSX0NIRUNLKGV4dGFjaywgTlVMTCwgdGNhLCBUQ0FfT1BUSU9OUykpIHtcXG4gNTEzOlxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFxcXCJNaXNzaW5nIG9wdGlvbnNcXFwiKTtcXG4gNTE0OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MTU6XFx0XFx0fVxcbiA1MTY6XFx0XFxuIDUxNzpcXHRcXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkX2RlcHJlY2F0ZWQodGIsIFRDQV9ST1VURTRfTUFYLCB0Y2FbVENBX09QVElPTlNdLFxcbiA1MTg6XFx0XFx0XFx0XFx0XFx0XFx0ICByb3V0ZTRfcG9saWN5LCBOVUxMKTtcXG4gNTE5OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiA1MjA6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gNTIxOlxcdFxcbiA1MjI6XFx0XFx0Zm9sZCA9ICphcmc7XFxuIDUyMzpcXHRcXHRpZiAoZm9sZCBcXHUwMDI2XFx1MDAyNiBmb2xkLVxcdTAwM2VoYW5kbGUgIT0gaGFuZGxlKVxcbiA1MjQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUyNTpcXHRcXG4gNTI2OlxcdFxcdGVyciA9IC1FTk9CVUZTO1xcbiA1Mjc6XFx0XFx0ZiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb3V0ZTRfZmlsdGVyLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiA1Mjg6XFx0XFx0aWYgKCFmKVxcbiA1Mjk6XFx0XFx0XFx0Z290byBlcnJvdXQ7XFxuIDUzMDpcXHRcXG4gNTMxOlxcdFxcdGVyciA9IHRjZl9leHRzX2luaXQoXFx1MDAyNmYtXFx1MDAzZWV4dHMsIG5ldCwgVENBX1JPVVRFNF9BQ1QsIFRDQV9ST1VURTRfUE9MSUNFKTtcXG4gNTMyOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiA1MzM6XFx0XFx0XFx0Z290byBlcnJvdXQ7XFxuIDUzNDpcXHRcXG4gNTM1OlxcdFxcdGlmIChmb2xkKSB7XFxuIDUzNjpcXHRcXHRcXHRmLVxcdTAwM2VpZCA9IGZvbGQtXFx1MDAzZWlkO1xcbiA1Mzc6XFx0XFx0XFx0Zi1cXHUwMDNlaWlmID0gZm9sZC1cXHUwMDNlaWlmO1xcbiA1Mzg6XFx0XFx0XFx0Zi1cXHUwMDNlaGFuZGxlID0gZm9sZC1cXHUwMDNlaGFuZGxlO1xcbiA1Mzk6XFx0XFxuIDU0MDpcXHRcXHRcXHRmLVxcdTAwM2V0cCA9IGZvbGQtXFx1MDAzZXRwO1xcbiA1NDE6XFx0XFx0XFx0Zi1cXHUwMDNlYmt0ID0gZm9sZC1cXHUwMDNlYmt0O1xcbiA1NDI6XFx0XFx0fVxcbiA1NDM6XFx0XFxuIDU0NDpcXHRcXHRlcnIgPSByb3V0ZTRfc2V0X3Bhcm1zKG5ldCwgdHAsIGJhc2UsIGYsIGhhbmRsZSwgaGVhZCwgdGIsXFxuIDU0NTpcXHRcXHRcXHRcXHQgICAgICAgdGNhW1RDQV9SQVRFXSwgZm9sZCwgZmxhZ3MsIGV4dGFjayk7XFxuIDU0NjpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gNTQ3OlxcdFxcdFxcdGdvdG8gZXJyb3V0O1xcbiA1NDg6XFx0XFxuIDU0OTpcXHRcXHRoID0gZnJvbV9oYXNoKGYtXFx1MDAzZWhhbmRsZSBcXHUwMDNlXFx1MDAzZSAxNik7XFxuIDU1MDpcXHRcXHRmcCA9IFxcdTAwMjZmLVxcdTAwM2Via3QtXFx1MDAzZWh0W2hdO1xcbiA1NTE6XFx0XFx0Zm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7XFxuIDU1MjpcXHRcXHQgICAgIChmMSA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkgIT0gTlVMTDtcXG4gNTUzOlxcdFxcdCAgICAgZnAgPSBcXHUwMDI2ZjEtXFx1MDAzZW5leHQpXFxuIDU1NDpcXHRcXHRcXHRpZiAoZi1cXHUwMDNlaGFuZGxlIFxcdTAwM2MgZjEtXFx1MDAzZWhhbmRsZSlcXG4gNTU1OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1NTY6XFx0XFxuIDU1NzpcXHRcXHR0Y2ZfYmxvY2tfbmV0aWZfa2VlcF9kc3QodHAtXFx1MDAzZWNoYWluLVxcdTAwM2VibG9jayk7XFxuIDU1ODpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoZi1cXHUwMDNlbmV4dCwgZjEpO1xcbiA1NTk6XFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZik7XFxuIDU2MDpcXHRcXG4gNTYxOlxcdFxcdGlmIChmb2xkKSB7XFxuIDU2MjpcXHRcXHRcXHRiID0gZm9sZC1cXHUwMDNlYmt0O1xcbiA1NjM6XFx0XFx0XFx0aCA9IGZyb21faGFzaChmb2xkLVxcdTAwM2VoYW5kbGUgXFx1MDAzZVxcdTAwM2UgMTYpO1xcbiA1NjQ6XFx0XFx0XFx0ZnAgPSBcXHUwMDI2Yi1cXHUwMDNlaHRbaF07XFxuIDU2NTpcXHRcXHRcXHRmb3IgKHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgcGZwO1xcbiA1NjY6XFx0XFx0XFx0ICAgICBmcCA9IFxcdTAwMjZwZnAtXFx1MDAzZW5leHQsIHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKSkge1xcbiA1Njc6XFx0XFx0XFx0XFx0aWYgKHBmcCA9PSBmb2xkKSB7XFxuIDU2ODpcXHRcXHRcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmb2xkLVxcdTAwM2VuZXh0KTtcXG4gNTY5OlxcdFxcdFxcdFxcdFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmItXFx1MDAzZWZpbHRlcnNfcmVmKSkge1xcbiA1NzA6XFx0XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IHRoID0gdG9faGFzaChmb2xkLVxcdTAwM2VoYW5kbGUpO1xcbiA1NzE6XFx0XFxuIDU3MjpcXHRcXHRcXHRcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtXFx1MDAzZXRhYmxlW3RoXSwgTlVMTCk7XFxuIDU3MzpcXHRcXHRcXHRcXHRcXHRcXHRrZnJlZV9yY3UoYiwgcmN1KTtcXG4gNTc0OlxcdFxcdFxcdFxcdFxcdH1cXG4gNTc1OlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbiA1NzY6XFx0XFx0XFx0XFx0fVxcbiA1Nzc6XFx0XFx0XFx0fVxcbiA1Nzg6XFx0XFx0fVxcbiA1Nzk6XFx0XFxuIDU4MDpcXHRcXHRyb3V0ZTRfcmVzZXRfZmFzdG1hcChoZWFkLCBmb2xkKTtcXG4gNTgxOlxcdFxcdCphcmcgPSBmO1xcbiA1ODI6XFx0XFx0aWYgKGZvbGQpIHtcXG4gNTgzOlxcdFxcdFxcdHRjZl91bmJpbmRfZmlsdGVyKHRwLCBcXHUwMDI2Zm9sZC1cXHUwMDNlcmVzKTtcXG4gNTg0OlxcdFxcdFxcdHRjZl9leHRzX2dldF9uZXQoXFx1MDAyNmZvbGQtXFx1MDAzZWV4dHMpO1xcbiA1ODU6XFx0XFx0XFx0dGNmX3F1ZXVlX3dvcmsoXFx1MDAyNmZvbGQtXFx1MDAzZXJ3b3JrLCByb3V0ZTRfZGVsZXRlX2ZpbHRlcl93b3JrKTtcXG4gNTg2OlxcdFxcdH1cXG4gNTg3OlxcdFxcdHJldHVybiAwO1xcbiA1ODg6XFx0XFxuIDU4OTpcXHRlcnJvdXQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAwOjU5OjU4Ljc0MTE4NzM1OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5NTkzMDI3NDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0OiBjbHNfcm91dGUgUmVmYWN0b3IgaW4gbmV0L3NjaGVkKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBleHBlcnQgaW5zdGluY3RzIGFyZSB0ZWxsaW5nIG1lIHRoaXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gV2UncmUgbG9va2luZyBhdCBhIHJlZmFjdG9yIG9mIGBjbHNfcm91dGVgLCBzcGVjaWZpY2FsbHkgaW4gYG5ldC9zY2hlZC9jbHNfcm91dGUuY2AsIHdoaWNoIGlzIGEgVHJhZmZpYyBDb250cm9sIGNsYXNzaWZpZXIgKFJPVVRFNCkgaW4gTGludXggbmV0d29ya2luZy4gVGhpcyBjb2RlIGlzIGNyaXRpY2FsLCBhcyBpdCdzIHRoZSBjb3JlIG9mIGhvdyB0cmFmZmljIGlzIHJvdXRlZCBhbmQgZmlsdGVyZWQsIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluayDigJMgcnRuZXRsaW5rIGFuZCBgdGNgIGNvbW1hbmRzIGxpa2UgYFJUTV9ORVdURklMVEVSYCwgYFJUTV9ERUxURklMVEVSYCwgZXRjLiBTeXprYWxsZXIgYWxyZWFkeSBleGVyY2lzZXMgdGhpcyBhcmVhLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyByZWZhY3RvcmluZyBidWNrZXQgbGlmZXRpbWUgbWFuYWdlbWVudC4gSXQncyBtb3ZpbmcgZnJvbSBpdGVyYXRpbmcgdGhyb3VnaCBidWNrZXQgZW50cmllcyB0byB1c2luZyBhIGByZWZjb3VudF90IGZpbHRlcnNfcmVmYCwgd2hpY2ggaW1wbGllcyBjaGFuZ2VzIHRvIGZpbHRlciBjaGFuZ2UsIHJlcGxhY2VtZW50LCBhbmQgaGFuZGxlIHZhbGlkYXRpb24gbG9naWMuIFRoYXQncyBhIGNsYXNzaWMgYXJlYSB3aGVyZSBzdWJ0bGUgY29uY3VycmVuY3kgYnVncyBvciBpbmNvcnJlY3QgaGFuZGxpbmcgb2YgZWRnZSBjYXNlcyBjYW4gZWFzaWx5IHNsaXAgaW4uIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiAqKldvcnRoRnV6emluZyA9IHRydWUuKipcblxuQ29uZmlnLXdpc2UsIHdlIG5lZWQgYE5FVF9DTFNfUk9VVEU0YCBlbmFibGVkLiBUaGF0IHNlZW1zIGxpa2UgdGhlIG1haW4gcmVxdWlyZW1lbnQsIHdpdGggYSBkZXBlbmRlbmN5IG9uIGBJTkVUYC4gSSdsbCBtYWtlIHN1cmUgdGhhdCdzIHNldCBpbiB0aGUgZnV6emVyIGNvbmZpZ3VyYXRpb24uIFNvLCAqKkVuYWJsZUNvbmZpZ3MqKjogYFtcIk5FVF9DTFNfUk9VVEU0XCJdYC5cblxuTG9va2luZyBhdCB0aGUgY29kZSBtb2RpZmljYXRpb25zLCB0aGUgcGF0Y2ggaGFzIHRvdWNoZWQgdGhyZWUga2V5IGZ1bmN0aW9uczogYHJvdXRlNF9kZWxldGVgLCBgcm91dGU0X3NldF9wYXJtc2AsIGFuZCBgcm91dGU0X2NoYW5nZWAuIFdoaWxlIHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gYGNsc19yb3V0ZS5jYCBhcmUgYWxzbyByZWxldmFudCwgdGhlc2UgYXJlIHRoZSBvbmVzICpkaXJlY3RseSogbW9kaWZpZWQsIHNvIEknbGwgZm9jdXMgb24gdGhlbS4gKipGb2N1c1N5bWJvbHMqKjogYFtcInJvdXRlNF9jaGFuZ2VcIiwgXCJyb3V0ZTRfZGVsZXRlXCIsIFwicm91dGU0X3NldF9wYXJtc1wiXWAuXG5cblRvIGJlIGNyeXN0YWwgY2xlYXI6IHRoZSBwYXRjaCBtb2RpZmllcyBjb2RlIChhbmQgYSBjcml0aWNhbCBkYXRhc3RydWN0dXJlKSBpbiBuZXQvc2NoZWQgZHVyaW5nIHJvdXRlIGZpbHRlciBjcmVhdGlvbiwgcmVwbGFjZW1lbnQsIGFuZCBkZWxldGlvbiAoYHJvdXRlNF9jaGFuZ2VgLCBgcm91dGU0X3NldF9wYXJtc2AsIGByb3V0ZTRfZGVsZXRlYCkuIFRoZXNlIGNoYW5nZXMgbW9kaWZ5IHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaW4gdGhlIG5ldHdvcmsgdHJhZmZpYyBjb250cm9sIHN1YnN5c3RlbSBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rL3RjIGZpbHRlciBjb25maWd1cmF0aW9uLiBUaGlzIHJlZmFjdG9yaW5nLCB3aXRoIGl0cyBmb2N1cyBvbiBsaWZldGltZSBtYW5hZ2VtZW50IGFuZCByZWZlcmVuY2UgY291bnRzLCBtYWtlcyB0aGlzIGEgcHJpbWUgdGFyZ2V0LlxuXG5BbHJpZ2h0LCBldmVyeXRoaW5nIGxpbmVzIHVwLiBJdCdzIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBMZXQncyBnZXQgdGhpcyBmdXp6ZXIgcG9pbnRlZCBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ0NiwiT3V0cHV0VG9rZW5zIjoxNDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMTowMDowOC4zMzQyMTgxMDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzU5NjgwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0NMU19ST1VURTRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyb3V0ZTRfY2hhbmdlXCIsXG4gICAgXCJyb3V0ZTRfZGVsZXRlXCIsXG4gICAgXCJyb3V0ZTRfc2V0X3Bhcm1zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNsc19yb3V0ZSBuZXR3b3JrIHRyYWZmaWMgY29udHJvbCBjbGFzc2lmaWVyIGluIG5ldC9zY2hlZC9jbHNfcm91dGUuYywgaW50cm9kdWNpbmcgYSByZWZjb3VudCAoZmlsdGVyc19yZWYpIHRvIG1hbmFnZSByb3V0ZTRfYnVja2V0IGxpZmV0aW1lcyBkdXJpbmcgcm91dGUgZmlsdGVyIG1vZGlmaWNhdGlvbiwgY3JlYXRpb24sIGFuZCBkZWxldGlvbiAocm91dGU0X2NoYW5nZSwgcm91dGU0X2RlbGV0ZSwgYW5kIHJvdXRlNF9zZXRfcGFybXMpLiBUaGlzIGlzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGNvZGUgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgbmV0bGluay90YyBmaWx0ZXIgb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfQ0xTX1JPVVRFNFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJvdXRlNF9jaGFuZ2VcIixcbiAgICBcInJvdXRlNF9kZWxldGVcIixcbiAgICBcInJvdXRlNF9zZXRfcGFybXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY2xzX3JvdXRlIG5ldHdvcmsgdHJhZmZpYyBjb250cm9sIGNsYXNzaWZpZXIgaW4gbmV0L3NjaGVkL2Nsc19yb3V0ZS5jLCBpbnRyb2R1Y2luZyBhIHJlZmNvdW50IChmaWx0ZXJzX3JlZikgdG8gbWFuYWdlIHJvdXRlNF9idWNrZXQgbGlmZXRpbWVzIGR1cmluZyByb3V0ZSBmaWx0ZXIgbW9kaWZpY2F0aW9uLCBjcmVhdGlvbiwgYW5kIGRlbGV0aW9uIChyb3V0ZTRfY2hhbmdlLCByb3V0ZTRfZGVsZXRlLCBhbmQgcm91dGU0X3NldF9wYXJtcykuIFRoaXMgaXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgY29kZSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBuZXRsaW5rL3RjIGZpbHRlciBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMTowMDowOC40MTc4MjQ5MjNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNzI3ODkwMTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MDA6MDguNDE4NDUxOTEyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzM3MjcyNTk2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBsaWZldGltZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nIGlzc3VlcyBpbiBjbHNfcm91dGUgKHRyYWZmaWMgY29udHJvbCByb3V0ZSBjbGFzc2lmaWVyKSB3aGVuIHVwZGF0aW5nIG9yIGRlbGV0aW5nIHJvdXRlIGZpbHRlcnMgYWNyb3NzIGJ1Y2tldHMsIGJ5IGludHJvZHVjaW5nIGEgYGZpbHRlcnNfcmVmYCByZWZjb3VudCAoYHJlZmNvdW50X3RgKSB0byBgc3RydWN0IHJvdXRlNF9idWNrZXRgLlxcblxcbkFuYWx5c2lzIG9mIG1lbW9yeSBzYW5pdGl6YXRpb24gcmVxdWlyZW1lbnRzOlxcbi0gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBLTVNBTjogQWxsIGFsbG9jYXRpb25zIChgc3RydWN0IHJvdXRlNF9idWNrZXRgIGFuZCBgc3RydWN0IHJvdXRlNF9maWx0ZXJgKSBjb250aW51ZSB0byB1c2UgYGt6YWxsb2Nfb2JqYCBlbnN1cmluZyBhbGwgbWVtb3J5IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBvbiBjcmVhdGlvbi4gVGhlIG5ldyBgZmlsdGVyc19yZWZgIGZpZWxkIGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBgcmVmY291bnRfc2V0YCBhbmQgbWFuYWdlZCB2aWEgYHJlZmNvdW50X2luY2AgLyBgcmVmY291bnRfZGVjX2FuZF90ZXN0YC4gTm8gc3RydWN0IGZpZWxkcywgcGFkZGluZywgb3IgdW5pbml0aWFsaXplZCBidWZmZXJzIGFyZSBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UgdmlhIE5ldGxpbmsgKGFsbCBkdW1wZWQgYXR0cmlidXRlcyBhcmUgdmFsaWRhdGVkIGFuZCBwb3B1bGF0ZWQgZnJvbSBpbml0aWFsaXplZCBzY2FsYXIgdmFsdWVzKS4gVGhlcmUgaXMgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLlxcbi0gVUFGIC8gS0FTQU46IFRoZSBjaGFuZ2VzIG1vZGlmeSByZWZlcmVuY2UgY291bnRpbmcgYW5kIGJ1Y2tldCBkZWFsbG9jYXRpb24gbGlmZXRpbWVzIChga2ZyZWVfcmN1YCksIHdoaWNoIGZhbGwgdW5kZXIgVXNlLUFmdGVyLUZyZWUgYW5kIHJlZmNvdW50IHNhZmV0eS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgbW9uaXRvcmVkIGFuZCBkZXRlY3RlZCBieSBLQVNBTiBhbmQgdGhlIGtlcm5lbCdzIGJ1aWx0LWluIHJlZmNvdW50IGNoZWNraW5nIChgcmVmY291bnRfdGApLlxcblxcblRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDA0YjQ3MGE4YWIyOGY2ZmUzN2Q1YTRlNTdhOTA1NmJjMDhjOGU4ZTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDAwOjU5OjMzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jIGIvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXG5pbmRleCAwZDEzMjRjOTA1ODM3Li4wZjIxMWYwMzBmZDlhIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc19yb3V0ZS5jXG4rKysgYi9uZXQvc2NoZWQvY2xzX3JvdXRlLmNcbkBAIC0xMSw2ICsxMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWZjb3VudC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvZHN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvcm91dGUuaFx1MDAzZVxuQEAgLTQxLDYgKzQyLDcgQEAgc3RydWN0IHJvdXRlNF9oZWFkIHtcbiBzdHJ1Y3Qgcm91dGU0X2J1Y2tldCB7XG4gXHQvKiAxNiBGUk9NIGJ1Y2tldHMgKyAxNiBJSUYgYnVja2V0cyArIDEgd2lsZGNhcmQgYnVja2V0ICovXG4gXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciBfX3JjdVx0Kmh0WzE2ICsgMTYgKyAxXTtcbitcdHJlZmNvdW50X3RcdFx0XHRmaWx0ZXJzX3JlZjtcbiBcdHN0cnVjdCByY3VfaGVhZFx0XHRcdHJjdTtcbiB9O1xuIFxuQEAgLTMzNiw3ICszMzgsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCxcbiBcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpuZjtcbiBcdHN0cnVjdCByb3V0ZTRfYnVja2V0ICpiO1xuIFx0dW5zaWduZWQgaW50IGggPSAwO1xuLVx0aW50IGksIGgxO1xuK1x0aW50IGgxO1xuIFxuIFx0aWYgKCFoZWFkIHx8ICFmKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbkBAIC0zNjIsMjMgKzM2NCwxNCBAQCBzdGF0aWMgaW50IHJvdXRlNF9kZWxldGUoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmFyZywgYm9vbCAqbGFzdCxcbiBcdFx0XHR0Y2ZfZXh0c19nZXRfbmV0KFx1MDAyNmYtXHUwMDNlZXh0cyk7XG4gXHRcdFx0dGNmX3F1ZXVlX3dvcmsoXHUwMDI2Zi1cdTAwM2Vyd29yaywgcm91dGU0X2RlbGV0ZV9maWx0ZXJfd29yayk7XG4gXG4tXHRcdFx0LyogU3RyaXAgUlROTCBwcm90ZWN0ZWQgdHJlZSAqL1xuLVx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSAzMjsgaSsrKSB7XG4tXHRcdFx0XHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqcnQ7XG4tXG4tXHRcdFx0XHRydCA9IHJ0bmxfZGVyZWZlcmVuY2UoYi1cdTAwM2VodFtpXSk7XG4tXHRcdFx0XHRpZiAocnQpXG4tXHRcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZikpIHtcbitcdFx0XHRcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cdTAwM2V0YWJsZVt0b19oYXNoKGgpXSwgTlVMTCk7XG4rXHRcdFx0XHRrZnJlZV9yY3UoYiwgcmN1KTtcbiBcdFx0XHR9XG4tXG4tXHRcdFx0LyogT0ssIHNlc3Npb24gaGFzIG5vIGZsb3dzICovXG4tXHRcdFx0UkNVX0lOSVRfUE9JTlRFUihoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldLCBOVUxMKTtcbi1cdFx0XHRrZnJlZV9yY3UoYiwgcmN1KTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuIFxuLW91dDpcbiBcdCpsYXN0ID0gdHJ1ZTtcbiBcdGZvciAoaDEgPSAwOyBoMSBcdTAwM2M9IDI1NjsgaDErKykge1xuIFx0XHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGhlYWQtXHUwMDNldGFibGVbaDFdKSkge1xuQEAgLTQwMCw4ICszOTMsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcm91dGU0X3BvbGljeVtUQ0FfUk9VVEU0X01BWCArIDFdID0ge1xuIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGJhc2UsIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmLFxuIFx0XHRcdCAgICB1MzIgaGFuZGxlLCBzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQsXG4tXHRcdFx0ICAgIHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IG5sYXR0ciAqZXN0LCBpbnQgbmV3LFxuLVx0XHRcdCAgICB1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbitcdFx0XHQgICAgc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgbmxhdHRyICplc3QsXG4rXHRcdFx0ICAgIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmb2xkLCB1MzIgZmxhZ3MsXG4rXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHR1MzIgaWQgPSAwLCB0byA9IDAsIG5oYW5kbGUgPSAweDgwMDA7XG4gXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZnA7XG5AQCAtNDE0LDcgKzQwOCw3IEBAIHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0aWYgKHRiW1RDQV9ST1VURTRfVE9dKSB7XG4tXHRcdGlmIChuZXcgXHUwMDI2XHUwMDI2IGhhbmRsZSBcdTAwMjYgMHg4MDAwKSB7XG4rXHRcdGlmICghZm9sZCBcdTAwMjZcdTAwMjYgaGFuZGxlIFx1MDAyNiAweDgwMDApIHtcbiBcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiSW52YWxpZCBoYW5kbGVcIik7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbkBAIC00MzcsMTQgKzQzMSwxNCBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiBcdH0gZWxzZVxuIFx0XHRuaGFuZGxlIHw9IDB4RkZGRiBcdTAwM2NcdTAwM2MgMTY7XG4gXG4tXHRpZiAoaGFuZGxlIFx1MDAyNlx1MDAyNiBuZXcpIHtcbitcdGlmIChoYW5kbGUgXHUwMDI2XHUwMDI2ICghZm9sZCB8fCBuaGFuZGxlID09IChoYW5kbGUgXHUwMDI2IH4weDdGMDApKSlcbiBcdFx0bmhhbmRsZSB8PSBoYW5kbGUgXHUwMDI2IDB4N0YwMDtcbi1cdFx0aWYgKG5oYW5kbGUgIT0gaGFuZGxlKSB7XG4tXHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcbi1cdFx0XHRcdFx0ICAgXCJIYW5kbGUgbWlzbWF0Y2ggY29uc3RydWN0ZWQ6ICV4IChleHBlY3RlZDogJXgpXCIsXG4tXHRcdFx0XHRcdCAgIGhhbmRsZSwgbmhhbmRsZSk7XG4tXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tXHRcdH1cbitcbitcdGlmIChoYW5kbGUgXHUwMDI2XHUwMDI2ICFmb2xkIFx1MDAyNlx1MDAyNiBuaGFuZGxlICE9IGhhbmRsZSkge1xuK1x0XHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJIYW5kbGUgbWlzbWF0Y2ggY29uc3RydWN0ZWQ6ICV4IChleHBlY3RlZDogJXgpXCIsXG4rXHRcdFx0XHQgICBoYW5kbGUsIG5oYW5kbGUpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbiBcdGlmICghbmhhbmRsZSkge1xuQEAgLTQ1OSw2ICs0NTMsNyBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiBcdFx0aWYgKGIgPT0gTlVMTClcbiBcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG4rXHRcdHJlZmNvdW50X3NldChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmLCAxKTtcbiBcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGhlYWQtXHUwMDNldGFibGVbaDFdLCBiKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHVuc2lnbmVkIGludCBoMiA9IGZyb21faGFzaChuaGFuZGxlIFx1MDAzZVx1MDAzZSAxNik7XG5AQCAtNDY2LDggKzQ2MSwxNCBAQCBzdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbiBcdFx0Zm9yIChmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoYi1cdTAwM2VodFtoMl0pO1xuIFx0XHQgICAgIGZwO1xuIFx0XHQgICAgIGZwID0gcnRubF9kZXJlZmVyZW5jZShmcC1cdTAwM2VuZXh0KSlcbi1cdFx0XHRpZiAoZnAtXHUwMDNlaGFuZGxlID09IGYtXHUwMDNlaGFuZGxlKVxuK1x0XHRcdGlmIChmcCAhPSBmb2xkIFx1MDAyNlx1MDAyNiBmcC1cdTAwM2VoYW5kbGUgPT0gbmhhbmRsZSkge1xuK1x0XHRcdFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcbitcdFx0XHRcdFx0XHQgICBcIkhhbmRsZSAleCBpcyBhbHJlYWR5IGluIHVzZVwiLFxuK1x0XHRcdFx0XHRcdCAgIG5oYW5kbGUpO1xuIFx0XHRcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXHRcdFx0fVxuK1xuK1x0XHRyZWZjb3VudF9pbmMoXHUwMDI2Yi1cdTAwM2VmaWx0ZXJzX3JlZik7XG4gXHR9XG4gXG4gXHRpZiAodGJbVENBX1JPVVRFNF9UT10pXG5AQCAtNTAwLDkgKzUwMSw4IEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZm9sZCwgKmYxLCAqcGZwLCAqZiA9IE5VTEw7XG4gXHRzdHJ1Y3Qgcm91dGU0X2J1Y2tldCAqYjtcbiBcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9ST1VURTRfTUFYICsgMV07XG4tXHR1bnNpZ25lZCBpbnQgaCwgdGg7XG4rXHR1bnNpZ25lZCBpbnQgaDtcbiBcdGludCBlcnI7XG4tXHRib29sIG5ldyA9IHRydWU7XG4gXG4gXHRpZiAoIWhhbmRsZSkge1xuIFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiQ3JlYXRpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkXCIpO1xuQEAgLTUzOSwxMSArNTM5LDEwIEBAIHN0YXRpYyBpbnQgcm91dGU0X2NoYW5nZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICppbl9za2IsXG4gXG4gXHRcdGYtXHUwMDNldHAgPSBmb2xkLVx1MDAzZXRwO1xuIFx0XHRmLVx1MDAzZWJrdCA9IGZvbGQtXHUwMDNlYmt0O1xuLVx0XHRuZXcgPSBmYWxzZTtcbiBcdH1cbiBcbiBcdGVyciA9IHJvdXRlNF9zZXRfcGFybXMobmV0LCB0cCwgYmFzZSwgZiwgaGFuZGxlLCBoZWFkLCB0Yixcbi1cdFx0XHQgICAgICAgdGNhW1RDQV9SQVRFXSwgbmV3LCBmbGFncywgZXh0YWNrKTtcbitcdFx0XHQgICAgICAgdGNhW1RDQV9SQVRFXSwgZm9sZCwgZmxhZ3MsIGV4dGFjayk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycm91dDtcbiBcbkBAIC01NjAsMTcgKzU1OSwyMCBAQCBzdGF0aWMgaW50IHJvdXRlNF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZik7XG4gXG4gXHRpZiAoZm9sZCkge1xuLVx0XHR0aCA9IHRvX2hhc2goZm9sZC1cdTAwM2VoYW5kbGUpO1xuK1x0XHRiID0gZm9sZC1cdTAwM2Via3Q7XG4gXHRcdGggPSBmcm9tX2hhc2goZm9sZC1cdTAwM2VoYW5kbGUgXHUwMDNlXHUwMDNlIDE2KTtcbi1cdFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UoaGVhZC1cdTAwM2V0YWJsZVt0aF0pO1xuLVx0XHRpZiAoYikge1xuLVx0XHRcdGZwID0gXHUwMDI2Yi1cdTAwM2VodFtoXTtcbi1cdFx0XHRmb3IgKHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTsgcGZwO1xuLVx0XHRcdCAgICAgZnAgPSBcdTAwMjZwZnAtXHUwMDNlbmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XG4tXHRcdFx0XHRpZiAocGZwID09IGZvbGQpIHtcbi1cdFx0XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKCpmcCwgZm9sZC1cdTAwM2VuZXh0KTtcbi1cdFx0XHRcdFx0YnJlYWs7XG4rXHRcdGZwID0gXHUwMDI2Yi1cdTAwM2VodFtoXTtcbitcdFx0Zm9yIChwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCk7IHBmcDtcbitcdFx0ICAgICBmcCA9IFx1MDAyNnBmcC1cdTAwM2VuZXh0LCBwZnAgPSBydG5sX2RlcmVmZXJlbmNlKCpmcCkpIHtcbitcdFx0XHRpZiAocGZwID09IGZvbGQpIHtcbitcdFx0XHRcdHJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGZvbGQtXHUwMDNlbmV4dCk7XG4rXHRcdFx0XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmItXHUwMDNlZmlsdGVyc19yZWYpKSB7XG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCB0aCA9IHRvX2hhc2goZm9sZC1cdTAwM2VoYW5kbGUpO1xuK1xuK1x0XHRcdFx0XHRSQ1VfSU5JVF9QT0lOVEVSKGhlYWQtXHUwMDNldGFibGVbdGhdLCBOVUxMKTtcbitcdFx0XHRcdFx0a2ZyZWVfcmN1KGIsIHJjdSk7XG4gXHRcdFx0XHR9XG4rXHRcdFx0XHRicmVhaztcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL2ZpbHRlcnMvcm91dGUuanNvbiBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvZmlsdGVycy9yb3V0ZS5qc29uXG5pbmRleCAwNWNlZGNhNjdjY2FkLi4yZDU4NDNhZWJkNzI5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdGMtdGVzdGluZy90Yy10ZXN0cy9maWx0ZXJzL3JvdXRlLmpzb25cbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3RjLXRlc3RpbmcvdGMtdGVzdHMvZmlsdGVycy9yb3V0ZS5qc29uXG5AQCAtMjAyLDUgKzIwMiwyMTUgQEBcbiAgICAgICAgIFwidGVhcmRvd25cIjogW1xuICAgICAgICAgICAgIFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgcGFyZW50IHJvb3QgZHJyXCJcbiAgICAgICAgIF1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcImE3ZDJcIixcbisgICAgICAgIFwibmFtZVwiOiBcIkRlbGV0ZSBhIHJvdXRlIGZpbHRlciB0aGF0IHdhcyBtb3ZlZCB0byBhbm90aGVyIGJ1Y2tldFwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJmaWx0ZXJcIixcbisgICAgICAgICAgICBcInJvdXRlXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGNoYW5nZSBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMDAxIHJvdXRlIGZyb20gMSB0byAyIGNsYXNzaWQgMToxXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMjAwIHJvdXRlIGZyb20gNSB0byA1IGNsYXNzaWQgMTo1XCJcbisgICAgICAgIF0sXG4rICAgICAgICBcImNtZFVuZGVyVGVzdFwiOiBcIiRUQyBmaWx0ZXIgZGVsIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAwMDIgcm91dGUgZnJvbSAxIHRvIDJcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyAtaiBmaWx0ZXIgc2hvdyBkZXYgJERFVjEgcGFyZW50IGZmZmY6XCIsXG4rICAgICAgICBcIm1hdGNoSlNPTlwiOiBbXG4rICAgICAgICAgICAge1xuKyAgICAgICAgICAgICAgICBcInByb3RvY29sXCI6IFwiaXBcIixcbisgICAgICAgICAgICAgICAgXCJwcmVmXCI6IDIwMCxcbisgICAgICAgICAgICAgICAgXCJraW5kXCI6IFwicm91dGVcIixcbisgICAgICAgICAgICAgICAgXCJjaGFpblwiOiAwXG4rICAgICAgICAgICAgfSxcbisgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgIFwicHJvdG9jb2xcIjogXCJpcFwiLFxuKyAgICAgICAgICAgICAgICBcInByZWZcIjogMjAwLFxuKyAgICAgICAgICAgICAgICBcImtpbmRcIjogXCJyb3V0ZVwiLFxuKyAgICAgICAgICAgICAgICBcImNoYWluXCI6IDAsXG4rICAgICAgICAgICAgICAgIFwib3B0aW9uc1wiOiB7XG4rICAgICAgICAgICAgICAgICAgICBcImZoXCI6IFwiMHg1MDAwNVwiLFxuKyAgICAgICAgICAgICAgICAgICAgXCJmbG93aWRcIjogXCIxOjVcIlxuKyAgICAgICAgICAgICAgICB9XG4rICAgICAgICAgICAgfVxuKyAgICAgICAgXSxcbisgICAgICAgIFwidGVhcmRvd25cIjogW1xuKyAgICAgICAgICAgIFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzc1wiXG4rICAgICAgICBdXG4rICAgIH0sXG4rICAgIHtcbisgICAgICAgIFwiaWRcIjogXCJjMDVhXCIsXG4rICAgICAgICBcIm5hbWVcIjogXCJUcnkgdG8gY2hhbmdlIGEgcm91dGUgZmlsdGVyIG9udG8gYW4gYWxyZWFkeSB1c2VkIGhhbmRsZVwiLFxuKyAgICAgICAgXCJjYXRlZ29yeVwiOiBbXG4rICAgICAgICAgICAgXCJmaWx0ZXJcIixcbisgICAgICAgICAgICBcInJvdXRlXCJcbisgICAgICAgIF0sXG4rICAgICAgICBcInBsdWdpbnNcIjoge1xuKyAgICAgICAgICAgIFwicmVxdWlyZXNcIjogXCJuc1BsdWdpblwiXG4rICAgICAgICB9LFxuKyAgICAgICAgXCJzZXR1cFwiOiBbXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgYWRkIGRldiAkREVWMSBpbmdyZXNzXCIsXG4rICAgICAgICAgICAgXCIkVEMgZmlsdGVyIGFkZCBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIHJvdXRlIGZyb20gMSB0byAxIGNsYXNzaWQgMToxIGFjdGlvbiBva1wiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCByb3V0ZSBmcm9tIDIgdG8gMiBjbGFzc2lkIDE6MiBhY3Rpb24gZHJvcFwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgZmlsdGVyIGNoYW5nZSBkZXYgJERFVjEgcGFyZW50IGZmZmY6IHByb3RvY29sIGlwIHByaW8gMTAwIGhhbmRsZSAweDEwMDAxIHJvdXRlIGZyb20gMiB0byAyIGNsYXNzaWQgMToxIGFjdGlvbiBva1wiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjJcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIC1qIGZpbHRlciBzaG93IGRldiAkREVWMSBwYXJlbnQgZmZmZjpcIixcbisgICAgICAgIFwibWF0Y2hKU09OXCI6IFtcbisgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgIFwicHJvdG9jb2xcIjogXCJpcFwiLFxuKyAgICAgICAgICAgICAgICBcInByZWZcIjogMTAwLFxuKyAgICAgICAgICAgICAgICBcImtpbmRcIjogXCJyb3V0ZVwiLFxuKyAgICAgICAgICAgICAgICBcImNoYWluXCI6IDBcbisgICAgICAgICAgICB9LFxuKyAgICAgICAgICAgIHtcbisgICAgICAgICAgICAgICAgXCJwcm90b2NvbFwiOiBcImlwXCIsXG4rICAgICAgICAgICAgICAgIFwicHJlZlwiOiAxMDAsXG4rICAgICAgICAgICAgICAgIFwia2luZFwiOiBcInJvdXRlXCIsXG4rICAgICAgICAgICAgICAgIFwiY2hhaW5cIjogMCxcbisgICAgICAgICAgICAgICAgXCJvcHRpb25zXCI6IHtcbisgICAgICAgICAgICAgICAgICAgIFwiZmhcIjogXCIweDEwMDAxXCIsXG4rICAgICAgICAgICAgICAgICAgICBcImZsb3dpZFwiOiBcIjE6MVwiLFxuKyAgICAgICAgICAgICAgICAgICAgXCJhY3Rpb25zXCI6IFtcbisgICAgICAgICAgICAgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwib3JkZXJcIjogMSxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJraW5kXCI6IFwiZ2FjdFwiLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvbnRyb2xfYWN0aW9uXCI6IHtcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHlwZVwiOiBcInBhc3NcIlxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4rICAgICAgICAgICAgICAgICAgICAgICAgfVxuKyAgICAgICAgICAgICAgICAgICAgXVxuKyAgICAgICAgICAgICAgICB9XG4rICAgICAgICAgICAgfSxcbisgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgIFwicHJvdG9jb2xcIjogXCJpcFwiLFxuKyAgICAgICAgICAgICAgICBcInByZWZcIjogMTAwLFxuKyAgICAgICAgICAgICAgICBcImtpbmRcIjogXCJyb3V0ZVwiLFxuKyAgICAgICAgICAgICAgICBcImNoYWluXCI6IDAsXG4rICAgICAgICAgICAgICAgIFwib3B0aW9uc1wiOiB7XG4rICAgICAgICAgICAgICAgICAgICBcImZoXCI6IFwiMHgyMDAwMlwiLFxuKyAgICAgICAgICAgICAgICAgICAgXCJmbG93aWRcIjogXCIxOjJcIixcbisgICAgICAgICAgICAgICAgICAgIFwiYWN0aW9uc1wiOiBbXG4rICAgICAgICAgICAgICAgICAgICAgICAge1xuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yZGVyXCI6IDEsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwia2luZFwiOiBcImdhY3RcIixcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjb250cm9sX2FjdGlvblwiOiB7XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVcIjogXCJkcm9wXCJcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuKyAgICAgICAgICAgICAgICAgICAgICAgIH1cbisgICAgICAgICAgICAgICAgICAgIF1cbisgICAgICAgICAgICAgICAgfVxuKyAgICAgICAgICAgIH1cbisgICAgICAgIF0sXG4rICAgICAgICBcInRlYXJkb3duXCI6IFtcbisgICAgICAgICAgICBcIiRUQyBxZGlzYyBkZWwgZGV2ICRERVYxIGluZ3Jlc3NcIlxuKyAgICAgICAgXVxuKyAgICB9LFxuKyAgICB7XG4rICAgICAgICBcImlkXCI6IFwiM2YyMVwiLFxuKyAgICAgICAgXCJuYW1lXCI6IFwiUmVwbGFjZSBhIHJvdXRlIGZpbHRlciB0aGF0IHNoYXJlcyBpdHMga2V5IHdpdGggYW5vdGhlciBmaWx0ZXJcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwiZmlsdGVyXCIsXG4rICAgICAgICAgICAgXCJyb3V0ZVwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW1xuKyAgICAgICAgICAgIFwiJFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzc1wiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6MVwiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDIwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6MlwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJjbWRVbmRlclRlc3RcIjogXCIkVEMgZmlsdGVyIHJlcGxhY2UgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6OVwiLFxuKyAgICAgICAgXCJleHBFeGl0Q29kZVwiOiBcIjBcIixcbisgICAgICAgIFwidmVyaWZ5Q21kXCI6IFwiJFRDIC1qIGZpbHRlciBzaG93IGRldiAkREVWMSBwYXJlbnQgZmZmZjpcIixcbisgICAgICAgIFwibWF0Y2hKU09OXCI6IFtcbisgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgIFwicHJvdG9jb2xcIjogXCJpcFwiLFxuKyAgICAgICAgICAgICAgICBcInByZWZcIjogMTAwLFxuKyAgICAgICAgICAgICAgICBcImtpbmRcIjogXCJyb3V0ZVwiLFxuKyAgICAgICAgICAgICAgICBcImNoYWluXCI6IDBcbisgICAgICAgICAgICB9LFxuKyAgICAgICAgICAgIHtcbisgICAgICAgICAgICAgICAgXCJwcm90b2NvbFwiOiBcImlwXCIsXG4rICAgICAgICAgICAgICAgIFwicHJlZlwiOiAxMDAsXG4rICAgICAgICAgICAgICAgIFwia2luZFwiOiBcInJvdXRlXCIsXG4rICAgICAgICAgICAgICAgIFwiY2hhaW5cIjogMCxcbisgICAgICAgICAgICAgICAgXCJvcHRpb25zXCI6IHtcbisgICAgICAgICAgICAgICAgICAgIFwiZmhcIjogXCIweDEwMTAxXCIsXG4rICAgICAgICAgICAgICAgICAgICBcImZsb3dpZFwiOiBcIjE6OVwiXG4rICAgICAgICAgICAgICAgIH1cbisgICAgICAgICAgICB9LFxuKyAgICAgICAgICAgIHtcbisgICAgICAgICAgICAgICAgXCJwcm90b2NvbFwiOiBcImlwXCIsXG4rICAgICAgICAgICAgICAgIFwicHJlZlwiOiAxMDAsXG4rICAgICAgICAgICAgICAgIFwia2luZFwiOiBcInJvdXRlXCIsXG4rICAgICAgICAgICAgICAgIFwiY2hhaW5cIjogMCxcbisgICAgICAgICAgICAgICAgXCJvcHRpb25zXCI6IHtcbisgICAgICAgICAgICAgICAgICAgIFwiZmhcIjogXCIweDEwMjAxXCIsXG4rICAgICAgICAgICAgICAgICAgICBcImZsb3dpZFwiOiBcIjE6MlwiXG4rICAgICAgICAgICAgICAgIH1cbisgICAgICAgICAgICB9XG4rICAgICAgICBdLFxuKyAgICAgICAgXCJ0ZWFyZG93blwiOiBbXG4rICAgICAgICAgICAgXCIkVEMgcWRpc2MgZGVsIGRldiAkREVWMSBpbmdyZXNzXCJcbisgICAgICAgIF1cbisgICAgfSxcbisgICAge1xuKyAgICAgICAgXCJpZFwiOiBcIjlkMGVcIixcbisgICAgICAgIFwibmFtZVwiOiBcIlJlcGxhY2UgYm90aCByb3V0ZSBmaWx0ZXJzIHNoYXJpbmcgYSBrZXlcIixcbisgICAgICAgIFwiY2F0ZWdvcnlcIjogW1xuKyAgICAgICAgICAgIFwiZmlsdGVyXCIsXG4rICAgICAgICAgICAgXCJyb3V0ZVwiXG4rICAgICAgICBdLFxuKyAgICAgICAgXCJwbHVnaW5zXCI6IHtcbisgICAgICAgICAgICBcInJlcXVpcmVzXCI6IFwibnNQbHVnaW5cIlxuKyAgICAgICAgfSxcbisgICAgICAgIFwic2V0dXBcIjogW1xuKyAgICAgICAgICAgIFwiJFRDIHFkaXNjIGFkZCBkZXYgJERFVjEgaW5ncmVzc1wiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDEwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6MVwiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciBhZGQgZGV2ICRERVYxIHBhcmVudCBmZmZmOiBwcm90b2NvbCBpcCBwcmlvIDEwMCBoYW5kbGUgMHgxMDIwMSByb3V0ZSBmcm9tIDEgdG8gMSBjbGFzc2lkIDE6MlwiLFxuKyAgICAgICAgICAgIFwiJFRDIGZpbHRlciByZXBsYWNlIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAxMDEgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjlcIlxuKyAgICAgICAgXSxcbisgICAgICAgIFwiY21kVW5kZXJUZXN0XCI6IFwiJFRDIGZpbHRlciByZXBsYWNlIGRldiAkREVWMSBwYXJlbnQgZmZmZjogcHJvdG9jb2wgaXAgcHJpbyAxMDAgaGFuZGxlIDB4MTAyMDEgcm91dGUgZnJvbSAxIHRvIDEgY2xhc3NpZCAxOjhcIixcbisgICAgICAgIFwiZXhwRXhpdENvZGVcIjogXCIwXCIsXG4rICAgICAgICBcInZlcmlmeUNtZFwiOiBcIiRUQyAtaiBmaWx0ZXIgc2hvdyBkZXYgJERFVjEgcGFyZW50IGZmZmY6XCIsXG4rICAgICAgICBcIm1hdGNoSlNPTlwiOiBbXG4rICAgICAgICAgICAge1xuKyAgICAgICAgICAgICAgICBcInByb3RvY29sXCI6IFwiaXBcIixcbisgICAgICAgICAgICAgICAgXCJwcmVmXCI6IDEwMCxcbisgICAgICAgICAgICAgICAgXCJraW5kXCI6IFwicm91dGVcIixcbisgICAgICAgICAgICAgICAgXCJjaGFpblwiOiAwXG4rICAgICAgICAgICAgfSxcbisgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgIFwicHJvdG9jb2xcIjogXCJpcFwiLFxuKyAgICAgICAgICAgICAgICBcInByZWZcIjogMTAwLFxuKyAgICAgICAgICAgICAgICBcImtpbmRcIjogXCJyb3V0ZVwiLFxuKyAgICAgICAgICAgICAgICBcImNoYWluXCI6IDAsXG4rICAgICAgICAgICAgICAgIFwib3B0aW9uc1wiOiB7XG4rICAgICAgICAgICAgICAgICAgICBcImZoXCI6IFwiMHgxMDEwMVwiLFxuKyAgICAgICAgICAgICAgICAgICAgXCJmbG93aWRcIjogXCIxOjlcIlxuKyAgICAgICAgICAgICAgICB9XG4rICAgICAgICAgICAgfSxcbisgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgIFwicHJvdG9jb2xcIjogXCJpcFwiLFxuKyAgICAgICAgICAgICAgICBcInByZWZcIjogMTAwLFxuKyAgICAgICAgICAgICAgICBcImtpbmRcIjogXCJyb3V0ZVwiLFxuKyAgICAgICAgICAgICAgICBcImNoYWluXCI6IDAsXG4rICAgICAgICAgICAgICAgIFwib3B0aW9uc1wiOiB7XG4rICAgICAgICAgICAgICAgICAgICBcImZoXCI6IFwiMHgxMDIwMVwiLFxuKyAgICAgICAgICAgICAgICAgICAgXCJmbG93aWRcIjogXCIxOjhcIlxuKyAgICAgICAgICAgICAgICB9XG4rICAgICAgICAgICAgfVxuKyAgICAgICAgXSxcbisgICAgICAgIFwidGVhcmRvd25cIjogW1xuKyAgICAgICAgICAgIFwiJFRDIHFkaXNjIGRlbCBkZXYgJERFVjEgaW5ncmVzc1wiXG4rICAgICAgICBdXG4gICAgIH1cbiBdXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwMTowMDowOC40MTg0NTM2ODNaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDExMzMxMDU3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFByb3ZpZGVkIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgYXNzZXNzbWVudCBvZiB0aGlzIHBhdGNoIGlzIHRoYXQgaXQncyBmb2N1c2VkIG9uIHRoZSBgY2xzX3JvdXRlYCBjbGFzc2lmaWVyLCBnaXZlbiB0aGUgZmlsZSBtb2RpZmljYXRpb24gaW4gYG5ldC9zY2hlZC9jbHNfcm91dGUuY2AuIFRoZSBmYWN0IHRoYXQgdGhlcmUgYXJlIGFsc28gbmV3IHRlc3QgY2FzZXMgYWRkZWQgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy90Yy10ZXN0aW5nL3RjLXRlc3RzL2ZpbHRlcnMvcm91dGUuanNvbmAgdGVsbHMgbWUgdGhpcyBpcyBsaWtlbHkgYWltZWQgYXQgaW1wcm92aW5nIG9yIGV4cGFuZGluZyB0aGUgdGVzdGluZyBjb3ZlcmFnZSBmb3IgdGhpcyBjbGFzc2lmaWVyLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGdldCBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb2RlIG1vZGlmaWNhdGlvbnMgaW4gYGNsc19yb3V0ZS5jYC4gSSB3aWxsIGxpa2VseSBlaXRoZXIgcmVhZCB0aGUgZW50aXJlIGZpbGUgb3IgdXNlIHRvb2xzIGxpa2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHRvIGlzb2xhdGUgdGhlIHNwZWNpZmljIGNoYW5nZXMgYW5kIHRoZWlyIHN1cnJvdW5kaW5nIGNvbnRleHQuIEZyb20gdGhlcmUgSSdsbCBzY3J1dGluaXplIHRoZSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY0MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MDA6MTIuNTMxNzY2MjIxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX3JvdXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0fTtcXG4gIDQxOlxcdFxcbiAgNDI6XFx0c3RydWN0IHJvdXRlNF9idWNrZXQge1xcbiAgNDM6XFx0XFx0LyogMTYgRlJPTSBidWNrZXRzICsgMTYgSUlGIGJ1Y2tldHMgKyAxIHdpbGRjYXJkIGJ1Y2tldCAqL1xcbiAgNDQ6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3VcXHQqaHRbMTYgKyAxNiArIDFdO1xcbiAgNDU6XFx0XFx0cmVmY291bnRfdFxcdFxcdFxcdGZpbHRlcnNfcmVmO1xcbiAgNDY6XFx0XFx0c3RydWN0IHJjdV9oZWFkXFx0XFx0XFx0cmN1O1xcbiAgNDc6XFx0fTtcXG4gIDQ4OlxcdFxcbiAgNDk6XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIge1xcbiAgNTA6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3VcXHQqbmV4dDtcXG4gIDUxOlxcdFxcdHUzMlxcdFxcdFxcdGlkO1xcbiAgNTI6XFx0XFx0aW50XFx0XFx0XFx0aWlmO1xcbiAgNTM6XFx0XFxuICA1NDpcXHRcXHRzdHJ1Y3QgdGNmX3Jlc3VsdFxcdHJlcztcXG4gIDU1OlxcdFxcdHN0cnVjdCB0Y2ZfZXh0c1xcdFxcdGV4dHM7XFxuICA1NjpcXHRcXHR1MzJcXHRcXHRcXHRoYW5kbGU7XFxuICA1NzpcXHRcXHRib29sXFx0XFx0XFx0ZHlpbmc7XFxuICA1ODpcXHRcXHRzdHJ1Y3Qgcm91dGU0X2J1Y2tldFxcdCpia3Q7XFxuICA1OTpcXHRcXHRzdHJ1Y3QgdGNmX3Byb3RvXFx0KnRwO1xcbiAgNjA6XFx0XFx0c3RydWN0IHJjdV93b3JrXFx0XFx0cndvcms7XFxuICA2MTpcXHR9O1xcbiAgNjI6XFx0XFxuICA2MzpcXHQjZGVmaW5lIFJPVVRFNF9GQUlMVVJFICgoc3RydWN0IHJvdXRlNF9maWx0ZXIgKikoLTFMKSlcXG4gIDY0OlxcdFxcbiAgNjU6XFx0c3RhdGljIGlubGluZSBpbnQgcm91dGU0X2Zhc3RtYXBfaGFzaCh1MzIgaWQsIGludCBpaWYpXFxuICA2NjpcXHR7XFxuICA2NzpcXHRcXHRyZXR1cm4gaWQgXFx1MDAyNiAweEY7XFxuICA2ODpcXHR9XFxuICA2OTpcXHRcXG4gIDcwOlxcdHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZmFzdG1hcF9sb2NrKTtcXG4gIDcxOlxcdHN0YXRpYyB2b2lkXFxuICA3MjpcXHRyb3V0ZTRfcmVzZXRfZmFzdG1hcChzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQsIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmKVxcbiAgNzM6XFx0e1xcbiAgNzQ6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZmYXN0bWFwX2xvY2spO1xcbiAgNzU6XFx0XFx0aWYgKGYpXFxuICA3NjpcXHRcXHRcXHRmLVxcdTAwM2VkeWluZyA9IHRydWU7XFxuICA3NzpcXHRcXHRtZW1zZXQoaGVhZC1cXHUwMDNlZmFzdG1hcCwgMCwgc2l6ZW9mKGhlYWQtXFx1MDAzZWZhc3RtYXApKTtcXG4gIDc4OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZmYXN0bWFwX2xvY2spO1xcbiAgNzk6XFx0fVxcbiAgODA6XFx0XFxuICA4MTpcXHRzdGF0aWMgdm9pZFxcbiAgODI6XFx0cm91dGU0X3NldF9mYXN0bWFwKHN0cnVjdCByb3V0ZTRfaGVhZCAqaGVhZCwgdTMyIGlkLCBpbnQgaWlmLFxcbiAgODM6XFx0XFx0XFx0ICAgc3RydWN0IHJvdXRlNF9maWx0ZXIgKmYpXFxuICA4NDpcXHR7XFxuICA4NTpcXHRcXHRpbnQgaCA9IHJvdXRlNF9mYXN0bWFwX2hhc2goaWQsIGlpZik7XFxuICA4NjpcXHRcXG4gIDg3OlxcdFxcdC8qIGZhc3RtYXAgdXBkYXRlcyBtdXN0IGxvb2sgYXRvbWljIHRvIGFsaW5nIGlkLCBpZmYsIGZpbHRlciAqL1xcbiAgODg6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZmYXN0bWFwX2xvY2spO1xcbiAgODk6XFx0XFx0aWYgKGYgPT0gUk9VVEU0X0ZBSUxVUkUgfHwgIWYtXFx1MDAzZWR5aW5nKSB7XFxuICA5MDpcXHRcXHRcXHRoZWFkLVxcdTAwM2VmYXN0bWFwW2hdLmlkID0gaWQ7XFxuICA5MTpcXHRcXHRcXHRoZWFkLVxcdTAwM2VmYXN0bWFwW2hdLmlpZiA9IGlpZjtcXG4gIDkyOlxcdFxcdFxcdGhlYWQtXFx1MDAzZWZhc3RtYXBbaF0uZmlsdGVyID0gZjtcXG4gIDkzOlxcdFxcdH1cXG4gIDk0OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZmYXN0bWFwX2xvY2spO1xcbiAgOTU6XFx0fVxcbiAgOTY6XFx0XFxuICA5NzpcXHRzdGF0aWMgaW5saW5lIGludCByb3V0ZTRfaGFzaF90byh1MzIgaWQpXFxuICA5ODpcXHR7XFxuICA5OTpcXHRcXHRyZXR1cm4gaWQgXFx1MDAyNiAweEZGO1xcbiAxMDA6XFx0fVxcbiAxMDE6XFx0XFxuIDEwMjpcXHRzdGF0aWMgaW5saW5lIGludCByb3V0ZTRfaGFzaF9mcm9tKHUzMiBpZClcXG4gMTAzOlxcdHtcXG4gMTA0OlxcdFxcdHJldHVybiAoaWQgXFx1MDAzZVxcdTAwM2UgMTYpIFxcdTAwMjYgMHhGO1xcbiAxMDU6XFx0fVxcbiAxMDY6XFx0XFxuIDEwNzpcXHRzdGF0aWMgaW5saW5lIGludCByb3V0ZTRfaGFzaF9paWYoaW50IGlpZilcXG4gMTA4OlxcdHtcXG4gMTA5OlxcdFxcdHJldHVybiAxNiArICgoaWlmIFxcdTAwM2VcXHUwMDNlIDE2KSBcXHUwMDI2IDB4Rik7XFxuIDExMDpcXHR9XFxuIDExMTpcXHRcXG4gMTEyOlxcdHN0YXRpYyBpbmxpbmUgaW50IHJvdXRlNF9oYXNoX3dpbGQodm9pZClcXG4gMTEzOlxcdHtcXG4gMTE0OlxcdFxcdHJldHVybiAzMjtcXG4gMTE1OlxcdH1cXG4gMTE2OlxcdFxcbiAxMTc6XFx0I2RlZmluZSBST1VURTRfQVBQTFlfUkVTVUxUKClcXHRcXHRcXHRcXHRcXHRcXFxcXFxuIDExODpcXHR7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbiAxMTk6XFx0XFx0KnJlcyA9IGYtXFx1MDAzZXJlcztcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjAwOjEyLjUzMTkxODUzMVoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDU4OTk2OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgY2xzX3JvdXRlLmNgIGNvZGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9ucyBhcm91bmQgYHJvdXRlNF9kZWxldGVgLCBgcm91dGU0X3NldF9wYXJtc2AsIGByb3V0ZTRfY2hhbmdlYCwgYW5kIHRoZSBlbnRpcmUgbGFuZHNjYXBlIG9mIGhvdyB0aGVzZSBmaWx0ZXIgYWxsb2NhdGlvbnMgYW5kIGxvb2t1cHMgYXJlIG9yY2hlc3RyYXRlZC4gSSBuZWVkIGEgY2xlYXIgbWVudGFsIHBpY3R1cmUgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyByZWxhdGUgdG8gZWFjaCBvdGhlciwgZXNwZWNpYWxseSB3aGVyZSBmaWx0ZXJzIGNvbWUgaW50byBwbGF5LiBJdCdzIGNydWNpYWwgdG8gZ3Jhc3AgaG93IHJvdXRlcyBhcmUgbWFuaXB1bGF0ZWQsIGNyZWF0ZWQsIGFuZCBkZWxldGVkLCBhbmQgdGhlIGltcGFjdCB0aGlzIGhhcyBvbiBmaWx0ZXIgbWFuYWdlbWVudC4gVW5kZXJzdGFuZGluZyB0aGUgZmxvdyBmcm9tIGRlbGV0aW9uIHRvIHBhcmFtZXRlciBzZXR0aW5nIGFuZCBjaGFuZ2VzIGlzIHZpdGFsIHRvIG1haW50YWluaW5nIG92ZXJhbGwgc3lzdGVtIGludGVncml0eS4gTGV0J3Mgc2VlIGhvdyB0aGVzZSBhY3Rpb25zIGFyZSByZWZsZWN0ZWQgaW4gdGhlIGZpbHRlciBsb29rdXBzIGFuZCBhbGxvY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODAyOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MDA6MTQuNTkwOTE4NFoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX3JvdXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzMwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMzMDpcXHR9XFxuIDMzMTpcXHRcXG4gMzMyOlxcdHN0YXRpYyBpbnQgcm91dGU0X2RlbGV0ZShzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqYXJnLCBib29sICpsYXN0LFxcbiAzMzM6XFx0XFx0XFx0XFx0IGJvb2wgcnRubF9oZWxkLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDMzNDpcXHR7XFxuIDMzNTpcXHRcXHRzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQgPSBydG5sX2RlcmVmZXJlbmNlKHRwLVxcdTAwM2Vyb290KTtcXG4gMzM2OlxcdFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmID0gYXJnO1xcbiAzMzc6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgX19yY3UgKipmcDtcXG4gMzM4OlxcdFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyICpuZjtcXG4gMzM5OlxcdFxcdHN0cnVjdCByb3V0ZTRfYnVja2V0ICpiO1xcbiAzNDA6XFx0XFx0dW5zaWduZWQgaW50IGggPSAwO1xcbiAzNDE6XFx0XFx0aW50IGgxO1xcbiAzNDI6XFx0XFxuIDM0MzpcXHRcXHRpZiAoIWhlYWQgfHwgIWYpXFxuIDM0NDpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0XFx0aCA9IGYtXFx1MDAzZWhhbmRsZTtcXG4gMzQ3OlxcdFxcdGIgPSBmLVxcdTAwM2Via3Q7XFxuIDM0ODpcXHRcXG4gMzQ5OlxcdFxcdGZwID0gXFx1MDAyNmItXFx1MDAzZWh0W2Zyb21faGFzaChoIFxcdTAwM2VcXHUwMDNlIDE2KV07XFxuIDM1MDpcXHRcXHRmb3IgKG5mID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBuZjtcXG4gMzUxOlxcdFxcdCAgICAgZnAgPSBcXHUwMDI2bmYtXFx1MDAzZW5leHQsIG5mID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XFxuIDM1MjpcXHRcXHRcXHRpZiAobmYgPT0gZikge1xcbiAzNTM6XFx0XFx0XFx0XFx0LyogdW5saW5rIGl0ICovXFxuIDM1NDpcXHRcXHRcXHRcXHRSQ1VfSU5JVF9QT0lOVEVSKCpmcCwgcnRubF9kZXJlZmVyZW5jZShmLVxcdTAwM2VuZXh0KSk7XFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdFxcdFxcdC8qIENsZWFyIGFueSBmYXN0bWFwIGVudHJpZXMgdGhhdCBtYXkgcmVmIHRoaXMgZmlsdGVyIGFuZFxcbiAzNTc6XFx0XFx0XFx0XFx0ICogbWFyayBpdCBkeWluZyBzbyBpbi1mbGlnaHQgcmVhZGVycyBjYW4ndCByZXB1Ymxpc2ggaXRcXG4gMzU4OlxcdFxcdFxcdFxcdCAqIGFmdGVyIHRoZSByZXNldC5cXG4gMzU5OlxcdFxcdFxcdFxcdCAqL1xcbiAzNjA6XFx0XFx0XFx0XFx0cm91dGU0X3Jlc2V0X2Zhc3RtYXAoaGVhZCwgZik7XFxuIDM2MTpcXHRcXG4gMzYyOlxcdFxcdFxcdFxcdC8qIERlbGV0ZSBpdCAqL1xcbiAzNjM6XFx0XFx0XFx0XFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFxcdTAwMjZmLVxcdTAwM2VyZXMpO1xcbiAzNjQ6XFx0XFx0XFx0XFx0dGNmX2V4dHNfZ2V0X25ldChcXHUwMDI2Zi1cXHUwMDNlZXh0cyk7XFxuIDM2NTpcXHRcXHRcXHRcXHR0Y2ZfcXVldWVfd29yayhcXHUwMDI2Zi1cXHUwMDNlcndvcmssIHJvdXRlNF9kZWxldGVfZmlsdGVyX3dvcmspO1xcbiAzNjY6XFx0XFxuIDM2NzpcXHRcXHRcXHRcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZiLVxcdTAwM2VmaWx0ZXJzX3JlZikpIHtcXG4gMzY4OlxcdFxcdFxcdFxcdFxcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cXHUwMDNldGFibGVbdG9faGFzaChoKV0sIE5VTEwpO1xcbiAzNjk6XFx0XFx0XFx0XFx0XFx0a2ZyZWVfcmN1KGIsIHJjdSk7XFxuIDM3MDpcXHRcXHRcXHRcXHR9XFxuIDM3MTpcXHRcXHRcXHRcXHRicmVhaztcXG4gMzcyOlxcdFxcdFxcdH1cXG4gMzczOlxcdFxcdH1cXG4gMzc0OlxcdFxcbiAzNzU6XFx0XFx0Kmxhc3QgPSB0cnVlO1xcbiAzNzY6XFx0XFx0Zm9yIChoMSA9IDA7IGgxIFxcdTAwM2M9IDI1NjsgaDErKykge1xcbiAzNzc6XFx0XFx0XFx0aWYgKHJjdV9hY2Nlc3NfcG9pbnRlcihoZWFkLVxcdTAwM2V0YWJsZVtoMV0pKSB7XFxuIDM3ODpcXHRcXHRcXHRcXHQqbGFzdCA9IGZhbHNlO1xcbiAzNzk6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDM4MDpcXHRcXHRcXHR9XFxuIDM4MTpcXHRcXHR9XFxuIDM4MjpcXHRcXG4gMzgzOlxcdFxcdHJldHVybiAwO1xcbiAzODQ6XFx0fVxcbiAzODU6XFx0XFxuIDM4NjpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgcm91dGU0X3BvbGljeVtUQ0FfUk9VVEU0X01BWCArIDFdID0ge1xcbiAzODc6XFx0XFx0W1RDQV9ST1VURTRfQ0xBU1NJRF1cXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuIDM4ODpcXHRcXHRbVENBX1JPVVRFNF9UT11cXHRcXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIDB4RkYpLFxcbiAzODk6XFx0XFx0W1RDQV9ST1VURTRfRlJPTV1cXHQ9IE5MQV9QT0xJQ1lfTUFYKE5MQV9VMzIsIDB4RkYpLFxcbiAzOTA6XFx0XFx0W1RDQV9ST1VURTRfSUlGXVxcdD0gTkxBX1BPTElDWV9NQVgoTkxBX1UzMiwgMHg3RkZGKSxcXG4gMzkxOlxcdH07XFxuIDM5MjpcXHRcXG4gMzkzOlxcdHN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbiAzOTQ6XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYmFzZSwgc3RydWN0IHJvdXRlNF9maWx0ZXIgKmYsXFxuIDM5NTpcXHRcXHRcXHRcXHQgICAgdTMyIGhhbmRsZSwgc3RydWN0IHJvdXRlNF9oZWFkICpoZWFkLFxcbiAzOTY6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IG5sYXR0ciAqZXN0LFxcbiAzOTc6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCByb3V0ZTRfZmlsdGVyICpmb2xkLCB1MzIgZmxhZ3MsXFxuIDM5ODpcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiAzOTk6XFx0e1xcbiA0MDA6XFx0XFx0dTMyIGlkID0gMCwgdG8gPSAwLCBuaGFuZGxlID0gMHg4MDAwO1xcbiA0MDE6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmZwO1xcbiA0MDI6XFx0XFx0dW5zaWduZWQgaW50IGgxO1xcbiA0MDM6XFx0XFx0c3RydWN0IHJvdXRlNF9idWNrZXQgKmI7XFxuIDQwNDpcXHRcXHRpbnQgZXJyO1xcbiA0MDU6XFx0XFxuIDQwNjpcXHRcXHRlcnIgPSB0Y2ZfZXh0c192YWxpZGF0ZShuZXQsIHRwLCB0YiwgZXN0LCBcXHUwMDI2Zi1cXHUwMDNlZXh0cywgZmxhZ3MsIGV4dGFjayk7XFxuIDQwNzpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gNDA4OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDQwOTpcXHRcXG4gNDEwOlxcdFxcdGlmICh0YltUQ0FfUk9VVEU0X1RPXSkge1xcbiA0MTE6XFx0XFx0XFx0aWYgKCFmb2xkIFxcdTAwMjZcXHUwMDI2IGhhbmRsZSBcXHUwMDI2IDB4ODAwMCkge1xcbiA0MTI6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiSW52YWxpZCBoYW5kbGVcXFwiKTtcXG4gNDEzOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA0MTQ6XFx0XFx0XFx0fVxcbiA0MTU6XFx0XFx0XFx0dG8gPSBubGFfZ2V0X3UzMih0YltUQ0FfUk9VVEU0X1RPXSk7XFxuIDQxNjpcXHRcXHRcXHRuaGFuZGxlID0gdG87XFxuIDQxNzpcXHRcXHR9XFxuIDQxODpcXHRcXG4gNDE5OlxcdFxcdGlmICh0YltUQ0FfUk9VVEU0X0ZST01dIFxcdTAwMjZcXHUwMDI2IHRiW1RDQV9ST1VURTRfSUlGXSkge1xcbiA0MjA6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfQVRUUihleHRhY2ssIHRiW1RDQV9ST1VURTRfRlJPTV0sXFxuIDQyMTpcXHRcXHRcXHRcXHRcXHQgICAgXFxcIidmcm9tJyBhbmQgJ2Zyb21pZicgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZVxcXCIpO1xcbiA0MjI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDQyMzpcXHRcXHR9XFxuIDQyNDpcXHRcXG4gNDI1OlxcdFxcdGlmICh0YltUQ0FfUk9VVEU0X0ZST01dKSB7XFxuIDQyNjpcXHRcXHRcXHRpZCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9ST1VURTRfRlJPTV0pO1xcbiA0Mjc6XFx0XFx0XFx0bmhhbmRsZSB8PSBpZCBcXHUwMDNjXFx1MDAzYyAxNjtcXG4gNDI4OlxcdFxcdH0gZWxzZSBpZiAodGJbVENBX1JPVVRFNF9JSUZdKSB7XFxuIDQyOTpcXHRcXHRcXHRpZCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9ST1VURTRfSUlGXSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjAwOjE0LjU5MTAxNzcyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNzMyOTQyOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYSBmaXJzdC1wZXJzb24sIGV4cGVydCBwZXJzcGVjdGl2ZSwgZm9jdXNpbmcgb24gdGhlIGltcGxpZWQgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBSb3V0aW5nIFBhcmFtZXRlciBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IHRoZSBjb2RlIGZvciBgcm91dGU0X3NldF9wYXJtc2AgYW5kIGByb3V0ZTRfY2hhbmdlYC4gVGhhdCBwcmV2aW91cyBjb250ZXh0IGFib3V0IHRoZSBvdmVyYWxsIGZsb3cgYW5kIHRoZSBpbml0aWFsIGZ1bmN0aW9uIGNhbGwgaXMgc3RpbGwgZnJlc2ggaW4gbXkgbWluZC4gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIHR3byBmdW5jdGlvbnMgYmVjYXVzZSB0aGV5J3JlIGNyaXRpY2FsIGZvciBhY3R1YWxseSBjb25maWd1cmluZyBhbmQgcG90ZW50aWFsbHkgbW9kaWZ5aW5nIHRoZSByb3V0aW5nIHNldHVwLCByaWdodD8gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHBhcmFtZXRlcnMgYXJlIGJlaW5nIHNldCBhbmQgaG93IGNoYW5nZXMgYXJlIGJlaW5nIGltcGxlbWVudGVkLiBTcGVjaWZpY2FsbHksIHdoYXQncyB0aGUgbG9naWMgdGhlcmU/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGRpcmVjdGx5IG1vZGlmeWluZyBkYXRhIHN0cnVjdHVyZXMsIG9yIGFyZSB0aGVyZSBtb3JlIGNvbXBsZXggaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbW9kdWxlcyBvciBwcm9jZXNzZXMgaW52b2x2ZWQ/IEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSB3aWxsIGJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBmb3IgZWl0aGVyIGluaXRpYWwgY29uZmlndXJhdGlvbiBvZiB0aGUgcm91dGluZyB0YWJsZSBvciBhZGp1c3RtZW50IG9mIHRoZXNlIHBhcmFtZXRlcnMgZHVyaW5nIHJ1bnRpbWUuIEZyb20gZXhwZXJpZW5jZSBJIGtub3cgdGhhdCB0aGlzIGlzIGEgY3JpdGljYWwgc2VjdGlvbiB0byBwcmV2ZW50IGluY29uc2lzdGVudCBiZWhhdmlvci4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBhdG9taWNpdHkgaXNzdWVzLCBhbmQgZXJyb3IgaGFuZGxpbmcg4oCTIHRob3NlIGFyZSBhbHdheXMga2V5IGFyZWFzIG9mIGNvbmNlcm4gaW4gcm91dGluZyBtYW5hZ2VtZW50LiBJdCdzIHRpbWUgdG8gZGlnIGluIGFuZCBtYXAgb3V0IHRoZSBjb250cm9sIGZsb3csIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGFuZCBzZWUgaG93IHdlbGwgdGhpcyBpcyBkZXNpZ25lZCBmb3Igc2NhbGFiaWxpdHkgYW5kIHJvYnVzdG5lc3MuIExldCdzIHNlZSBob3cgd2VsbCB0aGUgY29kZSBoYW5kbGVzIGVkZ2UgY2FzZXMsIHRvbyAtIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGltcGxlbWVudGF0aW9uIGRlYWxzIHdpdGggYWxsIHRoZSBjb3JuZXIgY2FzZXMgSSBjYW4gdGhpbmsgb2YsIGluY2x1ZGluZyB3aGVuIHRoZSByZXF1ZXN0ZWQgY2hhbmdlIGlzIG5vdCBhbGxvd2VkLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5MzEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjAwOjE3Ljc2NDMxNTE5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX3JvdXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDMwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQzMDpcXHRcXHRcXHRuaGFuZGxlIHw9IChpZCB8IDB4ODAwMCkgXFx1MDAzY1xcdTAwM2MgMTY7XFxuIDQzMTpcXHRcXHR9IGVsc2VcXG4gNDMyOlxcdFxcdFxcdG5oYW5kbGUgfD0gMHhGRkZGIFxcdTAwM2NcXHUwMDNjIDE2O1xcbiA0MzM6XFx0XFxuIDQzNDpcXHRcXHRpZiAoaGFuZGxlIFxcdTAwMjZcXHUwMDI2ICghZm9sZCB8fCBuaGFuZGxlID09IChoYW5kbGUgXFx1MDAyNiB+MHg3RjAwKSkpXFxuIDQzNTpcXHRcXHRcXHRuaGFuZGxlIHw9IGhhbmRsZSBcXHUwMDI2IDB4N0YwMDtcXG4gNDM2OlxcdFxcbiA0Mzc6XFx0XFx0aWYgKGhhbmRsZSBcXHUwMDI2XFx1MDAyNiAhZm9sZCBcXHUwMDI2XFx1MDAyNiBuaGFuZGxlICE9IGhhbmRsZSkge1xcbiA0Mzg6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfRk1UKGV4dGFjayxcXG4gNDM5OlxcdFxcdFxcdFxcdFxcdCAgIFxcXCJIYW5kbGUgbWlzbWF0Y2ggY29uc3RydWN0ZWQ6ICV4IChleHBlY3RlZDogJXgpXFxcIixcXG4gNDQwOlxcdFxcdFxcdFxcdFxcdCAgIGhhbmRsZSwgbmhhbmRsZSk7XFxuIDQ0MTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQyOlxcdFxcdH1cXG4gNDQzOlxcdFxcbiA0NDQ6XFx0XFx0aWYgKCFuaGFuZGxlKSB7XFxuIDQ0NTpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJSZXBsYWNpbmcgd2l0aCBoYW5kbGUgb2YgMCBpcyBpbnZhbGlkXFxcIik7XFxuIDQ0NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNDQ3OlxcdFxcdH1cXG4gNDQ4OlxcdFxcbiA0NDk6XFx0XFx0aDEgPSB0b19oYXNoKG5oYW5kbGUpO1xcbiA0NTA6XFx0XFx0YiA9IHJ0bmxfZGVyZWZlcmVuY2UoaGVhZC1cXHUwMDNldGFibGVbaDFdKTtcXG4gNDUxOlxcdFxcdGlmICghYikge1xcbiA0NTI6XFx0XFx0XFx0YiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByb3V0ZTRfYnVja2V0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbiA0NTM6XFx0XFx0XFx0aWYgKGIgPT0gTlVMTClcXG4gNDU0OlxcdFxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gNDU1OlxcdFxcbiA0NTY6XFx0XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZiLVxcdTAwM2VmaWx0ZXJzX3JlZiwgMSk7XFxuIDQ1NzpcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoaGVhZC1cXHUwMDNldGFibGVbaDFdLCBiKTtcXG4gNDU4OlxcdFxcdH0gZWxzZSB7XFxuIDQ1OTpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaDIgPSBmcm9tX2hhc2gobmhhbmRsZSBcXHUwMDNlXFx1MDAzZSAxNik7XFxuIDQ2MDpcXHRcXG4gNDYxOlxcdFxcdFxcdGZvciAoZnAgPSBydG5sX2RlcmVmZXJlbmNlKGItXFx1MDAzZWh0W2gyXSk7XFxuIDQ2MjpcXHRcXHRcXHQgICAgIGZwO1xcbiA0NjM6XFx0XFx0XFx0ICAgICBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoZnAtXFx1MDAzZW5leHQpKVxcbiA0NjQ6XFx0XFx0XFx0XFx0aWYgKGZwICE9IGZvbGQgXFx1MDAyNlxcdTAwMjYgZnAtXFx1MDAzZWhhbmRsZSA9PSBuaGFuZGxlKSB7XFxuIDQ2NTpcXHRcXHRcXHRcXHRcXHROTF9TRVRfRVJSX01TR19GTVQoZXh0YWNrLFxcbiA0NjY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcIkhhbmRsZSAleCBpcyBhbHJlYWR5IGluIHVzZVxcXCIsXFxuIDQ2NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBuaGFuZGxlKTtcXG4gNDY4OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbiA0Njk6XFx0XFx0XFx0XFx0fVxcbiA0NzA6XFx0XFxuIDQ3MTpcXHRcXHRcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmItXFx1MDAzZWZpbHRlcnNfcmVmKTtcXG4gNDcyOlxcdFxcdH1cXG4gNDczOlxcdFxcbiA0NzQ6XFx0XFx0aWYgKHRiW1RDQV9ST1VURTRfVE9dKVxcbiA0NzU6XFx0XFx0XFx0Zi1cXHUwMDNlaWQgPSB0bztcXG4gNDc2OlxcdFxcbiA0Nzc6XFx0XFx0aWYgKHRiW1RDQV9ST1VURTRfRlJPTV0pXFxuIDQ3ODpcXHRcXHRcXHRmLVxcdTAwM2VpZCA9IHRvIHwgaWRcXHUwMDNjXFx1MDAzYzE2O1xcbiA0Nzk6XFx0XFx0ZWxzZSBpZiAodGJbVENBX1JPVVRFNF9JSUZdKVxcbiA0ODA6XFx0XFx0XFx0Zi1cXHUwMDNlaWlmID0gaWQ7XFxuIDQ4MTpcXHRcXG4gNDgyOlxcdFxcdGYtXFx1MDAzZWhhbmRsZSA9IG5oYW5kbGU7XFxuIDQ4MzpcXHRcXHRmLVxcdTAwM2Via3QgPSBiO1xcbiA0ODQ6XFx0XFx0Zi1cXHUwMDNldHAgPSB0cDtcXG4gNDg1OlxcdFxcbiA0ODY6XFx0XFx0aWYgKHRiW1RDQV9ST1VURTRfQ0xBU1NJRF0pIHtcXG4gNDg3OlxcdFxcdFxcdGYtXFx1MDAzZXJlcy5jbGFzc2lkID0gbmxhX2dldF91MzIodGJbVENBX1JPVVRFNF9DTEFTU0lEXSk7XFxuIDQ4ODpcXHRcXHRcXHR0Y2ZfYmluZF9maWx0ZXIodHAsIFxcdTAwMjZmLVxcdTAwM2VyZXMsIGJhc2UpO1xcbiA0ODk6XFx0XFx0fVxcbiA0OTA6XFx0XFxuIDQ5MTpcXHRcXHRyZXR1cm4gMDtcXG4gNDkyOlxcdH1cXG4gNDkzOlxcdFxcbiA0OTQ6XFx0c3RhdGljIGludCByb3V0ZTRfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcXG4gNDk1OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdW5zaWduZWQgbG9uZyBiYXNlLCB1MzIgaGFuZGxlLFxcbiA0OTY6XFx0XFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKip0Y2EsIHZvaWQgKiphcmcsIHUzMiBmbGFncyxcXG4gNDk3OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuIDQ5ODpcXHR7XFxuIDQ5OTpcXHRcXHRzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQgPSBydG5sX2RlcmVmZXJlbmNlKHRwLVxcdTAwM2Vyb290KTtcXG4gNTAwOlxcdFxcdHN0cnVjdCByb3V0ZTRfZmlsdGVyIF9fcmN1ICoqZnA7XFxuIDUwMTpcXHRcXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZm9sZCwgKmYxLCAqcGZwLCAqZiA9IE5VTEw7XFxuIDUwMjpcXHRcXHRzdHJ1Y3Qgcm91dGU0X2J1Y2tldCAqYjtcXG4gNTAzOlxcdFxcdHN0cnVjdCBubGF0dHIgKnRiW1RDQV9ST1VURTRfTUFYICsgMV07XFxuIDUwNDpcXHRcXHR1bnNpZ25lZCBpbnQgaDtcXG4gNTA1OlxcdFxcdGludCBlcnI7XFxuIDUwNjpcXHRcXG4gNTA3OlxcdFxcdGlmICghaGFuZGxlKSB7XFxuIDUwODpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJDcmVhdGluZyB3aXRoIGhhbmRsZSBvZiAwIGlzIGludmFsaWRcXFwiKTtcXG4gNTA5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA1MTA6XFx0XFx0fVxcbiA1MTE6XFx0XFxuIDUxMjpcXHRcXHRpZiAoTkxfUkVRX0FUVFJfQ0hFQ0soZXh0YWNrLCBOVUxMLCB0Y2EsIFRDQV9PUFRJT05TKSkge1xcbiA1MTM6XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIk1pc3Npbmcgb3B0aW9uc1xcXCIpO1xcbiA1MTQ6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDUxNTpcXHRcXHR9XFxuIDUxNjpcXHRcXG4gNTE3OlxcdFxcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWRfZGVwcmVjYXRlZCh0YiwgVENBX1JPVVRFNF9NQVgsIHRjYVtUQ0FfT1BUSU9OU10sXFxuIDUxODpcXHRcXHRcXHRcXHRcXHRcXHQgIHJvdXRlNF9wb2xpY3ksIE5VTEwpO1xcbiA1MTk6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDUyMDpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiA1MjE6XFx0XFxuIDUyMjpcXHRcXHRmb2xkID0gKmFyZztcXG4gNTIzOlxcdFxcdGlmIChmb2xkIFxcdTAwMjZcXHUwMDI2IGZvbGQtXFx1MDAzZWhhbmRsZSAhPSBoYW5kbGUpXFxuIDUyNDpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNTI1OlxcdFxcbiA1MjY6XFx0XFx0ZXJyID0gLUVOT0JVRlM7XFxuIDUyNzpcXHRcXHRmID0ga3phbGxvY19vYmooc3RydWN0IHJvdXRlNF9maWx0ZXIsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuIDUyODpcXHRcXHRpZiAoIWYpXFxuIDUyOTpcXHRcXHRcXHRnb3RvIGVycm91dDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MDA6MTcuNzY0NDQzMjFaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ5MzcyNzczOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgUm91dGU0IEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIHNvIHRoZSBvYnZpb3VzIG5leHQgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIHJlc3Qgb2YgdGhlIGNvZGUgcmVsYXRlZCB0byB0aG9zZSBgcm91dGU0YCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgcm91dGU0X2NoYW5nZWAgYW5kIGByb3V0ZTRfZHVtcGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgcm91dGluZyBzdHJ1Y3R1cmUuIFRoZSBuYW1pbmcgc3VnZ2VzdHMgdGhhdCB0aGV5IGFyZSByZWxhdGVkIHRvIGNoYW5nZXMgd2l0aGluIGFuZCBkdW1waW5nIGluZm9ybWF0aW9uIGZyb20gcm91dGU0LiBJJ2xsIG5lZWQgdG8gYXNzZXNzIHRoZSBzY29wZSBvZiB0aGVpciByZXNwb25zaWJpbGl0eSBpbiByZWxhdGlvbiB0byB0aGUgb3RoZXIgcm91dGVzLCB0byBzZWUgaG93IHRoZSBzeXN0ZW0gaGFuZGxlcyB0aGUgY29uZmlndXJhdGlvbiBhbmQgcmV0cmlldmFsIG9mIGRhdGEuIEkgd2FudCB0byBsb29rIGZvciBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiwgcGFydGljdWxhcmx5IGFyb3VuZCBjb25jdXJyZW5jeSBvciBzdGF0ZSBtYW5hZ2VtZW50LiBVbmRlcnN0YW5kaW5nIGhvdyBkYXRhIGlzIG1vZGlmaWVkIGFuZCBhY2Nlc3NlZCBpcyBrZXkgaGVyZS4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgc2lnbnMgb2YgcmFjZSBjb25kaXRpb25zLCBpbmNvbnNpc3RlbmNpZXMsIG9yIGFueSBpc3N1ZXMgcmVsYXRlZCB0byBkYXRhIGludGVncml0eSB3aGVuIEkgcmV2aWV3IHRoaXMgY29kZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIGlzIGJlaW5nIGR1bXBlZCBieSAncm91dGU0X2R1bXAnIGFuZCB3aGV0aGVyIGRhdGEgaXMgYWx0ZXJlZCBieSB0aGUgJ3JvdXRlNF9jaGFuZ2UnIGZ1bmN0aW9uLiBMZXQncyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgaG93IHRoZXkgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg2MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MDA6MjAuMjU4MTczMzE5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvY2xzX3JvdXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTMwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNTMwOlxcdFxcbiA1MzE6XFx0XFx0ZXJyID0gdGNmX2V4dHNfaW5pdChcXHUwMDI2Zi1cXHUwMDNlZXh0cywgbmV0LCBUQ0FfUk9VVEU0X0FDVCwgVENBX1JPVVRFNF9QT0xJQ0UpO1xcbiA1MzI6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIDUzMzpcXHRcXHRcXHRnb3RvIGVycm91dDtcXG4gNTM0OlxcdFxcbiA1MzU6XFx0XFx0aWYgKGZvbGQpIHtcXG4gNTM2OlxcdFxcdFxcdGYtXFx1MDAzZWlkID0gZm9sZC1cXHUwMDNlaWQ7XFxuIDUzNzpcXHRcXHRcXHRmLVxcdTAwM2VpaWYgPSBmb2xkLVxcdTAwM2VpaWY7XFxuIDUzODpcXHRcXHRcXHRmLVxcdTAwM2VoYW5kbGUgPSBmb2xkLVxcdTAwM2VoYW5kbGU7XFxuIDUzOTpcXHRcXG4gNTQwOlxcdFxcdFxcdGYtXFx1MDAzZXRwID0gZm9sZC1cXHUwMDNldHA7XFxuIDU0MTpcXHRcXHRcXHRmLVxcdTAwM2Via3QgPSBmb2xkLVxcdTAwM2Via3Q7XFxuIDU0MjpcXHRcXHR9XFxuIDU0MzpcXHRcXG4gNTQ0OlxcdFxcdGVyciA9IHJvdXRlNF9zZXRfcGFybXMobmV0LCB0cCwgYmFzZSwgZiwgaGFuZGxlLCBoZWFkLCB0YixcXG4gNTQ1OlxcdFxcdFxcdFxcdCAgICAgICB0Y2FbVENBX1JBVEVdLCBmb2xkLCBmbGFncywgZXh0YWNrKTtcXG4gNTQ2OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiA1NDc6XFx0XFx0XFx0Z290byBlcnJvdXQ7XFxuIDU0ODpcXHRcXG4gNTQ5OlxcdFxcdGggPSBmcm9tX2hhc2goZi1cXHUwMDNlaGFuZGxlIFxcdTAwM2VcXHUwMDNlIDE2KTtcXG4gNTUwOlxcdFxcdGZwID0gXFx1MDAyNmYtXFx1MDAzZWJrdC1cXHUwMDNlaHRbaF07XFxuIDU1MTpcXHRcXHRmb3IgKHBmcCA9IHJ0bmxfZGVyZWZlcmVuY2UoKmZwKTtcXG4gNTUyOlxcdFxcdCAgICAgKGYxID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSAhPSBOVUxMO1xcbiA1NTM6XFx0XFx0ICAgICBmcCA9IFxcdTAwMjZmMS1cXHUwMDNlbmV4dClcXG4gNTU0OlxcdFxcdFxcdGlmIChmLVxcdTAwM2VoYW5kbGUgXFx1MDAzYyBmMS1cXHUwMDNlaGFuZGxlKVxcbiA1NTU6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU1NjpcXHRcXG4gNTU3OlxcdFxcdHRjZl9ibG9ja19uZXRpZl9rZWVwX2RzdCh0cC1cXHUwMDNlY2hhaW4tXFx1MDAzZWJsb2NrKTtcXG4gNTU4OlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihmLVxcdTAwM2VuZXh0LCBmMSk7XFxuIDU1OTpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoKmZwLCBmKTtcXG4gNTYwOlxcdFxcbiA1NjE6XFx0XFx0aWYgKGZvbGQpIHtcXG4gNTYyOlxcdFxcdFxcdGIgPSBmb2xkLVxcdTAwM2Via3Q7XFxuIDU2MzpcXHRcXHRcXHRoID0gZnJvbV9oYXNoKGZvbGQtXFx1MDAzZWhhbmRsZSBcXHUwMDNlXFx1MDAzZSAxNik7XFxuIDU2NDpcXHRcXHRcXHRmcCA9IFxcdTAwMjZiLVxcdTAwM2VodFtoXTtcXG4gNTY1OlxcdFxcdFxcdGZvciAocGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApOyBwZnA7XFxuIDU2NjpcXHRcXHRcXHQgICAgIGZwID0gXFx1MDAyNnBmcC1cXHUwMDNlbmV4dCwgcGZwID0gcnRubF9kZXJlZmVyZW5jZSgqZnApKSB7XFxuIDU2NzpcXHRcXHRcXHRcXHRpZiAocGZwID09IGZvbGQpIHtcXG4gNTY4OlxcdFxcdFxcdFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcigqZnAsIGZvbGQtXFx1MDAzZW5leHQpO1xcbiA1Njk6XFx0XFx0XFx0XFx0XFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2Yi1cXHUwMDNlZmlsdGVyc19yZWYpKSB7XFxuIDU3MDpcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgdGggPSB0b19oYXNoKGZvbGQtXFx1MDAzZWhhbmRsZSk7XFxuIDU3MTpcXHRcXG4gNTcyOlxcdFxcdFxcdFxcdFxcdFxcdFJDVV9JTklUX1BPSU5URVIoaGVhZC1cXHUwMDNldGFibGVbdGhdLCBOVUxMKTtcXG4gNTczOlxcdFxcdFxcdFxcdFxcdFxcdGtmcmVlX3JjdShiLCByY3UpO1xcbiA1NzQ6XFx0XFx0XFx0XFx0XFx0fVxcbiA1NzU6XFx0XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDU3NjpcXHRcXHRcXHRcXHR9XFxuIDU3NzpcXHRcXHRcXHR9XFxuIDU3ODpcXHRcXHR9XFxuIDU3OTpcXHRcXG4gNTgwOlxcdFxcdHJvdXRlNF9yZXNldF9mYXN0bWFwKGhlYWQsIGZvbGQpO1xcbiA1ODE6XFx0XFx0KmFyZyA9IGY7XFxuIDU4MjpcXHRcXHRpZiAoZm9sZCkge1xcbiA1ODM6XFx0XFx0XFx0dGNmX3VuYmluZF9maWx0ZXIodHAsIFxcdTAwMjZmb2xkLVxcdTAwM2VyZXMpO1xcbiA1ODQ6XFx0XFx0XFx0dGNmX2V4dHNfZ2V0X25ldChcXHUwMDI2Zm9sZC1cXHUwMDNlZXh0cyk7XFxuIDU4NTpcXHRcXHRcXHR0Y2ZfcXVldWVfd29yayhcXHUwMDI2Zm9sZC1cXHUwMDNlcndvcmssIHJvdXRlNF9kZWxldGVfZmlsdGVyX3dvcmspO1xcbiA1ODY6XFx0XFx0fVxcbiA1ODc6XFx0XFx0cmV0dXJuIDA7XFxuIDU4ODpcXHRcXG4gNTg5OlxcdGVycm91dDpcXG4gNTkwOlxcdFxcdGlmIChmKVxcbiA1OTE6XFx0XFx0XFx0dGNmX2V4dHNfZGVzdHJveShcXHUwMDI2Zi1cXHUwMDNlZXh0cyk7XFxuIDU5MjpcXHRcXHRrZnJlZShmKTtcXG4gNTkzOlxcdFxcdHJldHVybiBlcnI7XFxuIDU5NDpcXHR9XFxuIDU5NTpcXHRcXG4gNTk2OlxcdHN0YXRpYyB2b2lkIHJvdXRlNF93YWxrKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNmX3dhbGtlciAqYXJnLFxcbiA1OTc6XFx0XFx0XFx0XFx0Ym9vbCBydG5sX2hlbGQpXFxuIDU5ODpcXHR7XFxuIDU5OTpcXHRcXHRzdHJ1Y3Qgcm91dGU0X2hlYWQgKmhlYWQgPSBydG5sX2RlcmVmZXJlbmNlKHRwLVxcdTAwM2Vyb290KTtcXG4gNjAwOlxcdFxcdHVuc2lnbmVkIGludCBoLCBoMTtcXG4gNjAxOlxcdFxcbiA2MDI6XFx0XFx0aWYgKGhlYWQgPT0gTlVMTCB8fCBhcmctXFx1MDAzZXN0b3ApXFxuIDYwMzpcXHRcXHRcXHRyZXR1cm47XFxuIDYwNDpcXHRcXG4gNjA1OlxcdFxcdGZvciAoaCA9IDA7IGggXFx1MDAzYz0gMjU2OyBoKyspIHtcXG4gNjA2OlxcdFxcdFxcdHN0cnVjdCByb3V0ZTRfYnVja2V0ICpiID0gcnRubF9kZXJlZmVyZW5jZShoZWFkLVxcdTAwM2V0YWJsZVtoXSk7XFxuIDYwNzpcXHRcXG4gNjA4OlxcdFxcdFxcdGlmIChiKSB7XFxuIDYwOTpcXHRcXHRcXHRcXHRmb3IgKGgxID0gMDsgaDEgXFx1MDAzYz0gMzI7IGgxKyspIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MDA6MjAuMjU4MjkyNjk5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2OTEzMTQ3MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIG15IHRob3VnaHQgcHJvY2VzcyByZWdhcmRpbmcgYGNsc19yb3V0ZS5jYCwgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIGl0IG15c2VsZiwgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBjbHNfcm91dGUuYyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhpcyBgY2xzX3JvdXRlLmNgIGZpbGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbiB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dC4gTGV0J3MgZGlnIGluIGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIHN5c3RlbSBkZXNpZ24uIFdoYXQncyBpdCBkb2luZz8gV2hhdCBraW5kIG9mIHJvdXRpbmcgbG9naWMgaXMgaW1wbGVtZW50ZWQgaGVyZT8gSXMgaXQgc2ltcGxlIGxvb2t1cHMsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggd2l0aCBwb2xpY3kgY29uc2lkZXJhdGlvbnM/IEknbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgcm91dGUgc2VsZWN0aW9uLCBjYWNoaW5nLCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlcy4gQmFzaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbnV0cyBhbmQgYm9sdHMgb2YgaG93IHRoaXMgbW9kdWxlIG1ha2VzIHJvdXRpbmcgZGVjaXNpb25zLiBUaW1lIHRvIGdldCBmYW1pbGlhciB3aXRoIHRoZSBjb2RlIGFuZCBpdHMgYXBwcm9hY2ggdG8gZW5zdXJlIGVmZmljaWVudCBhbmQgcm9idXN0IG9wZXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzODIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjAwOjIxLjk0OTYxMDAyN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2Nsc19yb3V0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYxMDpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3Qgcm91dGU0X2ZpbHRlciAqZjtcXG4gNjExOlxcdFxcbiA2MTI6XFx0XFx0XFx0XFx0XFx0Zm9yIChmID0gcnRubF9kZXJlZmVyZW5jZShiLVxcdTAwM2VodFtoMV0pO1xcbiA2MTM6XFx0XFx0XFx0XFx0XFx0ICAgICBmO1xcbiA2MTQ6XFx0XFx0XFx0XFx0XFx0ICAgICBmID0gcnRubF9kZXJlZmVyZW5jZShmLVxcdTAwM2VuZXh0KSkge1xcbiA2MTU6XFx0XFx0XFx0XFx0XFx0XFx0aWYgKCF0Y19jbHNfc3RhdHNfZHVtcCh0cCwgYXJnLCBmKSlcXG4gNjE2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdHJldHVybjtcXG4gNjE3OlxcdFxcdFxcdFxcdFxcdH1cXG4gNjE4OlxcdFxcdFxcdFxcdH1cXG4gNjE5OlxcdFxcdFxcdH1cXG4gNjIwOlxcdFxcdH1cXG4gNjIxOlxcdH1cXG4gNjIyOlxcdFxcbiA2MjM6XFx0c3RhdGljIGludCByb3V0ZTRfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICpmaCxcXG4gNjI0OlxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNtc2cgKnQsIGJvb2wgcnRubF9oZWxkKVxcbiA2MjU6XFx0e1xcbiA2MjY6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmYgPSBmaDtcXG4gNjI3OlxcdFxcdHN0cnVjdCBubGF0dHIgKm5lc3Q7XFxuIDYyODpcXHRcXHR1MzIgaWQ7XFxuIDYyOTpcXHRcXG4gNjMwOlxcdFxcdGlmIChmID09IE5VTEwpXFxuIDYzMTpcXHRcXHRcXHRyZXR1cm4gc2tiLVxcdTAwM2VsZW47XFxuIDYzMjpcXHRcXG4gNjMzOlxcdFxcdHQtXFx1MDAzZXRjbV9oYW5kbGUgPSBmLVxcdTAwM2VoYW5kbGU7XFxuIDYzNDpcXHRcXG4gNjM1OlxcdFxcdG5lc3QgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcoc2tiLCBUQ0FfT1BUSU9OUyk7XFxuIDYzNjpcXHRcXHRpZiAobmVzdCA9PSBOVUxMKVxcbiA2Mzc6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDYzODpcXHRcXG4gNjM5OlxcdFxcdGlmICghKGYtXFx1MDAzZWhhbmRsZSBcXHUwMDI2IDB4ODAwMCkpIHtcXG4gNjQwOlxcdFxcdFxcdGlkID0gZi1cXHUwMDNlaWQgXFx1MDAyNiAweEZGO1xcbiA2NDE6XFx0XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgVENBX1JPVVRFNF9UTywgaWQpKVxcbiA2NDI6XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDY0MzpcXHRcXHR9XFxuIDY0NDpcXHRcXHRpZiAoZi1cXHUwMDNlaGFuZGxlIFxcdTAwMjYgMHg4MDAwMDAwMCkge1xcbiA2NDU6XFx0XFx0XFx0aWYgKChmLVxcdTAwM2VoYW5kbGUgXFx1MDAzZVxcdTAwM2UgMTYpICE9IDB4RkZGRiBcXHUwMDI2XFx1MDAyNlxcbiA2NDY6XFx0XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgVENBX1JPVVRFNF9JSUYsIGYtXFx1MDAzZWlpZikpXFxuIDY0NzpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjQ4OlxcdFxcdH0gZWxzZSB7XFxuIDY0OTpcXHRcXHRcXHRpZCA9IGYtXFx1MDAzZWlkIFxcdTAwM2VcXHUwMDNlIDE2O1xcbiA2NTA6XFx0XFx0XFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgVENBX1JPVVRFNF9GUk9NLCBpZCkpXFxuIDY1MTpcXHRcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjUyOlxcdFxcdH1cXG4gNjUzOlxcdFxcdGlmIChmLVxcdTAwM2VyZXMuY2xhc3NpZCBcXHUwMDI2XFx1MDAyNlxcbiA2NTQ6XFx0XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgVENBX1JPVVRFNF9DTEFTU0lELCBmLVxcdTAwM2VyZXMuY2xhc3NpZCkpXFxuIDY1NTpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjU2OlxcdFxcbiA2NTc6XFx0XFx0aWYgKHRjZl9leHRzX2R1bXAoc2tiLCBcXHUwMDI2Zi1cXHUwMDNlZXh0cykgXFx1MDAzYyAwKVxcbiA2NTg6XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIDY1OTpcXHRcXG4gNjYwOlxcdFxcdG5sYV9uZXN0X2VuZChza2IsIG5lc3QpO1xcbiA2NjE6XFx0XFxuIDY2MjpcXHRcXHRpZiAodGNmX2V4dHNfZHVtcF9zdGF0cyhza2IsIFxcdTAwMjZmLVxcdTAwM2VleHRzKSBcXHUwMDNjIDApXFxuIDY2MzpcXHRcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gNjY0OlxcdFxcbiA2NjU6XFx0XFx0cmV0dXJuIHNrYi1cXHUwMDNlbGVuO1xcbiA2NjY6XFx0XFxuIDY2NzpcXHRubGFfcHV0X2ZhaWx1cmU6XFxuIDY2ODpcXHRcXHRubGFfbmVzdF9jYW5jZWwoc2tiLCBuZXN0KTtcXG4gNjY5OlxcdFxcdHJldHVybiAtMTtcXG4gNjcwOlxcdH1cXG4gNjcxOlxcdFxcbiA2NzI6XFx0c3RhdGljIHZvaWQgcm91dGU0X2JpbmRfY2xhc3Modm9pZCAqZmgsIHUzMiBjbGFzc2lkLCB1bnNpZ25lZCBsb25nIGNsLCB2b2lkICpxLFxcbiA2NzM6XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBiYXNlKVxcbiA2NzQ6XFx0e1xcbiA2NzU6XFx0XFx0c3RydWN0IHJvdXRlNF9maWx0ZXIgKmYgPSBmaDtcXG4gNjc2OlxcdFxcbiA2Nzc6XFx0XFx0dGNfY2xzX2JpbmRfY2xhc3MoY2xhc3NpZCwgY2wsIHEsIFxcdTAwMjZmLVxcdTAwM2VyZXMsIGJhc2UpO1xcbiA2Nzg6XFx0fVxcbiA2Nzk6XFx0XFxuIDY4MDpcXHRzdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX3JvdXRlNF9vcHMgX19yZWFkX21vc3RseSA9IHtcXG4gNjgxOlxcdFxcdC5raW5kXFx0XFx0PVxcdFxcXCJyb3V0ZVxcXCIsXFxuIDY4MjpcXHRcXHQuY2xhc3NpZnlcXHQ9XFx0cm91dGU0X2NsYXNzaWZ5LFxcbiA2ODM6XFx0XFx0LmluaXRcXHRcXHQ9XFx0cm91dGU0X2luaXQsXFxuIDY4NDpcXHRcXHQuZGVzdHJveVxcdD1cXHRyb3V0ZTRfZGVzdHJveSxcXG4gNjg1OlxcdFxcdC5nZXRcXHRcXHQ9XFx0cm91dGU0X2dldCxcXG4gNjg2OlxcdFxcdC5jaGFuZ2VcXHRcXHQ9XFx0cm91dGU0X2NoYW5nZSxcXG4gNjg3OlxcdFxcdC5kZWxldGVcXHRcXHQ9XFx0cm91dGU0X2RlbGV0ZSxcXG4gNjg4OlxcdFxcdC53YWxrXFx0XFx0PVxcdHJvdXRlNF93YWxrLFxcbiA2ODk6XFx0XFx0LmR1bXBcXHRcXHQ9XFx0cm91dGU0X2R1bXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDAxOjAwOjIxLjk0OTczMTgwN1oiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDE5NTk1OTYyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgY2xzX3JvdXRlLmMgUGF0Y2g6IFJlZmNvdW50aW5nIGFuZCBNZW1vcnkgU2FmZXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciBgbmV0L3NjaGVkL2Nsc19yb3V0ZS5jYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhZGRyZXNzaW5nIGEgY3JpdGljYWwgaXNzdWUgaW4gaG93IHRoZSBgcm91dGU0X2J1Y2tldGAgc3RydWN0dXJlIGlzIG1hbmFnZWQsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIGZpbHRlciBkZWxldGlvbiBhbmQgbW9kaWZpY2F0aW9uLlxuXG5NeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGUgY29yZSBwcm9ibGVtIHdhcyBhIGxhY2sgb2YgcHJvcGVyIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgYHN0cnVjdCByb3V0ZTRfYnVja2V0YC4gIFByZXZpb3VzbHksIHdoZW4gYSBmaWx0ZXIgd2FzIGRlbGV0ZWQgKGByb3V0ZTRfZGVsZXRlYCksIHRoZSBjb2RlIHdvdWxkIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYnVja2V0J3MgaGFzaCB0YWJsZSAoYGItXHUwMDNlaHRbMC4uMzJdYCkgdG8gc2VlIGlmIGFueSBmaWx0ZXJzIHJlbWFpbmVkLiBJZiBpdCBmb3VuZCBub25lLCBpdCdkIGNsZWFyIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZSBoZWFkJ3MgdGFibGUgKGBoZWFkLVx1MDAzZXRhYmxlW3RvX2hhc2goaCldYCkgYW5kIGZyZWUgdGhlIGJ1Y2tldCB1c2luZyBga2ZyZWVfcmN1KGIsIHJjdSlgLiBUaGUgd2Vha25lc3MgbGllcyBpbiBob3cgZmlsdGVycyBhcmUgKmNoYW5nZWQqIChgcm91dGU0X2NoYW5nZWApLiBJZiBhIGZpbHRlcidzIGBmb2xkYCB3YXMgcmVwbGFjZWQgb3IgbW92ZWQgdG8gYSBkaWZmZXJlbnQgYnVja2V0IG9yIGhhbmRsZSwgdGhlcmUgd2FzIGEgcmlzayBvZiBjb3JydXB0aW5nIGJ1Y2tldCBhY2NvdW50aW5nIG9yIGZyZWVpbmcgdGhlIGJ1Y2tldCB3aGlsZSBmaWx0ZXJzIHdlcmUgc3RpbGwgdXNpbmcgaXQsIHdoaWNoIG1lYW5zIHdlIHBvdGVudGlhbGx5IGhhZCBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuXG5cblRoZSBwYXRjaCdzIHNvbHV0aW9uIGlzIGVsZWdhbnQ6IGl0IGludHJvZHVjZXMgYSBgcmVmY291bnRfdCBmaWx0ZXJzX3JlZmAgZmllbGQgd2l0aGluIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAuIE5vdywgaW5zdGVhZCBvZiBsb29waW5nIHRvIGRldGVybWluZSBpZiB0aGUgYnVja2V0IGlzIGVtcHR5IGR1cmluZyBkZWxldGlvbiwgYHJvdXRlNF9kZWxldGVgIHVzZXMgYHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKWAuICBJbiB0aGUgYHJvdXRlNF9zZXRfcGFybXNgIGZ1bmN0aW9uLCB3ZSBub3cgaW5jcmVtZW50IHRoZSByZWZjb3VudCB3aGVuIGFkZGluZyBhIGZpbHRlciB0byBhbiBleGlzdGluZyBidWNrZXQgb3Igc2V0IHRoZSByZWZjb3VudCB0byAxIHdoZW4gYWxsb2NhdGluZyBhIG5ldyBidWNrZXQuIFRoaXMgbWFrZXMgaXQgbXVjaCBtb3JlIHJvYnVzdC4gVGhlIGZpbHRlciByZXBsYWNlbWVudCBsb2dpYyB3aXRoaW4gYHJvdXRlNF9jaGFuZ2VgIG5vdyBhbHNvIGluY2x1ZGVzIHRoZSByZWZjb3VudCBkZWNyZW1lbnQgd2hlbiB1bmxpbmtpbmcgYSBmaWx0ZXIuIFRoZSBgaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZiLVx1MDAzZWZpbHRlcnNfcmVmKSlgIGNvbmRpdGlvbiBpbiBgcm91dGU0X2NoYW5nZWAgbm93IHByb3Blcmx5IGhhbmRsZXMgdGhlIGJ1Y2tldCBkZWFsbG9jYXRpb24uIEkgYWxzbyBub3RpY2VkIHRoYXQgdGhlIGNvbGxpc2lvbiBjaGVjayBpbiBgcm91dGU0X3NldF9wYXJtc2Agbm93IHdvcmtzIGNvcnJlY3RseSwgZW5zdXJpbmcgdGhhdCB0aGVyZSBhcmVuJ3QgcHJvYmxlbXMgaWYgd2UncmUgcmVwbGFjaW5nIG9yIGRldGVjdGluZyBhbiBleGlzdGluZyBmaWx0ZXIuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayBmb3IgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBlc3BlY2lhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBGb3J0dW5hdGVseSwgdGhpcyBsb29rcyBwcmV0dHkgY2xlYW4uIEJvdGggYHN0cnVjdCByb3V0ZTRfYnVja2V0YCBhbmQgYHN0cnVjdCByb3V0ZTRfZmlsdGVyYCBhcmUgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iamAsIHdoaWNoIGd1YXJhbnRlZXMgemVyby1pbml0aWFsaXphdGlvbi4gVGhpcyBlbGltaW5hdGVzIHRoZSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGF0IGFsbG9jYXRpb24uIEZ1cnRoZXJtb3JlLCB0aGVyZSdzIG5vIGV2aWRlbmNlIG9mIGFueSB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBwYWRkaW5nIG9yIGZpZWxkcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZS4gIFRoZSBgcm91dGU0X2R1bXBgIGZ1bmN0aW9uIHVzZXMgYG5sYV9wdXRfdTMyYCB0byBkdW1wIHJlbGV2YW50IGZpZWxkcyBsaWtlIGBmLVx1MDAzZWlkYCwgYGYtXHUwMDNlaWlmYCwgYW5kIGBmLVx1MDAzZXJlcy5jbGFzc2lkYC4gIFRoZXNlIGFyZSBhbGwgZXhwbGljaXRseSBpbml0aWFsaXplZCBkdXJpbmcgZmlsdGVyIGNyZWF0aW9uL21vZGlmaWNhdGlvbiwgc28gbm8gcHJvYmxlbXMgaGVyZS4gSSBhbHNvIGRvbid0IHNlZSBhbnkgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgaXNzdWVzIGFkZHJlc3NlZCBhbmQgZml4ZWQgbG9vayBsaWtlIGNsYXNzaWMgcmVmZXJlbmNlIGNvdW50aW5nIHByb2JsZW1zIHdoaWNoIGFyZSB2ZXJ5IGVhc2lseSBjYXVnaHQgYnkgS0FTQU4gb3IgbG9ja2RlcCwgd2hpY2ggYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxuTm93LCBsZXQncyBhcHBseSBvdXIgc3RhbmRhcmQgY2hlY2tsaXN0LiAgVGhpcyBpcyB3aGF0IEkgbG9vayBmb3Igd2hlbiBkZXRlcm1pbmluZyBpZiBhIEtNU0FOIHNlc3Npb24gaXMgbmVjZXNzYXJ5OlxuXG4qICAgU3RhbmRhcmQgS0FTQU4gYnVpbGRzIChPT0IsIFVBRiwgZG91YmxlLWZyZWUsIGludmFsaWQtZnJlZSksIExPQ0tERVAsIFVCU0FOLCByZWZjb3VudCBjaGVja3M6IFRoZXNlIGFyZSBhbHJlYWR5IGVuYWJsZWQgYW5kIHdvdWxkIGhhdmUgY2F1Z2h0IGlzc3VlcyByZWxhdGVkIHRvIHVzZS1hZnRlci1mcmVlLCBkb3VibGUtZnJlZXMsIGV0Yy5cbiogICBLTVNBTiBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrczogVGhpcyBpcyB0aGUgY3JpdGljYWwgY2hlY2sgZm9yIG15IGFzc2Vzc21lbnQuXG4qICAgXCJUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLCBMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlwiXG4qICAgXCJTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMuLi5cIiAoZm9sbG93ZWQgYnkgYSBsaXN0IG9mIGNyaXRlcmlhIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS9zdHJ1Y3R1cmUgY29weWluZyB0byB1c2VyIHNwYWNlLCBldGMuKVxuXG5CYXNlZCBvbiB0aGlzLCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IEtNU0FOIGlzICpub3QqIG5lZWRlZCBoZXJlLiBUaGUgcGF0Y2ggZG9lc24ndDpcblxuKiAgIENvcHkgYW55IHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS5cbiogICBEZXBlbmQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgaW4gY29uZGl0aW9uYWwgbG9naWMuXG4qICAgQWxsb2NhdGUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy5cbiogICBVc2UgYW55IGtpbmQgb2YgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzIGluIHN1cnJvdW5kaW5nIGNvZGUuXG5cblRoZSBjaGFuZ2VzIGFyZSBzdHJpY3RseSBhYm91dCBsaWZldGltZSBhbmQgcmVmZXJlbmNlIGNvdW50aW5nIChgcmVmY291bnRfdGApIG9mIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAgYW5kIGZpeGluZyBzb21lIGZpbHRlciByZXBsYWNlbWVudCBsb2dpYyBidWdzIGluIGBjbHNfcm91dGVgLiBUaGUgZ29hbCBpcyB0byBtYWtlIHRoaW5ncyByb2J1c3QsIHNvIG15IGFzc2Vzc21lbnQgd291bGQgYmUgdGhhdCBgTmVlZHNLTVNBTmAgc2hvdWxkIGJlIHNldCB0byBgZmFsc2VgLiBJIGNhbiBkZWZpbml0aXZlbHkgc3RhdGUgdGhhdCB0aGlzIGlzIGEgc2FmZSBwYXRjaCBpbiB0ZXJtcyBvZiBtZW1vcnkgc2FmZXR5LCBhbmQgc3RhbmRhcmQga2VybmVsIGJ1aWxkIHRvb2xzIHNob3VsZCBiZSBhYmxlIHRvIGNvdmVyXG5cbiIsIklucHV0VG9rZW5zIjoxNDg2OCwiT3V0cHV0VG9rZW5zIjoyOTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDE6MDA6NDIuMTQ1NjkzN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcgaXNzdWVzIGluIGNsc19yb3V0ZSAodHJhZmZpYyBjb250cm9sIHJvdXRlIGNsYXNzaWZpZXIpIHdoZW4gdXBkYXRpbmcgb3IgZGVsZXRpbmcgcm91dGUgZmlsdGVycyBhY3Jvc3MgYnVja2V0cywgYnkgaW50cm9kdWNpbmcgYSBgZmlsdGVyc19yZWZgIHJlZmNvdW50IChgcmVmY291bnRfdGApIHRvIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAuXFxuXFxuQW5hbHlzaXMgb2YgbWVtb3J5IHNhbml0aXphdGlvbiByZXF1aXJlbWVudHM6XFxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSAvIEtNU0FOOiBBbGwgYWxsb2NhdGlvbnMgKGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAgYW5kIGBzdHJ1Y3Qgcm91dGU0X2ZpbHRlcmApIGNvbnRpbnVlIHRvIHVzZSBga3phbGxvY19vYmpgIGVuc3VyaW5nIGFsbCBtZW1vcnkgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZCB1cG9uIGNyZWF0aW9uLiBUaGUgbmV3IGBmaWx0ZXJzX3JlZmAgZmllbGQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGByZWZjb3VudF9zZXRgIGFuZCBtYW5hZ2VkIHZpYSBgcmVmY291bnRfaW5jYCAvIGByZWZjb3VudF9kZWNfYW5kX3Rlc3RgLiBObyBzdHJ1Y3QgZmllbGRzLCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSB2aWEgTmV0bGluayAoYWxsIGR1bXBlZCBhdHRyaWJ1dGVzIGFyZSB2YWxpZGF0ZWQgYW5kIHBvcHVsYXRlZCBmcm9tIGluaXRpYWxpemVkIHNjYWxhciB2YWx1ZXMpLiBUaGVyZSBpcyBubyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXFxuLSBVQUYgLyBLQVNBTjogVGhlIGNoYW5nZXMgbW9kaWZ5IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYnVja2V0IGRlYWxsb2NhdGlvbiBsaWZldGltZXMgKGBrZnJlZV9yY3VgKSwgd2hpY2ggZmFsbCB1bmRlciBVc2UtQWZ0ZXItRnJlZSBhbmQgcmVmY291bnQgc2FmZXR5LiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBtb25pdG9yZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCB0aGUga2VybmVsJ3MgYnVpbHQtaW4gcmVmY291bnQgY2hlY2tpbmcgKGByZWZjb3VudF90YCkuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGxpZmV0aW1lIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcgaXNzdWVzIGluIGNsc19yb3V0ZSAodHJhZmZpYyBjb250cm9sIHJvdXRlIGNsYXNzaWZpZXIpIHdoZW4gdXBkYXRpbmcgb3IgZGVsZXRpbmcgcm91dGUgZmlsdGVycyBhY3Jvc3MgYnVja2V0cywgYnkgaW50cm9kdWNpbmcgYSBgZmlsdGVyc19yZWZgIHJlZmNvdW50IChgcmVmY291bnRfdGApIHRvIGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAuXFxuXFxuQW5hbHlzaXMgb2YgbWVtb3J5IHNhbml0aXphdGlvbiByZXF1aXJlbWVudHM6XFxuLSBVbmluaXRpYWxpemVkIE1lbW9yeSAvIEtNU0FOOiBBbGwgYWxsb2NhdGlvbnMgKGBzdHJ1Y3Qgcm91dGU0X2J1Y2tldGAgYW5kIGBzdHJ1Y3Qgcm91dGU0X2ZpbHRlcmApIGNvbnRpbnVlIHRvIHVzZSBga3phbGxvY19vYmpgIGVuc3VyaW5nIGFsbCBtZW1vcnkgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZCB1cG9uIGNyZWF0aW9uLiBUaGUgbmV3IGBmaWx0ZXJzX3JlZmAgZmllbGQgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGByZWZjb3VudF9zZXRgIGFuZCBtYW5hZ2VkIHZpYSBgcmVmY291bnRfaW5jYCAvIGByZWZjb3VudF9kZWNfYW5kX3Rlc3RgLiBObyBzdHJ1Y3QgZmllbGRzLCBwYWRkaW5nLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlcnMgYXJlIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSB2aWEgTmV0bGluayAoYWxsIGR1bXBlZCBhdHRyaWJ1dGVzIGFyZSB2YWxpZGF0ZWQgYW5kIHBvcHVsYXRlZCBmcm9tIGluaXRpYWxpemVkIHNjYWxhciB2YWx1ZXMpLiBUaGVyZSBpcyBubyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuXFxuLSBVQUYgLyBLQVNBTjogVGhlIGNoYW5nZXMgbW9kaWZ5IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgYnVja2V0IGRlYWxsb2NhdGlvbiBsaWZldGltZXMgKGBrZnJlZV9yY3VgKSwgd2hpY2ggZmFsbCB1bmRlciBVc2UtQWZ0ZXItRnJlZSBhbmQgcmVmY291bnQgc2FmZXR5LiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBtb25pdG9yZWQgYW5kIGRldGVjdGVkIGJ5IEtBU0FOIGFuZCB0aGUga2VybmVsJ3MgYnVpbHQtaW4gcmVmY291bnQgY2hlY2tpbmcgKGByZWZjb3VudF90YCkuXFxuXFxuVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowpxhvw[1] Phase: Succeeded StartedAt: 2026-09-08 01:00:53 +0000 UTC FinishedAt: 2026-09-08 01:00:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 01:00:53 +0000 UTC FinishedAt: 2026-09-08 01:00:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[2] Phase: Succeeded StartedAt: 2026-09-08 01:00:53 +0000 UTC FinishedAt: 2026-09-08 04:41:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 01:00:53 +0000 UTC FinishedAt: 2026-09-08 04:41:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","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-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 01:00:53 +0000 UTC FinishedAt: 2026-09-08 01:01:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 01:00:53 +0000 UTC FinishedAt: 2026-09-08 01:00:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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-workflowpxhvw/series-workflowpxhvw-convert-artifact-3318348836/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 01:01:03 +0000 UTC FinishedAt: 2026-09-08 01:17:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 01:01:03 +0000 UTC FinishedAt: 2026-09-08 01:17: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:*100577cc-94f8-4452-8375-c01af2769872,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-workflowpxhvw/series-workflowpxhvw-convert-artifact-3318348836/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": "87e5e695-b2df-4406-b0c0-0ebb3128a7a1", "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-workflowpxhvw/series-workflowpxhvw-build-action-1045007970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 01:01:03 +0000 UTC FinishedAt: 2026-09-08 01:16:51 +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:*100577cc-94f8-4452-8375-c01af2769872,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-workflowpxhvw/series-workflowpxhvw-convert-artifact-3318348836/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": "87e5e695-b2df-4406-b0c0-0ebb3128a7a1", "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-workflowpxhvw/series-workflowpxhvw-build-action-1045007970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 01:17:01 +0000 UTC FinishedAt: 2026-09-08 01:17:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 01:17:01 +0000 UTC FinishedAt: 2026-09-08 01:17:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 01:17:01 +0000 UTC FinishedAt: 2026-09-08 01:17:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 01:17:01 +0000 UTC FinishedAt: 2026-09-08 01:17:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","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-workflowpxhvw/series-workflowpxhvw-convert-artifact-529272611/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 01:17:11 +0000 UTC FinishedAt: 2026-09-08 01:19:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 01:17:11 +0000 UTC FinishedAt: 2026-09-08 01:18:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*87e5e695-b2df-4406-b0c0-0ebb3128a7a1,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-workflowpxhvw/series-workflowpxhvw-build-action-1045007970/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-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 01:19:08 +0000 UTC FinishedAt: 2026-09-08 01:19:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 01:19:08 +0000 UTC FinishedAt: 2026-09-08 01:19:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 01:19:08 +0000 UTC FinishedAt: 2026-09-08 01:37:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 01:19:08 +0000 UTC FinishedAt: 2026-09-08 01:37:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*100577cc-94f8-4452-8375-c01af2769872,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-workflowpxhvw/series-workflowpxhvw-convert-artifact-529272611/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": "a0162f06-b163-47e6-a3e9-a04819b9339d", "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-workflowpxhvw/series-workflowpxhvw-build-action-1200034775/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 01:19:08 +0000 UTC FinishedAt: 2026-09-08 01:36:49 +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:*100577cc-94f8-4452-8375-c01af2769872,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-workflowpxhvw/series-workflowpxhvw-convert-artifact-529272611/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": "a0162f06-b163-47e6-a3e9-a04819b9339d", "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-workflowpxhvw/series-workflowpxhvw-build-action-1200034775/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 01:37:00 +0000 UTC FinishedAt: 2026-09-08 01:37:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 01:37:00 +0000 UTC FinishedAt: 2026-09-08 01:37:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 01:37:00 +0000 UTC FinishedAt: 2026-09-08 01:38:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 01:37:00 +0000 UTC FinishedAt: 2026-09-08 01:38:47 +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:*a0162f06-b163-47e6-a3e9-a04819b9339d,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-workflowpxhvw/series-workflowpxhvw-build-action-1200034775/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-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 01:38:57 +0000 UTC FinishedAt: 2026-09-08 04:41:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 01:38:57 +0000 UTC FinishedAt: 2026-09-08 04:41:40 +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":["route4_change","route4_delete","route4_set_parms"],"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:*87e5e695-b2df-4406-b0c0-0ebb3128a7a1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a0162f06-b163-47e6-a3e9-a04819b9339d,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-workflowpxhvw/series-workflowpxhvw-build-action-1045007970/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-workflowpxhvw/series-workflowpxhvw-build-action-1200034775/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 01:38:57 +0000 UTC FinishedAt: 2026-09-08 01:39:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 01:38:57 +0000 UTC FinishedAt: 2026-09-08 01:39:02 +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":["route4_change","route4_delete","route4_set_parms"],"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-workflowpxhvw/series-workflowpxhvw-convert-artifact-1433254460/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 01:38:57 +0000 UTC FinishedAt: 2026-09-08 01:38:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 01:38:57 +0000 UTC FinishedAt: 2026-09-08 01:38:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 01:38:57 +0000 UTC FinishedAt: 2026-09-08 01:38:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 01:39:07 +0000 UTC FinishedAt: 2026-09-08 04:41:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowpxhvw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"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":["route4_change","route4_delete","route4_set_parms"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_CLS_ROUTE4"],"series_id":"74d313f7-7b34-4986-a456-9a033a25ba37","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 01:39:07 +0000 UTC FinishedAt: 2026-09-08 04:41:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*87e5e695-b2df-4406-b0c0-0ebb3128a7a1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a0162f06-b163-47e6-a3e9-a04819b9339d,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-workflowpxhvw/series-workflowpxhvw-build-action-1045007970/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-workflowpxhvw/series-workflowpxhvw-build-action-1200034775/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-workflowpxhvw/series-workflowpxhvw-convert-artifact-1433254460/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,}