Name: series-workflowp284f Phase: Succeeded StartedAt: 2026-08-28 20:44:47 +0000 UTC FinishedAt: 2026-08-29 00:30:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[0] Phase: Succeeded StartedAt: 2026-08-28 20:44:47 +0000 UTC FinishedAt: 2026-08-28 20:50:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[0].run-triage Phase: Succeeded StartedAt: 2026-08-28 20:44:47 +0000 UTC FinishedAt: 2026-08-28 20:50:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_STORAGE_ALAUDA", "USB_STORAGE", "USB", "SCSI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_STORAGE_ALAUDA", "USB_STORAGE", "USB", "SCSI" ], "series_id": "f0d53c92-bfa9-4bd9-95ec-138de1289886" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alauda_transport", "alauda_probe", "init_alauda", "alauda_check_media", "alauda_read_data", "alauda_write_data", "alauda_write_lba", "alauda_free_maps" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9TVE9SQUdFX0FMQVVEQSYjMzQ7LAogICAgJiMzNDtVU0JfU1RPUkFHRSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7U0NTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsYXVkYV90cmFuc3BvcnQmIzM0OywKICAgICYjMzQ7YWxhdWRhX3Byb2JlJiMzNDssCiAgICAmIzM0O2luaXRfYWxhdWRhJiMzNDssCiAgICAmIzM0O2FsYXVkYV9jaGVja19tZWRpYSYjMzQ7LAogICAgJiMzNDthbGF1ZGFfcmVhZF9kYXRhJiMzNDssCiAgICAmIzM0O2FsYXVkYV93cml0ZV9kYXRhJiMzNDssCiAgICAmIzM0O2FsYXVkYV93cml0ZV9sYmEmIzM0OywKICAgICYjMzQ7YWxhdWRhX2ZyZWVfbWFwcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBtZW1vcnkgbGVha3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFuZCBwb3RlbnRpYWwgZGl2aXNpb24tYnktemVybyBlcnJvcnMgaW4gZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy4gU3BlY2lmaWNhbGx5LCBpdCBmcmVlcyB0aGUgb3V0ZXIgcG9pbnRlciBhcnJheXMgaW4gYWxhdWRhX2ZyZWVfbWFwcygpLCBhZGRzIGVycm9yIGNsZWFudXAgaW4gYWxhdWRhX2luaXRfbWVkaWEoKSwgYWRkcyBjaGVja3MgZm9yIE5VTEwgcG9pbnRlcnMgaW4gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoKSwgYWRkcyBjaGVja3MgZm9yIHplcm8gdXpvbmVzaXplIHRvIGF2b2lkIGRpdmlzaW9uIGJ5IHplcm8sIGFuZCBtb3ZlcyBtZWRpYV9pbml0aWFsaXplZCB0byBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8uXG5cblRoZSBzdHJ1Y3QgYWxhdWRhX2luZm8gY29udGFpbmluZyBhbGF1ZGFfbWVkaWFfaW5mbyBpcyBhbGxvY2F0ZWQgdXNpbmcga3phbGxvY19vYmooKSwgZW5zdXJpbmcgYWxsIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC4gUEJBL0xCQSBtYXBwaW5nIHRhYmxlcyBhcmUgYWxsb2NhdGVkIHZpYSBrY2FsbG9jLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFNpbmNlIHRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgZml4IG1lbW9yeSBsZWFrcyBhbmQgTlVMTC96ZXJvLWNoZWNrIHNhZmV0eSBpc3N1ZXMsIHRoZXkgZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG8gbm90IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgemVyby1kaXZpc2lvbiBidWdzLCBtZW1vcnkgbGVha3MsIGFuZCBtZWRpYSBpbml0aWFsaXphdGlvbiBzdGF0ZSBoYW5kbGluZyBhY3Jvc3Mgem9uZSBtYXAgYWxsb2NhdGlvbnMgYW5kIEkvTyBoYW5kbGluZyBpbiB0aGUgT2x5bXB1cyBNQVVTQi0xMC9GdWppZmlsbSBEUEMtUjEgKEFsYXVkYSkgVVNCIG1hc3Mgc3RvcmFnZSBkcml2ZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIHZpYSBVU0IgZW11bGF0aW9uL2Z1enppbmcgZnJhbWV3b3Jrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUzYTBhNjA1MWE3YjZmMTJkYjVmOGE1MmJhZGI0N2RiODM1MGY2OWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyOCAyMDo0ODozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1xuaW5kZXggNjkxZmU0NzAwOWNmNi4uYTJhMzMzNDE5ZjFmNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNcbkBAIC05Niw2ICYjNDM7OTYsOCBAQCBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8ge1xuIFxuIFx0dTE2ICoqbGJhX3RvX3BiYTtcdFx0LyogbG9naWNhbCB0byBwaHlzaWNhbCBibG9jayBtYXAgKi9cbiBcdHUxNiAqKnBiYV90b19sYmE7XHRcdC8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgYmxvY2sgbWFwICovXG4mIzQzO1xuJiM0MztcdGJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7XG4gfTtcbiBcbiBzdHJ1Y3QgYWxhdWRhX2luZm8ge1xuQEAgLTEwNSw4ICYjNDM7MTA3LDYgQEAgc3RydWN0IGFsYXVkYV9pbmZvIHtcbiBcdHVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5O1xuIFx0dW5zaWduZWQgbG9uZyBzZW5zZV9hc2M7XHQvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi9cbiBcdHVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjcTtcdC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi9cbi1cbi1cdGJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7XG4gfTtcbiBcbiAjZGVmaW5lIHNob3J0X3BhY2sobHNiLG1zYikgKCAoKHUxNikobHNiKSkgfCAoICgodTE2KShtc2IpKVx1MDAzY1x1MDAzYzggKSApXG5AQCAtMjkwLDE3ICYjNDM7MjkwLDI1IEBAIHN0YXRpYyB2b2lkIGFsYXVkYV9mcmVlX21hcHMgKHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyAqbWVkaWFfaW5mbylcbiBcdHVuc2lnbmVkIGludCBudW1fem9uZXMgPSBtZWRpYV9pbmZvLVx1MDAzZWNhcGFjaXR5IFx1MDAzZVx1MDAzZSBzaGlmdDtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuLVx0aWYgKG1lZGlhX2luZm8tXHUwMDNlbGJhX3RvX3BiYSAhPSBOVUxMKVxuJiM0MztcdGlmIChtZWRpYV9pbmZvLVx1MDAzZWxiYV90b19wYmEgIT0gTlVMTCkge1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fem9uZXM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdFx0a2ZyZWUobWVkaWFfaW5mby1cdTAwM2VsYmFfdG9fcGJhW2ldKTtcbiBcdFx0XHRtZWRpYV9pbmZvLVx1MDAzZWxiYV90b19wYmFbaV0gPSBOVUxMO1xuIFx0XHR9XG4mIzQzO1x0XHRrZnJlZShtZWRpYV9pbmZvLVx1MDAzZWxiYV90b19wYmEpO1xuJiM0MztcdFx0bWVkaWFfaW5mby1cdTAwM2VsYmFfdG9fcGJhID0gTlVMTDtcbiYjNDM7XHR9XG4gXG4tXHRpZiAobWVkaWFfaW5mby1cdTAwM2VwYmFfdG9fbGJhICE9IE5VTEwpXG4mIzQzO1x0aWYgKG1lZGlhX2luZm8tXHUwMDNlcGJhX3RvX2xiYSAhPSBOVUxMKSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV96b25lczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0XHRrZnJlZShtZWRpYV9pbmZvLVx1MDAzZXBiYV90b19sYmFbaV0pO1xuIFx0XHRcdG1lZGlhX2luZm8tXHUwMDNlcGJhX3RvX2xiYVtpXSA9IE5VTEw7XG4gXHRcdH1cbiYjNDM7XHRcdGtmcmVlKG1lZGlhX2luZm8tXHUwMDNlcGJhX3RvX2xiYSk7XG4mIzQzO1x0XHRtZWRpYV9pbmZvLVx1MDAzZXBiYV90b19sYmEgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XHRtZWRpYV9pbmZvLVx1MDAzZWNhcGFjaXR5ID0gMDtcbiYjNDM7XHRtZWRpYV9pbmZvLVx1MDAzZXV6b25lc2l6ZSA9IDA7XG4gfVxuIFxuIC8qXG5AQCAtNDQxLDExICYjNDM7NDQ5LDE1IEBAIHN0YXRpYyBpbnQgYWxhdWRhX2luaXRfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxuIFx0XHQmIzQzOyBNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0ICYjNDM7IE1FRElBX0lORk8odXMpLnBhZ2VzaGlmdCk7XG4gXHRNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID0ga2NhbGxvYyhudW1fem9uZXMsIHNpemVvZih1MTYqKSwgR0ZQX05PSU8pO1xuIFx0TUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9IGtjYWxsb2MobnVtX3pvbmVzLCBzaXplb2YodTE2KiksIEdGUF9OT0lPKTtcbi1cdGlmIChNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID09IE5VTEwgfHwgTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9PSBOVUxMKVxuJiM0MztcdGlmIChNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID09IE5VTEwgfHwgTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9PSBOVUxMKSB7XG4mIzQzO1x0XHRhbGF1ZGFfZnJlZV9tYXBzKFx1MDAyNk1FRElBX0lORk8odXMpKTtcbiBcdFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcbiYjNDM7XHR9XG4gXG4tXHRpZiAoYWxhdWRhX3Jlc2V0X21lZGlhKHVzKSAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpXG4mIzQzO1x0aWYgKGFsYXVkYV9yZXNldF9tZWRpYSh1cykgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7XG4mIzQzO1x0XHRhbGF1ZGFfZnJlZV9tYXBzKFx1MDAyNk1FRElBX0lORk8odXMpKTtcbiBcdFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7XG4gfVxuQEAgLTQ1Nyw2ICYjNDM7NDY5LDcgQEAgc3RhdGljIGludCBhbGF1ZGFfaW5pdF9tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4gc3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxuIHtcbiBcdHN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYWxhdWRhX2luZm8gKikgdXMtXHUwMDNlZXh0cmE7XG4mIzQzO1x0c3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICptZWRpYV9pbmZvID0gXHUwMDI2TUVESUFfSU5GTyh1cyk7XG4gXHR1bnNpZ25lZCBjaGFyICpzdGF0dXMgPSB1cy1cdTAwM2Vpb2J1ZjtcbiBcdGludCByYztcbiBcbkBAIC00NzAsNyAmIzQzOzQ4Myw4IEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbiBcdGlmICgoc3RhdHVzWzBdIFx1MDAyNiAweDgwKSB8fCAoKHN0YXR1c1swXSBcdTAwMjYgMHgxRikgPT0gMHgxMClcbiBcdFx0fHwgKChzdGF0dXNbMV0gXHUwMDI2IDB4MDEpID09IDApKSB7XG4gXHRcdHVzYl9zdG9yX2RiZyh1cywgXCYjMzQ7Tm8gbWVkaWEsIG9yIGRvb3Igb3BlblxcblwmIzM0Oyk7XG4tXHRcdGFsYXVkYV9mcmVlX21hcHMoXHUwMDI2TUVESUFfSU5GTyh1cykpO1xuJiM0MztcdFx0YWxhdWRhX2ZyZWVfbWFwcyhtZWRpYV9pbmZvKTtcbiYjNDM7XHRcdG1lZGlhX2luZm8tXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9rZXkgPSAweDAyO1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2FzYyA9IDB4M0E7XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2VfYXNjcSA9IDB4MDA7XG5AQCAtNDc4LDEyICYjNDM7NDkyLDEzIEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbiBcdH1cbiBcbiBcdC8qIENoZWNrIGZvciBtZWRpYSBjaGFuZ2UgKi9cbi1cdGlmIChzdGF0dXNbMF0gXHUwMDI2IDB4MDggfHwgIWluZm8tXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQpIHtcbiYjNDM7XHRpZiAoc3RhdHVzWzBdIFx1MDAyNiAweDA4IHx8ICFtZWRpYV9pbmZvLVx1MDAzZW1lZGlhX2luaXRpYWxpemVkKSB7XG4gXHRcdHVzYl9zdG9yX2RiZyh1cywgXCYjMzQ7TWVkaWEgY2hhbmdlIGRldGVjdGVkXFxuXCYjMzQ7KTtcbi1cdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG4mIzQzO1x0XHRhbGF1ZGFfZnJlZV9tYXBzKG1lZGlhX2luZm8pO1xuJiM0MztcdFx0bWVkaWFfaW5mby1cdTAwM2VtZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xuIFx0XHRyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTtcbiBcdFx0aWYgKHJjID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKVxuLVx0XHRcdGluZm8tXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRtZWRpYV9pbmZvLVx1MDAzZW1lZGlhX2luaXRpYWxpemVkID0gdHJ1ZTtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9rZXkgPSBVTklUX0FUVEVOVElPTjtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9hc2MgPSAweDI4O1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2FzY3EgPSAweDAwO1xuQEAgLTY4OSwxMSAmIzQzOzcwNCwxNiBAQCBzdGF0aWMgaW50IGFsYXVkYV9yZWFkX21hcChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKVxuICAqIENoZWNrcyB0byBzZWUgd2hldGhlciB3ZSBoYXZlIGFscmVhZHkgbWFwcGVkIGEgY2VydGFpbiB6b25lXG4gICogSWYgd2UgaGF2ZW4mIzM5O3QsIHRoZSBtYXAgaXMgZ2VuZXJhdGVkXG4gICovXG4tc3RhdGljIHZvaWQgYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcbiYjNDM7c3RhdGljIGludCBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKVxuIHtcbiYjNDM7XHRpZiAoIU1FRElBX0lORk8odXMpLmxiYV90b19wYmEgfHwgIU1FRElBX0lORk8odXMpLnBiYV90b19sYmEpXG4mIzQzO1x0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuJiM0MztcbiBcdGlmIChNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdID09IE5VTExcbiBcdFx0fHwgTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXSA9PSBOVUxMKVxuLVx0XHRhbGF1ZGFfcmVhZF9tYXAodXMsIHpvbmUpO1xuJiM0MztcdFx0cmV0dXJuIGFsYXVkYV9yZWFkX21hcCh1cywgem9uZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDtcbiB9XG4gXG4gLypcbkBAIC04MTksMTEgJiM0Mzs4MzksMTkgQEAgc3RhdGljIGludCBhbGF1ZGFfd3JpdGVfbGJhKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IGxiYSxcbiBcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xuIFx0dW5zaWduZWQgaW50IHBhZ2VzaXplID0gTUVESUFfSU5GTyh1cykucGFnZXNpemU7XG4gXHR1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaXplO1xuLVx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQgPSBsYmEgJSB1em9uZXNpemU7XG4mIzQzO1x0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQ7XG4gXHR1bnNpZ25lZCBpbnQgbmV3X3BiYV9vZmZzZXQ7XG4tXHR1bnNpZ25lZCBpbnQgem9uZSA9IGxiYSAvIHV6b25lc2l6ZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgem9uZTtcbiBcbi1cdGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHVzLCB6b25lKTtcbiYjNDM7XHRpZiAoIXV6b25lc2l6ZSlcbiYjNDM7XHRcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XG4mIzQzO1xuJiM0MztcdGxiYV9vZmZzZXQgPSBsYmEgJSB1em9uZXNpemU7XG4mIzQzO1x0em9uZSA9IGxiYSAvIHV6b25lc2l6ZTtcbiYjNDM7XG4mIzQzO1x0cmVzdWx0ID0gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpO1xuJiM0MztcdGlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG4mIzQzO1x0XHRyZXR1cm4gcmVzdWx0O1xuIFxuIFx0cGJhID0gTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYVt6b25lXVtsYmFfb2Zmc2V0XTtcbiBcdGlmIChwYmEgPT0gMSkge1xuQEAgLTkyNyw2ICYjNDM7OTU1LDkgQEAgc3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbiBcdGludCByZXN1bHQ7XG4gXG4mIzQzO1x0aWYgKCF1em9uZXNpemUpXG4mIzQzO1x0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBTaW5jZSB3ZSBvbmx5IHJlYWQgaW4gb25lIGJsb2NrIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGVcbiBcdCAqIGEgYm91bmNlIGJ1ZmZlciBhbmQgbW92ZSB0aGUgZGF0YSBhIHBpZWNlIGF0IGEgdGltZSBiZXR3ZWVuIHRoZVxuQEAgLTk1MCwxMSAmIzQzOzk4MSwxMCBAQCBzdGF0aWMgaW50IGFsYXVkYV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXHRzZyA9IE5VTEw7XG4gXG4gXHR3aGlsZSAoc2VjdG9ycyBcdTAwM2UgMCkge1xuLVx0XHR1bnNpZ25lZCBpbnQgem9uZSA9IGxiYSAvIHV6b25lc2l6ZTsgLyogaW50ZWdlciBkaXZpc2lvbiAqL1xuLVx0XHR1bnNpZ25lZCBpbnQgbGJhX29mZnNldCA9IGxiYSAtICh6b25lICogdXpvbmVzaXplKTtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCB6b25lO1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQ7XG4gXHRcdHVuc2lnbmVkIGludCBwYWdlcztcbiBcdFx0dTE2IHBiYTtcbi1cdFx0YWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpO1xuIFxuIFx0XHQvKiBOb3Qgb3ZlcmZsb3dpbmcgY2FwYWNpdHk/ICovXG4gXHRcdGlmIChsYmEgXHUwMDNlPSBtYXhfbGJhKSB7XG5AQCAtOTY0LDYgJiM0Mzs5OTQsMTMgQEAgc3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHR6b25lID0gbGJhIC8gdXpvbmVzaXplOyAvKiBpbnRlZ2VyIGRpdmlzaW9uICovXG4mIzQzO1x0XHRsYmFfb2Zmc2V0ID0gbGJhIC0gKHpvbmUgKiB1em9uZXNpemUpO1xuJiM0MztcbiYjNDM7XHRcdHJlc3VsdCA9IGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHVzLCB6b25lKTtcbiYjNDM7XHRcdGlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiBcdFx0LyogRmluZCBudW1iZXIgb2YgcGFnZXMgd2UgY2FuIHJlYWQgaW4gdGhpcyBibG9jayAqL1xuIFx0XHRwYWdlcyA9IG1pbihzZWN0b3JzLCBibG9ja3NpemUgLSBwYWdlKTtcbiBcdFx0bGVuID0gcGFnZXMgXHUwMDNjXHUwMDNjIHBhZ2VzaGlmdDtcbkBAIC0xMDIxLDYgJiM0MzsxMDU4LDkgQEAgc3RhdGljIGludCBhbGF1ZGFfd3JpdGVfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdHUxNiBsYmEsIG1heF9sYmE7XG4gXHRpbnQgcmVzdWx0O1xuIFxuJiM0MztcdGlmICghTUVESUFfSU5GTyh1cykudXpvbmVzaXplKVxuJiM0MztcdFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcbiYjNDM7XG4gXHQvKlxuIFx0ICogU2luY2Ugd2UgZG9uJiMzOTt0IHdyaXRlIHRoZSB1c2VyIGRhdGEgZGlyZWN0bHkgdG8gdGhlIGRldmljZSxcbiBcdCAqIHdlIGhhdmUgdG8gY3JlYXRlIGEgYm91bmNlIGJ1ZmZlciBhbmQgbW92ZSB0aGUgZGF0YSBhIHBpZWNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX1NUT1JBR0VfQUxBVURBJiMzNDssCiAgICAmIzM0O1VTQl9TVE9SQUdFJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtTQ1NJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxhdWRhX3RyYW5zcG9ydCYjMzQ7LAogICAgJiMzNDthbGF1ZGFfcHJvYmUmIzM0OywKICAgICYjMzQ7aW5pdF9hbGF1ZGEmIzM0OywKICAgICYjMzQ7YWxhdWRhX2NoZWNrX21lZGlhJiMzNDssCiAgICAmIzM0O2FsYXVkYV9yZWFkX2RhdGEmIzM0OywKICAgICYjMzQ7YWxhdWRhX3dyaXRlX2RhdGEmIzM0OywKICAgICYjMzQ7YWxhdWRhX3dyaXRlX2xiYSYjMzQ7LAogICAgJiMzNDthbGF1ZGFfZnJlZV9tYXBzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCB6ZXJvLWRpdmlzaW9uIGJ1Z3MsIG1lbW9yeSBsZWFrcywgYW5kIG1lZGlhIGluaXRpYWxpemF0aW9uIHN0YXRlIGhhbmRsaW5nIGFjcm9zcyB6b25lIG1hcCBhbGxvY2F0aW9ucyBhbmQgSS9PIGhhbmRsaW5nIGluIHRoZSBPbHltcHVzIE1BVVNCLTEwL0Z1amlmaWxtIERQQy1SMSAoQWxhdWRhKSBVU0IgbWFzcyBzdG9yYWdlIGRyaXZlci4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgdmlhIFVTQiBlbXVsYXRpb24vZnV6emluZyBmcmFtZXdvcmtzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTNhMGE2MDUxYTdiNmYxMmRiNWY4YTUyYmFkYjQ3ZGI4MzUwZjY5YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDI4IDIwOjQ4OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMKaW5kZXggNjkxZmU0NzAwOWNmNi4uYTJhMzMzNDE5ZjFmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jCkBAIC05Niw2ICYjNDM7OTYsOCBAQCBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gewogCiAJdTE2ICoqbGJhX3RvX3BiYTsJCS8qIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYmxvY2sgbWFwICovCiAJdTE2ICoqcGJhX3RvX2xiYTsJCS8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgYmxvY2sgbWFwICovCiYjNDM7CiYjNDM7CWJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7CiB9OwogCiBzdHJ1Y3QgYWxhdWRhX2luZm8gewpAQCAtMTA1LDggJiM0MzsxMDcsNiBAQCBzdHJ1Y3QgYWxhdWRhX2luZm8gewogCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OwogCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KIAl1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KLQotCWJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7CiB9OwogCiAjZGVmaW5lIHNob3J0X3BhY2sobHNiLG1zYikgKCAoKHUxNikobHNiKSkgfCAoICgodTE2KShtc2IpKSZsdDsmbHQ7OCApICkKQEAgLTI5MCwxNyAmIzQzOzI5MCwyNSBAQCBzdGF0aWMgdm9pZCBhbGF1ZGFfZnJlZV9tYXBzIChzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gKm1lZGlhX2luZm8pCiAJdW5zaWduZWQgaW50IG51bV96b25lcyA9IG1lZGlhX2luZm8tJmd0O2NhcGFjaXR5ICZndDsmZ3Q7IHNoaWZ0OwogCXVuc2lnbmVkIGludCBpOwogCi0JaWYgKG1lZGlhX2luZm8tJmd0O2xiYV90b19wYmEgIT0gTlVMTCkKJiM0MzsJaWYgKG1lZGlhX2luZm8tJmd0O2xiYV90b19wYmEgIT0gTlVMTCkgewogCQlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3pvbmVzOyBpJiM0MzsmIzQzOykgewogCQkJa2ZyZWUobWVkaWFfaW5mby0mZ3Q7bGJhX3RvX3BiYVtpXSk7CiAJCQltZWRpYV9pbmZvLSZndDtsYmFfdG9fcGJhW2ldID0gTlVMTDsKIAkJfQomIzQzOwkJa2ZyZWUobWVkaWFfaW5mby0mZ3Q7bGJhX3RvX3BiYSk7CiYjNDM7CQltZWRpYV9pbmZvLSZndDtsYmFfdG9fcGJhID0gTlVMTDsKJiM0MzsJfQogCi0JaWYgKG1lZGlhX2luZm8tJmd0O3BiYV90b19sYmEgIT0gTlVMTCkKJiM0MzsJaWYgKG1lZGlhX2luZm8tJmd0O3BiYV90b19sYmEgIT0gTlVMTCkgewogCQlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3pvbmVzOyBpJiM0MzsmIzQzOykgewogCQkJa2ZyZWUobWVkaWFfaW5mby0mZ3Q7cGJhX3RvX2xiYVtpXSk7CiAJCQltZWRpYV9pbmZvLSZndDtwYmFfdG9fbGJhW2ldID0gTlVMTDsKIAkJfQomIzQzOwkJa2ZyZWUobWVkaWFfaW5mby0mZ3Q7cGJhX3RvX2xiYSk7CiYjNDM7CQltZWRpYV9pbmZvLSZndDtwYmFfdG9fbGJhID0gTlVMTDsKJiM0MzsJfQomIzQzOwltZWRpYV9pbmZvLSZndDtjYXBhY2l0eSA9IDA7CiYjNDM7CW1lZGlhX2luZm8tJmd0O3V6b25lc2l6ZSA9IDA7CiB9CiAKIC8qCkBAIC00NDEsMTEgJiM0Mzs0NDksMTUgQEAgc3RhdGljIGludCBhbGF1ZGFfaW5pdF9tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpCiAJCSYjNDM7IE1FRElBX0lORk8odXMpLmJsb2Nrc2hpZnQgJiM0MzsgTUVESUFfSU5GTyh1cykucGFnZXNoaWZ0KTsKIAlNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID0ga2NhbGxvYyhudW1fem9uZXMsIHNpemVvZih1MTYqKSwgR0ZQX05PSU8pOwogCU1FRElBX0lORk8odXMpLmxiYV90b19wYmEgPSBrY2FsbG9jKG51bV96b25lcywgc2l6ZW9mKHUxNiopLCBHRlBfTk9JTyk7Ci0JaWYgKE1FRElBX0lORk8odXMpLnBiYV90b19sYmEgPT0gTlVMTCB8fCBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhID09IE5VTEwpCiYjNDM7CWlmIChNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID09IE5VTEwgfHwgTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9PSBOVUxMKSB7CiYjNDM7CQlhbGF1ZGFfZnJlZV9tYXBzKCZhbXA7TUVESUFfSU5GTyh1cykpOwogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwomIzQzOwl9CiAKLQlpZiAoYWxhdWRhX3Jlc2V0X21lZGlhKHVzKSAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCiYjNDM7CWlmIChhbGF1ZGFfcmVzZXRfbWVkaWEodXMpICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgewomIzQzOwkJYWxhdWRhX2ZyZWVfbWFwcygmYW1wO01FRElBX0lORk8odXMpKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKJiM0MzsJfQogCiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOwogfQpAQCAtNDU3LDYgJiM0Mzs0NjksNyBAQCBzdGF0aWMgaW50IGFsYXVkYV9pbml0X21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIHVzLSZndDtleHRyYTsKJiM0MzsJc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICptZWRpYV9pbmZvID0gJmFtcDtNRURJQV9JTkZPKHVzKTsKIAl1bnNpZ25lZCBjaGFyICpzdGF0dXMgPSB1cy0mZ3Q7aW9idWY7CiAJaW50IHJjOwogCkBAIC00NzAsNyAmIzQzOzQ4Myw4IEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKIAlpZiAoKHN0YXR1c1swXSAmYW1wOyAweDgwKSB8fCAoKHN0YXR1c1swXSAmYW1wOyAweDFGKSA9PSAweDEwKQogCQl8fCAoKHN0YXR1c1sxXSAmYW1wOyAweDAxKSA9PSAwKSkgewogCQl1c2Jfc3Rvcl9kYmcodXMsICYjMzQ7Tm8gbWVkaWEsIG9yIGRvb3Igb3BlblxuJiMzNDspOwotCQlhbGF1ZGFfZnJlZV9tYXBzKCZhbXA7TUVESUFfSU5GTyh1cykpOwomIzQzOwkJYWxhdWRhX2ZyZWVfbWFwcyhtZWRpYV9pbmZvKTsKJiM0MzsJCW1lZGlhX2luZm8tJmd0O21lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7CiAJCWluZm8tJmd0O3NlbnNlX2tleSA9IDB4MDI7CiAJCWluZm8tJmd0O3NlbnNlX2FzYyA9IDB4M0E7CiAJCWluZm8tJmd0O3NlbnNlX2FzY3EgPSAweDAwOwpAQCAtNDc4LDEyICYjNDM7NDkyLDEzIEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKIAl9CiAKIAkvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovCi0JaWYgKHN0YXR1c1swXSAmYW1wOyAweDA4IHx8ICFpbmZvLSZndDttZWRpYV9pbml0aWFsaXplZCkgewomIzQzOwlpZiAoc3RhdHVzWzBdICZhbXA7IDB4MDggfHwgIW1lZGlhX2luZm8tJmd0O21lZGlhX2luaXRpYWxpemVkKSB7CiAJCXVzYl9zdG9yX2RiZyh1cywgJiMzNDtNZWRpYSBjaGFuZ2UgZGV0ZWN0ZWRcbiYjMzQ7KTsKLQkJYWxhdWRhX2ZyZWVfbWFwcygmYW1wO01FRElBX0lORk8odXMpKTsKJiM0MzsJCWFsYXVkYV9mcmVlX21hcHMobWVkaWFfaW5mbyk7CiYjNDM7CQltZWRpYV9pbmZvLSZndDttZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlOwogCQlyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTsKIAkJaWYgKHJjID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQotCQkJaW5mby0mZ3Q7bWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlOwomIzQzOwkJCW1lZGlhX2luZm8tJmd0O21lZGlhX2luaXRpYWxpemVkID0gdHJ1ZTsKIAkJaW5mby0mZ3Q7c2Vuc2Vfa2V5ID0gVU5JVF9BVFRFTlRJT047CiAJCWluZm8tJmd0O3NlbnNlX2FzYyA9IDB4Mjg7CiAJCWluZm8tJmd0O3NlbnNlX2FzY3EgPSAweDAwOwpAQCAtNjg5LDExICYjNDM7NzA0LDE2IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfbWFwKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHpvbmUpCiAgKiBDaGVja3MgdG8gc2VlIHdoZXRoZXIgd2UgaGF2ZSBhbHJlYWR5IG1hcHBlZCBhIGNlcnRhaW4gem9uZQogICogSWYgd2UgaGF2ZW4mIzM5O3QsIHRoZSBtYXAgaXMgZ2VuZXJhdGVkCiAgKi8KLXN0YXRpYyB2b2lkIGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHpvbmUpCiYjNDM7c3RhdGljIGludCBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKQogewomIzQzOwlpZiAoIU1FRElBX0lORk8odXMpLmxiYV90b19wYmEgfHwgIU1FRElBX0lORk8odXMpLnBiYV90b19sYmEpCiYjNDM7CQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwomIzQzOwogCWlmIChNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdID09IE5VTEwKIAkJfHwgTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXSA9PSBOVUxMKQotCQlhbGF1ZGFfcmVhZF9tYXAodXMsIHpvbmUpOwomIzQzOwkJcmV0dXJuIGFsYXVkYV9yZWFkX21hcCh1cywgem9uZSk7CiYjNDM7CiYjNDM7CXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKIH0KIAogLyoKQEAgLTgxOSwxMSAmIzQzOzgzOSwxOSBAQCBzdGF0aWMgaW50IGFsYXVkYV93cml0ZV9sYmEoc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgbGJhLAogCXVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplOwogCXVuc2lnbmVkIGludCBwYWdlc2l6ZSA9IE1FRElBX0lORk8odXMpLnBhZ2VzaXplOwogCXVuc2lnbmVkIGludCBibG9ja3NpemUgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemU7Ci0JdW5zaWduZWQgaW50IGxiYV9vZmZzZXQgPSBsYmEgJSB1em9uZXNpemU7CiYjNDM7CXVuc2lnbmVkIGludCBsYmFfb2Zmc2V0OwogCXVuc2lnbmVkIGludCBuZXdfcGJhX29mZnNldDsKLQl1bnNpZ25lZCBpbnQgem9uZSA9IGxiYSAvIHV6b25lc2l6ZTsKJiM0MzsJdW5zaWduZWQgaW50IHpvbmU7CiAKLQlhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZSh1cywgem9uZSk7CiYjNDM7CWlmICghdXpvbmVzaXplKQomIzQzOwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKJiM0MzsKJiM0MzsJbGJhX29mZnNldCA9IGxiYSAlIHV6b25lc2l6ZTsKJiM0MzsJem9uZSA9IGxiYSAvIHV6b25lc2l6ZTsKJiM0MzsKJiM0MzsJcmVzdWx0ID0gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpOwomIzQzOwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQomIzQzOwkJcmV0dXJuIHJlc3VsdDsKIAogCXBiYSA9IE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV1bbGJhX29mZnNldF07CiAJaWYgKHBiYSA9PSAxKSB7CkBAIC05MjcsNiAmIzQzOzk1NSw5IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCWludCByZXN1bHQ7CiAKJiM0MzsJaWYgKCF1em9uZXNpemUpCiYjNDM7CQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwomIzQzOwogCS8qCiAJICogU2luY2Ugd2Ugb25seSByZWFkIGluIG9uZSBibG9jayBhdCBhIHRpbWUsIHdlIGhhdmUgdG8gY3JlYXRlCiAJICogYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UgYXQgYSB0aW1lIGJldHdlZW4gdGhlCkBAIC05NTAsMTEgJiM0Mzs5ODEsMTAgQEAgc3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCXNnID0gTlVMTDsKIAogCXdoaWxlIChzZWN0b3JzICZndDsgMCkgewotCQl1bnNpZ25lZCBpbnQgem9uZSA9IGxiYSAvIHV6b25lc2l6ZTsgLyogaW50ZWdlciBkaXZpc2lvbiAqLwotCQl1bnNpZ25lZCBpbnQgbGJhX29mZnNldCA9IGxiYSAtICh6b25lICogdXpvbmVzaXplKTsKJiM0MzsJCXVuc2lnbmVkIGludCB6b25lOwomIzQzOwkJdW5zaWduZWQgaW50IGxiYV9vZmZzZXQ7CiAJCXVuc2lnbmVkIGludCBwYWdlczsKIAkJdTE2IHBiYTsKLQkJYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpOwogCiAJCS8qIE5vdCBvdmVyZmxvd2luZyBjYXBhY2l0eT8gKi8KIAkJaWYgKGxiYSAmZ3Q7PSBtYXhfbGJhKSB7CkBAIC05NjQsNiAmIzQzOzk5NCwxMyBAQCBzdGF0aWMgaW50IGFsYXVkYV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJCQlicmVhazsKIAkJfQogCiYjNDM7CQl6b25lID0gbGJhIC8gdXpvbmVzaXplOyAvKiBpbnRlZ2VyIGRpdmlzaW9uICovCiYjNDM7CQlsYmFfb2Zmc2V0ID0gbGJhIC0gKHpvbmUgKiB1em9uZXNpemUpOwomIzQzOwomIzQzOwkJcmVzdWx0ID0gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpOwomIzQzOwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKJiM0MzsJCQlicmVhazsKJiM0MzsKIAkJLyogRmluZCBudW1iZXIgb2YgcGFnZXMgd2UgY2FuIHJlYWQgaW4gdGhpcyBibG9jayAqLwogCQlwYWdlcyA9IG1pbihzZWN0b3JzLCBibG9ja3NpemUgLSBwYWdlKTsKIAkJbGVuID0gcGFnZXMgJmx0OyZsdDsgcGFnZXNoaWZ0OwpAQCAtMTAyMSw2ICYjNDM7MTA1OCw5IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJdTE2IGxiYSwgbWF4X2xiYTsKIAlpbnQgcmVzdWx0OwogCiYjNDM7CWlmICghTUVESUFfSU5GTyh1cykudXpvbmVzaXplKQomIzQzOwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKJiM0MzsKIAkvKgogCSAqIFNpbmNlIHdlIGRvbiYjMzk7dCB3cml0ZSB0aGUgdXNlciBkYXRhIGRpcmVjdGx5IHRvIHRoZSBkZXZpY2UsCiAJICogd2UgaGF2ZSB0byBjcmVhdGUgYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU5NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVTQiBTdG9yYWdlIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBhIHBhdGNoIGhhcyBoaXQgbXkgZGVzayBhbmQgaXQmIzM5O3MgdG91Y2hpbmcgYGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNgLiBNeSBpbml0aWFsIHJlYWN0aW9uPyBMZXQmIzM5O3MgZGl2ZSBpbi4gVGhpcyByZXF1aXJlcyBhIHN5c3RlbWF0aWMgYXBwcm9hY2guIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqZXhhY3RseSogd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQg4oCTIHdoYXQgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyB0d2Vha2VkLCBhZGRlZCwgb3IgcmVtb3ZlZC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdG9vbHMg4oCTIGxpa2VseSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAg4oCTIHRvIHF1aWNrbHkgc2NhbiB0aGUgS2NvbmZpZyBvcHRpb25zIHdpdGhpbiB0aGUgYGRyaXZlcnMvdXNiL3N0b3JhZ2UvYCBkaXJlY3RvcnkuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCB3aGV0aGVyIHRoaXMgYGFsYXVkYS5jYCBkcml2ZXIgaXMgZXZlbiBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlcmUgYXJlIHNwZWNpZmljIHNldHRpbmdzIHRoYXQgY29udHJvbCBpdHMgaW5jbHVzaW9uLiBUaGVuLCBhbmQgb25seSB0aGVuLCBjYW4gSSBkZXRlcm1pbmUgaWYgdGhpcyBtb2R1bGUgaXMgZXZlbiAqcmVhY2hhYmxlKiBhbmQgd29ydGh5IG9mIGF0dGVudGlvbiwgaW4gdGVybXMgb2YgZnV6emluZy4gSXMgaXQgcGFydCBvZiB0aGUgZGVmYXVsdCBrZXJuZWwgY29uZmlndXJhdGlvbj8gQXJlIHRoZXJlIHNwZWNpZmljIGhhcmR3YXJlIHJlcXVpcmVtZW50cyB0aGF0IG1ha2UgaXQgbGVzcyBpbnRlcmVzdGluZz8gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEl0IHdpbGwgYmUgd29ydGggc2VlaW5nIGlmIHRoZSBjaGFuZ2VzIGNvdWxkIGJlIHZ1bG5lcmFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxhdWRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2Ivc3RvcmFnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc9MTI3PWNvbmZpZyBVU0JfU1RPUkFHRV9BTEFVREFcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTM1LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjEzNjpcdCAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWFsYXVkYS5cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMzctXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZT0xOT11c2Itc3RvcmFnZS0kKENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRykgJiM0Mzs9IGRlYnVnLm9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUtMjAtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEpXHQmIzQzOz0gdW1zLWFsYXVkYS5vXG5kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCKSAmIzQzOz0gdW1zLWN5cHJlc3Mub1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGU9MzM9b2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUKVx0XHQmIzQzOz0gdW1zLXVzYmF0Lm9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUtMzQtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlOjM1OnVtcy1hbGF1ZGEteVx0XHQ6PSBhbGF1ZGEub1xuZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZS0zNi11bXMtY3lwcmVzcy15XHRcdDo9IGN5cHJlc3NfYXRhY2Iub1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTctICpcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTg6ICogRm9yIHByb3RvY29sIGluZm8sIHNlZSBodHRwOi8vYWxhdWRhLnNvdXJjZWZvcmdlLm5ldFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xOS0gKi9cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTMzLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzozNDojZGVmaW5lIERSVl9OQU1FIFwmIzM0O3Vtcy1hbGF1ZGFcJiMzNDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzUtXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0zOT1NT0RVTEVfSU1QT1JUX05TKFwmIzM0O1VTQl9TVE9SQUdFXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg0LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4NTpzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8ge1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04Ni1cdHVuc2lnbmVkIGxvbmcgY2FwYWNpdHk7XHRcdC8qIHRvdGFsIG1lZGlhIHNpemUgaW4gYnl0ZXMgKi9cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwMi1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTAzOnN0cnVjdCBhbGF1ZGFfaW5mbyB7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwNDpcdHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyBwb3J0WzJdO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDUtXHRpbnQgd3JfZXA7XHRcdFx0LyogZW5kcG9pbnQgdG8gd3JpdGUgZGF0YSBvdXQgb2YgKi9cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNi0jZGVmaW5lIE1FRElBX1BPUlQodXMpIHVzLVx1MDAzZXNyYi1cdTAwM2VkZXZpY2UtXHUwMDNlbHVuXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNzojZGVmaW5lIE1FRElBX0lORk8odXMpICgoc3RydWN0IGFsYXVkYV9pbmZvICopdXMtXHUwMDNlZXh0cmEpLVx1MDAzZXBvcnRbTUVESUFfUE9SVCh1cyldXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExOC1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyMi1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTIzOnN0YXRpYyBpbnQgaW5pdF9hbGF1ZGEoc3RydWN0IHVzX2RhdGEgKnVzKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI0LVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTM0LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMzU6c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFsYXVkYV91c2JfaWRzW10gPSB7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEzNjojXHRpbmNsdWRlIFwmIzM0O3VudXN1YWxfYWxhdWRhLmhcJiMzNDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTM3LVx0eyB9XHRcdC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEzOC19O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMzk6TU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGFsYXVkYV91c2JfaWRzKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTQwLVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTU2LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxNTc6c3RhdGljIGNvbnN0IHN0cnVjdCB1c191bnVzdWFsX2RldiBhbGF1ZGFfdW51c3VhbF9kZXZfbGlzdFtdID0ge1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxNTg6I1x0aW5jbHVkZSBcJiMzNDt1bnVzdWFsX2FsYXVkYS5oXCYjMzQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTE1OS1cdHsgfVx0XHQvKiBUZXJtaW5hdGluZyBlbnRyeSAqL1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTY4LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxNjk6c3RydWN0IGFsYXVkYV9jYXJkX2luZm8ge1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xNzAtXHR1bnNpZ25lZCBjaGFyIGlkO1x0XHQvKiBpZCBieXRlICovXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xNzYtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjE3NzpzdGF0aWMgY29uc3Qgc3RydWN0IGFsYXVkYV9jYXJkX2luZm8gYWxhdWRhX2NhcmRfaWRzW10gPSB7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTE3OC1cdC8qIE5BTkQgZmxhc2ggKi9cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTIwMi1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MjAzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYWxhdWRhX2NhcmRfaW5mbyAqYWxhdWRhX2NhcmRfZmluZF9pZCh1bnNpZ25lZCBjaGFyIGlkKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yMDQte1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjA2LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoyMDc6XHRmb3IgKGkgPSAwOyBhbGF1ZGFfY2FyZF9pZHNbaV0uaWQgIT0gMDsgaSYjNDM7JiM0MzspXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjIwODpcdFx0aWYgKGFsYXVkYV9jYXJkX2lkc1tpXS5pZCA9PSBpZClcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MjA5Olx0XHRcdHJldHVybiBcdTAwMjYoYWxhdWRhX2NhcmRfaWRzW2ldKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjEwLVx0cmV0dXJuIE5VTEw7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0yNzQ9c3RhdGljIHZvaWQgbmFuZF9zdG9yZV9lY2ModW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgY2hhciAqZWNjKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjg1LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoyODY6c3RhdGljIHZvaWQgYWxhdWRhX2ZyZWVfbWFwcyAoc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICptZWRpYV9pbmZvKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yODcte1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzE3LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzozMTg6c3RhdGljIGludCBhbGF1ZGFfZ2V0X21lZGlhX3N0YXR1cyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTMxOS17XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNDAtICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjM0MTpzdGF0aWMgaW50IGFsYXVkYV9hY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNDIte1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzU3LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzozNTg6c3RhdGljIGludCBhbGF1ZGFfZ2V0X21lZGlhX3NpZ25hdHVyZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTM1OS17XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNzMtICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjM3NDpzdGF0aWMgaW50IGFsYXVkYV9yZXNldF9tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTM3NS17XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zODktICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjM5MDpzdGF0aWMgaW50IGFsYXVkYV9pbml0X21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzkxLXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTM5My1cdGludCByZWFkeSA9IDA7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjM5NDpcdGNvbnN0IHN0cnVjdCBhbGF1ZGFfY2FyZF9pbmZvICptZWRpYV9pbmZvO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zOTUtXHR1bnNpZ25lZCBpbnQgbnVtX3pvbmVzO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzk5LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MDA6XHRcdGlmIChhbGF1ZGFfZ2V0X21lZGlhX3N0YXR1cyh1cywgZGF0YSkgIT0gVVNCX1NUT1JfWEZFUl9HT09EKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MDEtXHRcdFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQwOC1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDA5Olx0aWYgKGFsYXVkYV9hY2tfbWVkaWEodXMpICE9IFVTQl9TVE9SX1hGRVJfR09PRClcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDEwLVx0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDEzLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MTQ6XHRpZiAoYWxhdWRhX2dldF9tZWRpYV9zdGF0dXModXMsIGRhdGEpICE9IFVTQl9TVE9SX1hGRVJfR09PRClcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDE1LVx0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDIxLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MjI6XHRpZiAoYWxhdWRhX2dldF9tZWRpYV9zaWduYXR1cmUodXMsIGRhdGEpICE9IFVTQl9TVE9SX1hGRVJfR09PRClcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDIzLVx0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDI1LVx0dXNiX3N0b3JfZGJnKHVzLCBcJiMzNDtNZWRpYSBzaWduYXR1cmU6ICU0cGhcXG5cJiMzNDssIGRhdGEpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MjY6XHRtZWRpYV9pbmZvID0gYWxhdWRhX2NhcmRfZmluZF9pZChkYXRhWzFdKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDI3LVx0aWYgKG1lZGlhX2luZm8gPT0gTlVMTCkge1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0Mjg6XHRcdHByX3dhcm4oXCYjMzQ7YWxhdWRhX2luaXRfbWVkaWE6IFVucmVjb2duaXNlZCBtZWRpYSBzaWduYXR1cmU6ICU0cGhcXG5cJiMzNDssXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQyOS1cdFx0XHRkYXRhKTtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ1Mi1cdGlmIChNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID09IE5VTEwgfHwgTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9PSBOVUxMKSB7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ1MzpcdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ1NC1cdFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ1Ni1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDU3Olx0aWYgKGFsYXVkYV9yZXNldF9tZWRpYSh1cykgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ1ODpcdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ1OS1cdFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ2OC0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDY5OnN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDcwLXtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDcxOlx0c3RydWN0IGFsYXVkYV9pbmZvICppbmZvID0gKHN0cnVjdCBhbGF1ZGFfaW5mbyAqKSB1cy1cdTAwM2VleHRyYTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDcyOlx0c3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICptZWRpYV9pbmZvID0gXHUwMDI2TUVESUFfSU5GTyh1cyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ3My1cdHVuc2lnbmVkIGNoYXIgKnN0YXR1cyA9IHVzLVx1MDAzZWlvYnVmO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDc1LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NzY6XHRyYyA9IGFsYXVkYV9nZXRfbWVkaWFfc3RhdHVzKHVzLCBzdGF0dXMpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NzctXHRpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00ODUtXHRcdHVzYl9zdG9yX2RiZyh1cywgXCYjMzQ7Tm8gbWVkaWEsIG9yIGRvb3Igb3BlblxcblwmIzM0Oyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ4NjpcdFx0YWxhdWRhX2ZyZWVfbWFwcyhtZWRpYV9pbmZvKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDg3LVx0XHRtZWRpYV9pbmZvLVx1MDAzZW1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00OTYtXHRcdHVzYl9zdG9yX2RiZyh1cywgXCYjMzQ7TWVkaWEgY2hhbmdlIGRldGVjdGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDk3Olx0XHRhbGF1ZGFfZnJlZV9tYXBzKG1lZGlhX2luZm8pO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00OTgtXHRcdG1lZGlhX2luZm8tXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDk5Olx0XHRyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTAwLVx0XHRpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01MTQtICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjUxNTpzdGF0aWMgaW50IGFsYXVkYV9jaGVja19zdGF0dXMyKHN0cnVjdCB1c19kYXRhICp1cylcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTE2LXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU0NC0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NTQ1OnN0YXRpYyBpbnQgYWxhdWRhX2dldF9yZWR1X2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgcGJhLCB1bnNpZ25lZCBjaGFyICpkYXRhKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01NDYte1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTY1LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo1NjY6c3RhdGljIHUxNiBhbGF1ZGFfZmluZF91bnVzZWRfcGJhKHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyAqaW5mbyxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTY3LVx0dW5zaWduZWQgaW50IHpvbmUpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01ODItICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjU4MzpzdGF0aWMgaW50IGFsYXVkYV9yZWFkX21hcChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01ODQte1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjA4LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo2MDk6XHRcdHJlc3VsdCA9IGFsYXVkYV9nZXRfcmVkdV9kYXRhKHVzLCBibG9ja251bSwgZGF0YSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTYxMC1cdFx0aWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTY1MS1cdFx0XHRwcmludGsoS0VSTl9XQVJOSU5HXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjY1MjpcdFx0XHQgICAgICAgXCYjMzQ7YWxhdWRhX3JlYWRfbWFwOiBCYWQgcGFyaXR5IGluIExCQSBmb3IgYmxvY2sgJWRcJiMzNDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjUzLVx0XHRcdCAgICAgICBcJiMzNDsgKCUwMlggJTAyWClcXG5cJiMzNDssIGksIGRhdGFbNl0sIGRhdGFbN10pO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjcyLVx0XHRcdHByaW50ayhLRVJOX1dBUk5JTkdcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NjczOlx0XHRcdCAgICAgICBcJiMzNDthbGF1ZGFfcmVhZF9tYXA6IEJhZCBsb3cgTEJBICVkIGZvciBibG9jayAlZFxcblwmIzM0OyxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjc0LVx0XHRcdCAgICAgICBsYmFfcmVhbCwgYmxvY2tudW0pO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjc5LVx0XHRcdHByaW50ayhLRVJOX1dBUk5JTkdcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NjgwOlx0XHRcdCAgICAgICBcJiMzNDthbGF1ZGFfcmVhZF9tYXA6IFwmIzM0O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy02ODEtXHRcdFx0ICAgICAgIFwmIzM0O0xCQSAlZCBzZWVuIGZvciBQQkEgJWQgYW5kICVkXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzA2LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3MDc6c3RhdGljIGludCBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03MDgte1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzEzLVx0XHR8fCBNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhW3pvbmVdID09IE5VTEwpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjcxNDpcdFx0cmV0dXJuIGFsYXVkYV9yZWFkX21hcCh1cywgem9uZSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTcxNS1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTcyMS0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzIyOnN0YXRpYyBpbnQgYWxhdWRhX2VyYXNlX2Jsb2NrKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSlcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzIzLXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc1MC0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzUxOnN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfYmxvY2tfcmF3KHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzUyLVx0XHR1bnNpZ25lZCBpbnQgcGFnZSwgdW5zaWduZWQgaW50IHBhZ2VzLCB1bnNpZ25lZCBjaGFyICpkYXRhKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzc2LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3Nzc6c3RhdGljIGludCBhbGF1ZGFfcmVhZF9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc3OC1cdFx0dW5zaWduZWQgaW50IHBhZ2UsIHVuc2lnbmVkIGludCBwYWdlcywgdW5zaWduZWQgY2hhciAqZGF0YSlcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc4Mi1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzgzOlx0cmMgPSBhbGF1ZGFfcmVhZF9ibG9ja19yYXcodXMsIHBiYSwgcGFnZSwgcGFnZXMsIGRhdGEpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03ODQtXHRpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODAxLSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4MDI6c3RhdGljIGludCBhbGF1ZGFfd3JpdGVfYmxvY2soc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgcGJhLCB1bnNpZ25lZCBjaGFyICpkYXRhKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MDMte1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MDQtXHRpbnQgcmM7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgwNTpcdHN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYWxhdWRhX2luZm8gKikgdXMtXHUwMDNlZXh0cmE7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgwNi1cdHVuc2lnbmVkIGNoYXIgY29tbWFuZFtdID0ge1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODIzLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4MjQ6XHRyZXR1cm4gYWxhdWRhX2NoZWNrX3N0YXR1czIodXMpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MjUtfVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODI5LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4MzA6c3RhdGljIGludCBhbGF1ZGFfd3JpdGVfbGJhKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IGxiYSxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODMxLVx0XHQgdW5zaWduZWQgaW50IHBhZ2UsIHVuc2lnbmVkIGludCBwYWdlcyxcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg1MS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODUyOlx0cmVzdWx0ID0gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NTMtXHRpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODYyLVx0XHRwcmludGsoS0VSTl9XQVJOSU5HXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjg2MzpcdFx0ICAgICAgIFwmIzM0O2FsYXVkYV93cml0ZV9sYmE6IGF2b2lkIHdyaXRpbmcgdG8gcGJhIDFcXG5cJiMzNDspO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NjQtXHRcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg2Ni1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODY3Olx0bmV3X3BiYSA9IGFsYXVkYV9maW5kX3VudXNlZF9wYmEoXHUwMDI2TUVESUFfSU5GTyh1cyksIHpvbmUpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NjgtXHRpZiAoIW5ld19wYmEpIHtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODY5LVx0XHRwcmludGsoS0VSTl9XQVJOSU5HXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjg3MDpcdFx0ICAgICAgIFwmIzM0O2FsYXVkYV93cml0ZV9sYmE6IE91dCBvZiB1bnVzZWQgYmxvY2tzXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODcxLVx0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODc1LVx0aWYgKHBiYSAhPSBVTkRFRikge1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4NzY6XHRcdHJlc3VsdCA9IGFsYXVkYV9yZWFkX2Jsb2NrX3Jhdyh1cywgcGJhLCAwLFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NzctXHRcdFx0YmxvY2tzaXplLCBibG9ja2J1ZmZlcik7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05MjAtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkyMTpcdHJlc3VsdCA9IGFsYXVkYV93cml0ZV9ibG9jayh1cywgbmV3X3BiYSwgYmxvY2tidWZmZXIpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05MjItXHRpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRClcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTkzMS1cdFx0dW5zaWduZWQgaW50IHBiYV9vZmZzZXQgPSBwYmEgLSAoem9uZSAqIHpvbmVzaXplKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTMyOlx0XHRyZXN1bHQgPSBhbGF1ZGFfZXJhc2VfYmxvY2sodXMsIHBiYSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTkzMy1cdFx0aWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05NDMtICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjk0NDpzdGF0aWMgaW50IGFsYXVkYV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTk0NS1cdFx0dW5zaWduZWQgaW50IHNlY3RvcnMpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05OTktXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwMDA6XHRcdHJlc3VsdCA9IGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHVzLCB6b25lKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTAwMS1cdFx0aWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwMjYtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwMjc6XHRcdFx0cmVzdWx0ID0gYWxhdWRhX3JlYWRfYmxvY2sodXMsIHBiYSwgcGFnZSwgcGFnZXMsIGJ1ZmZlcik7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwMjgtXHRcdFx0aWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwNDctICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwNDg6c3RhdGljIGludCBhbGF1ZGFfd3JpdGVfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTA0OS1cdFx0dW5zaWduZWQgaW50IHNlY3RvcnMpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTEwLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTExOlx0XHRyZXN1bHQgPSBhbGF1ZGFfd3JpdGVfbGJhKHVzLCBsYmEsIHBhZ2UsIHBhZ2VzLCBidWZmZXIsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExMTItXHRcdFx0YmxvY2tidWZmZXIpO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTEyOS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTEzMDpzdGF0aWMgdm9pZCBhbGF1ZGFfaW5mb19kZXN0cnVjdG9yKHZvaWQgKmV4dHJhKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTMxLXtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTEzMjpcdHN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYWxhdWRhX2luZm8gKikgZXh0cmE7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExMzMtXHRpbnQgcG9ydDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExMzgtXHRmb3IgKHBvcnQgPSAwOyBwb3J0IFx1MDAzYyAyOyBwb3J0JiM0MzsmIzQzOykge1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTM5Olx0XHRzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gKm1lZGlhX2luZm8gPSBcdTAwMjZpbmZvLVx1MDAzZXBvcnRbcG9ydF07XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNDAtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNDE6XHRcdGFsYXVkYV9mcmVlX21hcHMobWVkaWFfaW5mbyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNDItXHRcdGtmcmVlKG1lZGlhX2luZm8tXHUwMDNlbGJhX3RvX3BiYSk7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTQ3LS8qXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNDg6ICogSW5pdGlhbGl6ZSBhbGF1ZGFfaW5mbyBzdHJ1Y3QgYW5kIGZpbmQgdGhlIGRhdGEtd3JpdGUgZW5kcG9pbnRcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE0OS0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE1MDpzdGF0aWMgaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cylcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE1MS17XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNTI6XHRzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm87XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNTMtXHRzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzZXR0aW5nID0gdXMtXHUwMDNlcHVzYl9pbnRmLVx1MDAzZWN1cl9hbHRzZXR0aW5nO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE1NS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE1NjpcdHVzLVx1MDAzZWV4dHJhID0ga3phbGxvY19vYmooc3RydWN0IGFsYXVkYV9pbmZvLCBHRlBfTk9JTyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNTctXHRpZiAoIXVzLVx1MDAzZWV4dHJhKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE1OS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE2MDpcdGluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIHVzLVx1MDAzZWV4dHJhO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTYxOlx0dXMtXHUwMDNlZXh0cmFfZGVzdHJ1Y3RvciA9IGFsYXVkYV9pbmZvX2Rlc3RydWN0b3I7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNjItXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTY5LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTcwOnN0YXRpYyBpbnQgYWxhdWRhX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cylcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE3MS17XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNzItXHRpbnQgcmM7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNzM6XHRzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIHVzLVx1MDAzZWV4dHJhO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTc0LVx0dW5zaWduZWQgY2hhciAqcHRyID0gdXMtXHUwMDNlaW9idWY7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTg3LVx0XHR1c2Jfc3Rvcl9kYmcodXMsIFwmIzM0O1RFU1RfVU5JVF9SRUFEWVxcblwmIzM0Oyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExODg6XHRcdHJldHVybiBhbGF1ZGFfY2hlY2tfbWVkaWEodXMpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTg5LVx0fVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE5NC1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE5NTpcdFx0cmMgPSBhbGF1ZGFfY2hlY2tfbWVkaWEodXMpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTk2LVx0XHRpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjE1LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjE2Olx0XHRyYyA9IGFsYXVkYV9jaGVja19tZWRpYSh1cyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyMTctXHRcdGlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyMjYtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyMjc6XHRcdHJldHVybiBhbGF1ZGFfcmVhZF9kYXRhKHVzLCBwYWdlLCBwYWdlcyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyMjgtXHR9XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjMyLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjMzOlx0XHRyYyA9IGFsYXVkYV9jaGVja19tZWRpYSh1cyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyMzQtXHRcdGlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyNDMtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyNDQ6XHRcdHJldHVybiBhbGF1ZGFfd3JpdGVfZGF0YSh1cywgcGFnZSwgcGFnZXMpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjQ1LVx0fVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI3Ni1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTI3NzpzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhbGF1ZGFfaG9zdF90ZW1wbGF0ZTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI3OC1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTI3OTpzdGF0aWMgaW50IGFsYXVkYV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI4MC1cdFx0XHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI4NS1cdHJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMShcdTAwMjZ1cywgaW50ZiwgaWQsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyODY6XHRcdFx0KGlkIC0gYWxhdWRhX3VzYl9pZHMpICYjNDM7IGFsYXVkYV91bnVzdWFsX2Rldl9saXN0LFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjg3Olx0XHRcdFx1MDAyNmFsYXVkYV9ob3N0X3RlbXBsYXRlKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI4OC1cdGlmIChyZXN1bHQpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjkxLVx0dXMtXHUwMDNldHJhbnNwb3J0X25hbWUgID0gXCYjMzQ7QWxhdWRhIENvbnRyb2wvQnVsa1wmIzM0OztcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTI5MjpcdHVzLVx1MDAzZXRyYW5zcG9ydCA9IGFsYXVkYV90cmFuc3BvcnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyOTMtXHR1cy1cdTAwM2V0cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI5OS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTMwMDpzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYWxhdWRhX2RyaXZlciA9IHtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTMwMS1cdC5uYW1lID1cdFx0RFJWX05BTUUsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEzMDI6XHQucHJvYmUgPVx0YWxhdWRhX3Byb2JlLFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMzAzLVx0LmRpc2Nvbm5lY3QgPVx0dXNiX3N0b3JfZGlzY29ubmVjdCxcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEzMDgtXHQucG9zdF9yZXNldCA9XHR1c2Jfc3Rvcl9wb3N0X3Jlc2V0LFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMzA5Olx0LmlkX3RhYmxlID1cdGFsYXVkYV91c2JfaWRzLFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMzEwLVx0LnNvZnRfdW5iaW5kID1cdDEsXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMzEzLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMzE0Om1vZHVsZV91c2Jfc3Rvcl9kcml2ZXIoYWxhdWRhX2RyaXZlciwgYWxhdWRhX2hvc3RfdGVtcGxhdGUsIERSVl9OQU1FKTtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfYWxhdWRhLmg9OT1VTlVTVUFMX0RFViggIDB4MDU4NCwgMHgwMDA4LCAweDAxMDIsIDB4MDEwMixcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfYWxhdWRhLmgtMTEtXHRcdFwmIzM0O0RQQy1SMSAoQWxhdWRhKVwmIzM0OyxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9hbGF1ZGEuaDoxMjpcdFx0VVNCX1NDX1NDU0ksIFVTQl9QUl9BTEFVREEsIGluaXRfYWxhdWRhLCAwKSxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9hbGF1ZGEuaC0xMy1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9hbGF1ZGEuaD0xND1VTlVTVUFMX0RFViggIDB4MDdiNCwgMHgwMTBhLCAweDAxMDIsIDB4MDEwMixcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfYWxhdWRhLmgtMTYtXHRcdFwmIzM0O01BVVNCLTEwIChBbGF1ZGEpXCYjMzQ7LFxuZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2FsYXVkYS5oOjE3Olx0XHRVU0JfU0NfU0NTSSwgVVNCX1BSX0FMQVVEQSwgaW5pdF9hbGF1ZGEsIDApLFxuZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2FsYXVkYS5oLTE4LVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdXN1YWwtdGFibGVzLmM9NTY9c3RhdGljIGNvbnN0IHN0cnVjdCBpZ25vcmVfZW50cnkgaWdub3JlX2lkc1tdID0ge1xuZHJpdmVycy91c2Ivc3RvcmFnZS91c3VhbC10YWJsZXMuYzo1NzojXHRpbmNsdWRlIFwmIzM0O3VudXN1YWxfYWxhdWRhLmhcJiMzNDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdXN1YWwtdGFibGVzLmMtNTgtI1x0aW5jbHVkZSBcJiMzNDt1bnVzdWFsX2N5cHJlc3MuaFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzg0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2NvbmZpZyBEZXBlbmRlbmN5IERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBVU0JfU1RPUkFHRV9BTEFVREFgIGFuZCBtYWtlIHN1cmUgaXQmIzM5O3MgcHJvcGVybHkgY29uZmlndXJlZC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGBLY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIHRob3JvdWdobHkuIEFyZSB0aGVyZSBhbnkgaGlkZGVuIGdvdGNoYXMsIG9ic2N1cmUgc2V0dGluZ3MsIG9yIHBsYXRmb3JtLXNwZWNpZmljIHByZXJlcXVpc2l0ZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZmxpY3RzIEkgbmVlZCB0byBmbGFnPyBBcmUgdGhlcmUgYW55IGRlZmF1bHQgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSBvdmVycmlkZGVuIGZvciB0aGUgc3BlY2lmaWMgdXNlIGNhc2U/IEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBkb3duIGVhY2ggZGVwZW5kZW5jeSwgbm90IGp1c3QgdGhlIGRpcmVjdCBvbmVzLCBidXQgdGhlIHRyYW5zaXRpdmUgb25lcyBhcyB3ZWxsLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IG1ha2luZyBzdXJlIGl0IGNvbXBpbGVzOyBpdCYjMzk7cyBhYm91dCBtYWtpbmcgc3VyZSBpdCAqYmVoYXZlcyogY29ycmVjdGx5LCB3aXRoIG1pbmltYWwgc3VycHJpc2VzLCBvbiB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLiBJIG5lZWQgdG8gYW50aWNpcGF0ZSB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBwb3dlciBjb25zdW1wdGlvbiwgcGVyZm9ybWFuY2UsIGFuZCBvdmVyYWxsIHN5c3RlbSBzdGFiaWxpdHkgYmFzZWQgb24gaXRzIGludGVyYWN0aW9uIHdpdGggb3RoZXIgVVNCIHN1YnN5c3RlbXMgYW5kIHN0b3JhZ2UgZHJpdmVycy4gU28sIGBLY29uZmlnYCBmaXJzdCwgdGhlbiBhIGRlZXBlciBkaXZlIGludG8gdGhlIGNvZGUgaWYgYW55dGhpbmcgbG9va3Mgc3VzcGljaW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XHR0cmlzdGF0ZSBcJiMzNDtMZXhhciBKdW1wc2hvdCBDb21wYWN0IEZsYXNoIFJlYWRlclwmIzM0O1xuIDEyMTpcdFx0aGVscFxuIDEyMjpcdFx0ICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIExleGFyIEp1bXBzaG90XG4gMTIzOlx0XHQgIFVTQiBDb21wYWN0Rmxhc2ggcmVhZGVyLlxuIDEyNDpcdFxuIDEyNTpcdFx0ICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtanVtcHNob3QuXG4gMTI2Olx0XG4gMTI3Olx0Y29uZmlnIFVTQl9TVE9SQUdFX0FMQVVEQVxuIDEyODpcdFx0dHJpc3RhdGUgXCYjMzQ7T2x5bXB1cyBNQVVTQi0xMC9GdWppIERQQy1SMSBzdXBwb3J0XCYjMzQ7XG4gMTI5Olx0XHRoZWxwXG4gMTMwOlx0XHQgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgT2x5bXB1cyBNQVVTQi0xMFxuIDEzMTpcdFx0ICBhbmQgRnVqaWZpbG0gRFBDLVIxIFVTQiBDYXJkIHJlYWRlci93cml0ZXIgZGV2aWNlcy5cbiAxMzI6XHRcbiAxMzM6XHRcdCAgVGhlc2UgZGV2aWNlcyBhcmUgYmFzZWQgb24gdGhlIEFsYXVkYSBjaGlwIGFuZCBzdXBwb3J0IGJvdGhcbiAxMzQ6XHRcdCAgWEQgYW5kIFNtYXJ0TWVkaWEgY2FyZHMuXG4gMTM1Olx0XG4gMTM2Olx0XHQgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1hbGF1ZGEuXG4gMTM3Olx0XG4gMTM4Olx0Y29uZmlnIFVTQl9TVE9SQUdFX09ORVRPVUNIXG4gMTM5Olx0XHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IE9uZVRvdWNoIEJ1dHRvbiBvbiBNYXh0b3IgSGFyZCBEcml2ZXNcJiMzNDtcbiAxNDA6XHRcdGRlcGVuZHMgb24gSU5QVVQ9eSB8fCBJTlBVVD1VU0JfU1RPUkFHRVxuIDE0MTpcdFx0aGVscFxuIDE0MjpcdFx0ICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIE1heHRvciBPbmVUb3VjaFxuIDE0MzpcdFx0ICBVU0IgaGFyZCBkcml2ZSYjMzk7cyBvbmV0b3VjaCBidXR0b24uXG4gMTQ0Olx0XG4gMTQ1Olx0XHQgIFRoaXMgY29kZSByZWdpc3RlcnMgdGhlIGJ1dHRvbiBvbiB0aGUgZnJvbnQgb2YgTWF4dG9yIE9uZVRvdWNoIFVTQlxuIDE0NjpcdFx0ICBoYXJkIGRyaXZlJiMzOTtzIGFzIGFuIGlucHV0IGRldmljZS4gQW4gYWN0aW9uIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGhcbiAxNDc6XHRcdCAgdGhpcyBpbnB1dCBpbiBhbnkga2V5YmluZGluZyBzb2Z0d2FyZS4gKGUuZy4gZ25vbWUmIzM5O3Mga2V5Ym9hcmQgc2hvcnQtXG4gMTQ4Olx0XHQgIGN1dHMpXG4gMTQ5Olx0XG4gMTUwOlx0XHQgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1vbmV0b3VjaC5cbiAxNTE6XHRcbiAxNTI6XHRjb25maWcgVVNCX1NUT1JBR0VfS0FSTUFcbiAxNTM6XHRcdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgZm9yIFJpbyBLYXJtYSBtdXNpYyBwbGF5ZXJcJiMzNDtcbiAxNTQ6XHRcdGhlbHBcbiAxNTU6XHRcdCAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBSaW8gS2FybWFcbiAxNTY6XHRcdCAgVVNCIGludGVyZmFjZS5cbiAxNTc6XHRcbiAxNTg6XHRcdCAgVGhpcyBjb2RlIHBsYWNlcyB0aGUgUmlvIEthcm1hIGludG8gbWFzcyBzdG9yYWdlIG1vZGUsIGVuYWJsaW5nXG4gMTU5Olx0XHQgIGl0IHRvIGJlIG1vdW50ZWQgYXMgYW4gb3JkaW5hcnkgZmlsZXN5c3RlbS4gUGVyZm9ybWluZyBhbiBlamVjdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzI0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgdGhlIEZvdW5kYXRpb24gZm9yIFVTQiBTdG9yYWdlIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoaXMgYFVTQl9TVE9SQUdFX0FMQVVEQWAgb3B0aW9uLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gV2hlcmUgZG9lcyB0aGlzIGZpdCBpbiB0aGUgb3ZlcmFsbCBwaWN0dXJlPyBUaGUgZmlyc3QsIGFuZCBtb3N0IG9idmlvdXMsIHBsYWNlIHRvIGxvb2sgaXMgdGhlIHBhcmVudCBjb25maWd1cmF0aW9uIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZXhhbWluZSB0aGUgYmVnaW5uaW5nIG9mIGBkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWdgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBicm9hZGVyIGZyYW1ld29yayBhbmQgcmV2ZWFsIGFueSBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzIG9yIHJlbGV2YW50IHVwc3RyZWFtIHNldHRpbmdzIHRoYXQgZ292ZXJuIGhvdyBgVVNCX1NUT1JBR0VfQUxBVURBYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBwYXJlbnQgY29uZmlndXJhdGlvbiBpcyBmdW5kYW1lbnRhbCB0byBncmFzcGluZyB0aGUgaW50ZW50IGJlaGluZCB0aGlzIHNwZWNpZmljIHNldHRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgVVNCIFN0b3JhZ2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29tbWVudCBcJiMzNDtOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvXCYjMzQ7XG4gICA3Olx0XG4gICA4Olx0Y29uZmlnIFVTQl9TVE9SQUdFXG4gICA5Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgTWFzcyBTdG9yYWdlIHN1cHBvcnRcJiMzNDtcbiAgMTA6XHRcdGRlcGVuZHMgb24gU0NTSVxuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgVVNCIG1hc3Mgc3RvcmFnZSBkZXZpY2VzIHRvIHlvdXJcbiAgMTM6XHRcdCAgY29tcHV0ZXImIzM5O3MgVVNCIHBvcnQuIFRoaXMgaXMgdGhlIGRyaXZlciB5b3UgbmVlZCBmb3IgVVNCXG4gIDE0Olx0XHQgIGZsb3BweSBkcml2ZXMsIFVTQiBoYXJkIGRpc2tzLCBVU0IgdGFwZSBkcml2ZXMsIFVTQiBDRC1ST01zLFxuICAxNTpcdFx0ICBVU0IgZmxhc2ggZGV2aWNlcywgYW5kIG1lbW9yeSBzdGlja3MsIGFsb25nIHdpdGhcbiAgMTY6XHRcdCAgc2ltaWxhciBkZXZpY2VzLiBUaGlzIGRyaXZlciBtYXkgYWxzbyBiZSB1c2VkIGZvciBzb21lIGNhbWVyYXNcbiAgMTc6XHRcdCAgYW5kIGNhcmQgcmVhZGVycy5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgVGhpcyBvcHRpb24gZGVwZW5kcyBvbiAmIzM5O1NDU0kmIzM5OyBzdXBwb3J0IGJlaW5nIGVuYWJsZWQsIGJ1dCB5b3VcbiAgMjA6XHRcdCAgcHJvYmFibHkgYWxzbyBuZWVkICYjMzk7U0NTSSBkZXZpY2Ugc3VwcG9ydDogU0NTSSBkaXNrIHN1cHBvcnQmIzM5O1xuICAyMTpcdFx0ICAoQkxLX0RFVl9TRCkgZm9yIG1vc3QgVVNCIHN0b3JhZ2UgZGV2aWNlcy5cbiAgMjI6XHRcbiAgMjM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDI0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2Itc3RvcmFnZS5cbiAgMjU6XHRcbiAgMjY6XHRpZiBVU0JfU1RPUkFHRVxuICAyNzpcdFxuICAyODpcdGNvbmZpZyBVU0JfU1RPUkFHRV9ERUJVR1xuICAyOTpcdFx0Ym9vbCBcJiMzNDtVU0IgTWFzcyBTdG9yYWdlIHZlcmJvc2UgZGVidWdcJiMzNDtcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgU2F5IFkgaGVyZSBpbiBvcmRlciB0byBoYXZlIHRoZSBVU0IgTWFzcyBTdG9yYWdlIGNvZGUgZ2VuZXJhdGVcbiAgMzI6XHRcdCAgdmVyYm9zZSBkZWJ1Z2dpbmcgbWVzc2FnZXMuXG4gIDMzOlx0XG4gIDM0Olx0Y29uZmlnIFVTQl9TVE9SQUdFX1JFQUxURUtcbiAgMzU6XHRcdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgQ2FyZCBSZWFkZXIgc3VwcG9ydFwmIzM0O1xuICAzNjpcdFx0aGVscFxuICAzNzpcdFx0ICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIHBvd2VyLXNhdmluZyBmdW5jdGlvblxuICAzODpcdFx0ICBmb3IgUmVhbHRlayBSVFM1MXh4IFVTQiBjYXJkIHJlYWRlcnMuXG4gIDM5Olx0XG4gIDQwOlx0XHQgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1yZWFsdGVrLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDk0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgVVNCIFN0b3JhZ2UgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGRpZ2dpbmcgaW50byB0aGUgVVNCIHN0b3JhZ2UgY29uZmlndXJhdGlvbiwgYW5kIGJlZm9yZSBJIHN0YXJ0IG1ha2luZyBhc3N1bXB0aW9ucywgbGV0JiMzOTtzIHRha2UgYSBxdWljayBkZXRvdXIuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIGZvdW5kYXRpb25hbCBVU0Igc3VwcG9ydC4gSXQmIzM5O3Mgc2Vjb25kIG5hdHVyZSwgcmVhbGx5LCBidXQgYmV0dGVyIHRvIGJlIG1ldGljdWxvdXMuIEkgc2hvdWxkIGNoZWNrIHRoZSBgZHJpdmVycy91c2IvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB3aGF0IGBkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWdgIGRlcGVuZHMgb24uIFRoaW5ncyBsaWtlIHRoZSBicm9hZCBgVVNCX1NVUFBPUlRgIG9wdGlvbiBhbmQgdGhlIG1vcmUgZnVuZGFtZW50YWwgYFVTQmAgb3B0aW9uIGFyZSBwcm9iYWJseSBpbnZvbHZlZCwgYnV0IEkgd2FudCB0byB2ZXJpZnkgdGhhdC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNsZWFyZXN0IHBpY3R1cmUgb2YgdGhlIHByZWNvbmRpdGlvbnMgYW5kIGVuc3VyZSBhbnkgY2hhbmdlcyBJIG1ha2UgYXJlIHByb3Blcmx5IHNjb3BlZCB3aXRoaW4gdGhlIHdpZGVyIFVTQiBzdWJzeXN0ZW0uIEdldHRpbmcgdGhpcyByaWdodCBmcm9tIHRoZSBvdXRzZXQgcHJldmVudHMgZG93bnN0cmVhbSBoZWFkYWNoZXMsIHlvdSBrbm93LCB0aGUgdXN1YWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvdXJjZS4qZHJpdmVycy91c2Ivc3RvcmFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL0tjb25maWc9MTE0PXNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL3VzYi9LY29uZmlnLTExNS1cbmRyaXZlcnMvdXNiL0tjb25maWc6MTE2OnNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvdXNiL0tjb25maWctMTE3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGJhc2VkIG9uIHRoZSBwcm92aWRlZCB0aG91Z2h0OgoKKipEaXZpbmcgaW50byBVU0IgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIFVTQiBkcml2ZXIgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgb3V0IHRoZSBgZHJpdmVycy91c2IvS2NvbmZpZ2AgZmlsZSwgZm9jdXNpbmcgb24gbGluZXMgcm91Z2hseSBhcm91bmQgMTEwLTEyMC4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBhIHNwZWNpZmljIG9wdGlvbiBvciBkZXBlbmRlbmN5LCBtYXliZSBzb21ldGhpbmcgcmVsYXRlZCB0byBhIG5ldyBkZXZpY2UgY2xhc3MgSSYjMzk7bSBpbnRlZ3JhdGluZywgb3IgcGVyaGFwcyBJJiMzOTttIGRlYnVnZ2luZyBhIGNvbmZpZ3VyYXRpb24gaXNzdWUuIFdoYXRldmVyIHRoZSByZWFzb24sIHRoYXQgc2VjdGlvbiBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlbGV2YW50IG9wdGlvbnMgZm9yIHRoZSBtb2R1bGUgSSYjMzk7bSB3b3JraW5nIHdpdGggYXJlIGRlZmluZWQsIG9yIHdoZXJlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHN0YXRlZC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0ICBhbmQgbGF0ZXIgc291dGggYnJpZGdlIGltcGxlbWVudGF0aW9ucy4gVGhlc2UgYXJlIGNvbW1vbiBvbiB4ODYgUENzXG4gMTAxOlx0XHQgIHdpdGggQU1EIENQVXMgYnV0IHJhcmVseSB1c2VkIGVsc2V3aGVyZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGEgZmV3XG4gMTAyOlx0XHQgIHBvd2VycGMgYW5kIG1pcHMgZGVza3RvcCBtYWNoaW5lcy5cbiAxMDM6XHRcbiAxMDQ6XHRpZiBVU0JcbiAxMDU6XHRcbiAxMDY6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2IvY29yZS9LY29uZmlnXCYjMzQ7XG4gMTA3Olx0XG4gMTA4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL21vbi9LY29uZmlnXCYjMzQ7XG4gMTA5Olx0XG4gMTEwOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZ1wmIzM0O1xuIDExMTpcdFxuIDExMjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL0tjb25maWdcJiMzNDtcbiAxMTM6XHRcbiAxMTQ6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2IvY2xhc3MvS2NvbmZpZ1wmIzM0O1xuIDExNTpcdFxuIDExNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWdcJiMzNDtcbiAxMTc6XHRcbiAxMTg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2IvaW1hZ2UvS2NvbmZpZ1wmIzM0O1xuIDExOTpcdFxuIDEyMDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi91c2JpcC9LY29uZmlnXCYjMzQ7XG4gMTIxOlx0XG4gMTIyOlx0ZW5kaWZcbiAxMjM6XHRcbiAxMjQ6XHRjb21tZW50IFwmIzM0O1VTQiBkdWFsLW1vZGUgY29udHJvbGxlciBkcml2ZXJzXCYjMzQ7XG4gMTI1Olx0XG4gMTI2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL2NkbnMzL0tjb25maWdcJiMzNDtcbiAxMjc6XHRcbiAxMjg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2IvZm90ZzIxMC9LY29uZmlnXCYjMzQ7XG4gMTI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDUwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFsYXVkYSBVU0IgU3RvcmFnZSBEcml2ZXIgQW5hbHlzaXMgJmFtcDsgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBgVVNCX1NUT1JBR0VfQUxBVURBYCBpcyBidWlsdCBvbiBhIGRlcGVuZGVuY3kgY2hhaW46IGl0IG5lZWRzIGBVU0JfU1RPUkFHRWAgd2hpY2gsIGluIHR1cm4sIGhpbmdlcyBvbiBgU0NTSWAsIGFuZCBmaW5hbGx5IGBVU0JgLCBsb2NhdGVkIGluIGBkcml2ZXJzL3VzYi9LY29uZmlnYCB1bmRlciB0aGUgYGlmIFVTQmAgY29uZGl0aW9uLiAgVGhlIGtleSBxdWVzdGlvbiBpcyBhbHdheXMgd2hldGhlciB3ZSBjYW4gaGl0IHRoZXNlIGRyaXZlcnMgdmlhIGZ1enppbmcsIGFuZCB0aGUgYW5zd2VyIGhlcmUgaXMgYSByZXNvdW5kaW5nICp5ZXMqLiBTeXprYWxsZXIgaXMga25vd24gZm9yIGl0cyBleHRlbnNpdmUgZnV6emluZyBvZiBVU0IgZHJpdmVycywgaGVhdmlseSBsZXZlcmFnaW5nIHJhdy1nYWRnZXQgYW5kIGR1bW15X2hjZCBlbXVsYXRpb24uCgpNeSBwcmltYXJ5IGdvYWwgbm93IGlzIHRvIGRldGVybWluZSB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoaXMgYGFsYXVkYWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2hldGhlciBpdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGVpdGhlciBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiBvciBieSBpc3N1aW5nIFNDU0kgY29tbWFuZHMuICBJdCBzZWVtcyB3aGVuIGEgVVNCIGRldmljZSB3aXRoIGEgdmVuZG9yIElEL3Byb2R1Y3QgSUQgKFZJRC9QSUQpIHRoYXQgbWF0Y2hlcyBlbnRyaWVzIGluIGBhbGF1ZGFfdXNiX2lkc2AgKGxpa2UgYDA1ODQ6MDAwOGAgb3IgYDA3YjQ6MDEwYWApIGlzICYjMzQ7Y29ubmVjdGVkJiMzNDsg4oCTIHZpYSBlbXVsYXRpb24sIG9mIGNvdXJzZSDigJMgYGFsYXVkYV9wcm9iZWAgZ2V0cyBjYWxsZWQuICBUaGF0JiMzOTtzIG91ciBlbnRyeSBwb2ludC4gRm9sbG93aW5nIHRoYXQsIFNDU0kgY29tbWFuZHMgaXNzdWVkIHRvIHRoZSBtYXNzIHN0b3JhZ2UgZGV2aWNlIGVtdWxhdGUgdGhlIFVTQiBjb25uZWN0aW9uLCBhbmQgc2hvdWxkIGludm9rZSBgYWxhdWRhX3RyYW5zcG9ydGAsIHdoaWNoIGlzIHRoZSBrZXkgZnVuY3Rpb24gYmVjYXVzZSBpdCBpbiB0dXJuIGNhbGxzIGNyaXRpY2FsIHJvdXRpbmVzIGxpa2UgYGFsYXVkYV9jaGVja19tZWRpYWAsIGBhbGF1ZGFfaW5pdF9tZWRpYWAsIGBhbGF1ZGFfcmVhZF9kYXRhYCwgYGFsYXVkYV93cml0ZV9kYXRhYCwgYGFsYXVkYV93cml0ZV9sYmFgLCBhbmQgc28gb24uCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB2YWx1ZSBsaWVzLiAgSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZml4ZXMgYW5kIGNoYW5nZXMgdGhhdCB3ZXJlIGRvbmU6CgoxLiAgYG1lZGlhX2luaXRpYWxpemVkYCBoYXMgYmVlbiBtb3ZlZCBmcm9tIHRoZSBgc3RydWN0IGFsYXVkYV9pbmZvYCB0byBgc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvYC4KMi4gIEluIGBhbGF1ZGFfZnJlZV9tYXBzYCwgdGhlIHBhdGNoIG5vdyBmcmVlcyB0aGUgb3V0ZXIgYXJyYXlzIG9mIGBtZWRpYV9pbmZvLSZndDtsYmFfdG9fcGJhYCBhbmQgYG1lZGlhX2luZm8tJmd0O3BiYV90b19sYmFgIGFuZCBzZXRzIHRoZW0gdG8gYE5VTExgLCBpbiBhZGRpdGlvbiB0byByZXNldHRpbmcgY2FwYWNpdHkgYW5kIHV6b25lc2l6ZSB0byAwLiBQcmV2aW91c2x5LCBpdCB3YXMgb25seSB0aGUgaW5uZXIgYXJyYXlzLiBUaGlzIGluZGljYXRlcyBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIHN0YWxlIHBvaW50ZXIgaXNzdWVzIHdlcmUgcHJlc2VudCBhbmQgY29ycmVjdGVkLgozLiAgRXJyb3IgaGFuZGxpbmcgaW4gYGFsYXVkYV9pbml0X21lZGlhYCBoYXMgYmVlbiBpbXByb3ZlZCwgd2l0aCBgYWxhdWRhX2ZyZWVfbWFwcygmYW1wO01FRElBX0lORk8odXMpKWAgYmVpbmcgY2FsbGVkIG9uIGZhaWx1cmUuCjQuICBgYWxhdWRhX2NoZWNrX21lZGlhYCBpcyBub3cgbW9yZSByb2J1c3QuIE9uIGRldGVjdGlvbiBvZiBubyBtZWRpYSwgb3IgYSBtZWRpYSBjaGFuZ2UsIGl0IGNhbGxzIGBhbGF1ZGFfZnJlZV9tYXBzYCBhbmQgcmVzZXRzIGBtZWRpYV9pbmZvLSZndDttZWRpYV9pbml0aWFsaXplZGAgdG8gYGZhbHNlYC4KNS4gIGBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZWAgaGFzIGFkZGVkIGNydWNpYWwgY2hlY2tzIHRvIHNlZSBpZiBgbGJhX3RvX3BiYWAgb3IgYHBiYV90b19sYmFgIGlzIE5VTEwuIEl0IGFsc28gbm93IHJldHVybnMgYSBgVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SYCBpbiB0aGlzIGNhc2UsIG9yIGNhbGxzIGBhbGF1ZGFfcmVhZF9tYXBgLiBQcmV2aW91c2x5IGl0IHJldHVybmVkIGB2b2lkYC4KNi4gIGBhbGF1ZGFfd3JpdGVfbGJhYCwgYGFsYXVkYV9yZWFkX2RhdGFgLCBhbmQgYGFsYXVkYV93cml0ZV9kYXRhYCBoYXZlIGFkZGl0aW9uYWwgZGl2aXNpb24tYnktemVybyBjaGVja3MgKGAhdXpvbmVzaXplYCkgYW5kIGFsc28gY2hlY2tzIHRoZSByZXR1cm4gdmFsdWVzIG9mIHRoZSBjYWxsZWQgZnVuY3Rpb24uCgpUaGUgZ29vZCBuZXdzIGlzIHRoYXQgdGhpcyBjb3JlIGxvZ2ljIGlzIGFsbCBuZWF0bHkgdHVja2VkIGF3YXkgaW4gYGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNgLgoKR2l2ZW4gdGhhdCB0aGlzIGlzIGFsbCBhY2Nlc3NpYmxlIHZpYSBVU0IgZW11bGF0aW9uIHdpdGhpbiBRRU1VIGFuZCBTeXprYWxsZXIgKHNwZWNpZmljYWxseSB1c2luZyBkdW1teV9oY2QgYW5kIHJhdy1nYWRnZXQgZm9yIFVTQiBlbXVsYXRpb24pLCBteSBhbmFseXNpcyBwb2ludHMgdG93YXJkcyB0aGlzIGRyaXZlciBiZWluZyAqZGVmaW5pdGVseSogYFdvcnRoRnV6emluZ2AuCgpOb3csIEkgd2lsbCBwcm9jZWVkIHRvIGFuYWx5emUgdGhlIGF2YWlsYWJsZSBzeW1ib2xzIHdpdGhpbiBgZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY2AuIExldCYjMzk7cyBkaWcgaW50byB0aGUgZnVuY3Rpb25zIGRlZmluZWQgdGhlcmUgYW5kIHNlZSB3aGF0IGlzIGF2YWlsYWJsZSBhcyBub24tc3RhdGljLCBleHBvcnRlZCwgb3IgY2FsbGJhY2sgZnVuY3Rpb25zIHdoaWNoIGNhbiBiZSBob29rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI3NTpcdH1cbjEyNzY6XHRcbjEyNzc6XHRzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhbGF1ZGFfaG9zdF90ZW1wbGF0ZTtcbjEyNzg6XHRcbjEyNzk6XHRzdGF0aWMgaW50IGFsYXVkYV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbjEyODA6XHRcdFx0XHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuMTI4MTpcdHtcbjEyODI6XHRcdHN0cnVjdCB1c19kYXRhICp1cztcbjEyODM6XHRcdGludCByZXN1bHQ7XG4xMjg0Olx0XG4xMjg1Olx0XHRyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoXHUwMDI2dXMsIGludGYsIGlkLFxuMTI4NjpcdFx0XHRcdChpZCAtIGFsYXVkYV91c2JfaWRzKSAmIzQzOyBhbGF1ZGFfdW51c3VhbF9kZXZfbGlzdCxcbjEyODc6XHRcdFx0XHRcdTAwMjZhbGF1ZGFfaG9zdF90ZW1wbGF0ZSk7XG4xMjg4Olx0XHRpZiAocmVzdWx0KVxuMTI4OTpcdFx0XHRyZXR1cm4gcmVzdWx0O1xuMTI5MDpcdFxuMTI5MTpcdFx0dXMtXHUwMDNldHJhbnNwb3J0X25hbWUgID0gXCYjMzQ7QWxhdWRhIENvbnRyb2wvQnVsa1wmIzM0OztcbjEyOTI6XHRcdHVzLVx1MDAzZXRyYW5zcG9ydCA9IGFsYXVkYV90cmFuc3BvcnQ7XG4xMjkzOlx0XHR1cy1cdTAwM2V0cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0O1xuMTI5NDpcdFx0dXMtXHUwMDNlbWF4X2x1biA9IDE7XG4xMjk1Olx0XG4xMjk2Olx0XHRyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpO1xuMTI5NzpcdFx0cmV0dXJuIHJlc3VsdDtcbjEyOTg6XHR9XG4xMjk5Olx0XG4xMzAwOlx0c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFsYXVkYV9kcml2ZXIgPSB7XG4xMzAxOlx0XHQubmFtZSA9XHRcdERSVl9OQU1FLFxuMTMwMjpcdFx0LnByb2JlID1cdGFsYXVkYV9wcm9iZSxcbjEzMDM6XHRcdC5kaXNjb25uZWN0ID1cdHVzYl9zdG9yX2Rpc2Nvbm5lY3QsXG4xMzA0Olx0XHQuc3VzcGVuZCA9XHR1c2Jfc3Rvcl9zdXNwZW5kLFxuMTMwNTpcdFx0LnJlc3VtZSA9XHR1c2Jfc3Rvcl9yZXN1bWUsXG4xMzA2Olx0XHQucmVzZXRfcmVzdW1lID1cdHVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSxcbjEzMDc6XHRcdC5wcmVfcmVzZXQgPVx0dXNiX3N0b3JfcHJlX3Jlc2V0LFxuMTMwODpcdFx0LnBvc3RfcmVzZXQgPVx0dXNiX3N0b3JfcG9zdF9yZXNldCxcbjEzMDk6XHRcdC5pZF90YWJsZSA9XHRhbGF1ZGFfdXNiX2lkcyxcbjEzMTA6XHRcdC5zb2Z0X3VuYmluZCA9XHQxLFxuMTMxMTpcdFx0Lm5vX2R5bmFtaWNfaWQgPSAxLFxuMTMxMjpcdH07XG4xMzEzOlx0XG4xMzE0Olx0bW9kdWxlX3VzYl9zdG9yX2RyaXZlcihhbGF1ZGFfZHJpdmVyLCBhbGF1ZGFfaG9zdF90ZW1wbGF0ZSwgRFJWX05BTUUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY3OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgYWxhdWRhLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIGBhbGF1ZGEuY2AuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bGwgbmVlZCB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQsIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGRlZmluZWQgaW4gdGVybXMgb2Ygc3ltYm9scy4gVmFyaWFibGVzLCBjb25zdGFudHMsIHN0cnVjdHMsIGFuZCBzbyBvbiDigJMgYSBxdWljayBzd2VlcCBvZiB0aGUgbGFuZHNjYXBlIHdpbGwgZ2l2ZSBtZSBhIGJhc2VsaW5lLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBob25lIGluIG9uIHRoZSBjb3JlIG9mIGFueSBDIGZpbGU6IHRoZSBmdW5jdGlvbnMuIEkmIzM5O2xsIHNlYXJjaCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4gVGhvc2UgYXJlIHdoZXJlIHRoZSByZWFsIHdvcmsgaGFwcGVucywgYW5kIHdoZXJlIEkgY2FuIHN0YXJ0IHRvIHVuZGVyc3RhbmQgdGhlIHByb2dyYW0mIzM5O3MgbG9naWMgYW5kIGJlaGF2aW9yLiBLbm93aW5nIHRoZSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIHRoZSBidWlsZGluZyBibG9ja3MgdG8gdW5kZXJzdGFuZCBob3cgYGFsYXVkYS5jYCBkb2VzIGl0cyB0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXowLTlfXSYjNDM7LipcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTAzPXN0cnVjdCBhbGF1ZGFfaW5mbyB7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjItXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyMzpzdGF0aWMgaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyNC1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTE3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGFsYXVkYV9jYXJkX2luZm8gYWxhdWRhX2NhcmRfaWRzW10gPSB7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yMDItXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjIwMzpzdGF0aWMgY29uc3Qgc3RydWN0IGFsYXVkYV9jYXJkX2luZm8gKmFsYXVkYV9jYXJkX2ZpbmRfaWQodW5zaWduZWQgY2hhciBpZClcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjA0LXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTIxOD1zdGF0aWMgdW5zaWduZWQgY2hhciBlY2MyWzI1Nl07XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTIxOS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MjIwOnN0YXRpYyB2b2lkIG5hbmRfaW5pdF9lY2Modm9pZClcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjIxLXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTI0NC0vKiBjb21wdXRlIDMtYnl0ZSBlY2Mgb24gMjU2IGJ5dGVzICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjI0NTpzdGF0aWMgdm9pZCBuYW5kX2NvbXB1dGVfZWNjKHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKmVjYylcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjQ2LXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTI2OC1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MjY5OnN0YXRpYyBpbnQgbmFuZF9jb21wYXJlX2VjYyh1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBjaGFyICplY2MpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTI3MC17XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yNzMtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjI3NDpzdGF0aWMgdm9pZCBuYW5kX3N0b3JlX2VjYyh1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBjaGFyICplY2MpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTI3NS17XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yODUtICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjI4NjpzdGF0aWMgdm9pZCBhbGF1ZGFfZnJlZV9tYXBzIChzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gKm1lZGlhX2luZm8pXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTI4Ny17XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zMTctICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjMxODpzdGF0aWMgaW50IGFsYXVkYV9nZXRfbWVkaWFfc3RhdHVzKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciAqZGF0YSlcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzE5LXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTM0MC0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MzQxOnN0YXRpYyBpbnQgYWxhdWRhX2Fja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTM0Mi17XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNTctICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjM1ODpzdGF0aWMgaW50IGFsYXVkYV9nZXRfbWVkaWFfc2lnbmF0dXJlKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciAqZGF0YSlcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzU5LXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTM3My0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6Mzc0OnN0YXRpYyBpbnQgYWxhdWRhX3Jlc2V0X21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzc1LXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTM4OS0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MzkwOnN0YXRpYyBpbnQgYWxhdWRhX2luaXRfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zOTEte1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDY4LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0Njk6c3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NzAte1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTE0LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo1MTU6c3RhdGljIGludCBhbGF1ZGFfY2hlY2tfc3RhdHVzMihzdHJ1Y3QgdXNfZGF0YSAqdXMpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTUxNi17XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01NDQtICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjU0NTpzdGF0aWMgaW50IGFsYXVkYV9nZXRfcmVkdV9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSwgdW5zaWduZWQgY2hhciAqZGF0YSlcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTQ2LXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU2NS0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NTY2OnN0YXRpYyB1MTYgYWxhdWRhX2ZpbmRfdW51c2VkX3BiYShzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gKmluZm8sXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU2Ny1cdHVuc2lnbmVkIGludCB6b25lKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTgyLSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo1ODM6c3RhdGljIGludCBhbGF1ZGFfcmVhZF9tYXAoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTg0LXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTcwNi0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzA3OnN0YXRpYyBpbnQgYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzA4LXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTcyMS0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzIyOnN0YXRpYyBpbnQgYWxhdWRhX2VyYXNlX2Jsb2NrKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSlcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzIzLXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc1MC0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzUxOnN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfYmxvY2tfcmF3KHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzUyLVx0XHR1bnNpZ25lZCBpbnQgcGFnZSwgdW5zaWduZWQgaW50IHBhZ2VzLCB1bnNpZ25lZCBjaGFyICpkYXRhKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzc2LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3Nzc6c3RhdGljIGludCBhbGF1ZGFfcmVhZF9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc3OC1cdFx0dW5zaWduZWQgaW50IHBhZ2UsIHVuc2lnbmVkIGludCBwYWdlcywgdW5zaWduZWQgY2hhciAqZGF0YSlcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgwMS0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODAyOnN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2Jsb2NrKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSwgdW5zaWduZWQgY2hhciAqZGF0YSlcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODAzLXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgyOS0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODMwOnN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2xiYShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBsYmEsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgzMS1cdFx0IHVuc2lnbmVkIGludCBwYWdlLCB1bnNpZ25lZCBpbnQgcGFnZXMsXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05NDMtICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjk0NDpzdGF0aWMgaW50IGFsYXVkYV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTk0NS1cdFx0dW5zaWduZWQgaW50IHNlY3RvcnMpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDQ3LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMDQ4OnN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwNDktXHRcdHVuc2lnbmVkIGludCBzZWN0b3JzKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTEyOS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTEzMDpzdGF0aWMgdm9pZCBhbGF1ZGFfaW5mb19kZXN0cnVjdG9yKHZvaWQgKmV4dHJhKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTMxLXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNDktICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNTA6c3RhdGljIGludCBpbml0X2FsYXVkYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNTEte1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE2OS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE3MDpzdGF0aWMgaW50IGFsYXVkYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNzEte1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTI3Nz1zdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhbGF1ZGFfaG9zdF90ZW1wbGF0ZTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI3OC1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTI3OTpzdGF0aWMgaW50IGFsYXVkYV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI4MC1cdFx0XHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTMwMD1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYWxhdWRhX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEzMTMtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEzMTQ6bW9kdWxlX3VzYl9zdG9yX2RyaXZlcihhbGF1ZGFfZHJpdmVyLCBhbGF1ZGFfaG9zdF90ZW1wbGF0ZSwgRFJWX05BTUUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI3MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGUgYG1vZHVsZV91c2Jfc3Rvcl9kcml2ZXJgLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgZXhhY3RseSB3aGF0IGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvci4gV2hhdCBmdW5jdGlvbmFsaXRpZXMgZG9lcyB0aGlzIG1vZHVsZSBwcm92aWRlPyBXaGF0IFVTQiBzdG9yYWdlIGRldmljZXMgZG9lcyBpdCBoYW5kbGU/IERvZXMgaXQgdXNlIHRoZSBTQ1NJIGNvbW1hbmQgc2V0IG9yIGEgZGlmZmVyZW50IHByb3RvY29sPyBJIGtub3cgaXQmIzM5O3MgYSBkcml2ZXIsIG9mIGNvdXJzZSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgVVNCIHN1YnN5c3RlbS4gRG9lcyBpdCBoYW5kbGUgcXVpcmtzIGZvciBkaWZmZXJlbnQgc3RvcmFnZSBkZXZpY2VzPyBEb2VzIGl0IGludGVyYWN0IHdpdGggYmxvY2sgbGF5ZXJzIG9yIHZpcnR1YWwgZmlsZSBzeXN0ZW1zIGRpcmVjdGx5PyBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBhcmNoaXRlY3R1cmUgYW5kIGhvdyBpdCBvcmNoZXN0cmF0ZXMgdGhlIHByb2Nlc3Mgb2YgZGF0YSB0cmFuc2ZlciBiZXR3ZWVuIHRoZSBVU0Igc3RvcmFnZSBkZXZpY2UgYW5kIHRoZSBob3N0IHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBtb2R1bGVfdXNiX3N0b3JfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2Ivc3RvcmFnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oPTE5ND1leHRlcm4gdm9pZCB1c2Jfc3Rvcl9hZGp1c3RfcXVpcmtzKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaC0xOTYtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oOjE5NzojZGVmaW5lIG1vZHVsZV91c2Jfc3Rvcl9kcml2ZXIoX19kcml2ZXIsIF9fc2h0LCBfX25hbWUpIFxcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oLTE5OC1zdGF0aWMgaW50IF9faW5pdCBfX2RyaXZlciMjX2luaXQodm9pZCkgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1OTcKCQkJCQkJCW91dHB1dDogMTg4CgkJCQkJCQl0aG91Z2h0czogNzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFsYXVkYSBVU0IgRHJpdmVyIEFuYWx5c2lzIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgQWxhdWRhIFVTQiBzdG9yYWdlIGRyaXZlciAoYGFsYXVkYS5jYCkuIEkmIzM5O3ZlIGdvbmUgdGhyb3VnaCB0aGUgY29kZSBhbmQgaWRlbnRpZmllZCB0aGUga2V5IGZ1bmN0aW9ucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoOiBgYWxhdWRhX3Byb2JlYCwgYGluaXRfYWxhdWRhYCwgYGFsYXVkYV90cmFuc3BvcnRgLCBgYWxhdWRhX3JlYWRfZGF0YWAsIGBhbGF1ZGFfd3JpdGVfZGF0YWAsIGBhbGF1ZGFfY2hlY2tfbWVkaWFgLCBgYWxhdWRhX2luaXRfbWVkaWFgLCBgYWxhdWRhX2ZyZWVfbWFwc2AsIGBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZWAsIGFuZCBgYWxhdWRhX3dyaXRlX2xiYWAuCgpNeSBmb2N1cyBpcyBvbiBmdXp6aW5nLCBzbyBJJiMzOTt2ZSBzcGVjaWZpY2FsbHkgZWFybWFya2VkIHRoZSBub24taG90LXBhdGggZnVuY3Rpb25zLiBUaGlzIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyB3aWxsIGJlIGNydWNpYWwgZm9yIGd1aWRpbmcgdGhlIGZ1enplci4gSSYjMzk7dmUgbmFycm93ZWQgaXQgdG8gYGFsYXVkYV90cmFuc3BvcnRgLCBgYWxhdWRhX3Byb2JlYCwgYGluaXRfYWxhdWRhYCwgYGFsYXVkYV9jaGVja19tZWRpYWAsIGBhbGF1ZGFfcmVhZF9kYXRhYCwgYGFsYXVkYV93cml0ZV9kYXRhYCwgYGFsYXVkYV93cml0ZV9sYmFgLCBhbmQgYGFsYXVkYV9mcmVlX21hcHNgLgoKTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkIGZvciB0aGlzIG1vZHVsZSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIEnigJl2ZSBjaGVja2VkIHRoZSBLY29uZmlnIGZpbGVzLCBhbmQgY29uZmlybWVkIHRoYXQgd2UgbmVlZCBgVVNCX1NUT1JBR0VfQUxBVURBYCwgd2hpY2ggZGVwZW5kcyBvbiBgVVNCX1NUT1JBR0VgLCB3aGljaCBkZXBlbmRzIG9uIGBTQ1NJYCwgd2hpY2ggaW4gdHVybiwgaXMgZGVwZW5kZW50IG9uIHRoZSBpbmNsdXNpb24gb2YgYFVTQmAsIHdoaWNoIGRlcGVuZHMgb24gYFVTQl9TVVBQT1JUYC4gTm8gb3RoZXIgZGVwZW5kZW5jaWVzIHdlcmUgZm91bmQgZm9yIGBVU0JfU1RPUkFHRV9BTEFVREFgLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGVzZSBhcmUgdGhlIHJlcXVpcmVkIGNvbmZpZ3MuCgpJJiMzOTt2ZSBhbHNvIHF1aWNrbHkgdmFsaWRhdGVkIHRoYXQgdGhlIGBNYWtlZmlsZWAgZW50cnkgZm9yIHRoaXMgbW9kdWxlIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQuIEl0IGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIG9iamVjdCBmaWxlIGB1bXMtYWxhdWRhLm9gIGlzIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBidWlsZCBhcyBleHBlY3RlZC4KCkZpbmFsbHksIEkmIzM5O20gcmVhZHkgdG8gY3JhZnQgdGhlIGNhbGwgdG8gdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoIGFkZHJlc3NlcyBtZW1vcnkgbWFuYWdlbWVudCwgYm91bmRzIGNoZWNrcywgemVybyBkaXZpc2lvbiBpc3N1ZXMsIGFuZCBtZWRpYSBpbml0aWFsaXphdGlvbiBzdGF0ZSBoYW5kbGluZy4gQWxsIHRoZXNlIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIGFuZCBhbGwgc2hvdWxkIGJlIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBzdGFuZGFyZCBTQ1NJIGNvbW1hbmQgaW50ZXJhY3Rpb24gd2l0aCBlbXVsYXRlZCBkZXZpY2VzLiBUaGVyZWZvcmUsIFdvcnRoRnV6emluZyBpcyBzZXQgdG8gYHRydWVgLiBJJiMzOTt2ZSBwcm92aWRlZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXMgdGhhdCBjcml0aWNhbCBsaXN0IG9mIGZ1bmN0aW9ucyBhbmQgY29uZmlybWVkIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEl0JiMzOTtzIGFsbCBjbGVhbiBhbmQgcmVhZHkuIExldCYjMzk7cyBzZW5kIHRoZSByZXN1bHRzIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX1NUT1JBR0VfQUxBVURBJiMzNDssCiAgICAmIzM0O1VTQl9TVE9SQUdFJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtTQ1NJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxhdWRhX3RyYW5zcG9ydCYjMzQ7LAogICAgJiMzNDthbGF1ZGFfcHJvYmUmIzM0OywKICAgICYjMzQ7aW5pdF9hbGF1ZGEmIzM0OywKICAgICYjMzQ7YWxhdWRhX2NoZWNrX21lZGlhJiMzNDssCiAgICAmIzM0O2FsYXVkYV9yZWFkX2RhdGEmIzM0OywKICAgICYjMzQ7YWxhdWRhX3dyaXRlX2RhdGEmIzM0OywKICAgICYjMzQ7YWxhdWRhX3dyaXRlX2xiYSYjMzQ7LAogICAgJiMzNDthbGF1ZGFfZnJlZV9tYXBzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCB6ZXJvLWRpdmlzaW9uIGJ1Z3MsIG1lbW9yeSBsZWFrcywgYW5kIG1lZGlhIGluaXRpYWxpemF0aW9uIHN0YXRlIGhhbmRsaW5nIGFjcm9zcyB6b25lIG1hcCBhbGxvY2F0aW9ucyBhbmQgSS9PIGhhbmRsaW5nIGluIHRoZSBPbHltcHVzIE1BVVNCLTEwL0Z1amlmaWxtIERQQy1SMSAoQWxhdWRhKSBVU0IgbWFzcyBzdG9yYWdlIGRyaXZlci4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgdmlhIFVTQiBlbXVsYXRpb24vZnV6emluZyBmcmFtZXdvcmtzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfU1RPUkFHRV9BTEFVREEmIzM0OywKICAgICYjMzQ7VVNCX1NUT1JBR0UmIzM0OywKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O1NDU0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGF1ZGFfdHJhbnNwb3J0JiMzNDssCiAgICAmIzM0O2FsYXVkYV9wcm9iZSYjMzQ7LAogICAgJiMzNDtpbml0X2FsYXVkYSYjMzQ7LAogICAgJiMzNDthbGF1ZGFfY2hlY2tfbWVkaWEmIzM0OywKICAgICYjMzQ7YWxhdWRhX3JlYWRfZGF0YSYjMzQ7LAogICAgJiMzNDthbGF1ZGFfd3JpdGVfZGF0YSYjMzQ7LAogICAgJiMzNDthbGF1ZGFfd3JpdGVfbGJhJiMzNDssCiAgICAmIzM0O2FsYXVkYV9mcmVlX21hcHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIHplcm8tZGl2aXNpb24gYnVncywgbWVtb3J5IGxlYWtzLCBhbmQgbWVkaWEgaW5pdGlhbGl6YXRpb24gc3RhdGUgaGFuZGxpbmcgYWNyb3NzIHpvbmUgbWFwIGFsbG9jYXRpb25zIGFuZCBJL08gaGFuZGxpbmcgaW4gdGhlIE9seW1wdXMgTUFVU0ItMTAvRnVqaWZpbG0gRFBDLVIxIChBbGF1ZGEpIFVTQiBtYXNzIHN0b3JhZ2UgZHJpdmVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSB2aWEgVVNCIGVtdWxhdGlvbi9mdXp6aW5nIGZyYW1ld29ya3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgbWVtb3J5IGxlYWtzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbmQgcG90ZW50aWFsIGRpdmlzaW9uLWJ5LXplcm8gZXJyb3JzIGluIGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMuIFNwZWNpZmljYWxseSwgaXQgZnJlZXMgdGhlIG91dGVyIHBvaW50ZXIgYXJyYXlzIGluIGFsYXVkYV9mcmVlX21hcHMoKSwgYWRkcyBlcnJvciBjbGVhbnVwIGluIGFsYXVkYV9pbml0X21lZGlhKCksIGFkZHMgY2hlY2tzIGZvciBOVUxMIHBvaW50ZXJzIGluIGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKCksIGFkZHMgY2hlY2tzIGZvciB6ZXJvIHV6b25lc2l6ZSB0byBhdm9pZCBkaXZpc2lvbiBieSB6ZXJvLCBhbmQgbW92ZXMgbWVkaWFfaW5pdGlhbGl6ZWQgdG8gc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvLlxuXG5UaGUgc3RydWN0IGFsYXVkYV9pbmZvIGNvbnRhaW5pbmcgYWxhdWRhX21lZGlhX2luZm8gaXMgYWxsb2NhdGVkIHVzaW5nIGt6YWxsb2Nfb2JqKCksIGVuc3VyaW5nIGFsbCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQuIFBCQS9MQkEgbWFwcGluZyB0YWJsZXMgYXJlIGFsbG9jYXRlZCB2aWEga2NhbGxvYy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBTaW5jZSB0aGVzZSBjaGFuZ2VzIHN0cmljdGx5IGZpeCBtZW1vcnkgbGVha3MgYW5kIE5VTEwvemVyby1jaGVjayBzYWZldHkgaXNzdWVzLCB0aGV5IGRvIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvIG5vdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTNhMGE2MDUxYTdiNmYxMmRiNWY4YTUyYmFkYjQ3ZGI4MzUwZjY5YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDI4IDIwOjQ4OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMKaW5kZXggNjkxZmU0NzAwOWNmNi4uYTJhMzMzNDE5ZjFmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jCkBAIC05Niw2ICYjNDM7OTYsOCBAQCBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gewogCiAJdTE2ICoqbGJhX3RvX3BiYTsJCS8qIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYmxvY2sgbWFwICovCiAJdTE2ICoqcGJhX3RvX2xiYTsJCS8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgYmxvY2sgbWFwICovCiYjNDM7CiYjNDM7CWJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7CiB9OwogCiBzdHJ1Y3QgYWxhdWRhX2luZm8gewpAQCAtMTA1LDggJiM0MzsxMDcsNiBAQCBzdHJ1Y3QgYWxhdWRhX2luZm8gewogCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OwogCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KIAl1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KLQotCWJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7CiB9OwogCiAjZGVmaW5lIHNob3J0X3BhY2sobHNiLG1zYikgKCAoKHUxNikobHNiKSkgfCAoICgodTE2KShtc2IpKSZsdDsmbHQ7OCApICkKQEAgLTI5MCwxNyAmIzQzOzI5MCwyNSBAQCBzdGF0aWMgdm9pZCBhbGF1ZGFfZnJlZV9tYXBzIChzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gKm1lZGlhX2luZm8pCiAJdW5zaWduZWQgaW50IG51bV96b25lcyA9IG1lZGlhX2luZm8tJmd0O2NhcGFjaXR5ICZndDsmZ3Q7IHNoaWZ0OwogCXVuc2lnbmVkIGludCBpOwogCi0JaWYgKG1lZGlhX2luZm8tJmd0O2xiYV90b19wYmEgIT0gTlVMTCkKJiM0MzsJaWYgKG1lZGlhX2luZm8tJmd0O2xiYV90b19wYmEgIT0gTlVMTCkgewogCQlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3pvbmVzOyBpJiM0MzsmIzQzOykgewogCQkJa2ZyZWUobWVkaWFfaW5mby0mZ3Q7bGJhX3RvX3BiYVtpXSk7CiAJCQltZWRpYV9pbmZvLSZndDtsYmFfdG9fcGJhW2ldID0gTlVMTDsKIAkJfQomIzQzOwkJa2ZyZWUobWVkaWFfaW5mby0mZ3Q7bGJhX3RvX3BiYSk7CiYjNDM7CQltZWRpYV9pbmZvLSZndDtsYmFfdG9fcGJhID0gTlVMTDsKJiM0MzsJfQogCi0JaWYgKG1lZGlhX2luZm8tJmd0O3BiYV90b19sYmEgIT0gTlVMTCkKJiM0MzsJaWYgKG1lZGlhX2luZm8tJmd0O3BiYV90b19sYmEgIT0gTlVMTCkgewogCQlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3pvbmVzOyBpJiM0MzsmIzQzOykgewogCQkJa2ZyZWUobWVkaWFfaW5mby0mZ3Q7cGJhX3RvX2xiYVtpXSk7CiAJCQltZWRpYV9pbmZvLSZndDtwYmFfdG9fbGJhW2ldID0gTlVMTDsKIAkJfQomIzQzOwkJa2ZyZWUobWVkaWFfaW5mby0mZ3Q7cGJhX3RvX2xiYSk7CiYjNDM7CQltZWRpYV9pbmZvLSZndDtwYmFfdG9fbGJhID0gTlVMTDsKJiM0MzsJfQomIzQzOwltZWRpYV9pbmZvLSZndDtjYXBhY2l0eSA9IDA7CiYjNDM7CW1lZGlhX2luZm8tJmd0O3V6b25lc2l6ZSA9IDA7CiB9CiAKIC8qCkBAIC00NDEsMTEgJiM0Mzs0NDksMTUgQEAgc3RhdGljIGludCBhbGF1ZGFfaW5pdF9tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpCiAJCSYjNDM7IE1FRElBX0lORk8odXMpLmJsb2Nrc2hpZnQgJiM0MzsgTUVESUFfSU5GTyh1cykucGFnZXNoaWZ0KTsKIAlNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID0ga2NhbGxvYyhudW1fem9uZXMsIHNpemVvZih1MTYqKSwgR0ZQX05PSU8pOwogCU1FRElBX0lORk8odXMpLmxiYV90b19wYmEgPSBrY2FsbG9jKG51bV96b25lcywgc2l6ZW9mKHUxNiopLCBHRlBfTk9JTyk7Ci0JaWYgKE1FRElBX0lORk8odXMpLnBiYV90b19sYmEgPT0gTlVMTCB8fCBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhID09IE5VTEwpCiYjNDM7CWlmIChNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID09IE5VTEwgfHwgTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9PSBOVUxMKSB7CiYjNDM7CQlhbGF1ZGFfZnJlZV9tYXBzKCZhbXA7TUVESUFfSU5GTyh1cykpOwogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwomIzQzOwl9CiAKLQlpZiAoYWxhdWRhX3Jlc2V0X21lZGlhKHVzKSAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCiYjNDM7CWlmIChhbGF1ZGFfcmVzZXRfbWVkaWEodXMpICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgewomIzQzOwkJYWxhdWRhX2ZyZWVfbWFwcygmYW1wO01FRElBX0lORk8odXMpKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKJiM0MzsJfQogCiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOwogfQpAQCAtNDU3LDYgJiM0Mzs0NjksNyBAQCBzdGF0aWMgaW50IGFsYXVkYV9pbml0X21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIHVzLSZndDtleHRyYTsKJiM0MzsJc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICptZWRpYV9pbmZvID0gJmFtcDtNRURJQV9JTkZPKHVzKTsKIAl1bnNpZ25lZCBjaGFyICpzdGF0dXMgPSB1cy0mZ3Q7aW9idWY7CiAJaW50IHJjOwogCkBAIC00NzAsNyAmIzQzOzQ4Myw4IEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKIAlpZiAoKHN0YXR1c1swXSAmYW1wOyAweDgwKSB8fCAoKHN0YXR1c1swXSAmYW1wOyAweDFGKSA9PSAweDEwKQogCQl8fCAoKHN0YXR1c1sxXSAmYW1wOyAweDAxKSA9PSAwKSkgewogCQl1c2Jfc3Rvcl9kYmcodXMsICYjMzQ7Tm8gbWVkaWEsIG9yIGRvb3Igb3BlblxuJiMzNDspOwotCQlhbGF1ZGFfZnJlZV9tYXBzKCZhbXA7TUVESUFfSU5GTyh1cykpOwomIzQzOwkJYWxhdWRhX2ZyZWVfbWFwcyhtZWRpYV9pbmZvKTsKJiM0MzsJCW1lZGlhX2luZm8tJmd0O21lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7CiAJCWluZm8tJmd0O3NlbnNlX2tleSA9IDB4MDI7CiAJCWluZm8tJmd0O3NlbnNlX2FzYyA9IDB4M0E7CiAJCWluZm8tJmd0O3NlbnNlX2FzY3EgPSAweDAwOwpAQCAtNDc4LDEyICYjNDM7NDkyLDEzIEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKIAl9CiAKIAkvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovCi0JaWYgKHN0YXR1c1swXSAmYW1wOyAweDA4IHx8ICFpbmZvLSZndDttZWRpYV9pbml0aWFsaXplZCkgewomIzQzOwlpZiAoc3RhdHVzWzBdICZhbXA7IDB4MDggfHwgIW1lZGlhX2luZm8tJmd0O21lZGlhX2luaXRpYWxpemVkKSB7CiAJCXVzYl9zdG9yX2RiZyh1cywgJiMzNDtNZWRpYSBjaGFuZ2UgZGV0ZWN0ZWRcbiYjMzQ7KTsKLQkJYWxhdWRhX2ZyZWVfbWFwcygmYW1wO01FRElBX0lORk8odXMpKTsKJiM0MzsJCWFsYXVkYV9mcmVlX21hcHMobWVkaWFfaW5mbyk7CiYjNDM7CQltZWRpYV9pbmZvLSZndDttZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlOwogCQlyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTsKIAkJaWYgKHJjID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQotCQkJaW5mby0mZ3Q7bWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlOwomIzQzOwkJCW1lZGlhX2luZm8tJmd0O21lZGlhX2luaXRpYWxpemVkID0gdHJ1ZTsKIAkJaW5mby0mZ3Q7c2Vuc2Vfa2V5ID0gVU5JVF9BVFRFTlRJT047CiAJCWluZm8tJmd0O3NlbnNlX2FzYyA9IDB4Mjg7CiAJCWluZm8tJmd0O3NlbnNlX2FzY3EgPSAweDAwOwpAQCAtNjg5LDExICYjNDM7NzA0LDE2IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfbWFwKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHpvbmUpCiAgKiBDaGVja3MgdG8gc2VlIHdoZXRoZXIgd2UgaGF2ZSBhbHJlYWR5IG1hcHBlZCBhIGNlcnRhaW4gem9uZQogICogSWYgd2UgaGF2ZW4mIzM5O3QsIHRoZSBtYXAgaXMgZ2VuZXJhdGVkCiAgKi8KLXN0YXRpYyB2b2lkIGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHpvbmUpCiYjNDM7c3RhdGljIGludCBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKQogewomIzQzOwlpZiAoIU1FRElBX0lORk8odXMpLmxiYV90b19wYmEgfHwgIU1FRElBX0lORk8odXMpLnBiYV90b19sYmEpCiYjNDM7CQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwomIzQzOwogCWlmIChNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdID09IE5VTEwKIAkJfHwgTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXSA9PSBOVUxMKQotCQlhbGF1ZGFfcmVhZF9tYXAodXMsIHpvbmUpOwomIzQzOwkJcmV0dXJuIGFsYXVkYV9yZWFkX21hcCh1cywgem9uZSk7CiYjNDM7CiYjNDM7CXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKIH0KIAogLyoKQEAgLTgxOSwxMSAmIzQzOzgzOSwxOSBAQCBzdGF0aWMgaW50IGFsYXVkYV93cml0ZV9sYmEoc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgbGJhLAogCXVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplOwogCXVuc2lnbmVkIGludCBwYWdlc2l6ZSA9IE1FRElBX0lORk8odXMpLnBhZ2VzaXplOwogCXVuc2lnbmVkIGludCBibG9ja3NpemUgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemU7Ci0JdW5zaWduZWQgaW50IGxiYV9vZmZzZXQgPSBsYmEgJSB1em9uZXNpemU7CiYjNDM7CXVuc2lnbmVkIGludCBsYmFfb2Zmc2V0OwogCXVuc2lnbmVkIGludCBuZXdfcGJhX29mZnNldDsKLQl1bnNpZ25lZCBpbnQgem9uZSA9IGxiYSAvIHV6b25lc2l6ZTsKJiM0MzsJdW5zaWduZWQgaW50IHpvbmU7CiAKLQlhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZSh1cywgem9uZSk7CiYjNDM7CWlmICghdXpvbmVzaXplKQomIzQzOwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKJiM0MzsKJiM0MzsJbGJhX29mZnNldCA9IGxiYSAlIHV6b25lc2l6ZTsKJiM0MzsJem9uZSA9IGxiYSAvIHV6b25lc2l6ZTsKJiM0MzsKJiM0MzsJcmVzdWx0ID0gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpOwomIzQzOwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQomIzQzOwkJcmV0dXJuIHJlc3VsdDsKIAogCXBiYSA9IE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV1bbGJhX29mZnNldF07CiAJaWYgKHBiYSA9PSAxKSB7CkBAIC05MjcsNiAmIzQzOzk1NSw5IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCWludCByZXN1bHQ7CiAKJiM0MzsJaWYgKCF1em9uZXNpemUpCiYjNDM7CQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwomIzQzOwogCS8qCiAJICogU2luY2Ugd2Ugb25seSByZWFkIGluIG9uZSBibG9jayBhdCBhIHRpbWUsIHdlIGhhdmUgdG8gY3JlYXRlCiAJICogYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UgYXQgYSB0aW1lIGJldHdlZW4gdGhlCkBAIC05NTAsMTEgJiM0Mzs5ODEsMTAgQEAgc3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCXNnID0gTlVMTDsKIAogCXdoaWxlIChzZWN0b3JzICZndDsgMCkgewotCQl1bnNpZ25lZCBpbnQgem9uZSA9IGxiYSAvIHV6b25lc2l6ZTsgLyogaW50ZWdlciBkaXZpc2lvbiAqLwotCQl1bnNpZ25lZCBpbnQgbGJhX29mZnNldCA9IGxiYSAtICh6b25lICogdXpvbmVzaXplKTsKJiM0MzsJCXVuc2lnbmVkIGludCB6b25lOwomIzQzOwkJdW5zaWduZWQgaW50IGxiYV9vZmZzZXQ7CiAJCXVuc2lnbmVkIGludCBwYWdlczsKIAkJdTE2IHBiYTsKLQkJYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpOwogCiAJCS8qIE5vdCBvdmVyZmxvd2luZyBjYXBhY2l0eT8gKi8KIAkJaWYgKGxiYSAmZ3Q7PSBtYXhfbGJhKSB7CkBAIC05NjQsNiAmIzQzOzk5NCwxMyBAQCBzdGF0aWMgaW50IGFsYXVkYV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJCQlicmVhazsKIAkJfQogCiYjNDM7CQl6b25lID0gbGJhIC8gdXpvbmVzaXplOyAvKiBpbnRlZ2VyIGRpdmlzaW9uICovCiYjNDM7CQlsYmFfb2Zmc2V0ID0gbGJhIC0gKHpvbmUgKiB1em9uZXNpemUpOwomIzQzOwomIzQzOwkJcmVzdWx0ID0gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpOwomIzQzOwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKJiM0MzsJCQlicmVhazsKJiM0MzsKIAkJLyogRmluZCBudW1iZXIgb2YgcGFnZXMgd2UgY2FuIHJlYWQgaW4gdGhpcyBibG9jayAqLwogCQlwYWdlcyA9IG1pbihzZWN0b3JzLCBibG9ja3NpemUgLSBwYWdlKTsKIAkJbGVuID0gcGFnZXMgJmx0OyZsdDsgcGFnZXNoaWZ0OwpAQCAtMTAyMSw2ICYjNDM7MTA1OCw5IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJdTE2IGxiYSwgbWF4X2xiYTsKIAlpbnQgcmVzdWx0OwogCiYjNDM7CWlmICghTUVESUFfSU5GTyh1cykudXpvbmVzaXplKQomIzQzOwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKJiM0MzsKIAkvKgogCSAqIFNpbmNlIHdlIGRvbiYjMzk7dCB3cml0ZSB0aGUgdXNlciBkYXRhIGRpcmVjdGx5IHRvIHRoZSBkZXZpY2UsCiAJICogd2UgaGF2ZSB0byBjcmVhdGUgYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1OTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bi4gVGhlIHRhcmdldCBmaWxlIGlzIGBkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCBpdCBpbnZvbHZlcyBzb21lIHJlZmFjdG9yaW5nIGFuZCBidWcgZml4ZXMsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgbW92aW5nIGBtZWRpYV9pbml0aWFsaXplZGAgaW50byBhIHBlci1tZWRpYSBzdHJ1Y3QsIHdoaWNoIGlzIGdlbmVyYWxseSBhIGdvb2QgcHJhY3RpY2UgZm9yIGNvcnJlY3Qgc3RhdGUgbWFuYWdlbWVudC4gQmV5b25kIHRoYXQsIGl0JiMzOTtzIGFkZHJlc3NpbmcgYSBoYW5kZnVsIG9mIGlzc3VlczogbWVtb3J5IGxlYWtzIChzcGVjaWZpY2FsbHkgaW4gYGFsYXVkYV9mcmVlX21hcHMoKWAsIHdoZXJlIHRoZSBhcnJheSBvZiBwb2ludGVycyB3YXMgYmVpbmcgbGVha2VkLCB0aG91Z2ggdGhlIGVsZW1lbnRzIHdlcmUgZnJlZWQpLCBhbmQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBkaXZpc2lvbi1ieS16ZXJvIGVycm9ycy4gVGhlIGZpeGVzIGluY2x1ZGUgc2V0dGluZyBjYXBhY2l0eSBhbmQgc2l6ZSB0byB6ZXJvLCBmcmVlaW5nIG1hcHMgb24gZmFpbHVyZSwgdXBkYXRpbmcgbWVkaWEgaW5pdGlhbGl6ZWQgcGVyIG1lZGlhLCBhbmQgcHJvcGVyIGVycm9yIGhhbmRsaW5nLiBUaGlzIHNlZW1zIGxpa2UgYSBwcmV0dHkgdGhvcm91Z2ggY2xlYW51cC4gSXQmIzM5O3MgZ29vZCB0byBzZWUgcm9idXN0IGVycm9yIGNoZWNraW5nIGFkZGVkIGluIHNldmVyYWwgZnVuY3Rpb25zIHN1Y2ggYXMgaW4gYGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKClgLCBgYWxhdWRhX3dyaXRlX2xiYSgpYCwgYGFsYXVkYV9yZWFkX2RhdGEoKWAsIGFuZCBgYWxhdWRhX3dyaXRlX2RhdGEoKWAuCgpOb3csIGJlZm9yZSBJIGp1bXAgdG8gYSBjb25jbHVzaW9uLCBJIG5lZWQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgZXhhbWluZSB0aGUgY29udGV4dCB3aXRoaW4gYGFsYXVkYS5jYC4gTXkgbWFpbiBjb25jZXJucyBhcmU6IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJpc2tzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnksIGFyZSB0aGVyZSBpbmZvcm1hdGlvbiBsZWFrcywgb3IgYXJlIHRoZXJlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHJlYWQgb3IgY29waWVkPyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaG93IHRoZXNlIGNoYW5nZXMgaW50ZXJhY3Qgd2l0aCB0aGUgZXhpc3RpbmcgY29kZSB0byBkZXRlcm1pbmUgaWYgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgd2VyZSBpbnRyb2R1Y2VkLCBvciBpZiB0aGUgcGF0Y2hlcyBpbmFkdmVydGVudGx5IGV4cG9zZWQgc29tZXRoaW5nIHByZXZpb3VzbHkgaGlkZGVuLiBUaGF0JiMzOTtzIHdoZXJlIGEgS01TQU4gc2Vzc2lvbiBtaWdodCBiZSB1c2VmdWwsIHBhcnRpY3VsYXJseSBpZiB0aGVyZSBhcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgb3IgY29udHJvbCBmbG93IGNoYW5nZXMgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01FRElBX0lORk8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTAzPXN0cnVjdCBhbGF1ZGFfaW5mbyB7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTYtI2RlZmluZSBNRURJQV9QT1JUKHVzKSB1cy1cdTAwM2VzcmItXHUwMDNlZGV2aWNlLVx1MDAzZWx1blxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTc6I2RlZmluZSBNRURJQV9JTkZPKHVzKSAoKHN0cnVjdCBhbGF1ZGFfaW5mbyAqKXVzLVx1MDAzZWV4dHJhKS1cdTAwM2Vwb3J0W01FRElBX1BPUlQodXMpXVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTgtXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0zOTA9c3RhdGljIGludCBhbGF1ZGFfaW5pdF9tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MzItXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQzMzpcdE1FRElBX0lORk8odXMpLmNhcGFjaXR5ID0gMSBcdTAwM2NcdTAwM2MgbWVkaWFfaW5mby1cdTAwM2VjaGlwc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQzNC1cdHVzYl9zdG9yX2RiZyh1cywgXCYjMzQ7Rm91bmQgbWVkaWEgd2l0aCBjYXBhY2l0eTogJWxkTUJcXG5cJiMzNDssXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQzNTpcdFx0ICAgICBNRURJQV9JTkZPKHVzKS5jYXBhY2l0eSBcdTAwM2VcdTAwM2UgMjApO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MzYtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQzNzpcdE1FRElBX0lORk8odXMpLnBhZ2VzaGlmdCA9IG1lZGlhX2luZm8tXHUwMDNlcGFnZXNoaWZ0O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0Mzg6XHRNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0ID0gbWVkaWFfaW5mby1cdTAwM2VibG9ja3NoaWZ0O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0Mzk6XHRNRURJQV9JTkZPKHVzKS56b25lc2hpZnQgPSBtZWRpYV9pbmZvLVx1MDAzZXpvbmVzaGlmdDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDQwLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NDE6XHRNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZSA9IDEgXHUwMDNjXHUwMDNjIG1lZGlhX2luZm8tXHUwMDNlcGFnZXNoaWZ0O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NDI6XHRNRURJQV9JTkZPKHVzKS5ibG9ja3NpemUgPSAxIFx1MDAzY1x1MDAzYyBtZWRpYV9pbmZvLVx1MDAzZWJsb2Nrc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0MzpcdE1FRElBX0lORk8odXMpLnpvbmVzaXplID0gMSBcdTAwM2NcdTAwM2MgbWVkaWFfaW5mby1cdTAwM2V6b25lc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ0NC1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDQ1Olx0TUVESUFfSU5GTyh1cykudXpvbmVzaXplID0gKCgxIFx1MDAzY1x1MDAzYyBtZWRpYV9pbmZvLVx1MDAzZXpvbmVzaGlmdCkgLyAxMjgpICogMTI1O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NDY6XHRNRURJQV9JTkZPKHVzKS5ibG9ja21hc2sgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemUgLSAxO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NDctXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0ODpcdG51bV96b25lcyA9IE1FRElBX0lORk8odXMpLmNhcGFjaXR5IFx1MDAzZVx1MDAzZSAoTUVESUFfSU5GTyh1cykuem9uZXNoaWZ0XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0OTpcdFx0JiM0MzsgTUVESUFfSU5GTyh1cykuYmxvY2tzaGlmdCAmIzQzOyBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NTA6XHRNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID0ga2NhbGxvYyhudW1fem9uZXMsIHNpemVvZih1MTYqKSwgR0ZQX05PSU8pO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NTE6XHRNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhID0ga2NhbGxvYyhudW1fem9uZXMsIHNpemVvZih1MTYqKSwgR0ZQX05PSU8pO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NTI6XHRpZiAoTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYSA9PSBOVUxMIHx8IE1FRElBX0lORk8odXMpLmxiYV90b19wYmEgPT0gTlVMTCkge1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NTM6XHRcdGFsYXVkYV9mcmVlX21hcHMoXHUwMDI2TUVESUFfSU5GTyh1cykpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NTQtXHRcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NTctXHRpZiAoYWxhdWRhX3Jlc2V0X21lZGlhKHVzKSAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDU4Olx0XHRhbGF1ZGFfZnJlZV9tYXBzKFx1MDAyNk1FRElBX0lORk8odXMpKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDU5LVx0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9NDY5PXN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ3MS1cdHN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYWxhdWRhX2luZm8gKikgdXMtXHUwMDNlZXh0cmE7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ3MjpcdHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyAqbWVkaWFfaW5mbyA9IFx1MDAyNk1FRElBX0lORk8odXMpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NzMtXHR1bnNpZ25lZCBjaGFyICpzdGF0dXMgPSB1cy1cdTAwM2Vpb2J1Zjtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTU4Mz1zdGF0aWMgaW50IGFsYXVkYV9yZWFkX21hcChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTg3LVx0aW50IGksIGo7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjU4ODpcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo1ODk6XHR1bnNpZ25lZCBpbnQgdXpvbmVzaXplID0gTUVESUFfSU5GTyh1cykudXpvbmVzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01OTAtXHR1bnNpZ25lZCBpbnQgbGJhX29mZnNldCwgbGJhX3JlYWwsIGJsb2NrbnVtO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjkwLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo2OTE6XHRNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdID0gbGJhX3RvX3BiYTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NjkyOlx0TUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXSA9IHBiYV90b19sYmE7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTY5My1cdHJlc3VsdCA9IDA7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz03MDc9c3RhdGljIGludCBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03MDgte1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3MDk6XHRpZiAoIU1FRElBX0lORk8odXMpLmxiYV90b19wYmEgfHwgIU1FRElBX0lORk8odXMpLnBiYV90b19sYmEpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTcxMC1cdFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzExLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3MTI6XHRpZiAoTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYVt6b25lXSA9PSBOVUxMXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjcxMzpcdFx0fHwgTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXSA9PSBOVUxMKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03MTQtXHRcdHJldHVybiBhbGF1ZGFfcmVhZF9tYXAodXMsIHpvbmUpO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9NzUxPXN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfYmxvY2tfcmF3KHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSxcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc2Ny1cdHJldHVybiB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtXHUwMDNlcmVjdl9idWxrX3BpcGUsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjc2ODpcdFx0ZGF0YSwgKE1FRElBX0lORk8odXMpLnBhZ2VzaXplICYjNDM7IDY0KSAqIHBhZ2VzLCBOVUxMKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzY5LX1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTc3Nz1zdGF0aWMgaW50IGFsYXVkYV9yZWFkX2Jsb2NrKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSxcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc4MC1cdGludCBpLCByYztcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzgxOlx0dW5zaWduZWQgaW50IHBhZ2VzaXplID0gTUVESUFfSU5GTyh1cykucGFnZXNpemU7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc4Mi1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTgwMj1zdGF0aWMgaW50IGFsYXVkYV93cml0ZV9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MTgtXHRyYyA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCBpbmZvLVx1MDAzZXdyX2VwLCBkYXRhLFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4MTk6XHRcdChNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZSAmIzQzOyA2NCkgKiBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemUsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgyMC1cdFx0TlVMTCk7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz04MzA9c3RhdGljIGludCBhbGF1ZGFfd3JpdGVfbGJhKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IGxiYSxcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgzNy1cdGludCBpLCByZXN1bHQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgzODpcdHVuc2lnbmVkIGludCB1em9uZXNpemUgPSBNRURJQV9JTkZPKHVzKS51em9uZXNpemU7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgzOTpcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4NDA6XHR1bnNpZ25lZCBpbnQgcGFnZXNpemUgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODQxOlx0dW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IE1FRElBX0lORk8odXMpLmJsb2Nrc2l6ZTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODQyLVx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQ7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NTUtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjg1NjpcdHBiYSA9IE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV1bbGJhX29mZnNldF07XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg1Ny1cdGlmIChwYmEgPT0gMSkge1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODY2LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4Njc6XHRuZXdfcGJhID0gYWxhdWRhX2ZpbmRfdW51c2VkX3BiYShcdTAwMjZNRURJQV9JTkZPKHVzKSwgem9uZSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg2OC1cdGlmICghbmV3X3BiYSkge1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTI1LVx0bmV3X3BiYV9vZmZzZXQgPSBuZXdfcGJhIC0gKHpvbmUgKiB6b25lc2l6ZSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkyNjpcdE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV1bbmV3X3BiYV9vZmZzZXRdID0gbGJhO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5Mjc6XHRNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdW2xiYV9vZmZzZXRdID0gbmV3X3BiYTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTI4LVx0dXNiX3N0b3JfZGJnKHVzLCBcJiMzNDtSZW1hcHBlZCBMQkEgJWQgdG8gUEJBICVkXFxuXCYjMzQ7LCBsYmEsIG5ld19wYmEpO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTM0LVx0XHRcdHJldHVybiByZXN1bHQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkzNTpcdFx0TUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXVtwYmFfb2Zmc2V0XSA9IFVOREVGO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05MzYtXHR9XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz05NDQ9c3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTQ5LVx0dW5zaWduZWQgaW50IHBhZ2UsIGxlbiwgb2Zmc2V0O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5NTA6XHR1bnNpZ25lZCBpbnQgYmxvY2tzaGlmdCA9IE1FRElBX0lORk8odXMpLmJsb2Nrc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjk1MTpcdHVuc2lnbmVkIGludCBwYWdlc2hpZnQgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjk1MjpcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemU7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjk1MzpcdHVuc2lnbmVkIGludCBwYWdlc2l6ZSA9IE1FRElBX0lORk8odXMpLnBhZ2VzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5NTQ6XHR1bnNpZ25lZCBpbnQgdXpvbmVzaXplID0gTUVESUFfSU5GTyh1cykudXpvbmVzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05NTUtXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTc1LVx0bGJhID0gYWRkcmVzcyBcdTAwM2VcdTAwM2UgYmxvY2tzaGlmdDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTc2Olx0cGFnZSA9IChhZGRyZXNzIFx1MDAyNiBNRURJQV9JTkZPKHVzKS5ibG9ja21hc2spO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5Nzc6XHRtYXhfbGJhID0gTUVESUFfSU5GTyh1cykuY2FwYWNpdHkgXHUwMDNlXHUwMDNlIChibG9ja3NoaWZ0ICYjNDM7IHBhZ2VzaGlmdCk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTk3OC1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwMDgtXHRcdC8qIEZpbmQgd2hlcmUgdGhpcyBsYmEgbGl2ZXMgb24gZGlzayAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMDA5Olx0XHRwYmEgPSBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdW2xiYV9vZmZzZXRdO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDEwLVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTA0OD1zdGF0aWMgaW50IGFsYXVkYV93cml0ZV9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTA1Mi1cdHVuc2lnbmVkIGludCBwYWdlLCBsZW4sIG9mZnNldDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTA1MzpcdHVuc2lnbmVkIGludCBibG9ja3NoaWZ0ID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaGlmdDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTA1NDpcdHVuc2lnbmVkIGludCBwYWdlc2hpZnQgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwNTU6XHR1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMDU2Olx0dW5zaWduZWQgaW50IHBhZ2VzaXplID0gTUVESUFfSU5GTyh1cykucGFnZXNpemU7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwNTctXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTA2MC1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTA2MTpcdGlmICghTUVESUFfSU5GTyh1cykudXpvbmVzaXplKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDYyLVx0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTA4Ni1cdGxiYSA9IGFkZHJlc3MgXHUwMDNlXHUwMDNlIGJsb2Nrc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwODc6XHRwYWdlID0gKGFkZHJlc3MgXHUwMDI2IE1FRElBX0lORk8odXMpLmJsb2NrbWFzayk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwODg6XHRtYXhfbGJhID0gTUVESUFfSU5GTyh1cykuY2FwYWNpdHkgXHUwMDNlXHUwMDNlIChwYWdlc2hpZnQgJiM0MzsgYmxvY2tzaGlmdCk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwODktXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0xMTcwPXN0YXRpYyBpbnQgYWxhdWRhX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cylcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExOTgtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExOTk6XHRcdG51bV96b25lcyA9IE1FRElBX0lORk8odXMpLmNhcGFjaXR5IFx1MDAzZVx1MDAzZSAoTUVESUFfSU5GTyh1cykuem9uZXNoaWZ0XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyMDA6XHRcdFx0JiM0MzsgTUVESUFfSU5GTyh1cykuYmxvY2tzaGlmdCAmIzQzOyBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjAxLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjAyOlx0XHRjYXBhY2l0eSA9IG51bV96b25lcyAqIE1FRElBX0lORk8odXMpLnV6b25lc2l6ZVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjAzOlx0XHRcdCogTUVESUFfSU5GTyh1cykuYmxvY2tzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjA0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjEwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGFsYXVkYV9pbmZvYCBBbGxvY2F0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaXNzZWN0IGhvdyB0aGUgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgaXMgYmVpbmcgYWxsb2NhdGVkIGluIHRoaXMgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIG1lbW9yeSBmb290cHJpbnQsIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZCwgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gaXRzIGxpZmV0aW1lLiBJcyBpdCBzdGFjay1hbGxvY2F0ZWQsIGhlYXAtYWxsb2NhdGVkLCBzdGF0aWNhbGx5IGFsbG9jYXRlZD8gRWFjaCBtZXRob2QgaGFzIGRpZmZlcmVudCBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLCByZXNvdXJjZSB1c2FnZSwgYW5kIHBvdGVudGlhbCBmb3IgbWVtb3J5IGxlYWtzIG9yIGZyYWdtZW50YXRpb24uIEkgbmVlZCB0byBtZW50YWxseSB0cmFjZSB0aGUgY29kZSB0byBwaW5wb2ludCBleGFjdGx5IHdoZXJlIHRoaXMgc3RydWN0dXJlIGlzIGNyZWF0ZWQsIGFuZCBpZGVhbGx5LCB3aGVyZSBpdCYjMzk7cyBkZXN0cm95ZWQgb3IgcmVsZWFzZWQgaWYgaXQmIzM5O3MgZHluYW1pY2FsbHkgYWxsb2NhdGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0IG9mIHRoZSBzeXN0ZW0gYmVoYXZlcyB1bmRlciBkaWZmZXJlbnQgbG9hZCBjb25kaXRpb25zLiBUaGlzIHdpbGwgaGVscCBpbmZvcm0gd2hldGhlciBpdCBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIHdoZXRoZXIgaXQmIzM5O3Mgc3VzY2VwdGlibGUgdG8gbWVtb3J5IGxlYWtzLCBvciBpZiBpdCBoYXMgYW55IG90aGVyIHBvdGVudGlhbCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t6YWxsb2MuKmFsYXVkYV9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTExNTA9c3RhdGljIGludCBpbml0X2FsYXVkYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTU1LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTU2Olx0dXMtXHUwMDNlZXh0cmEgPSBremFsbG9jX29iaihzdHJ1Y3QgYWxhdWRhX2luZm8sIEdGUF9OT0lPKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE1Ny1cdGlmICghdXMtXHUwMDNlZXh0cmEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1ODYKCQkJCQkJCW91dHB1dDogMjE5CgkJCQkJCQl0aG91Z2h0czogNTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtNU0FOIE5lY2Vzc2l0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIGB1cy0mZ3Q7ZXh0cmFgLCB3aGljaCBpcyBhIGBzdHJ1Y3QgYWxhdWRhX2luZm9gLCBpcyBpbml0aWFsaXplZCB3aXRoIGBremFsbG9jX29iamAsIHdoaWNoIG1lYW5zIGV2ZXJ5dGhpbmcsIGluY2x1ZGluZyB0aGUgZW1iZWRkZWQgYHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyBwb3J0WzJdYCwgaXMgemVyb2VkIG91dCByaWdodCBmcm9tIHRoZSBzdGFydC4gVGhhdCYjMzk7cyBjcnVjaWFsLiBUaGUgYG1lZGlhX2luaXRpYWxpemVkYCBmbGFnLCB3aGljaCB3YXMgbW92ZWQgaW50byB0aGF0IHplcm8taW5pdGlhbGl6ZWQgYHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mb2AsIGlzIG5vdyBhbHNvIGd1YXJhbnRlZWQgdG8gc3RhcnQgYXQgemVyby4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGJ1ZyBmaXhlcyB0aGVtc2VsdmVzLiBXZSYjMzk7cmUgYWRkcmVzc2luZyBhIG1lbW9yeSBsZWFrIGluIGBhbGF1ZGFfZnJlZV9tYXBzKClgLCB3aGVyZSBvdXRlciBhcnJheXMgYGxiYV90b19wYmFgIGFuZCBgcGJhX3RvX2xiYWAgd2VyZW4mIzM5O3QgYmVpbmcgZnJlZWQuIFdlJiMzOTtyZSBhbHNvIHplcm9pbmcgb3V0IGBjYXBhY2l0eWAgYW5kIGB1em9uZXNpemVgIHVwb24gZnJlZWluZyB0aG9zZSBtYXBzIGFuZCBjaGVja2luZyBmb3IgTlVMTCBvciB6ZXJvIGB1em9uZXNpemVgIGluIHRoZSByZWFkL3dyaXRlIHBhdGhzIHRvIHByZXZlbnQgdGhvc2UgbmFzdHkgZGl2aXNpb24tYnktemVybyBvciBOVUxMIHBvaW50ZXIgaXNzdWVzLiBGdXJ0aGVybW9yZSwgdGhlIGVycm9yIGNsZWFudXAgaW4gYGFsYXVkYV9pbml0X21lZGlhKClgIG5vdyBjb3JyZWN0bHkgY2FsbHMgYGFsYXVkYV9mcmVlX21hcHMoKWAsIHdoaWNoIGlzIGdvb2QuIEFuZCBmaW5hbGx5LCBgYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoKWAgaGFzIGEgY2hlY2sgZm9yIGBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhYCBiZWZvcmUgaXQgaW5kZXhlcyBpdC4gVGhhdCYjMzk7cyBhbGwgZ29vZCwgc29saWQgZGVmZW5zaXZlIHByb2dyYW1taW5nLgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogYXJlIHdlIGluYWR2ZXJ0ZW50bHkgY3JlYXRpbmcsIGFjY2Vzc2luZywgb3IgcGFzc2luZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB0byB1c2VyIHNwYWNlPyBUaGUgYW5zd2VyIGlzIGEgY2xlYXIgJiMzNDtuby4mIzM0OyBBbGwgYWxsb2NhdGlvbnMgdXNlIGVpdGhlciBga3phbGxvY19vYmpgIG9yIGBrY2FsbG9jYCwgbWVhbmluZyB0aGV5JiMzOTtyZSB6ZXJvLWluaXRpYWxpemVkLiBUaGlzIGlzbiYjMzk7dCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3M7IGl0JiMzOTtzIGFib3V0IGNsZWFuaW5nIHVwIG1lbW9yeSBsZWFrcywgcHJldmVudGluZyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBhcml0aG1ldGljIGVycm9ycywgYW5kIG1vdmluZyBhIGZsYWcgdG8gYWxsb3cgdHJhY2tpbmcgcGVyLXBvcnQgbWVkaWEgaW5pdGlhbGl6YXRpb24gaW5zdGVhZCBvZiBnbG9iYWxseS4KClRoZXNlIGFyZSBjbGFzc2ljIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBlcnJvciBoYW5kbGluZyBpc3N1ZXMuIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHNob3VsZCBjYXRjaCB0aGUgb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGFuZCBkb3VibGUtZnJlZSBwcm9ibGVtcywgYXMgd2UmIzM5O3JlIG5vdCBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSBkb24mIzM5O3QgbmVlZCBLTVNBTiBoZXJlLgoKTGV0JiMzOTtzIGRvIGEgZmluYWwgY2hlY2sgYWdhaW5zdCB0aGUgS01TQU4gY3JpdGVyaWE6CgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmc/IE5vLiBBbGwmIzM5O3MgaW5pdGlhbGl6ZWQuCjIuICBDb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIEV2ZXJ5dGhpbmcgaXMgemVyby1pbml0aWFsaXplZC4KMy4gIEFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBsYXRlciBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBmaWVsZHM/IE5lZ2F0aXZlLiBaZXJvLWluaXRpYWxpemVkLgo0LiAgQm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IEFic29sdXRlbHkgbm90LgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAuIFRpbWUgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgbWVtb3J5IGxlYWtzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbmQgcG90ZW50aWFsIGRpdmlzaW9uLWJ5LXplcm8gZXJyb3JzIGluIGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMuIFNwZWNpZmljYWxseSwgaXQgZnJlZXMgdGhlIG91dGVyIHBvaW50ZXIgYXJyYXlzIGluIGFsYXVkYV9mcmVlX21hcHMoKSwgYWRkcyBlcnJvciBjbGVhbnVwIGluIGFsYXVkYV9pbml0X21lZGlhKCksIGFkZHMgY2hlY2tzIGZvciBOVUxMIHBvaW50ZXJzIGluIGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKCksIGFkZHMgY2hlY2tzIGZvciB6ZXJvIHV6b25lc2l6ZSB0byBhdm9pZCBkaXZpc2lvbiBieSB6ZXJvLCBhbmQgbW92ZXMgbWVkaWFfaW5pdGlhbGl6ZWQgdG8gc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvLlxuXG5UaGUgc3RydWN0IGFsYXVkYV9pbmZvIGNvbnRhaW5pbmcgYWxhdWRhX21lZGlhX2luZm8gaXMgYWxsb2NhdGVkIHVzaW5nIGt6YWxsb2Nfb2JqKCksIGVuc3VyaW5nIGFsbCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQuIFBCQS9MQkEgbWFwcGluZyB0YWJsZXMgYXJlIGFsbG9jYXRlZCB2aWEga2NhbGxvYy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBTaW5jZSB0aGVzZSBjaGFuZ2VzIHN0cmljdGx5IGZpeCBtZW1vcnkgbGVha3MgYW5kIE5VTEwvemVyby1jaGVjayBzYWZldHkgaXNzdWVzLCB0aGV5IGRvIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvIG5vdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBtZW1vcnkgbGVha3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFuZCBwb3RlbnRpYWwgZGl2aXNpb24tYnktemVybyBlcnJvcnMgaW4gZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy4gU3BlY2lmaWNhbGx5LCBpdCBmcmVlcyB0aGUgb3V0ZXIgcG9pbnRlciBhcnJheXMgaW4gYWxhdWRhX2ZyZWVfbWFwcygpLCBhZGRzIGVycm9yIGNsZWFudXAgaW4gYWxhdWRhX2luaXRfbWVkaWEoKSwgYWRkcyBjaGVja3MgZm9yIE5VTEwgcG9pbnRlcnMgaW4gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoKSwgYWRkcyBjaGVja3MgZm9yIHplcm8gdXpvbmVzaXplIHRvIGF2b2lkIGRpdmlzaW9uIGJ5IHplcm8sIGFuZCBtb3ZlcyBtZWRpYV9pbml0aWFsaXplZCB0byBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8uXG5cblRoZSBzdHJ1Y3QgYWxhdWRhX2luZm8gY29udGFpbmluZyBhbGF1ZGFfbWVkaWFfaW5mbyBpcyBhbGxvY2F0ZWQgdXNpbmcga3phbGxvY19vYmooKSwgZW5zdXJpbmcgYWxsIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC4gUEJBL0xCQSBtYXBwaW5nIHRhYmxlcyBhcmUgYWxsb2NhdGVkIHZpYSBrY2FsbG9jLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFNpbmNlIHRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgZml4IG1lbW9yeSBsZWFrcyBhbmQgTlVMTC96ZXJvLWNoZWNrIHNhZmV0eSBpc3N1ZXMsIHRoZXkgZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG8gbm90IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0ODo0MC4wMzQxODk2NjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTMxNzc4MDc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfU1RPUkFHRV9BTEFVREFcIixcbiAgICBcIlVTQl9TVE9SQUdFXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIlNDU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGF1ZGFfdHJhbnNwb3J0XCIsXG4gICAgXCJhbGF1ZGFfcHJvYmVcIixcbiAgICBcImluaXRfYWxhdWRhXCIsXG4gICAgXCJhbGF1ZGFfY2hlY2tfbWVkaWFcIixcbiAgICBcImFsYXVkYV9yZWFkX2RhdGFcIixcbiAgICBcImFsYXVkYV93cml0ZV9kYXRhXCIsXG4gICAgXCJhbGF1ZGFfd3JpdGVfbGJhXCIsXG4gICAgXCJhbGF1ZGFfZnJlZV9tYXBzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgbWVtb3J5IGxlYWtzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbmQgcG90ZW50aWFsIGRpdmlzaW9uLWJ5LXplcm8gZXJyb3JzIGluIGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMuIFNwZWNpZmljYWxseSwgaXQgZnJlZXMgdGhlIG91dGVyIHBvaW50ZXIgYXJyYXlzIGluIGFsYXVkYV9mcmVlX21hcHMoKSwgYWRkcyBlcnJvciBjbGVhbnVwIGluIGFsYXVkYV9pbml0X21lZGlhKCksIGFkZHMgY2hlY2tzIGZvciBOVUxMIHBvaW50ZXJzIGluIGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKCksIGFkZHMgY2hlY2tzIGZvciB6ZXJvIHV6b25lc2l6ZSB0byBhdm9pZCBkaXZpc2lvbiBieSB6ZXJvLCBhbmQgbW92ZXMgbWVkaWFfaW5pdGlhbGl6ZWQgdG8gc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvLlxcblxcblRoZSBzdHJ1Y3QgYWxhdWRhX2luZm8gY29udGFpbmluZyBhbGF1ZGFfbWVkaWFfaW5mbyBpcyBhbGxvY2F0ZWQgdXNpbmcga3phbGxvY19vYmooKSwgZW5zdXJpbmcgYWxsIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC4gUEJBL0xCQSBtYXBwaW5nIHRhYmxlcyBhcmUgYWxsb2NhdGVkIHZpYSBrY2FsbG9jLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFNpbmNlIHRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgZml4IG1lbW9yeSBsZWFrcyBhbmQgTlVMTC96ZXJvLWNoZWNrIHNhZmV0eSBpc3N1ZXMsIHRoZXkgZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG8gbm90IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCB6ZXJvLWRpdmlzaW9uIGJ1Z3MsIG1lbW9yeSBsZWFrcywgYW5kIG1lZGlhIGluaXRpYWxpemF0aW9uIHN0YXRlIGhhbmRsaW5nIGFjcm9zcyB6b25lIG1hcCBhbGxvY2F0aW9ucyBhbmQgSS9PIGhhbmRsaW5nIGluIHRoZSBPbHltcHVzIE1BVVNCLTEwL0Z1amlmaWxtIERQQy1SMSAoQWxhdWRhKSBVU0IgbWFzcyBzdG9yYWdlIGRyaXZlci4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgdmlhIFVTQiBlbXVsYXRpb24vZnV6emluZyBmcmFtZXdvcmtzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0ODo0MC4wMzQxOTcxOTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDQ5NDQzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1M2EwYTYwNTFhN2I2ZjEyZGI1ZjhhNTJiYWRiNDdkYjgzNTBmNjlhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDI4IDIwOjQ4OjM4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jXFxuaW5kZXggNjkxZmU0NzAwOWNmNi4uYTJhMzMzNDE5ZjFmNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jXFxuKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1xcbkBAIC05Niw2ICs5Niw4IEBAIHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyB7XFxuIFxcbiBcXHR1MTYgKipsYmFfdG9fcGJhO1xcdFxcdC8qIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYmxvY2sgbWFwICovXFxuIFxcdHUxNiAqKnBiYV90b19sYmE7XFx0XFx0LyogcGh5c2ljYWwgdG8gbG9naWNhbCBibG9jayBtYXAgKi9cXG4rXFxuK1xcdGJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgYWxhdWRhX2luZm8ge1xcbkBAIC0xMDUsOCArMTA3LDYgQEAgc3RydWN0IGFsYXVkYV9pbmZvIHtcXG4gXFx0dW5zaWduZWQgY2hhciBzZW5zZV9rZXk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjO1xcdC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqL1xcbiBcXHR1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7XFx0LyogYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllciAqL1xcbi1cXG4tXFx0Ym9vbCBtZWRpYV9pbml0aWFsaXplZDtcXG4gfTtcXG4gXFxuICNkZWZpbmUgc2hvcnRfcGFjayhsc2IsbXNiKSAoICgodTE2KShsc2IpKSB8ICggKCh1MTYpKG1zYikpXFx1MDAzY1xcdTAwM2M4ICkgKVxcbkBAIC0yOTAsMTcgKzI5MCwyNSBAQCBzdGF0aWMgdm9pZCBhbGF1ZGFfZnJlZV9tYXBzIChzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gKm1lZGlhX2luZm8pXFxuIFxcdHVuc2lnbmVkIGludCBudW1fem9uZXMgPSBtZWRpYV9pbmZvLVxcdTAwM2VjYXBhY2l0eSBcXHUwMDNlXFx1MDAzZSBzaGlmdDtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuIFxcbi1cXHRpZiAobWVkaWFfaW5mby1cXHUwMDNlbGJhX3RvX3BiYSAhPSBOVUxMKVxcbitcXHRpZiAobWVkaWFfaW5mby1cXHUwMDNlbGJhX3RvX3BiYSAhPSBOVUxMKSB7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fem9uZXM7IGkrKykge1xcbiBcXHRcXHRcXHRrZnJlZShtZWRpYV9pbmZvLVxcdTAwM2VsYmFfdG9fcGJhW2ldKTtcXG4gXFx0XFx0XFx0bWVkaWFfaW5mby1cXHUwMDNlbGJhX3RvX3BiYVtpXSA9IE5VTEw7XFxuIFxcdFxcdH1cXG4rXFx0XFx0a2ZyZWUobWVkaWFfaW5mby1cXHUwMDNlbGJhX3RvX3BiYSk7XFxuK1xcdFxcdG1lZGlhX2luZm8tXFx1MDAzZWxiYV90b19wYmEgPSBOVUxMO1xcbitcXHR9XFxuIFxcbi1cXHRpZiAobWVkaWFfaW5mby1cXHUwMDNlcGJhX3RvX2xiYSAhPSBOVUxMKVxcbitcXHRpZiAobWVkaWFfaW5mby1cXHUwMDNlcGJhX3RvX2xiYSAhPSBOVUxMKSB7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fem9uZXM7IGkrKykge1xcbiBcXHRcXHRcXHRrZnJlZShtZWRpYV9pbmZvLVxcdTAwM2VwYmFfdG9fbGJhW2ldKTtcXG4gXFx0XFx0XFx0bWVkaWFfaW5mby1cXHUwMDNlcGJhX3RvX2xiYVtpXSA9IE5VTEw7XFxuIFxcdFxcdH1cXG4rXFx0XFx0a2ZyZWUobWVkaWFfaW5mby1cXHUwMDNlcGJhX3RvX2xiYSk7XFxuK1xcdFxcdG1lZGlhX2luZm8tXFx1MDAzZXBiYV90b19sYmEgPSBOVUxMO1xcbitcXHR9XFxuK1xcdG1lZGlhX2luZm8tXFx1MDAzZWNhcGFjaXR5ID0gMDtcXG4rXFx0bWVkaWFfaW5mby1cXHUwMDNldXpvbmVzaXplID0gMDtcXG4gfVxcbiBcXG4gLypcXG5AQCAtNDQxLDExICs0NDksMTUgQEAgc3RhdGljIGludCBhbGF1ZGFfaW5pdF9tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXFxuIFxcdFxcdCsgTUVESUFfSU5GTyh1cykuYmxvY2tzaGlmdCArIE1FRElBX0lORk8odXMpLnBhZ2VzaGlmdCk7XFxuIFxcdE1FRElBX0lORk8odXMpLnBiYV90b19sYmEgPSBrY2FsbG9jKG51bV96b25lcywgc2l6ZW9mKHUxNiopLCBHRlBfTk9JTyk7XFxuIFxcdE1FRElBX0lORk8odXMpLmxiYV90b19wYmEgPSBrY2FsbG9jKG51bV96b25lcywgc2l6ZW9mKHUxNiopLCBHRlBfTk9JTyk7XFxuLVxcdGlmIChNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID09IE5VTEwgfHwgTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9PSBOVUxMKVxcbitcXHRpZiAoTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYSA9PSBOVUxMIHx8IE1FRElBX0lORk8odXMpLmxiYV90b19wYmEgPT0gTlVMTCkge1xcbitcXHRcXHRhbGF1ZGFfZnJlZV9tYXBzKFxcdTAwMjZNRURJQV9JTkZPKHVzKSk7XFxuIFxcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XFxuK1xcdH1cXG4gXFxuLVxcdGlmIChhbGF1ZGFfcmVzZXRfbWVkaWEodXMpICE9IFVTQl9TVE9SX1hGRVJfR09PRClcXG4rXFx0aWYgKGFsYXVkYV9yZXNldF9tZWRpYSh1cykgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7XFxuK1xcdFxcdGFsYXVkYV9mcmVlX21hcHMoXFx1MDAyNk1FRElBX0lORk8odXMpKTtcXG4gXFx0XFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EO1xcbiB9XFxuQEAgLTQ1Nyw2ICs0NjksNyBAQCBzdGF0aWMgaW50IGFsYXVkYV9pbml0X21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG4gc3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxcbiB7XFxuIFxcdHN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYWxhdWRhX2luZm8gKikgdXMtXFx1MDAzZWV4dHJhO1xcbitcXHRzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gKm1lZGlhX2luZm8gPSBcXHUwMDI2TUVESUFfSU5GTyh1cyk7XFxuIFxcdHVuc2lnbmVkIGNoYXIgKnN0YXR1cyA9IHVzLVxcdTAwM2Vpb2J1ZjtcXG4gXFx0aW50IHJjO1xcbiBcXG5AQCAtNDcwLDcgKzQ4Myw4IEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG4gXFx0aWYgKChzdGF0dXNbMF0gXFx1MDAyNiAweDgwKSB8fCAoKHN0YXR1c1swXSBcXHUwMDI2IDB4MUYpID09IDB4MTApXFxuIFxcdFxcdHx8ICgoc3RhdHVzWzFdIFxcdTAwMjYgMHgwMSkgPT0gMCkpIHtcXG4gXFx0XFx0dXNiX3N0b3JfZGJnKHVzLCBcXFwiTm8gbWVkaWEsIG9yIGRvb3Igb3BlblxcXFxuXFxcIik7XFxuLVxcdFxcdGFsYXVkYV9mcmVlX21hcHMoXFx1MDAyNk1FRElBX0lORk8odXMpKTtcXG4rXFx0XFx0YWxhdWRhX2ZyZWVfbWFwcyhtZWRpYV9pbmZvKTtcXG4rXFx0XFx0bWVkaWFfaW5mby1cXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcXG4gXFx0XFx0aW5mby1cXHUwMDNlc2Vuc2Vfa2V5ID0gMHgwMjtcXG4gXFx0XFx0aW5mby1cXHUwMDNlc2Vuc2VfYXNjID0gMHgzQTtcXG4gXFx0XFx0aW5mby1cXHUwMDNlc2Vuc2VfYXNjcSA9IDB4MDA7XFxuQEAgLTQ3OCwxMiArNDkyLDEzIEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG4gXFx0fVxcbiBcXG4gXFx0LyogQ2hlY2sgZm9yIG1lZGlhIGNoYW5nZSAqL1xcbi1cXHRpZiAoc3RhdHVzWzBdIFxcdTAwMjYgMHgwOCB8fCAhaW5mby1cXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQpIHtcXG4rXFx0aWYgKHN0YXR1c1swXSBcXHUwMDI2IDB4MDggfHwgIW1lZGlhX2luZm8tXFx1MDAzZW1lZGlhX2luaXRpYWxpemVkKSB7XFxuIFxcdFxcdHVzYl9zdG9yX2RiZyh1cywgXFxcIk1lZGlhIGNoYW5nZSBkZXRlY3RlZFxcXFxuXFxcIik7XFxuLVxcdFxcdGFsYXVkYV9mcmVlX21hcHMoXFx1MDAyNk1FRElBX0lORk8odXMpKTtcXG4rXFx0XFx0YWxhdWRhX2ZyZWVfbWFwcyhtZWRpYV9pbmZvKTtcXG4rXFx0XFx0bWVkaWFfaW5mby1cXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcXG4gXFx0XFx0cmMgPSBhbGF1ZGFfaW5pdF9tZWRpYSh1cyk7XFxuIFxcdFxcdGlmIChyYyA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcXG4tXFx0XFx0XFx0aW5mby1cXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlO1xcbitcXHRcXHRcXHRtZWRpYV9pbmZvLVxcdTAwM2VtZWRpYV9pbml0aWFsaXplZCA9IHRydWU7XFxuIFxcdFxcdGluZm8tXFx1MDAzZXNlbnNlX2tleSA9IFVOSVRfQVRURU5USU9OO1xcbiBcXHRcXHRpbmZvLVxcdTAwM2VzZW5zZV9hc2MgPSAweDI4O1xcbiBcXHRcXHRpbmZvLVxcdTAwM2VzZW5zZV9hc2NxID0gMHgwMDtcXG5AQCAtNjg5LDExICs3MDQsMTYgQEAgc3RhdGljIGludCBhbGF1ZGFfcmVhZF9tYXAoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcXG4gICogQ2hlY2tzIHRvIHNlZSB3aGV0aGVyIHdlIGhhdmUgYWxyZWFkeSBtYXBwZWQgYSBjZXJ0YWluIHpvbmVcXG4gICogSWYgd2UgaGF2ZW4ndCwgdGhlIG1hcCBpcyBnZW5lcmF0ZWRcXG4gICovXFxuLXN0YXRpYyB2b2lkIGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHpvbmUpXFxuK3N0YXRpYyBpbnQgYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcXG4ge1xcbitcXHRpZiAoIU1FRElBX0lORk8odXMpLmxiYV90b19wYmEgfHwgIU1FRElBX0lORk8odXMpLnBiYV90b19sYmEpXFxuK1xcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XFxuK1xcbiBcXHRpZiAoTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYVt6b25lXSA9PSBOVUxMXFxuIFxcdFxcdHx8IE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV0gPT0gTlVMTClcXG4tXFx0XFx0YWxhdWRhX3JlYWRfbWFwKHVzLCB6b25lKTtcXG4rXFx0XFx0cmV0dXJuIGFsYXVkYV9yZWFkX21hcCh1cywgem9uZSk7XFxuK1xcbitcXHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTgxOSwxMSArODM5LDE5IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2xiYShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBsYmEsXFxuIFxcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xcbiBcXHR1bnNpZ25lZCBpbnQgcGFnZXNpemUgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZTtcXG4gXFx0dW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IE1FRElBX0lORk8odXMpLmJsb2Nrc2l6ZTtcXG4tXFx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQgPSBsYmEgJSB1em9uZXNpemU7XFxuK1xcdHVuc2lnbmVkIGludCBsYmFfb2Zmc2V0O1xcbiBcXHR1bnNpZ25lZCBpbnQgbmV3X3BiYV9vZmZzZXQ7XFxuLVxcdHVuc2lnbmVkIGludCB6b25lID0gbGJhIC8gdXpvbmVzaXplO1xcbitcXHR1bnNpZ25lZCBpbnQgem9uZTtcXG4gXFxuLVxcdGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHVzLCB6b25lKTtcXG4rXFx0aWYgKCF1em9uZXNpemUpXFxuK1xcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XFxuK1xcbitcXHRsYmFfb2Zmc2V0ID0gbGJhICUgdXpvbmVzaXplO1xcbitcXHR6b25lID0gbGJhIC8gdXpvbmVzaXplO1xcbitcXG4rXFx0cmVzdWx0ID0gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpO1xcbitcXHRpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKVxcbitcXHRcXHRyZXR1cm4gcmVzdWx0O1xcbiBcXG4gXFx0cGJhID0gTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYVt6b25lXVtsYmFfb2Zmc2V0XTtcXG4gXFx0aWYgKHBiYSA9PSAxKSB7XFxuQEAgLTkyNyw2ICs5NTUsOSBAQCBzdGF0aWMgaW50IGFsYXVkYV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuIFxcdGludCByZXN1bHQ7XFxuIFxcbitcXHRpZiAoIXV6b25lc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFNpbmNlIHdlIG9ubHkgcmVhZCBpbiBvbmUgYmxvY2sgYXQgYSB0aW1lLCB3ZSBoYXZlIHRvIGNyZWF0ZVxcbiBcXHQgKiBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGVcXG5AQCAtOTUwLDExICs5ODEsMTAgQEAgc3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbiBcXHRzZyA9IE5VTEw7XFxuIFxcbiBcXHR3aGlsZSAoc2VjdG9ycyBcXHUwMDNlIDApIHtcXG4tXFx0XFx0dW5zaWduZWQgaW50IHpvbmUgPSBsYmEgLyB1em9uZXNpemU7IC8qIGludGVnZXIgZGl2aXNpb24gKi9cXG4tXFx0XFx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQgPSBsYmEgLSAoem9uZSAqIHV6b25lc2l6ZSk7XFxuK1xcdFxcdHVuc2lnbmVkIGludCB6b25lO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgbGJhX29mZnNldDtcXG4gXFx0XFx0dW5zaWduZWQgaW50IHBhZ2VzO1xcbiBcXHRcXHR1MTYgcGJhO1xcbi1cXHRcXHRhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZSh1cywgem9uZSk7XFxuIFxcbiBcXHRcXHQvKiBOb3Qgb3ZlcmZsb3dpbmcgY2FwYWNpdHk/ICovXFxuIFxcdFxcdGlmIChsYmEgXFx1MDAzZT0gbWF4X2xiYSkge1xcbkBAIC05NjQsNiArOTk0LDEzIEBAIHN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdHpvbmUgPSBsYmEgLyB1em9uZXNpemU7IC8qIGludGVnZXIgZGl2aXNpb24gKi9cXG4rXFx0XFx0bGJhX29mZnNldCA9IGxiYSAtICh6b25lICogdXpvbmVzaXplKTtcXG4rXFxuK1xcdFxcdHJlc3VsdCA9IGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHVzLCB6b25lKTtcXG4rXFx0XFx0aWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHQvKiBGaW5kIG51bWJlciBvZiBwYWdlcyB3ZSBjYW4gcmVhZCBpbiB0aGlzIGJsb2NrICovXFxuIFxcdFxcdHBhZ2VzID0gbWluKHNlY3RvcnMsIGJsb2Nrc2l6ZSAtIHBhZ2UpO1xcbiBcXHRcXHRsZW4gPSBwYWdlcyBcXHUwMDNjXFx1MDAzYyBwYWdlc2hpZnQ7XFxuQEAgLTEwMjEsNiArMTA1OCw5IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIFxcdHUxNiBsYmEsIG1heF9sYmE7XFxuIFxcdGludCByZXN1bHQ7XFxuIFxcbitcXHRpZiAoIU1FRElBX0lORk8odXMpLnV6b25lc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFNpbmNlIHdlIGRvbid0IHdyaXRlIHRoZSB1c2VyIGRhdGEgZGlyZWN0bHkgdG8gdGhlIGRldmljZSxcXG4gXFx0ICogd2UgaGF2ZSB0byBjcmVhdGUgYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDg6NDEuNjQyMTgwMTM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNDE1MTUwMzYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfU1RPUkFHRV9BTEFVREFcIixcbiAgICBcIlVTQl9TVE9SQUdFXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIlNDU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGF1ZGFfdHJhbnNwb3J0XCIsXG4gICAgXCJhbGF1ZGFfcHJvYmVcIixcbiAgICBcImluaXRfYWxhdWRhXCIsXG4gICAgXCJhbGF1ZGFfY2hlY2tfbWVkaWFcIixcbiAgICBcImFsYXVkYV9yZWFkX2RhdGFcIixcbiAgICBcImFsYXVkYV93cml0ZV9kYXRhXCIsXG4gICAgXCJhbGF1ZGFfd3JpdGVfbGJhXCIsXG4gICAgXCJhbGF1ZGFfZnJlZV9tYXBzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIHplcm8tZGl2aXNpb24gYnVncywgbWVtb3J5IGxlYWtzLCBhbmQgbWVkaWEgaW5pdGlhbGl6YXRpb24gc3RhdGUgaGFuZGxpbmcgYWNyb3NzIHpvbmUgbWFwIGFsbG9jYXRpb25zIGFuZCBJL08gaGFuZGxpbmcgaW4gdGhlIE9seW1wdXMgTUFVU0ItMTAvRnVqaWZpbG0gRFBDLVIxIChBbGF1ZGEpIFVTQiBtYXNzIHN0b3JhZ2UgZHJpdmVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSB2aWEgVVNCIGVtdWxhdGlvbi9mdXp6aW5nIGZyYW1ld29ya3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUzYTBhNjA1MWE3YjZmMTJkYjVmOGE1MmJhZGI0N2RiODM1MGY2OWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyOCAyMDo0ODozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jXG5pbmRleCA2OTFmZTQ3MDA5Y2Y2Li5hMmEzMzM0MTlmMWY3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1xuKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1xuQEAgLTk2LDYgKzk2LDggQEAgc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvIHtcbiBcbiBcdHUxNiAqKmxiYV90b19wYmE7XHRcdC8qIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYmxvY2sgbWFwICovXG4gXHR1MTYgKipwYmFfdG9fbGJhO1x0XHQvKiBwaHlzaWNhbCB0byBsb2dpY2FsIGJsb2NrIG1hcCAqL1xuK1xuK1x0Ym9vbCBtZWRpYV9pbml0aWFsaXplZDtcbiB9O1xuIFxuIHN0cnVjdCBhbGF1ZGFfaW5mbyB7XG5AQCAtMTA1LDggKzEwNyw2IEBAIHN0cnVjdCBhbGF1ZGFfaW5mbyB7XG4gXHR1bnNpZ25lZCBjaGFyIHNlbnNlX2tleTtcbiBcdHVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjO1x0LyogYWRkaXRpb25hbCBzZW5zZSBjb2RlICovXG4gXHR1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7XHQvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyICovXG4tXG4tXHRib29sIG1lZGlhX2luaXRpYWxpemVkO1xuIH07XG4gXG4gI2RlZmluZSBzaG9ydF9wYWNrKGxzYixtc2IpICggKCh1MTYpKGxzYikpIHwgKCAoKHUxNikobXNiKSlcdTAwM2NcdTAwM2M4ICkgKVxuQEAgLTI5MCwxNyArMjkwLDI1IEBAIHN0YXRpYyB2b2lkIGFsYXVkYV9mcmVlX21hcHMgKHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyAqbWVkaWFfaW5mbylcbiBcdHVuc2lnbmVkIGludCBudW1fem9uZXMgPSBtZWRpYV9pbmZvLVx1MDAzZWNhcGFjaXR5IFx1MDAzZVx1MDAzZSBzaGlmdDtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuLVx0aWYgKG1lZGlhX2luZm8tXHUwMDNlbGJhX3RvX3BiYSAhPSBOVUxMKVxuK1x0aWYgKG1lZGlhX2luZm8tXHUwMDNlbGJhX3RvX3BiYSAhPSBOVUxMKSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV96b25lczsgaSsrKSB7XG4gXHRcdFx0a2ZyZWUobWVkaWFfaW5mby1cdTAwM2VsYmFfdG9fcGJhW2ldKTtcbiBcdFx0XHRtZWRpYV9pbmZvLVx1MDAzZWxiYV90b19wYmFbaV0gPSBOVUxMO1xuIFx0XHR9XG4rXHRcdGtmcmVlKG1lZGlhX2luZm8tXHUwMDNlbGJhX3RvX3BiYSk7XG4rXHRcdG1lZGlhX2luZm8tXHUwMDNlbGJhX3RvX3BiYSA9IE5VTEw7XG4rXHR9XG4gXG4tXHRpZiAobWVkaWFfaW5mby1cdTAwM2VwYmFfdG9fbGJhICE9IE5VTEwpXG4rXHRpZiAobWVkaWFfaW5mby1cdTAwM2VwYmFfdG9fbGJhICE9IE5VTEwpIHtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3pvbmVzOyBpKyspIHtcbiBcdFx0XHRrZnJlZShtZWRpYV9pbmZvLVx1MDAzZXBiYV90b19sYmFbaV0pO1xuIFx0XHRcdG1lZGlhX2luZm8tXHUwMDNlcGJhX3RvX2xiYVtpXSA9IE5VTEw7XG4gXHRcdH1cbitcdFx0a2ZyZWUobWVkaWFfaW5mby1cdTAwM2VwYmFfdG9fbGJhKTtcbitcdFx0bWVkaWFfaW5mby1cdTAwM2VwYmFfdG9fbGJhID0gTlVMTDtcbitcdH1cbitcdG1lZGlhX2luZm8tXHUwMDNlY2FwYWNpdHkgPSAwO1xuK1x0bWVkaWFfaW5mby1cdTAwM2V1em9uZXNpemUgPSAwO1xuIH1cbiBcbiAvKlxuQEAgLTQ0MSwxMSArNDQ5LDE1IEBAIHN0YXRpYyBpbnQgYWxhdWRhX2luaXRfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxuIFx0XHQrIE1FRElBX0lORk8odXMpLmJsb2Nrc2hpZnQgKyBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQpO1xuIFx0TUVESUFfSU5GTyh1cykucGJhX3RvX2xiYSA9IGtjYWxsb2MobnVtX3pvbmVzLCBzaXplb2YodTE2KiksIEdGUF9OT0lPKTtcbiBcdE1FRElBX0lORk8odXMpLmxiYV90b19wYmEgPSBrY2FsbG9jKG51bV96b25lcywgc2l6ZW9mKHUxNiopLCBHRlBfTk9JTyk7XG4tXHRpZiAoTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYSA9PSBOVUxMIHx8IE1FRElBX0lORk8odXMpLmxiYV90b19wYmEgPT0gTlVMTClcbitcdGlmIChNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID09IE5VTEwgfHwgTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9PSBOVUxMKSB7XG4rXHRcdGFsYXVkYV9mcmVlX21hcHMoXHUwMDI2TUVESUFfSU5GTyh1cykpO1xuIFx0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuK1x0fVxuIFxuLVx0aWYgKGFsYXVkYV9yZXNldF9tZWRpYSh1cykgIT0gVVNCX1NUT1JfWEZFUl9HT09EKVxuK1x0aWYgKGFsYXVkYV9yZXNldF9tZWRpYSh1cykgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7XG4rXHRcdGFsYXVkYV9mcmVlX21hcHMoXHUwMDI2TUVESUFfSU5GTyh1cykpO1xuIFx0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuK1x0fVxuIFxuIFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EO1xuIH1cbkBAIC00NTcsNiArNDY5LDcgQEAgc3RhdGljIGludCBhbGF1ZGFfaW5pdF9tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4gc3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxuIHtcbiBcdHN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYWxhdWRhX2luZm8gKikgdXMtXHUwMDNlZXh0cmE7XG4rXHRzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gKm1lZGlhX2luZm8gPSBcdTAwMjZNRURJQV9JTkZPKHVzKTtcbiBcdHVuc2lnbmVkIGNoYXIgKnN0YXR1cyA9IHVzLVx1MDAzZWlvYnVmO1xuIFx0aW50IHJjO1xuIFxuQEAgLTQ3MCw3ICs0ODMsOCBAQCBzdGF0aWMgaW50IGFsYXVkYV9jaGVja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4gXHRpZiAoKHN0YXR1c1swXSBcdTAwMjYgMHg4MCkgfHwgKChzdGF0dXNbMF0gXHUwMDI2IDB4MUYpID09IDB4MTApXG4gXHRcdHx8ICgoc3RhdHVzWzFdIFx1MDAyNiAweDAxKSA9PSAwKSkge1xuIFx0XHR1c2Jfc3Rvcl9kYmcodXMsIFwiTm8gbWVkaWEsIG9yIGRvb3Igb3BlblxcblwiKTtcbi1cdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG4rXHRcdGFsYXVkYV9mcmVlX21hcHMobWVkaWFfaW5mbyk7XG4rXHRcdG1lZGlhX2luZm8tXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9rZXkgPSAweDAyO1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2FzYyA9IDB4M0E7XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2VfYXNjcSA9IDB4MDA7XG5AQCAtNDc4LDEyICs0OTIsMTMgQEAgc3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxuIFx0fVxuIFxuIFx0LyogQ2hlY2sgZm9yIG1lZGlhIGNoYW5nZSAqL1xuLVx0aWYgKHN0YXR1c1swXSBcdTAwMjYgMHgwOCB8fCAhaW5mby1cdTAwM2VtZWRpYV9pbml0aWFsaXplZCkge1xuK1x0aWYgKHN0YXR1c1swXSBcdTAwMjYgMHgwOCB8fCAhbWVkaWFfaW5mby1cdTAwM2VtZWRpYV9pbml0aWFsaXplZCkge1xuIFx0XHR1c2Jfc3Rvcl9kYmcodXMsIFwiTWVkaWEgY2hhbmdlIGRldGVjdGVkXFxuXCIpO1xuLVx0XHRhbGF1ZGFfZnJlZV9tYXBzKFx1MDAyNk1FRElBX0lORk8odXMpKTtcbitcdFx0YWxhdWRhX2ZyZWVfbWFwcyhtZWRpYV9pbmZvKTtcbitcdFx0bWVkaWFfaW5mby1cdTAwM2VtZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xuIFx0XHRyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTtcbiBcdFx0aWYgKHJjID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKVxuLVx0XHRcdGluZm8tXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlO1xuK1x0XHRcdG1lZGlhX2luZm8tXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlO1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2tleSA9IFVOSVRfQVRURU5USU9OO1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2FzYyA9IDB4Mjg7XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2VfYXNjcSA9IDB4MDA7XG5AQCAtNjg5LDExICs3MDQsMTYgQEAgc3RhdGljIGludCBhbGF1ZGFfcmVhZF9tYXAoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcbiAgKiBDaGVja3MgdG8gc2VlIHdoZXRoZXIgd2UgaGF2ZSBhbHJlYWR5IG1hcHBlZCBhIGNlcnRhaW4gem9uZVxuICAqIElmIHdlIGhhdmVuJ3QsIHRoZSBtYXAgaXMgZ2VuZXJhdGVkXG4gICovXG4tc3RhdGljIHZvaWQgYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcbitzdGF0aWMgaW50IGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHpvbmUpXG4ge1xuK1x0aWYgKCFNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhIHx8ICFNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhKVxuK1x0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuK1xuIFx0aWYgKE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV0gPT0gTlVMTFxuIFx0XHR8fCBNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhW3pvbmVdID09IE5VTEwpXG4tXHRcdGFsYXVkYV9yZWFkX21hcCh1cywgem9uZSk7XG4rXHRcdHJldHVybiBhbGF1ZGFfcmVhZF9tYXAodXMsIHpvbmUpO1xuK1xuK1x0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EO1xuIH1cbiBcbiAvKlxuQEAgLTgxOSwxMSArODM5LDE5IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2xiYShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBsYmEsXG4gXHR1bnNpZ25lZCBpbnQgem9uZXNpemUgPSBNRURJQV9JTkZPKHVzKS56b25lc2l6ZTtcbiBcdHVuc2lnbmVkIGludCBwYWdlc2l6ZSA9IE1FRElBX0lORk8odXMpLnBhZ2VzaXplO1xuIFx0dW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IE1FRElBX0lORk8odXMpLmJsb2Nrc2l6ZTtcbi1cdHVuc2lnbmVkIGludCBsYmFfb2Zmc2V0ID0gbGJhICUgdXpvbmVzaXplO1xuK1x0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQ7XG4gXHR1bnNpZ25lZCBpbnQgbmV3X3BiYV9vZmZzZXQ7XG4tXHR1bnNpZ25lZCBpbnQgem9uZSA9IGxiYSAvIHV6b25lc2l6ZTtcbitcdHVuc2lnbmVkIGludCB6b25lO1xuIFxuLVx0YWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpO1xuK1x0aWYgKCF1em9uZXNpemUpXG4rXHRcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XG4rXG4rXHRsYmFfb2Zmc2V0ID0gbGJhICUgdXpvbmVzaXplO1xuK1x0em9uZSA9IGxiYSAvIHV6b25lc2l6ZTtcbitcbitcdHJlc3VsdCA9IGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHVzLCB6b25lKTtcbitcdGlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG4rXHRcdHJldHVybiByZXN1bHQ7XG4gXG4gXHRwYmEgPSBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdW2xiYV9vZmZzZXRdO1xuIFx0aWYgKHBiYSA9PSAxKSB7XG5AQCAtOTI3LDYgKzk1NSw5IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XG4gXHRpbnQgcmVzdWx0O1xuIFxuK1x0aWYgKCF1em9uZXNpemUpXG4rXHRcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XG4rXG4gXHQvKlxuIFx0ICogU2luY2Ugd2Ugb25seSByZWFkIGluIG9uZSBibG9jayBhdCBhIHRpbWUsIHdlIGhhdmUgdG8gY3JlYXRlXG4gXHQgKiBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGVcbkBAIC05NTAsMTEgKzk4MSwxMCBAQCBzdGF0aWMgaW50IGFsYXVkYV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXHRzZyA9IE5VTEw7XG4gXG4gXHR3aGlsZSAoc2VjdG9ycyBcdTAwM2UgMCkge1xuLVx0XHR1bnNpZ25lZCBpbnQgem9uZSA9IGxiYSAvIHV6b25lc2l6ZTsgLyogaW50ZWdlciBkaXZpc2lvbiAqL1xuLVx0XHR1bnNpZ25lZCBpbnQgbGJhX29mZnNldCA9IGxiYSAtICh6b25lICogdXpvbmVzaXplKTtcbitcdFx0dW5zaWduZWQgaW50IHpvbmU7XG4rXHRcdHVuc2lnbmVkIGludCBsYmFfb2Zmc2V0O1xuIFx0XHR1bnNpZ25lZCBpbnQgcGFnZXM7XG4gXHRcdHUxNiBwYmE7XG4tXHRcdGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHVzLCB6b25lKTtcbiBcbiBcdFx0LyogTm90IG92ZXJmbG93aW5nIGNhcGFjaXR5PyAqL1xuIFx0XHRpZiAobGJhIFx1MDAzZT0gbWF4X2xiYSkge1xuQEAgLTk2NCw2ICs5OTQsMTMgQEAgc3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4rXHRcdHpvbmUgPSBsYmEgLyB1em9uZXNpemU7IC8qIGludGVnZXIgZGl2aXNpb24gKi9cbitcdFx0bGJhX29mZnNldCA9IGxiYSAtICh6b25lICogdXpvbmVzaXplKTtcbitcbitcdFx0cmVzdWx0ID0gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpO1xuK1x0XHRpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKVxuK1x0XHRcdGJyZWFrO1xuK1xuIFx0XHQvKiBGaW5kIG51bWJlciBvZiBwYWdlcyB3ZSBjYW4gcmVhZCBpbiB0aGlzIGJsb2NrICovXG4gXHRcdHBhZ2VzID0gbWluKHNlY3RvcnMsIGJsb2Nrc2l6ZSAtIHBhZ2UpO1xuIFx0XHRsZW4gPSBwYWdlcyBcdTAwM2NcdTAwM2MgcGFnZXNoaWZ0O1xuQEAgLTEwMjEsNiArMTA1OCw5IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXHR1MTYgbGJhLCBtYXhfbGJhO1xuIFx0aW50IHJlc3VsdDtcbiBcbitcdGlmICghTUVESUFfSU5GTyh1cykudXpvbmVzaXplKVxuK1x0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuK1xuIFx0LypcbiBcdCAqIFNpbmNlIHdlIGRvbid0IHdyaXRlIHRoZSB1c2VyIGRhdGEgZGlyZWN0bHkgdG8gdGhlIGRldmljZSxcbiBcdCAqIHdlIGhhdmUgdG8gY3JlYXRlIGEgYm91bmNlIGJ1ZmZlciBhbmQgbW92ZSB0aGUgZGF0YSBhIHBpZWNlXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0ODo0MS42NDIxODM0ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTAyMjY2MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBTdG9yYWdlIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIGEgcGF0Y2ggaGFzIGhpdCBteSBkZXNrIGFuZCBpdCdzIHRvdWNoaW5nIGBkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jYC4gTXkgaW5pdGlhbCByZWFjdGlvbj8gTGV0J3MgZGl2ZSBpbi4gVGhpcyByZXF1aXJlcyBhIHN5c3RlbWF0aWMgYXBwcm9hY2guIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqZXhhY3RseSogd2hhdCdzIGJlZW4gY2hhbmdlZCDigJMgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIHR3ZWFrZWQsIGFkZGVkLCBvciByZW1vdmVkLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIOKAkyBsaWtlbHkgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIOKAkyB0byBxdWlja2x5IHNjYW4gdGhlIEtjb25maWcgb3B0aW9ucyB3aXRoaW4gdGhlIGBkcml2ZXJzL3VzYi9zdG9yYWdlL2AgZGlyZWN0b3J5LiBJJ20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCB3aGV0aGVyIHRoaXMgYGFsYXVkYS5jYCBkcml2ZXIgaXMgZXZlbiBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlcmUgYXJlIHNwZWNpZmljIHNldHRpbmdzIHRoYXQgY29udHJvbCBpdHMgaW5jbHVzaW9uLiBUaGVuLCBhbmQgb25seSB0aGVuLCBjYW4gSSBkZXRlcm1pbmUgaWYgdGhpcyBtb2R1bGUgaXMgZXZlbiAqcmVhY2hhYmxlKiBhbmQgd29ydGh5IG9mIGF0dGVudGlvbiwgaW4gdGVybXMgb2YgZnV6emluZy4gSXMgaXQgcGFydCBvZiB0aGUgZGVmYXVsdCBrZXJuZWwgY29uZmlndXJhdGlvbj8gQXJlIHRoZXJlIHNwZWNpZmljIGhhcmR3YXJlIHJlcXVpcmVtZW50cyB0aGF0IG1ha2UgaXQgbGVzcyBpbnRlcmVzdGluZz8gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEl0IHdpbGwgYmUgd29ydGggc2VlaW5nIGlmIHRoZSBjaGFuZ2VzIGNvdWxkIGJlIHZ1bG5lcmFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1OTUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjQ4OjQ2Ljc0NDQ3NTk1OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTI1MjY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGF1ZGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc9MTI3PWNvbmZpZyBVU0JfU1RPUkFHRV9BTEFVREFcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMzUtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjEzNjpcXHQgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1hbGF1ZGEuXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEzNy1cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGU9MTk9dXNiLXN0b3JhZ2UtJChDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcpICs9IGRlYnVnLm9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlLTIwLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSlcXHQrPSB1bXMtYWxhdWRhLm9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCKSArPSB1bXMtY3lwcmVzcy5vXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlPTMzPW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVClcXHRcXHQrPSB1bXMtdXNiYXQub1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUtMzQtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZTozNTp1bXMtYWxhdWRhLXlcXHRcXHQ6PSBhbGF1ZGEub1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUtMzYtdW1zLWN5cHJlc3MteVxcdFxcdDo9IGN5cHJlc3NfYXRhY2Iub1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xNy0gKlxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTg6ICogRm9yIHByb3RvY29sIGluZm8sIHNlZSBodHRwOi8vYWxhdWRhLnNvdXJjZWZvcmdlLm5ldFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTktICovXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTMzLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MzQ6I2RlZmluZSBEUlZfTkFNRSBcXFwidW1zLWFsYXVkYVxcXCJcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTM1LVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0zOT1NT0RVTEVfSU1QT1JUX05TKFxcXCJVU0JfU1RPUkFHRVxcXCIpO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjg1OnN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyB7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04Ni1cXHR1bnNpZ25lZCBsb25nIGNhcGFjaXR5O1xcdFxcdC8qIHRvdGFsIG1lZGlhIHNpemUgaW4gYnl0ZXMgKi9cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTAyLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTAzOnN0cnVjdCBhbGF1ZGFfaW5mbyB7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMDQ6XFx0c3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvIHBvcnRbMl07XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDUtXFx0aW50IHdyX2VwO1xcdFxcdFxcdC8qIGVuZHBvaW50IHRvIHdyaXRlIGRhdGEgb3V0IG9mICovXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNi0jZGVmaW5lIE1FRElBX1BPUlQodXMpIHVzLVxcdTAwM2VzcmItXFx1MDAzZWRldmljZS1cXHUwMDNlbHVuXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTc6I2RlZmluZSBNRURJQV9JTkZPKHVzKSAoKHN0cnVjdCBhbGF1ZGFfaW5mbyAqKXVzLVxcdTAwM2VleHRyYSktXFx1MDAzZXBvcnRbTUVESUFfUE9SVCh1cyldXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTgtXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyMi1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyMzpzdGF0aWMgaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cyk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjQtXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEzNC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEzNTpzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgYWxhdWRhX3VzYl9pZHNbXSA9IHtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEzNjojXFx0aW5jbHVkZSBcXFwidW51c3VhbF9hbGF1ZGEuaFxcXCJcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEzNy1cXHR7IH1cXHRcXHQvKiBUZXJtaW5hdGluZyBlbnRyeSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTM4LX07XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMzk6TU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGFsYXVkYV91c2JfaWRzKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTE0MC1cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTU2LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTU3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgYWxhdWRhX3VudXN1YWxfZGV2X2xpc3RbXSA9IHtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjE1ODojXFx0aW5jbHVkZSBcXFwidW51c3VhbF9hbGF1ZGEuaFxcXCJcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTE1OS1cXHR7IH1cXHRcXHQvKiBUZXJtaW5hdGluZyBlbnRyeSAqL1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xNjgtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxNjk6c3RydWN0IGFsYXVkYV9jYXJkX2luZm8ge1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTcwLVxcdHVuc2lnbmVkIGNoYXIgaWQ7XFx0XFx0LyogaWQgYnl0ZSAqL1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xNzYtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxNzc6c3RhdGljIGNvbnN0IHN0cnVjdCBhbGF1ZGFfY2FyZF9pbmZvIGFsYXVkYV9jYXJkX2lkc1tdID0ge1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTc4LVxcdC8qIE5BTkQgZmxhc2ggKi9cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjAyLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MjAzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYWxhdWRhX2NhcmRfaW5mbyAqYWxhdWRhX2NhcmRfZmluZF9pZCh1bnNpZ25lZCBjaGFyIGlkKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjA0LXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjA2LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MjA3OlxcdGZvciAoaSA9IDA7IGFsYXVkYV9jYXJkX2lkc1tpXS5pZCAhPSAwOyBpKyspXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoyMDg6XFx0XFx0aWYgKGFsYXVkYV9jYXJkX2lkc1tpXS5pZCA9PSBpZClcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjIwOTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNihhbGF1ZGFfY2FyZF9pZHNbaV0pO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjEwLVxcdHJldHVybiBOVUxMO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0yNzQ9c3RhdGljIHZvaWQgbmFuZF9zdG9yZV9lY2ModW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgY2hhciAqZWNjKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yODUtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoyODY6c3RhdGljIHZvaWQgYWxhdWRhX2ZyZWVfbWFwcyAoc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICptZWRpYV9pbmZvKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjg3LXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzE3LSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MzE4OnN0YXRpYyBpbnQgYWxhdWRhX2dldF9tZWRpYV9zdGF0dXMoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBjaGFyICpkYXRhKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzE5LXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzQwLSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MzQxOnN0YXRpYyBpbnQgYWxhdWRhX2Fja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNDIte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNTctICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzozNTg6c3RhdGljIGludCBhbGF1ZGFfZ2V0X21lZGlhX3NpZ25hdHVyZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNTkte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNzMtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzozNzQ6c3RhdGljIGludCBhbGF1ZGFfcmVzZXRfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzc1LXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzg5LSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MzkwOnN0YXRpYyBpbnQgYWxhdWRhX2luaXRfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzkxLXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzkzLVxcdGludCByZWFkeSA9IDA7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzozOTQ6XFx0Y29uc3Qgc3RydWN0IGFsYXVkYV9jYXJkX2luZm8gKm1lZGlhX2luZm87XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zOTUtXFx0dW5zaWduZWQgaW50IG51bV96b25lcztcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzk5LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDAwOlxcdFxcdGlmIChhbGF1ZGFfZ2V0X21lZGlhX3N0YXR1cyh1cywgZGF0YSkgIT0gVVNCX1NUT1JfWEZFUl9HT09EKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDAxLVxcdFxcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQwOC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQwOTpcXHRpZiAoYWxhdWRhX2Fja19tZWRpYSh1cykgIT0gVVNCX1NUT1JfWEZFUl9HT09EKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDEwLVxcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQxMy1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQxNDpcXHRpZiAoYWxhdWRhX2dldF9tZWRpYV9zdGF0dXModXMsIGRhdGEpICE9IFVTQl9TVE9SX1hGRVJfR09PRClcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQxNS1cXHRcXHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MjEtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MjI6XFx0aWYgKGFsYXVkYV9nZXRfbWVkaWFfc2lnbmF0dXJlKHVzLCBkYXRhKSAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MjMtXFx0XFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDI1LVxcdHVzYl9zdG9yX2RiZyh1cywgXFxcIk1lZGlhIHNpZ25hdHVyZTogJTRwaFxcXFxuXFxcIiwgZGF0YSk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MjY6XFx0bWVkaWFfaW5mbyA9IGFsYXVkYV9jYXJkX2ZpbmRfaWQoZGF0YVsxXSk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MjctXFx0aWYgKG1lZGlhX2luZm8gPT0gTlVMTCkge1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDI4OlxcdFxcdHByX3dhcm4oXFxcImFsYXVkYV9pbml0X21lZGlhOiBVbnJlY29nbmlzZWQgbWVkaWEgc2lnbmF0dXJlOiAlNHBoXFxcXG5cXFwiLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDI5LVxcdFxcdFxcdGRhdGEpO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NTItXFx0aWYgKE1FRElBX0lORk8odXMpLnBiYV90b19sYmEgPT0gTlVMTCB8fCBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhID09IE5VTEwpIHtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ1MzpcXHRcXHRhbGF1ZGFfZnJlZV9tYXBzKFxcdTAwMjZNRURJQV9JTkZPKHVzKSk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NTQtXFx0XFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDU2LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDU3OlxcdGlmIChhbGF1ZGFfcmVzZXRfbWVkaWEodXMpICE9IFVTQl9TVE9SX1hGRVJfR09PRCkge1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDU4OlxcdFxcdGFsYXVkYV9mcmVlX21hcHMoXFx1MDAyNk1FRElBX0lORk8odXMpKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ1OS1cXHRcXHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NjgtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0Njk6c3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDcwLXtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ3MTpcXHRzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIHVzLVxcdTAwM2VleHRyYTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ3MjpcXHRzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gKm1lZGlhX2luZm8gPSBcXHUwMDI2TUVESUFfSU5GTyh1cyk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NzMtXFx0dW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtXFx1MDAzZWlvYnVmO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NzUtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NzY6XFx0cmMgPSBhbGF1ZGFfZ2V0X21lZGlhX3N0YXR1cyh1cywgc3RhdHVzKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ3Ny1cXHRpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4NS1cXHRcXHR1c2Jfc3Rvcl9kYmcodXMsIFxcXCJObyBtZWRpYSwgb3IgZG9vciBvcGVuXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ4NjpcXHRcXHRhbGF1ZGFfZnJlZV9tYXBzKG1lZGlhX2luZm8pO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDg3LVxcdFxcdG1lZGlhX2luZm8tXFx1MDAzZW1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ5Ni1cXHRcXHR1c2Jfc3Rvcl9kYmcodXMsIFxcXCJNZWRpYSBjaGFuZ2UgZGV0ZWN0ZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDk3OlxcdFxcdGFsYXVkYV9mcmVlX21hcHMobWVkaWFfaW5mbyk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00OTgtXFx0XFx0bWVkaWFfaW5mby1cXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ5OTpcXHRcXHRyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTUwMC1cXHRcXHRpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTUxNC0gKi9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjUxNTpzdGF0aWMgaW50IGFsYXVkYV9jaGVja19zdGF0dXMyKHN0cnVjdCB1c19kYXRhICp1cylcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTUxNi17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU0NC0gKi9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjU0NTpzdGF0aWMgaW50IGFsYXVkYV9nZXRfcmVkdV9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSwgdW5zaWduZWQgY2hhciAqZGF0YSlcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU0Ni17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU2NS0gKi9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjU2NjpzdGF0aWMgdTE2IGFsYXVkYV9maW5kX3VudXNlZF9wYmEoc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICppbmZvLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTY3LVxcdHVuc2lnbmVkIGludCB6b25lKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01ODItICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo1ODM6c3RhdGljIGludCBhbGF1ZGFfcmVhZF9tYXAoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU4NC17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTYwOC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjYwOTpcXHRcXHRyZXN1bHQgPSBhbGF1ZGFfZ2V0X3JlZHVfZGF0YSh1cywgYmxvY2tudW0sIGRhdGEpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjEwLVxcdFxcdGlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTY1MS1cXHRcXHRcXHRwcmludGsoS0VSTl9XQVJOSU5HXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo2NTI6XFx0XFx0XFx0ICAgICAgIFxcXCJhbGF1ZGFfcmVhZF9tYXA6IEJhZCBwYXJpdHkgaW4gTEJBIGZvciBibG9jayAlZFxcXCJcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTY1My1cXHRcXHRcXHQgICAgICAgXFxcIiAoJTAyWCAlMDJYKVxcXFxuXFxcIiwgaSwgZGF0YVs2XSwgZGF0YVs3XSk7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTY3Mi1cXHRcXHRcXHRwcmludGsoS0VSTl9XQVJOSU5HXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo2NzM6XFx0XFx0XFx0ICAgICAgIFxcXCJhbGF1ZGFfcmVhZF9tYXA6IEJhZCBsb3cgTEJBICVkIGZvciBibG9jayAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTY3NC1cXHRcXHRcXHQgICAgICAgbGJhX3JlYWwsIGJsb2NrbnVtKTtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjc5LVxcdFxcdFxcdHByaW50ayhLRVJOX1dBUk5JTkdcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjY4MDpcXHRcXHRcXHQgICAgICAgXFxcImFsYXVkYV9yZWFkX21hcDogXFxcIlxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjgxLVxcdFxcdFxcdCAgICAgICBcXFwiTEJBICVkIHNlZW4gZm9yIFBCQSAlZCBhbmQgJWRcXFxcblxcXCIsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTcwNi0gKi9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjcwNzpzdGF0aWMgaW50IGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHpvbmUpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03MDgte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03MTMtXFx0XFx0fHwgTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXSA9PSBOVUxMKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzE0OlxcdFxcdHJldHVybiBhbGF1ZGFfcmVhZF9tYXAodXMsIHpvbmUpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzE1LVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03MjEtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3MjI6c3RhdGljIGludCBhbGF1ZGFfZXJhc2VfYmxvY2soc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgcGJhKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzIzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzUwLSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzUxOnN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfYmxvY2tfcmF3KHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSxcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc1Mi1cXHRcXHR1bnNpZ25lZCBpbnQgcGFnZSwgdW5zaWduZWQgaW50IHBhZ2VzLCB1bnNpZ25lZCBjaGFyICpkYXRhKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03NzYtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3Nzc6c3RhdGljIGludCBhbGF1ZGFfcmVhZF9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03NzgtXFx0XFx0dW5zaWduZWQgaW50IHBhZ2UsIHVuc2lnbmVkIGludCBwYWdlcywgdW5zaWduZWQgY2hhciAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzgyLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzgzOlxcdHJjID0gYWxhdWRhX3JlYWRfYmxvY2tfcmF3KHVzLCBwYmEsIHBhZ2UsIHBhZ2VzLCBkYXRhKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc4NC1cXHRpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MDEtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4MDI6c3RhdGljIGludCBhbGF1ZGFfd3JpdGVfYmxvY2soc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgcGJhLCB1bnNpZ25lZCBjaGFyICpkYXRhKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODAzLXtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgwNC1cXHRpbnQgcmM7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4MDU6XFx0c3RydWN0IGFsYXVkYV9pbmZvICppbmZvID0gKHN0cnVjdCBhbGF1ZGFfaW5mbyAqKSB1cy1cXHUwMDNlZXh0cmE7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MDYtXFx0dW5zaWduZWQgY2hhciBjb21tYW5kW10gPSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgyMy1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgyNDpcXHRyZXR1cm4gYWxhdWRhX2NoZWNrX3N0YXR1czIodXMpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODI1LX1cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODI5LSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODMwOnN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2xiYShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBsYmEsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MzEtXFx0XFx0IHVuc2lnbmVkIGludCBwYWdlLCB1bnNpZ25lZCBpbnQgcGFnZXMsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg1MS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjg1MjpcXHRyZXN1bHQgPSBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZSh1cywgem9uZSk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NTMtXFx0aWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODYyLVxcdFxcdHByaW50ayhLRVJOX1dBUk5JTkdcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjg2MzpcXHRcXHQgICAgICAgXFxcImFsYXVkYV93cml0ZV9sYmE6IGF2b2lkIHdyaXRpbmcgdG8gcGJhIDFcXFxcblxcXCIpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODY0LVxcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODY2LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODY3OlxcdG5ld19wYmEgPSBhbGF1ZGFfZmluZF91bnVzZWRfcGJhKFxcdTAwMjZNRURJQV9JTkZPKHVzKSwgem9uZSk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NjgtXFx0aWYgKCFuZXdfcGJhKSB7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NjktXFx0XFx0cHJpbnRrKEtFUk5fV0FSTklOR1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODcwOlxcdFxcdCAgICAgICBcXFwiYWxhdWRhX3dyaXRlX2xiYTogT3V0IG9mIHVudXNlZCBibG9ja3NcXFxcblxcXCIpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODcxLVxcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg3NS1cXHRpZiAocGJhICE9IFVOREVGKSB7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4NzY6XFx0XFx0cmVzdWx0ID0gYWxhdWRhX3JlYWRfYmxvY2tfcmF3KHVzLCBwYmEsIDAsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NzctXFx0XFx0XFx0YmxvY2tzaXplLCBibG9ja2J1ZmZlcik7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTkyMC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkyMTpcXHRyZXN1bHQgPSBhbGF1ZGFfd3JpdGVfYmxvY2sodXMsIG5ld19wYmEsIGJsb2NrYnVmZmVyKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTkyMi1cXHRpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRClcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTMxLVxcdFxcdHVuc2lnbmVkIGludCBwYmFfb2Zmc2V0ID0gcGJhIC0gKHpvbmUgKiB6b25lc2l6ZSk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5MzI6XFx0XFx0cmVzdWx0ID0gYWxhdWRhX2VyYXNlX2Jsb2NrKHVzLCBwYmEpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTMzLVxcdFxcdGlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05NDMtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5NDQ6c3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTQ1LVxcdFxcdHVuc2lnbmVkIGludCBzZWN0b3JzKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05OTktXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMDAwOlxcdFxcdHJlc3VsdCA9IGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHVzLCB6b25lKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwMDEtXFx0XFx0aWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTAyNi1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwMjc6XFx0XFx0XFx0cmVzdWx0ID0gYWxhdWRhX3JlYWRfYmxvY2sodXMsIHBiYSwgcGFnZSwgcGFnZXMsIGJ1ZmZlcik7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDI4LVxcdFxcdFxcdGlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwNDctICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMDQ4OnN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDQ5LVxcdFxcdHVuc2lnbmVkIGludCBzZWN0b3JzKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTEwLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTExMTpcXHRcXHRyZXN1bHQgPSBhbGF1ZGFfd3JpdGVfbGJhKHVzLCBsYmEsIHBhZ2UsIHBhZ2VzLCBidWZmZXIsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTEyLVxcdFxcdFxcdGJsb2NrYnVmZmVyKTtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTEyOS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExMzA6c3RhdGljIHZvaWQgYWxhdWRhX2luZm9fZGVzdHJ1Y3Rvcih2b2lkICpleHRyYSlcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExMzEte1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTEzMjpcXHRzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIGV4dHJhO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTEzMy1cXHRpbnQgcG9ydDtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTEzOC1cXHRmb3IgKHBvcnQgPSAwOyBwb3J0IFxcdTAwM2MgMjsgcG9ydCsrKSB7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTM5OlxcdFxcdHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyAqbWVkaWFfaW5mbyA9IFxcdTAwMjZpbmZvLVxcdTAwM2Vwb3J0W3BvcnRdO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE0MC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNDE6XFx0XFx0YWxhdWRhX2ZyZWVfbWFwcyhtZWRpYV9pbmZvKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNDItXFx0XFx0a2ZyZWUobWVkaWFfaW5mby1cXHUwMDNlbGJhX3RvX3BiYSk7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNDctLypcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNDg6ICogSW5pdGlhbGl6ZSBhbGF1ZGFfaW5mbyBzdHJ1Y3QgYW5kIGZpbmQgdGhlIGRhdGEtd3JpdGUgZW5kcG9pbnRcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNDktICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTUwOnN0YXRpYyBpbnQgaW5pdF9hbGF1ZGEoc3RydWN0IHVzX2RhdGEgKnVzKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE1MS17XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTUyOlxcdHN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbztcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNTMtXFx0c3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0c2V0dGluZyA9IHVzLVxcdTAwM2VwdXNiX2ludGYtXFx1MDAzZWN1cl9hbHRzZXR0aW5nO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTU1LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE1NjpcXHR1cy1cXHUwMDNlZXh0cmEgPSBremFsbG9jX29iaihzdHJ1Y3QgYWxhdWRhX2luZm8sIEdGUF9OT0lPKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNTctXFx0aWYgKCF1cy1cXHUwMDNlZXh0cmEpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNTktXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTYwOlxcdGluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIHVzLVxcdTAwM2VleHRyYTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNjE6XFx0dXMtXFx1MDAzZWV4dHJhX2Rlc3RydWN0b3IgPSBhbGF1ZGFfaW5mb19kZXN0cnVjdG9yO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE2Mi1cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE2OS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNzA6c3RhdGljIGludCBhbGF1ZGFfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE3MS17XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTcyLVxcdGludCByYztcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNzM6XFx0c3RydWN0IGFsYXVkYV9pbmZvICppbmZvID0gKHN0cnVjdCBhbGF1ZGFfaW5mbyAqKSB1cy1cXHUwMDNlZXh0cmE7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTc0LVxcdHVuc2lnbmVkIGNoYXIgKnB0ciA9IHVzLVxcdTAwM2Vpb2J1ZjtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE4Ny1cXHRcXHR1c2Jfc3Rvcl9kYmcodXMsIFxcXCJURVNUX1VOSVRfUkVBRFlcXFxcblxcXCIpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE4ODpcXHRcXHRyZXR1cm4gYWxhdWRhX2NoZWNrX21lZGlhKHVzKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExODktXFx0fVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTk0LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE5NTpcXHRcXHRyYyA9IGFsYXVkYV9jaGVja19tZWRpYSh1cyk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTk2LVxcdFxcdGlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTIxNS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyMTY6XFx0XFx0cmMgPSBhbGF1ZGFfY2hlY2tfbWVkaWEodXMpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTIxNy1cXHRcXHRpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyMjYtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjI3OlxcdFxcdHJldHVybiBhbGF1ZGFfcmVhZF9kYXRhKHVzLCBwYWdlLCBwYWdlcyk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjI4LVxcdH1cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTIzMi1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyMzM6XFx0XFx0cmMgPSBhbGF1ZGFfY2hlY2tfbWVkaWEodXMpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTIzNC1cXHRcXHRpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyNDMtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjQ0OlxcdFxcdHJldHVybiBhbGF1ZGFfd3JpdGVfZGF0YSh1cywgcGFnZSwgcGFnZXMpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI0NS1cXHR9XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyNzYtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjc3OnN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGFsYXVkYV9ob3N0X3RlbXBsYXRlO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI3OC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyNzk6c3RhdGljIGludCBhbGF1ZGFfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjgwLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyODUtXFx0cmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKFxcdTAwMjZ1cywgaW50ZiwgaWQsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjg2OlxcdFxcdFxcdChpZCAtIGFsYXVkYV91c2JfaWRzKSArIGFsYXVkYV91bnVzdWFsX2Rldl9saXN0LFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTI4NzpcXHRcXHRcXHRcXHUwMDI2YWxhdWRhX2hvc3RfdGVtcGxhdGUpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI4OC1cXHRpZiAocmVzdWx0KVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjkxLVxcdHVzLVxcdTAwM2V0cmFuc3BvcnRfbmFtZSAgPSBcXFwiQWxhdWRhIENvbnRyb2wvQnVsa1xcXCI7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjkyOlxcdHVzLVxcdTAwM2V0cmFuc3BvcnQgPSBhbGF1ZGFfdHJhbnNwb3J0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI5My1cXHR1cy1cXHUwMDNldHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI5OS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEzMDA6c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFsYXVkYV9kcml2ZXIgPSB7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMzAxLVxcdC5uYW1lID1cXHRcXHREUlZfTkFNRSxcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEzMDI6XFx0LnByb2JlID1cXHRhbGF1ZGFfcHJvYmUsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMzAzLVxcdC5kaXNjb25uZWN0ID1cXHR1c2Jfc3Rvcl9kaXNjb25uZWN0LFxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMzA4LVxcdC5wb3N0X3Jlc2V0ID1cXHR1c2Jfc3Rvcl9wb3N0X3Jlc2V0LFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTMwOTpcXHQuaWRfdGFibGUgPVxcdGFsYXVkYV91c2JfaWRzLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTMxMC1cXHQuc29mdF91bmJpbmQgPVxcdDEsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEzMTMtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMzE0Om1vZHVsZV91c2Jfc3Rvcl9kcml2ZXIoYWxhdWRhX2RyaXZlciwgYWxhdWRhX2hvc3RfdGVtcGxhdGUsIERSVl9OQU1FKTtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9hbGF1ZGEuaD05PVVOVVNVQUxfREVWKCAgMHgwNTg0LCAweDAwMDgsIDB4MDEwMiwgMHgwMTAyLFxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2FsYXVkYS5oLTExLVxcdFxcdFxcXCJEUEMtUjEgKEFsYXVkYSlcXFwiLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9hbGF1ZGEuaDoxMjpcXHRcXHRVU0JfU0NfU0NTSSwgVVNCX1BSX0FMQVVEQSwgaW5pdF9hbGF1ZGEsIDApLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9hbGF1ZGEuaC0xMy1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfYWxhdWRhLmg9MTQ9VU5VU1VBTF9ERVYoICAweDA3YjQsIDB4MDEwYSwgMHgwMTAyLCAweDAxMDIsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfYWxhdWRhLmgtMTYtXFx0XFx0XFxcIk1BVVNCLTEwIChBbGF1ZGEpXFxcIixcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfYWxhdWRhLmg6MTc6XFx0XFx0VVNCX1NDX1NDU0ksIFVTQl9QUl9BTEFVREEsIGluaXRfYWxhdWRhLCAwKSxcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfYWxhdWRhLmgtMTgtXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VzdWFsLXRhYmxlcy5jPTU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWdub3JlX2VudHJ5IGlnbm9yZV9pZHNbXSA9IHtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VzdWFsLXRhYmxlcy5jOjU3OiNcXHRpbmNsdWRlIFxcXCJ1bnVzdWFsX2FsYXVkYS5oXFxcIlxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdXN1YWwtdGFibGVzLmMtNTgtI1xcdGluY2x1ZGUgXFxcInVudXN1YWxfY3lwcmVzcy5oXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0ODo0Ni44MTM3MzU1NjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjM4NDUxNzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLY29uZmlnIERlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBgVVNCX1NUT1JBR0VfQUxBVURBYCBhbmQgbWFrZSBzdXJlIGl0J3MgcHJvcGVybHkgY29uZmlndXJlZC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGBLY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIHRob3JvdWdobHkuIEFyZSB0aGVyZSBhbnkgaGlkZGVuIGdvdGNoYXMsIG9ic2N1cmUgc2V0dGluZ3MsIG9yIHBsYXRmb3JtLXNwZWNpZmljIHByZXJlcXVpc2l0ZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZmxpY3RzIEkgbmVlZCB0byBmbGFnPyBBcmUgdGhlcmUgYW55IGRlZmF1bHQgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSBvdmVycmlkZGVuIGZvciB0aGUgc3BlY2lmaWMgdXNlIGNhc2U/IEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gdHJhY2UgZG93biBlYWNoIGRlcGVuZGVuY3ksIG5vdCBqdXN0IHRoZSBkaXJlY3Qgb25lcywgYnV0IHRoZSB0cmFuc2l0aXZlIG9uZXMgYXMgd2VsbC4gVGhpcyBpc24ndCBqdXN0IGFib3V0IG1ha2luZyBzdXJlIGl0IGNvbXBpbGVzOyBpdCdzIGFib3V0IG1ha2luZyBzdXJlIGl0ICpiZWhhdmVzKiBjb3JyZWN0bHksIHdpdGggbWluaW1hbCBzdXJwcmlzZXMsIG9uIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUuIEkgbmVlZCB0byBhbnRpY2lwYXRlIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIHBvd2VyIGNvbnN1bXB0aW9uLCBwZXJmb3JtYW5jZSwgYW5kIG92ZXJhbGwgc3lzdGVtIHN0YWJpbGl0eSBiYXNlZCBvbiBpdHMgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBVU0Igc3Vic3lzdGVtcyBhbmQgc3RvcmFnZSBkcml2ZXJzLiBTbywgYEtjb25maWdgIGZpcnN0LCB0aGVuIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgY29kZSBpZiBhbnl0aGluZyBsb29rcyBzdXNwaWNpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc4NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjQ4OjQ5LjA1MjE5MTAwM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdFxcdHRyaXN0YXRlIFxcXCJMZXhhciBKdW1wc2hvdCBDb21wYWN0IEZsYXNoIFJlYWRlclxcXCJcXG4gMTIxOlxcdFxcdGhlbHBcXG4gMTIyOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBMZXhhciBKdW1wc2hvdFxcbiAxMjM6XFx0XFx0ICBVU0IgQ29tcGFjdEZsYXNoIHJlYWRlci5cXG4gMTI0OlxcdFxcbiAxMjU6XFx0XFx0ICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtanVtcHNob3QuXFxuIDEyNjpcXHRcXG4gMTI3OlxcdGNvbmZpZyBVU0JfU1RPUkFHRV9BTEFVREFcXG4gMTI4OlxcdFxcdHRyaXN0YXRlIFxcXCJPbHltcHVzIE1BVVNCLTEwL0Z1amkgRFBDLVIxIHN1cHBvcnRcXFwiXFxuIDEyOTpcXHRcXHRoZWxwXFxuIDEzMDpcXHRcXHQgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgT2x5bXB1cyBNQVVTQi0xMFxcbiAxMzE6XFx0XFx0ICBhbmQgRnVqaWZpbG0gRFBDLVIxIFVTQiBDYXJkIHJlYWRlci93cml0ZXIgZGV2aWNlcy5cXG4gMTMyOlxcdFxcbiAxMzM6XFx0XFx0ICBUaGVzZSBkZXZpY2VzIGFyZSBiYXNlZCBvbiB0aGUgQWxhdWRhIGNoaXAgYW5kIHN1cHBvcnQgYm90aFxcbiAxMzQ6XFx0XFx0ICBYRCBhbmQgU21hcnRNZWRpYSBjYXJkcy5cXG4gMTM1OlxcdFxcbiAxMzY6XFx0XFx0ICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtYWxhdWRhLlxcbiAxMzc6XFx0XFxuIDEzODpcXHRjb25maWcgVVNCX1NUT1JBR0VfT05FVE9VQ0hcXG4gMTM5OlxcdFxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IE9uZVRvdWNoIEJ1dHRvbiBvbiBNYXh0b3IgSGFyZCBEcml2ZXNcXFwiXFxuIDE0MDpcXHRcXHRkZXBlbmRzIG9uIElOUFVUPXkgfHwgSU5QVVQ9VVNCX1NUT1JBR0VcXG4gMTQxOlxcdFxcdGhlbHBcXG4gMTQyOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBNYXh0b3IgT25lVG91Y2hcXG4gMTQzOlxcdFxcdCAgVVNCIGhhcmQgZHJpdmUncyBvbmV0b3VjaCBidXR0b24uXFxuIDE0NDpcXHRcXG4gMTQ1OlxcdFxcdCAgVGhpcyBjb2RlIHJlZ2lzdGVycyB0aGUgYnV0dG9uIG9uIHRoZSBmcm9udCBvZiBNYXh0b3IgT25lVG91Y2ggVVNCXFxuIDE0NjpcXHRcXHQgIGhhcmQgZHJpdmUncyBhcyBhbiBpbnB1dCBkZXZpY2UuIEFuIGFjdGlvbiBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoXFxuIDE0NzpcXHRcXHQgIHRoaXMgaW5wdXQgaW4gYW55IGtleWJpbmRpbmcgc29mdHdhcmUuIChlLmcuIGdub21lJ3Mga2V5Ym9hcmQgc2hvcnQtXFxuIDE0ODpcXHRcXHQgIGN1dHMpXFxuIDE0OTpcXHRcXG4gMTUwOlxcdFxcdCAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLW9uZXRvdWNoLlxcbiAxNTE6XFx0XFxuIDE1MjpcXHRjb25maWcgVVNCX1NUT1JBR0VfS0FSTUFcXG4gMTUzOlxcdFxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IGZvciBSaW8gS2FybWEgbXVzaWMgcGxheWVyXFxcIlxcbiAxNTQ6XFx0XFx0aGVscFxcbiAxNTU6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIFJpbyBLYXJtYVxcbiAxNTY6XFx0XFx0ICBVU0IgaW50ZXJmYWNlLlxcbiAxNTc6XFx0XFxuIDE1ODpcXHRcXHQgIFRoaXMgY29kZSBwbGFjZXMgdGhlIFJpbyBLYXJtYSBpbnRvIG1hc3Mgc3RvcmFnZSBtb2RlLCBlbmFibGluZ1xcbiAxNTk6XFx0XFx0ICBpdCB0byBiZSBtb3VudGVkIGFzIGFuIG9yZGluYXJ5IGZpbGVzeXN0ZW0uIFBlcmZvcm1pbmcgYW4gZWplY3RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDg6NDkuMDUyMzAyMzgzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUzNDY1Nzg0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgdGhlIEZvdW5kYXRpb24gZm9yIFVTQiBTdG9yYWdlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGludG8gdGhpcyBgVVNCX1NUT1JBR0VfQUxBVURBYCBvcHRpb24sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBXaGVyZSBkb2VzIHRoaXMgZml0IGluIHRoZSBvdmVyYWxsIHBpY3R1cmU/IFRoZSBmaXJzdCwgYW5kIG1vc3Qgb2J2aW91cywgcGxhY2UgdG8gbG9vayBpcyB0aGUgcGFyZW50IGNvbmZpZ3VyYXRpb24gZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGV4YW1pbmUgdGhlIGJlZ2lubmluZyBvZiBgZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYnJvYWRlciBmcmFtZXdvcmsgYW5kIHJldmVhbCBhbnkgaW1tZWRpYXRlIGRlcGVuZGVuY2llcyBvciByZWxldmFudCB1cHN0cmVhbSBzZXR0aW5ncyB0aGF0IGdvdmVybiBob3cgYFVTQl9TVE9SQUdFX0FMQVVEQWAgaXMgZGVmaW5lZCBhbmQgdXNlZC4gVW5kZXJzdGFuZGluZyB0aGUgcGFyZW50IGNvbmZpZ3VyYXRpb24gaXMgZnVuZGFtZW50YWwgdG8gZ3Jhc3BpbmcgdGhlIGludGVudCBiZWhpbmQgdGhpcyBzcGVjaWZpYyBzZXR0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzcyNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDg6NTIuNTg2OTYyMDk5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBVU0IgU3RvcmFnZSBkcml2ZXIgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb21tZW50IFxcXCJOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvXFxcIlxcbiAgIDc6XFx0XFxuICAgODpcXHRjb25maWcgVVNCX1NUT1JBR0VcXG4gICA5OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgTWFzcyBTdG9yYWdlIHN1cHBvcnRcXFwiXFxuICAxMDpcXHRcXHRkZXBlbmRzIG9uIFNDU0lcXG4gIDExOlxcdFxcdGhlbHBcXG4gIDEyOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IFVTQiBtYXNzIHN0b3JhZ2UgZGV2aWNlcyB0byB5b3VyXFxuICAxMzpcXHRcXHQgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFRoaXMgaXMgdGhlIGRyaXZlciB5b3UgbmVlZCBmb3IgVVNCXFxuICAxNDpcXHRcXHQgIGZsb3BweSBkcml2ZXMsIFVTQiBoYXJkIGRpc2tzLCBVU0IgdGFwZSBkcml2ZXMsIFVTQiBDRC1ST01zLFxcbiAgMTU6XFx0XFx0ICBVU0IgZmxhc2ggZGV2aWNlcywgYW5kIG1lbW9yeSBzdGlja3MsIGFsb25nIHdpdGhcXG4gIDE2OlxcdFxcdCAgc2ltaWxhciBkZXZpY2VzLiBUaGlzIGRyaXZlciBtYXkgYWxzbyBiZSB1c2VkIGZvciBzb21lIGNhbWVyYXNcXG4gIDE3OlxcdFxcdCAgYW5kIGNhcmQgcmVhZGVycy5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBUaGlzIG9wdGlvbiBkZXBlbmRzIG9uICdTQ1NJJyBzdXBwb3J0IGJlaW5nIGVuYWJsZWQsIGJ1dCB5b3VcXG4gIDIwOlxcdFxcdCAgcHJvYmFibHkgYWxzbyBuZWVkICdTQ1NJIGRldmljZSBzdXBwb3J0OiBTQ1NJIGRpc2sgc3VwcG9ydCdcXG4gIDIxOlxcdFxcdCAgKEJMS19ERVZfU0QpIGZvciBtb3N0IFVTQiBzdG9yYWdlIGRldmljZXMuXFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAyNDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2Itc3RvcmFnZS5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0aWYgVVNCX1NUT1JBR0VcXG4gIDI3OlxcdFxcbiAgMjg6XFx0Y29uZmlnIFVTQl9TVE9SQUdFX0RFQlVHXFxuICAyOTpcXHRcXHRib29sIFxcXCJVU0IgTWFzcyBTdG9yYWdlIHZlcmJvc2UgZGVidWdcXFwiXFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFNheSBZIGhlcmUgaW4gb3JkZXIgdG8gaGF2ZSB0aGUgVVNCIE1hc3MgU3RvcmFnZSBjb2RlIGdlbmVyYXRlXFxuICAzMjpcXHRcXHQgIHZlcmJvc2UgZGVidWdnaW5nIG1lc3NhZ2VzLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRjb25maWcgVVNCX1NUT1JBR0VfUkVBTFRFS1xcbiAgMzU6XFx0XFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgQ2FyZCBSZWFkZXIgc3VwcG9ydFxcXCJcXG4gIDM2OlxcdFxcdGhlbHBcXG4gIDM3OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBwb3dlci1zYXZpbmcgZnVuY3Rpb25cXG4gIDM4OlxcdFxcdCAgZm9yIFJlYWx0ZWsgUlRTNTF4eCBVU0IgY2FyZCByZWFkZXJzLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRcXHQgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1yZWFsdGVrLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0ODo1Mi41ODcwMzg1MzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDk5MjU2MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFVTQiBTdG9yYWdlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gd2UncmUgZGlnZ2luZyBpbnRvIHRoZSBVU0Igc3RvcmFnZSBjb25maWd1cmF0aW9uLCBhbmQgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFzc3VtcHRpb25zLCBsZXQncyB0YWtlIGEgcXVpY2sgZGV0b3VyLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoZSBmb3VuZGF0aW9uYWwgVVNCIHN1cHBvcnQuIEl0J3Mgc2Vjb25kIG5hdHVyZSwgcmVhbGx5LCBidXQgYmV0dGVyIHRvIGJlIG1ldGljdWxvdXMuIEkgc2hvdWxkIGNoZWNrIHRoZSBgZHJpdmVycy91c2IvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB3aGF0IGBkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWdgIGRlcGVuZHMgb24uIFRoaW5ncyBsaWtlIHRoZSBicm9hZCBgVVNCX1NVUFBPUlRgIG9wdGlvbiBhbmQgdGhlIG1vcmUgZnVuZGFtZW50YWwgYFVTQmAgb3B0aW9uIGFyZSBwcm9iYWJseSBpbnZvbHZlZCwgYnV0IEkgd2FudCB0byB2ZXJpZnkgdGhhdC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNsZWFyZXN0IHBpY3R1cmUgb2YgdGhlIHByZWNvbmRpdGlvbnMgYW5kIGVuc3VyZSBhbnkgY2hhbmdlcyBJIG1ha2UgYXJlIHByb3Blcmx5IHNjb3BlZCB3aXRoaW4gdGhlIHdpZGVyIFVTQiBzdWJzeXN0ZW0uIEdldHRpbmcgdGhpcyByaWdodCBmcm9tIHRoZSBvdXRzZXQgcHJldmVudHMgZG93bnN0cmVhbSBoZWFkYWNoZXMsIHlvdSBrbm93LCB0aGUgdXN1YWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDk0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0ODo1NC42ODYyOTY4MTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzEzNjIyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UuKmRyaXZlcnMvdXNiL3N0b3JhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvS2NvbmZpZz0xMTQ9c291cmNlIFxcXCJkcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnXFxcIlxcbmRyaXZlcnMvdXNiL0tjb25maWctMTE1LVxcbmRyaXZlcnMvdXNiL0tjb25maWc6MTE2OnNvdXJjZSBcXFwiZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvdXNiL0tjb25maWctMTE3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0ODo1NC43OTk0MzgyNTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA0NjQxMjc3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGJhc2VkIG9uIHRoZSBwcm92aWRlZCB0aG91Z2h0OlxuXG4qKkRpdmluZyBpbnRvIFVTQiBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIFVTQiBkcml2ZXIgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgb3V0IHRoZSBgZHJpdmVycy91c2IvS2NvbmZpZ2AgZmlsZSwgZm9jdXNpbmcgb24gbGluZXMgcm91Z2hseSBhcm91bmQgMTEwLTEyMC4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgb3B0aW9uIG9yIGRlcGVuZGVuY3ksIG1heWJlIHNvbWV0aGluZyByZWxhdGVkIHRvIGEgbmV3IGRldmljZSBjbGFzcyBJJ20gaW50ZWdyYXRpbmcsIG9yIHBlcmhhcHMgSSdtIGRlYnVnZ2luZyBhIGNvbmZpZ3VyYXRpb24gaXNzdWUuIFdoYXRldmVyIHRoZSByZWFzb24sIHRoYXQgc2VjdGlvbiBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlbGV2YW50IG9wdGlvbnMgZm9yIHRoZSBtb2R1bGUgSSdtIHdvcmtpbmcgd2l0aCBhcmUgZGVmaW5lZCwgb3Igd2hlcmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgc3RhdGVkLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgzNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjQ4OjU2Ljg0NTg1NDAyM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFx0ICBhbmQgbGF0ZXIgc291dGggYnJpZGdlIGltcGxlbWVudGF0aW9ucy4gVGhlc2UgYXJlIGNvbW1vbiBvbiB4ODYgUENzXFxuIDEwMTpcXHRcXHQgIHdpdGggQU1EIENQVXMgYnV0IHJhcmVseSB1c2VkIGVsc2V3aGVyZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGEgZmV3XFxuIDEwMjpcXHRcXHQgIHBvd2VycGMgYW5kIG1pcHMgZGVza3RvcCBtYWNoaW5lcy5cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0aWYgVVNCXFxuIDEwNTpcXHRcXG4gMTA2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy91c2IvY29yZS9LY29uZmlnXFxcIlxcbiAxMDc6XFx0XFxuIDEwODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvdXNiL21vbi9LY29uZmlnXFxcIlxcbiAxMDk6XFx0XFxuIDExMDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZ1xcXCJcXG4gMTExOlxcdFxcbiAxMTI6XFx0c291cmNlIFxcXCJkcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL0tjb25maWdcXFwiXFxuIDExMzpcXHRcXG4gMTE0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy91c2IvY2xhc3MvS2NvbmZpZ1xcXCJcXG4gMTE1OlxcdFxcbiAxMTY6XFx0c291cmNlIFxcXCJkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWdcXFwiXFxuIDExNzpcXHRcXG4gMTE4OlxcdHNvdXJjZSBcXFwiZHJpdmVycy91c2IvaW1hZ2UvS2NvbmZpZ1xcXCJcXG4gMTE5OlxcdFxcbiAxMjA6XFx0c291cmNlIFxcXCJkcml2ZXJzL3VzYi91c2JpcC9LY29uZmlnXFxcIlxcbiAxMjE6XFx0XFxuIDEyMjpcXHRlbmRpZlxcbiAxMjM6XFx0XFxuIDEyNDpcXHRjb21tZW50IFxcXCJVU0IgZHVhbC1tb2RlIGNvbnRyb2xsZXIgZHJpdmVyc1xcXCJcXG4gMTI1OlxcdFxcbiAxMjY6XFx0c291cmNlIFxcXCJkcml2ZXJzL3VzYi9jZG5zMy9LY29uZmlnXFxcIlxcbiAxMjc6XFx0XFxuIDEyODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvdXNiL2ZvdGcyMTAvS2NvbmZpZ1xcXCJcXG4gMTI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0ODo1Ni44NDYwMjY1MDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzA2Njk5MDA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbGF1ZGEgVVNCIFN0b3JhZ2UgRHJpdmVyIEFuYWx5c2lzIFx1MDAyNiBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gYFVTQl9TVE9SQUdFX0FMQVVEQWAgaXMgYnVpbHQgb24gYSBkZXBlbmRlbmN5IGNoYWluOiBpdCBuZWVkcyBgVVNCX1NUT1JBR0VgIHdoaWNoLCBpbiB0dXJuLCBoaW5nZXMgb24gYFNDU0lgLCBhbmQgZmluYWxseSBgVVNCYCwgbG9jYXRlZCBpbiBgZHJpdmVycy91c2IvS2NvbmZpZ2AgdW5kZXIgdGhlIGBpZiBVU0JgIGNvbmRpdGlvbi4gIFRoZSBrZXkgcXVlc3Rpb24gaXMgYWx3YXlzIHdoZXRoZXIgd2UgY2FuIGhpdCB0aGVzZSBkcml2ZXJzIHZpYSBmdXp6aW5nLCBhbmQgdGhlIGFuc3dlciBoZXJlIGlzIGEgcmVzb3VuZGluZyAqeWVzKi4gU3l6a2FsbGVyIGlzIGtub3duIGZvciBpdHMgZXh0ZW5zaXZlIGZ1enppbmcgb2YgVVNCIGRyaXZlcnMsIGhlYXZpbHkgbGV2ZXJhZ2luZyByYXctZ2FkZ2V0IGFuZCBkdW1teV9oY2QgZW11bGF0aW9uLlxuXG5NeSBwcmltYXJ5IGdvYWwgbm93IGlzIHRvIGRldGVybWluZSB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoaXMgYGFsYXVkYWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2hldGhlciBpdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGVpdGhlciBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiBvciBieSBpc3N1aW5nIFNDU0kgY29tbWFuZHMuICBJdCBzZWVtcyB3aGVuIGEgVVNCIGRldmljZSB3aXRoIGEgdmVuZG9yIElEL3Byb2R1Y3QgSUQgKFZJRC9QSUQpIHRoYXQgbWF0Y2hlcyBlbnRyaWVzIGluIGBhbGF1ZGFfdXNiX2lkc2AgKGxpa2UgYDA1ODQ6MDAwOGAgb3IgYDA3YjQ6MDEwYWApIGlzIFwiY29ubmVjdGVkXCIg4oCTIHZpYSBlbXVsYXRpb24sIG9mIGNvdXJzZSDigJMgYGFsYXVkYV9wcm9iZWAgZ2V0cyBjYWxsZWQuICBUaGF0J3Mgb3VyIGVudHJ5IHBvaW50LiBGb2xsb3dpbmcgdGhhdCwgU0NTSSBjb21tYW5kcyBpc3N1ZWQgdG8gdGhlIG1hc3Mgc3RvcmFnZSBkZXZpY2UgZW11bGF0ZSB0aGUgVVNCIGNvbm5lY3Rpb24sIGFuZCBzaG91bGQgaW52b2tlIGBhbGF1ZGFfdHJhbnNwb3J0YCwgd2hpY2ggaXMgdGhlIGtleSBmdW5jdGlvbiBiZWNhdXNlIGl0IGluIHR1cm4gY2FsbHMgY3JpdGljYWwgcm91dGluZXMgbGlrZSBgYWxhdWRhX2NoZWNrX21lZGlhYCwgYGFsYXVkYV9pbml0X21lZGlhYCwgYGFsYXVkYV9yZWFkX2RhdGFgLCBgYWxhdWRhX3dyaXRlX2RhdGFgLCBgYWxhdWRhX3dyaXRlX2xiYWAsIGFuZCBzbyBvbi5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB2YWx1ZSBsaWVzLiAgSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBmaXhlcyBhbmQgY2hhbmdlcyB0aGF0IHdlcmUgZG9uZTpcblxuMS4gIGBtZWRpYV9pbml0aWFsaXplZGAgaGFzIGJlZW4gbW92ZWQgZnJvbSB0aGUgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgdG8gYHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mb2AuXG4yLiAgSW4gYGFsYXVkYV9mcmVlX21hcHNgLCB0aGUgcGF0Y2ggbm93IGZyZWVzIHRoZSBvdXRlciBhcnJheXMgb2YgYG1lZGlhX2luZm8tXHUwMDNlbGJhX3RvX3BiYWAgYW5kIGBtZWRpYV9pbmZvLVx1MDAzZXBiYV90b19sYmFgIGFuZCBzZXRzIHRoZW0gdG8gYE5VTExgLCBpbiBhZGRpdGlvbiB0byByZXNldHRpbmcgY2FwYWNpdHkgYW5kIHV6b25lc2l6ZSB0byAwLiBQcmV2aW91c2x5LCBpdCB3YXMgb25seSB0aGUgaW5uZXIgYXJyYXlzLiBUaGlzIGluZGljYXRlcyBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIHN0YWxlIHBvaW50ZXIgaXNzdWVzIHdlcmUgcHJlc2VudCBhbmQgY29ycmVjdGVkLlxuMy4gIEVycm9yIGhhbmRsaW5nIGluIGBhbGF1ZGFfaW5pdF9tZWRpYWAgaGFzIGJlZW4gaW1wcm92ZWQsIHdpdGggYGFsYXVkYV9mcmVlX21hcHMoXHUwMDI2TUVESUFfSU5GTyh1cykpYCBiZWluZyBjYWxsZWQgb24gZmFpbHVyZS5cbjQuICBgYWxhdWRhX2NoZWNrX21lZGlhYCBpcyBub3cgbW9yZSByb2J1c3QuIE9uIGRldGVjdGlvbiBvZiBubyBtZWRpYSwgb3IgYSBtZWRpYSBjaGFuZ2UsIGl0IGNhbGxzIGBhbGF1ZGFfZnJlZV9tYXBzYCBhbmQgcmVzZXRzIGBtZWRpYV9pbmZvLVx1MDAzZW1lZGlhX2luaXRpYWxpemVkYCB0byBgZmFsc2VgLlxuNS4gIGBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZWAgaGFzIGFkZGVkIGNydWNpYWwgY2hlY2tzIHRvIHNlZSBpZiBgbGJhX3RvX3BiYWAgb3IgYHBiYV90b19sYmFgIGlzIE5VTEwuIEl0IGFsc28gbm93IHJldHVybnMgYSBgVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SYCBpbiB0aGlzIGNhc2UsIG9yIGNhbGxzIGBhbGF1ZGFfcmVhZF9tYXBgLiBQcmV2aW91c2x5IGl0IHJldHVybmVkIGB2b2lkYC5cbjYuICBgYWxhdWRhX3dyaXRlX2xiYWAsIGBhbGF1ZGFfcmVhZF9kYXRhYCwgYW5kIGBhbGF1ZGFfd3JpdGVfZGF0YWAgaGF2ZSBhZGRpdGlvbmFsIGRpdmlzaW9uLWJ5LXplcm8gY2hlY2tzIChgIXV6b25lc2l6ZWApIGFuZCBhbHNvIGNoZWNrcyB0aGUgcmV0dXJuIHZhbHVlcyBvZiB0aGUgY2FsbGVkIGZ1bmN0aW9uLlxuXG5UaGUgZ29vZCBuZXdzIGlzIHRoYXQgdGhpcyBjb3JlIGxvZ2ljIGlzIGFsbCBuZWF0bHkgdHVja2VkIGF3YXkgaW4gYGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNgLlxuXG5HaXZlbiB0aGF0IHRoaXMgaXMgYWxsIGFjY2Vzc2libGUgdmlhIFVTQiBlbXVsYXRpb24gd2l0aGluIFFFTVUgYW5kIFN5emthbGxlciAoc3BlY2lmaWNhbGx5IHVzaW5nIGR1bW15X2hjZCBhbmQgcmF3LWdhZGdldCBmb3IgVVNCIGVtdWxhdGlvbiksIG15IGFuYWx5c2lzIHBvaW50cyB0b3dhcmRzIHRoaXMgZHJpdmVyIGJlaW5nICpkZWZpbml0ZWx5KiBgV29ydGhGdXp6aW5nYC5cblxuTm93LCBJIHdpbGwgcHJvY2VlZCB0byBhbmFseXplIHRoZSBhdmFpbGFibGUgc3ltYm9scyB3aXRoaW4gYGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNgLiBMZXQncyBkaWcgaW50byB0aGUgZnVuY3Rpb25zIGRlZmluZWQgdGhlcmUgYW5kIHNlZSB3aGF0IGlzIGF2YWlsYWJsZSBhcyBub24tc3RhdGljLCBleHBvcnRlZCwgb3IgY2FsbGJhY2sgZnVuY3Rpb25zIHdoaWNoIGNhbiBiZSBob29rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDUwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDk6MDMuOTEzMDE4NzkzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNzUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNzU6XFx0fVxcbjEyNzY6XFx0XFxuMTI3NzpcXHRzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhbGF1ZGFfaG9zdF90ZW1wbGF0ZTtcXG4xMjc4OlxcdFxcbjEyNzk6XFx0c3RhdGljIGludCBhbGF1ZGFfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuMTI4MDpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbjEyODE6XFx0e1xcbjEyODI6XFx0XFx0c3RydWN0IHVzX2RhdGEgKnVzO1xcbjEyODM6XFx0XFx0aW50IHJlc3VsdDtcXG4xMjg0OlxcdFxcbjEyODU6XFx0XFx0cmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKFxcdTAwMjZ1cywgaW50ZiwgaWQsXFxuMTI4NjpcXHRcXHRcXHRcXHQoaWQgLSBhbGF1ZGFfdXNiX2lkcykgKyBhbGF1ZGFfdW51c3VhbF9kZXZfbGlzdCxcXG4xMjg3OlxcdFxcdFxcdFxcdFxcdTAwMjZhbGF1ZGFfaG9zdF90ZW1wbGF0ZSk7XFxuMTI4ODpcXHRcXHRpZiAocmVzdWx0KVxcbjEyODk6XFx0XFx0XFx0cmV0dXJuIHJlc3VsdDtcXG4xMjkwOlxcdFxcbjEyOTE6XFx0XFx0dXMtXFx1MDAzZXRyYW5zcG9ydF9uYW1lICA9IFxcXCJBbGF1ZGEgQ29udHJvbC9CdWxrXFxcIjtcXG4xMjkyOlxcdFxcdHVzLVxcdTAwM2V0cmFuc3BvcnQgPSBhbGF1ZGFfdHJhbnNwb3J0O1xcbjEyOTM6XFx0XFx0dXMtXFx1MDAzZXRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7XFxuMTI5NDpcXHRcXHR1cy1cXHUwMDNlbWF4X2x1biA9IDE7XFxuMTI5NTpcXHRcXG4xMjk2OlxcdFxcdHJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7XFxuMTI5NzpcXHRcXHRyZXR1cm4gcmVzdWx0O1xcbjEyOTg6XFx0fVxcbjEyOTk6XFx0XFxuMTMwMDpcXHRzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYWxhdWRhX2RyaXZlciA9IHtcXG4xMzAxOlxcdFxcdC5uYW1lID1cXHRcXHREUlZfTkFNRSxcXG4xMzAyOlxcdFxcdC5wcm9iZSA9XFx0YWxhdWRhX3Byb2JlLFxcbjEzMDM6XFx0XFx0LmRpc2Nvbm5lY3QgPVxcdHVzYl9zdG9yX2Rpc2Nvbm5lY3QsXFxuMTMwNDpcXHRcXHQuc3VzcGVuZCA9XFx0dXNiX3N0b3Jfc3VzcGVuZCxcXG4xMzA1OlxcdFxcdC5yZXN1bWUgPVxcdHVzYl9zdG9yX3Jlc3VtZSxcXG4xMzA2OlxcdFxcdC5yZXNldF9yZXN1bWUgPVxcdHVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSxcXG4xMzA3OlxcdFxcdC5wcmVfcmVzZXQgPVxcdHVzYl9zdG9yX3ByZV9yZXNldCxcXG4xMzA4OlxcdFxcdC5wb3N0X3Jlc2V0ID1cXHR1c2Jfc3Rvcl9wb3N0X3Jlc2V0LFxcbjEzMDk6XFx0XFx0LmlkX3RhYmxlID1cXHRhbGF1ZGFfdXNiX2lkcyxcXG4xMzEwOlxcdFxcdC5zb2Z0X3VuYmluZCA9XFx0MSxcXG4xMzExOlxcdFxcdC5ub19keW5hbWljX2lkID0gMSxcXG4xMzEyOlxcdH07XFxuMTMxMzpcXHRcXG4xMzE0OlxcdG1vZHVsZV91c2Jfc3Rvcl9kcml2ZXIoYWxhdWRhX2RyaXZlciwgYWxhdWRhX2hvc3RfdGVtcGxhdGUsIERSVl9OQU1FKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDk6MDMuOTEzMTU4NTczWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNDEzMjM2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgYWxhdWRhLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiBpbiBgYWxhdWRhLmNgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEknbGwgbmVlZCB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQsIHVuZGVyc3RhbmQgd2hhdCdzIGJlZW4gZGVmaW5lZCBpbiB0ZXJtcyBvZiBzeW1ib2xzLiBWYXJpYWJsZXMsIGNvbnN0YW50cywgc3RydWN0cywgYW5kIHNvIG9uIOKAkyBhIHF1aWNrIHN3ZWVwIG9mIHRoZSBsYW5kc2NhcGUgd2lsbCBnaXZlIG1lIGEgYmFzZWxpbmUuIEZyb20gdGhlcmUsIEknbGwgaG9uZSBpbiBvbiB0aGUgY29yZSBvZiBhbnkgQyBmaWxlOiB0aGUgZnVuY3Rpb25zLiBJJ2xsIHNlYXJjaCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4gVGhvc2UgYXJlIHdoZXJlIHRoZSByZWFsIHdvcmsgaGFwcGVucywgYW5kIHdoZXJlIEkgY2FuIHN0YXJ0IHRvIHVuZGVyc3RhbmQgdGhlIHByb2dyYW0ncyBsb2dpYyBhbmQgYmVoYXZpb3IuIEtub3dpbmcgdGhlIGZ1bmN0aW9ucyB3aWxsIGdpdmUgbWUgdGhlIGJ1aWxkaW5nIGJsb2NrcyB0byB1bmRlcnN0YW5kIGhvdyBgYWxhdWRhLmNgIGRvZXMgaXRzIHRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY3OSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDk6MDcuMDU0NDg1MDQ0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTA4NTU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtejAtOV9dKy4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTEwMz1zdHJ1Y3QgYWxhdWRhX2luZm8ge1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjItXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjM6c3RhdGljIGludCBpbml0X2FsYXVkYShzdHJ1Y3QgdXNfZGF0YSAqdXMpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI0LVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0xNzc9c3RhdGljIGNvbnN0IHN0cnVjdCBhbGF1ZGFfY2FyZF9pbmZvIGFsYXVkYV9jYXJkX2lkc1tdID0ge1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yMDItXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoyMDM6c3RhdGljIGNvbnN0IHN0cnVjdCBhbGF1ZGFfY2FyZF9pbmZvICphbGF1ZGFfY2FyZF9maW5kX2lkKHVuc2lnbmVkIGNoYXIgaWQpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yMDQte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0yMTg9c3RhdGljIHVuc2lnbmVkIGNoYXIgZWNjMlsyNTZdO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjE5LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MjIwOnN0YXRpYyB2b2lkIG5hbmRfaW5pdF9lY2Modm9pZClcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTIyMS17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTI0NC0vKiBjb21wdXRlIDMtYnl0ZSBlY2Mgb24gMjU2IGJ5dGVzICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoyNDU6c3RhdGljIHZvaWQgbmFuZF9jb21wdXRlX2VjYyh1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBjaGFyICplY2MpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yNDYte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yNjgtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoyNjk6c3RhdGljIGludCBuYW5kX2NvbXBhcmVfZWNjKHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKmVjYylcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTI3MC17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTI3My1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjI3NDpzdGF0aWMgdm9pZCBuYW5kX3N0b3JlX2VjYyh1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBjaGFyICplY2MpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yNzUte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yODUtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoyODY6c3RhdGljIHZvaWQgYWxhdWRhX2ZyZWVfbWFwcyAoc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICptZWRpYV9pbmZvKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjg3LXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzE3LSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MzE4OnN0YXRpYyBpbnQgYWxhdWRhX2dldF9tZWRpYV9zdGF0dXMoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBjaGFyICpkYXRhKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzE5LXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzQwLSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MzQxOnN0YXRpYyBpbnQgYWxhdWRhX2Fja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNDIte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNTctICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzozNTg6c3RhdGljIGludCBhbGF1ZGFfZ2V0X21lZGlhX3NpZ25hdHVyZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNTkte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNzMtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzozNzQ6c3RhdGljIGludCBhbGF1ZGFfcmVzZXRfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzc1LXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzg5LSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MzkwOnN0YXRpYyBpbnQgYWxhdWRhX2luaXRfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzkxLXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDY4LSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDY5OnN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ3MC17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTUxNC0gKi9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjUxNTpzdGF0aWMgaW50IGFsYXVkYV9jaGVja19zdGF0dXMyKHN0cnVjdCB1c19kYXRhICp1cylcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTUxNi17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU0NC0gKi9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjU0NTpzdGF0aWMgaW50IGFsYXVkYV9nZXRfcmVkdV9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSwgdW5zaWduZWQgY2hhciAqZGF0YSlcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU0Ni17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU2NS0gKi9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjU2NjpzdGF0aWMgdTE2IGFsYXVkYV9maW5kX3VudXNlZF9wYmEoc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICppbmZvLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTY3LVxcdHVuc2lnbmVkIGludCB6b25lKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01ODItICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo1ODM6c3RhdGljIGludCBhbGF1ZGFfcmVhZF9tYXAoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU4NC17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTcwNi0gKi9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjcwNzpzdGF0aWMgaW50IGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHpvbmUpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03MDgte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03MjEtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3MjI6c3RhdGljIGludCBhbGF1ZGFfZXJhc2VfYmxvY2soc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgcGJhKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzIzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzUwLSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzUxOnN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfYmxvY2tfcmF3KHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSxcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc1Mi1cXHRcXHR1bnNpZ25lZCBpbnQgcGFnZSwgdW5zaWduZWQgaW50IHBhZ2VzLCB1bnNpZ25lZCBjaGFyICpkYXRhKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03NzYtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3Nzc6c3RhdGljIGludCBhbGF1ZGFfcmVhZF9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03NzgtXFx0XFx0dW5zaWduZWQgaW50IHBhZ2UsIHVuc2lnbmVkIGludCBwYWdlcywgdW5zaWduZWQgY2hhciAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODAxLSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODAyOnN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2Jsb2NrKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSwgdW5zaWduZWQgY2hhciAqZGF0YSlcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgwMy17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgyOS0gKi9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgzMDpzdGF0aWMgaW50IGFsYXVkYV93cml0ZV9sYmEoc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgbGJhLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODMxLVxcdFxcdCB1bnNpZ25lZCBpbnQgcGFnZSwgdW5zaWduZWQgaW50IHBhZ2VzLFxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05NDMtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5NDQ6c3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTQ1LVxcdFxcdHVuc2lnbmVkIGludCBzZWN0b3JzKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDQ3LSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTA0ODpzdGF0aWMgaW50IGFsYXVkYV93cml0ZV9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTA0OS1cXHRcXHR1bnNpZ25lZCBpbnQgc2VjdG9ycylcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTEyOS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExMzA6c3RhdGljIHZvaWQgYWxhdWRhX2luZm9fZGVzdHJ1Y3Rvcih2b2lkICpleHRyYSlcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExMzEte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTQ5LSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE1MDpzdGF0aWMgaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cylcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNTEte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTY5LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE3MDpzdGF0aWMgaW50IGFsYXVkYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTcxLXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTI3Nz1zdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhbGF1ZGFfaG9zdF90ZW1wbGF0ZTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyNzgtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjc5OnN0YXRpYyBpbnQgYWxhdWRhX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI4MC1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0xMzAwPXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhbGF1ZGFfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMzEzLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTMxNDptb2R1bGVfdXNiX3N0b3JfZHJpdmVyKGFsYXVkYV9kcml2ZXIsIGFsYXVkYV9ob3N0X3RlbXBsYXRlLCBEUlZfTkFNRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjQ5OjA3LjExNTU3NTYyM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzQ4NDM0NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhlIGBtb2R1bGVfdXNiX3N0b3JfZHJpdmVyYCwgYW5kIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGV4YWN0bHkgd2hhdCBpdCdzIHJlc3BvbnNpYmxlIGZvci4gV2hhdCBmdW5jdGlvbmFsaXRpZXMgZG9lcyB0aGlzIG1vZHVsZSBwcm92aWRlPyBXaGF0IFVTQiBzdG9yYWdlIGRldmljZXMgZG9lcyBpdCBoYW5kbGU/IERvZXMgaXQgdXNlIHRoZSBTQ1NJIGNvbW1hbmQgc2V0IG9yIGEgZGlmZmVyZW50IHByb3RvY29sPyBJIGtub3cgaXQncyBhIGRyaXZlciwgb2YgY291cnNlLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCdzIFVTQiBzdWJzeXN0ZW0uIERvZXMgaXQgaGFuZGxlIHF1aXJrcyBmb3IgZGlmZmVyZW50IHN0b3JhZ2UgZGV2aWNlcz8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGJsb2NrIGxheWVycyBvciB2aXJ0dWFsIGZpbGUgc3lzdGVtcyBkaXJlY3RseT8gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgYXJjaGl0ZWN0dXJlIGFuZCBob3cgaXQgb3JjaGVzdHJhdGVzIHRoZSBwcm9jZXNzIG9mIGRhdGEgdHJhbnNmZXIgYmV0d2VlbiB0aGUgVVNCIHN0b3JhZ2UgZGV2aWNlIGFuZCB0aGUgaG9zdCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjcxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDk6MDkuODY0MDE0MTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTQzOTE2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIG1vZHVsZV91c2Jfc3Rvcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oPTE5ND1leHRlcm4gdm9pZCB1c2Jfc3Rvcl9hZGp1c3RfcXVpcmtzKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oLTE5Ni1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oOjE5NzojZGVmaW5lIG1vZHVsZV91c2Jfc3Rvcl9kcml2ZXIoX19kcml2ZXIsIF9fc2h0LCBfX25hbWUpIFxcXFxcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oLTE5OC1zdGF0aWMgaW50IF9faW5pdCBfX2RyaXZlciMjX2luaXQodm9pZCkgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0OTowOS45ODM0NjAyNDhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY2OTIzMTk5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbGF1ZGEgVVNCIERyaXZlciBBbmFseXNpcyBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBBbGF1ZGEgVVNCIHN0b3JhZ2UgZHJpdmVyIChgYWxhdWRhLmNgKS4gSSd2ZSBnb25lIHRocm91Z2ggdGhlIGNvZGUgYW5kIGlkZW50aWZpZWQgdGhlIGtleSBmdW5jdGlvbnMgd2UncmUgZGVhbGluZyB3aXRoOiBgYWxhdWRhX3Byb2JlYCwgYGluaXRfYWxhdWRhYCwgYGFsYXVkYV90cmFuc3BvcnRgLCBgYWxhdWRhX3JlYWRfZGF0YWAsIGBhbGF1ZGFfd3JpdGVfZGF0YWAsIGBhbGF1ZGFfY2hlY2tfbWVkaWFgLCBgYWxhdWRhX2luaXRfbWVkaWFgLCBgYWxhdWRhX2ZyZWVfbWFwc2AsIGBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZWAsIGFuZCBgYWxhdWRhX3dyaXRlX2xiYWAuXG5cbk15IGZvY3VzIGlzIG9uIGZ1enppbmcsIHNvIEkndmUgc3BlY2lmaWNhbGx5IGVhcm1hcmtlZCB0aGUgbm9uLWhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhpcyBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgd2lsbCBiZSBjcnVjaWFsIGZvciBndWlkaW5nIHRoZSBmdXp6ZXIuIEkndmUgbmFycm93ZWQgaXQgdG8gYGFsYXVkYV90cmFuc3BvcnRgLCBgYWxhdWRhX3Byb2JlYCwgYGluaXRfYWxhdWRhYCwgYGFsYXVkYV9jaGVja19tZWRpYWAsIGBhbGF1ZGFfcmVhZF9kYXRhYCwgYGFsYXVkYV93cml0ZV9kYXRhYCwgYGFsYXVkYV93cml0ZV9sYmFgLCBhbmQgYGFsYXVkYV9mcmVlX21hcHNgLlxuXG5OZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgbW9kdWxlIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBidWlsZC4gSeKAmXZlIGNoZWNrZWQgdGhlIEtjb25maWcgZmlsZXMsIGFuZCBjb25maXJtZWQgdGhhdCB3ZSBuZWVkIGBVU0JfU1RPUkFHRV9BTEFVREFgLCB3aGljaCBkZXBlbmRzIG9uIGBVU0JfU1RPUkFHRWAsIHdoaWNoIGRlcGVuZHMgb24gYFNDU0lgLCB3aGljaCBpbiB0dXJuLCBpcyBkZXBlbmRlbnQgb24gdGhlIGluY2x1c2lvbiBvZiBgVVNCYCwgd2hpY2ggZGVwZW5kcyBvbiBgVVNCX1NVUFBPUlRgLiBObyBvdGhlciBkZXBlbmRlbmNpZXMgd2VyZSBmb3VuZCBmb3IgYFVTQl9TVE9SQUdFX0FMQVVEQWAuIEkndmUgY29uZmlybWVkIHRoYXQgdGhlc2UgYXJlIHRoZSByZXF1aXJlZCBjb25maWdzLlxuXG5JJ3ZlIGFsc28gcXVpY2tseSB2YWxpZGF0ZWQgdGhhdCB0aGUgYE1ha2VmaWxlYCBlbnRyeSBmb3IgdGhpcyBtb2R1bGUgaXMgcHJvcGVybHkgY29uZmlndXJlZC4gSXQgbG9va3Mgc3RyYWlnaHRmb3J3YXJkLiBUaGUgb2JqZWN0IGZpbGUgYHVtcy1hbGF1ZGEub2AgaXMgYmVpbmcgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkIGFzIGV4cGVjdGVkLlxuXG5GaW5hbGx5LCBJJ20gcmVhZHkgdG8gY3JhZnQgdGhlIGNhbGwgdG8gdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoIGFkZHJlc3NlcyBtZW1vcnkgbWFuYWdlbWVudCwgYm91bmRzIGNoZWNrcywgemVybyBkaXZpc2lvbiBpc3N1ZXMsIGFuZCBtZWRpYSBpbml0aWFsaXphdGlvbiBzdGF0ZSBoYW5kbGluZy4gQWxsIHRoZXNlIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIGFuZCBhbGwgc2hvdWxkIGJlIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBzdGFuZGFyZCBTQ1NJIGNvbW1hbmQgaW50ZXJhY3Rpb24gd2l0aCBlbXVsYXRlZCBkZXZpY2VzLiBUaGVyZWZvcmUsIFdvcnRoRnV6emluZyBpcyBzZXQgdG8gYHRydWVgLiBJJ3ZlIHByb3ZpZGVkIHRoZSBgRm9jdXNTeW1ib2xzYCBhcyB0aGF0IGNyaXRpY2FsIGxpc3Qgb2YgZnVuY3Rpb25zIGFuZCBjb25maXJtZWQgdGhlIGBFbmFibGVDb25maWdzYC4gSXQncyBhbGwgY2xlYW4gYW5kIHJlYWR5LiBMZXQncyBzZW5kIHRoZSByZXN1bHRzIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU5NywiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDk6MTUuNjUyNjk0ODExWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwOTg1NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfU1RPUkFHRV9BTEFVREFcIixcbiAgICBcIlVTQl9TVE9SQUdFXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIlNDU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGF1ZGFfdHJhbnNwb3J0XCIsXG4gICAgXCJhbGF1ZGFfcHJvYmVcIixcbiAgICBcImluaXRfYWxhdWRhXCIsXG4gICAgXCJhbGF1ZGFfY2hlY2tfbWVkaWFcIixcbiAgICBcImFsYXVkYV9yZWFkX2RhdGFcIixcbiAgICBcImFsYXVkYV93cml0ZV9kYXRhXCIsXG4gICAgXCJhbGF1ZGFfd3JpdGVfbGJhXCIsXG4gICAgXCJhbGF1ZGFfZnJlZV9tYXBzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIHplcm8tZGl2aXNpb24gYnVncywgbWVtb3J5IGxlYWtzLCBhbmQgbWVkaWEgaW5pdGlhbGl6YXRpb24gc3RhdGUgaGFuZGxpbmcgYWNyb3NzIHpvbmUgbWFwIGFsbG9jYXRpb25zIGFuZCBJL08gaGFuZGxpbmcgaW4gdGhlIE9seW1wdXMgTUFVU0ItMTAvRnVqaWZpbG0gRFBDLVIxIChBbGF1ZGEpIFVTQiBtYXNzIHN0b3JhZ2UgZHJpdmVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSB2aWEgVVNCIGVtdWxhdGlvbi9mdXp6aW5nIGZyYW1ld29ya3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX1NUT1JBR0VfQUxBVURBXCIsXG4gICAgXCJVU0JfU1RPUkFHRVwiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJTQ1NJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxhdWRhX3RyYW5zcG9ydFwiLFxuICAgIFwiYWxhdWRhX3Byb2JlXCIsXG4gICAgXCJpbml0X2FsYXVkYVwiLFxuICAgIFwiYWxhdWRhX2NoZWNrX21lZGlhXCIsXG4gICAgXCJhbGF1ZGFfcmVhZF9kYXRhXCIsXG4gICAgXCJhbGF1ZGFfd3JpdGVfZGF0YVwiLFxuICAgIFwiYWxhdWRhX3dyaXRlX2xiYVwiLFxuICAgIFwiYWxhdWRhX2ZyZWVfbWFwc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCB6ZXJvLWRpdmlzaW9uIGJ1Z3MsIG1lbW9yeSBsZWFrcywgYW5kIG1lZGlhIGluaXRpYWxpemF0aW9uIHN0YXRlIGhhbmRsaW5nIGFjcm9zcyB6b25lIG1hcCBhbGxvY2F0aW9ucyBhbmQgSS9PIGhhbmRsaW5nIGluIHRoZSBPbHltcHVzIE1BVVNCLTEwL0Z1amlmaWxtIERQQy1SMSAoQWxhdWRhKSBVU0IgbWFzcyBzdG9yYWdlIGRyaXZlci4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgdmlhIFVTQiBlbXVsYXRpb24vZnV6emluZyBmcmFtZXdvcmtzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0OToxNS43OTM2ODgyMDhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NTU4MjY5MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDk6MTUuNzk0MjM1NDc4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mzk1NTc3MTU5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBtZW1vcnkgbGVha3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFuZCBwb3RlbnRpYWwgZGl2aXNpb24tYnktemVybyBlcnJvcnMgaW4gZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy4gU3BlY2lmaWNhbGx5LCBpdCBmcmVlcyB0aGUgb3V0ZXIgcG9pbnRlciBhcnJheXMgaW4gYWxhdWRhX2ZyZWVfbWFwcygpLCBhZGRzIGVycm9yIGNsZWFudXAgaW4gYWxhdWRhX2luaXRfbWVkaWEoKSwgYWRkcyBjaGVja3MgZm9yIE5VTEwgcG9pbnRlcnMgaW4gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoKSwgYWRkcyBjaGVja3MgZm9yIHplcm8gdXpvbmVzaXplIHRvIGF2b2lkIGRpdmlzaW9uIGJ5IHplcm8sIGFuZCBtb3ZlcyBtZWRpYV9pbml0aWFsaXplZCB0byBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8uXFxuXFxuVGhlIHN0cnVjdCBhbGF1ZGFfaW5mbyBjb250YWluaW5nIGFsYXVkYV9tZWRpYV9pbmZvIGlzIGFsbG9jYXRlZCB1c2luZyBremFsbG9jX29iaigpLCBlbnN1cmluZyBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBQQkEvTEJBIG1hcHBpbmcgdGFibGVzIGFyZSBhbGxvY2F0ZWQgdmlhIGtjYWxsb2MuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gU2luY2UgdGhlc2UgY2hhbmdlcyBzdHJpY3RseSBmaXggbWVtb3J5IGxlYWtzIGFuZCBOVUxML3plcm8tY2hlY2sgc2FmZXR5IGlzc3VlcywgdGhleSBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkbyBub3QgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTNhMGE2MDUxYTdiNmYxMmRiNWY4YTUyYmFkYjQ3ZGI4MzUwZjY5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDI4IDIwOjQ4OjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNcbmluZGV4IDY5MWZlNDcwMDljZjYuLmEyYTMzMzQxOWYxZjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jXG4rKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jXG5AQCAtOTYsNiArOTYsOCBAQCBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8ge1xuIFxuIFx0dTE2ICoqbGJhX3RvX3BiYTtcdFx0LyogbG9naWNhbCB0byBwaHlzaWNhbCBibG9jayBtYXAgKi9cbiBcdHUxNiAqKnBiYV90b19sYmE7XHRcdC8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgYmxvY2sgbWFwICovXG4rXG4rXHRib29sIG1lZGlhX2luaXRpYWxpemVkO1xuIH07XG4gXG4gc3RydWN0IGFsYXVkYV9pbmZvIHtcbkBAIC0xMDUsOCArMTA3LDYgQEAgc3RydWN0IGFsYXVkYV9pbmZvIHtcbiBcdHVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5O1xuIFx0dW5zaWduZWQgbG9uZyBzZW5zZV9hc2M7XHQvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi9cbiBcdHVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjcTtcdC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi9cbi1cbi1cdGJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7XG4gfTtcbiBcbiAjZGVmaW5lIHNob3J0X3BhY2sobHNiLG1zYikgKCAoKHUxNikobHNiKSkgfCAoICgodTE2KShtc2IpKVx1MDAzY1x1MDAzYzggKSApXG5AQCAtMjkwLDE3ICsyOTAsMjUgQEAgc3RhdGljIHZvaWQgYWxhdWRhX2ZyZWVfbWFwcyAoc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICptZWRpYV9pbmZvKVxuIFx0dW5zaWduZWQgaW50IG51bV96b25lcyA9IG1lZGlhX2luZm8tXHUwMDNlY2FwYWNpdHkgXHUwMDNlXHUwMDNlIHNoaWZ0O1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4tXHRpZiAobWVkaWFfaW5mby1cdTAwM2VsYmFfdG9fcGJhICE9IE5VTEwpXG4rXHRpZiAobWVkaWFfaW5mby1cdTAwM2VsYmFfdG9fcGJhICE9IE5VTEwpIHtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3pvbmVzOyBpKyspIHtcbiBcdFx0XHRrZnJlZShtZWRpYV9pbmZvLVx1MDAzZWxiYV90b19wYmFbaV0pO1xuIFx0XHRcdG1lZGlhX2luZm8tXHUwMDNlbGJhX3RvX3BiYVtpXSA9IE5VTEw7XG4gXHRcdH1cbitcdFx0a2ZyZWUobWVkaWFfaW5mby1cdTAwM2VsYmFfdG9fcGJhKTtcbitcdFx0bWVkaWFfaW5mby1cdTAwM2VsYmFfdG9fcGJhID0gTlVMTDtcbitcdH1cbiBcbi1cdGlmIChtZWRpYV9pbmZvLVx1MDAzZXBiYV90b19sYmEgIT0gTlVMTClcbitcdGlmIChtZWRpYV9pbmZvLVx1MDAzZXBiYV90b19sYmEgIT0gTlVMTCkge1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fem9uZXM7IGkrKykge1xuIFx0XHRcdGtmcmVlKG1lZGlhX2luZm8tXHUwMDNlcGJhX3RvX2xiYVtpXSk7XG4gXHRcdFx0bWVkaWFfaW5mby1cdTAwM2VwYmFfdG9fbGJhW2ldID0gTlVMTDtcbiBcdFx0fVxuK1x0XHRrZnJlZShtZWRpYV9pbmZvLVx1MDAzZXBiYV90b19sYmEpO1xuK1x0XHRtZWRpYV9pbmZvLVx1MDAzZXBiYV90b19sYmEgPSBOVUxMO1xuK1x0fVxuK1x0bWVkaWFfaW5mby1cdTAwM2VjYXBhY2l0eSA9IDA7XG4rXHRtZWRpYV9pbmZvLVx1MDAzZXV6b25lc2l6ZSA9IDA7XG4gfVxuIFxuIC8qXG5AQCAtNDQxLDExICs0NDksMTUgQEAgc3RhdGljIGludCBhbGF1ZGFfaW5pdF9tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4gXHRcdCsgTUVESUFfSU5GTyh1cykuYmxvY2tzaGlmdCArIE1FRElBX0lORk8odXMpLnBhZ2VzaGlmdCk7XG4gXHRNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID0ga2NhbGxvYyhudW1fem9uZXMsIHNpemVvZih1MTYqKSwgR0ZQX05PSU8pO1xuIFx0TUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9IGtjYWxsb2MobnVtX3pvbmVzLCBzaXplb2YodTE2KiksIEdGUF9OT0lPKTtcbi1cdGlmIChNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID09IE5VTEwgfHwgTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9PSBOVUxMKVxuK1x0aWYgKE1FRElBX0lORk8odXMpLnBiYV90b19sYmEgPT0gTlVMTCB8fCBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhID09IE5VTEwpIHtcbitcdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG4gXHRcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XG4rXHR9XG4gXG4tXHRpZiAoYWxhdWRhX3Jlc2V0X21lZGlhKHVzKSAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpXG4rXHRpZiAoYWxhdWRhX3Jlc2V0X21lZGlhKHVzKSAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHtcbitcdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG4gXHRcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XG4rXHR9XG4gXG4gXHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7XG4gfVxuQEAgLTQ1Nyw2ICs0NjksNyBAQCBzdGF0aWMgaW50IGFsYXVkYV9pbml0X21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbiBzdGF0aWMgaW50IGFsYXVkYV9jaGVja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4ge1xuIFx0c3RydWN0IGFsYXVkYV9pbmZvICppbmZvID0gKHN0cnVjdCBhbGF1ZGFfaW5mbyAqKSB1cy1cdTAwM2VleHRyYTtcbitcdHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyAqbWVkaWFfaW5mbyA9IFx1MDAyNk1FRElBX0lORk8odXMpO1xuIFx0dW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtXHUwMDNlaW9idWY7XG4gXHRpbnQgcmM7XG4gXG5AQCAtNDcwLDcgKzQ4Myw4IEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbiBcdGlmICgoc3RhdHVzWzBdIFx1MDAyNiAweDgwKSB8fCAoKHN0YXR1c1swXSBcdTAwMjYgMHgxRikgPT0gMHgxMClcbiBcdFx0fHwgKChzdGF0dXNbMV0gXHUwMDI2IDB4MDEpID09IDApKSB7XG4gXHRcdHVzYl9zdG9yX2RiZyh1cywgXCJObyBtZWRpYSwgb3IgZG9vciBvcGVuXFxuXCIpO1xuLVx0XHRhbGF1ZGFfZnJlZV9tYXBzKFx1MDAyNk1FRElBX0lORk8odXMpKTtcbitcdFx0YWxhdWRhX2ZyZWVfbWFwcyhtZWRpYV9pbmZvKTtcbitcdFx0bWVkaWFfaW5mby1cdTAwM2VtZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2tleSA9IDB4MDI7XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2VfYXNjID0gMHgzQTtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9hc2NxID0gMHgwMDtcbkBAIC00NzgsMTIgKzQ5MiwxMyBAQCBzdGF0aWMgaW50IGFsYXVkYV9jaGVja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4gXHR9XG4gXG4gXHQvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovXG4tXHRpZiAoc3RhdHVzWzBdIFx1MDAyNiAweDA4IHx8ICFpbmZvLVx1MDAzZW1lZGlhX2luaXRpYWxpemVkKSB7XG4rXHRpZiAoc3RhdHVzWzBdIFx1MDAyNiAweDA4IHx8ICFtZWRpYV9pbmZvLVx1MDAzZW1lZGlhX2luaXRpYWxpemVkKSB7XG4gXHRcdHVzYl9zdG9yX2RiZyh1cywgXCJNZWRpYSBjaGFuZ2UgZGV0ZWN0ZWRcXG5cIik7XG4tXHRcdGFsYXVkYV9mcmVlX21hcHMoXHUwMDI2TUVESUFfSU5GTyh1cykpO1xuK1x0XHRhbGF1ZGFfZnJlZV9tYXBzKG1lZGlhX2luZm8pO1xuK1x0XHRtZWRpYV9pbmZvLVx1MDAzZW1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7XG4gXHRcdHJjID0gYWxhdWRhX2luaXRfbWVkaWEodXMpO1xuIFx0XHRpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG4tXHRcdFx0aW5mby1cdTAwM2VtZWRpYV9pbml0aWFsaXplZCA9IHRydWU7XG4rXHRcdFx0bWVkaWFfaW5mby1cdTAwM2VtZWRpYV9pbml0aWFsaXplZCA9IHRydWU7XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2Vfa2V5ID0gVU5JVF9BVFRFTlRJT047XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2VfYXNjID0gMHgyODtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9hc2NxID0gMHgwMDtcbkBAIC02ODksMTEgKzcwNCwxNiBAQCBzdGF0aWMgaW50IGFsYXVkYV9yZWFkX21hcChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKVxuICAqIENoZWNrcyB0byBzZWUgd2hldGhlciB3ZSBoYXZlIGFscmVhZHkgbWFwcGVkIGEgY2VydGFpbiB6b25lXG4gICogSWYgd2UgaGF2ZW4ndCwgdGhlIG1hcCBpcyBnZW5lcmF0ZWRcbiAgKi9cbi1zdGF0aWMgdm9pZCBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKVxuK3N0YXRpYyBpbnQgYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcbiB7XG4rXHRpZiAoIU1FRElBX0lORk8odXMpLmxiYV90b19wYmEgfHwgIU1FRElBX0lORk8odXMpLnBiYV90b19sYmEpXG4rXHRcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XG4rXG4gXHRpZiAoTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYVt6b25lXSA9PSBOVUxMXG4gXHRcdHx8IE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV0gPT0gTlVMTClcbi1cdFx0YWxhdWRhX3JlYWRfbWFwKHVzLCB6b25lKTtcbitcdFx0cmV0dXJuIGFsYXVkYV9yZWFkX21hcCh1cywgem9uZSk7XG4rXG4rXHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7XG4gfVxuIFxuIC8qXG5AQCAtODE5LDExICs4MzksMTkgQEAgc3RhdGljIGludCBhbGF1ZGFfd3JpdGVfbGJhKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IGxiYSxcbiBcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xuIFx0dW5zaWduZWQgaW50IHBhZ2VzaXplID0gTUVESUFfSU5GTyh1cykucGFnZXNpemU7XG4gXHR1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaXplO1xuLVx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQgPSBsYmEgJSB1em9uZXNpemU7XG4rXHR1bnNpZ25lZCBpbnQgbGJhX29mZnNldDtcbiBcdHVuc2lnbmVkIGludCBuZXdfcGJhX29mZnNldDtcbi1cdHVuc2lnbmVkIGludCB6b25lID0gbGJhIC8gdXpvbmVzaXplO1xuK1x0dW5zaWduZWQgaW50IHpvbmU7XG4gXG4tXHRhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZSh1cywgem9uZSk7XG4rXHRpZiAoIXV6b25lc2l6ZSlcbitcdFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcbitcbitcdGxiYV9vZmZzZXQgPSBsYmEgJSB1em9uZXNpemU7XG4rXHR6b25lID0gbGJhIC8gdXpvbmVzaXplO1xuK1xuK1x0cmVzdWx0ID0gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpO1xuK1x0aWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcbitcdFx0cmV0dXJuIHJlc3VsdDtcbiBcbiBcdHBiYSA9IE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV1bbGJhX29mZnNldF07XG4gXHRpZiAocGJhID09IDEpIHtcbkBAIC05MjcsNiArOTU1LDkgQEAgc3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbiBcdGludCByZXN1bHQ7XG4gXG4rXHRpZiAoIXV6b25lc2l6ZSlcbitcdFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcbitcbiBcdC8qXG4gXHQgKiBTaW5jZSB3ZSBvbmx5IHJlYWQgaW4gb25lIGJsb2NrIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGVcbiBcdCAqIGEgYm91bmNlIGJ1ZmZlciBhbmQgbW92ZSB0aGUgZGF0YSBhIHBpZWNlIGF0IGEgdGltZSBiZXR3ZWVuIHRoZVxuQEAgLTk1MCwxMSArOTgxLDEwIEBAIHN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdHNnID0gTlVMTDtcbiBcbiBcdHdoaWxlIChzZWN0b3JzIFx1MDAzZSAwKSB7XG4tXHRcdHVuc2lnbmVkIGludCB6b25lID0gbGJhIC8gdXpvbmVzaXplOyAvKiBpbnRlZ2VyIGRpdmlzaW9uICovXG4tXHRcdHVuc2lnbmVkIGludCBsYmFfb2Zmc2V0ID0gbGJhIC0gKHpvbmUgKiB1em9uZXNpemUpO1xuK1x0XHR1bnNpZ25lZCBpbnQgem9uZTtcbitcdFx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQ7XG4gXHRcdHVuc2lnbmVkIGludCBwYWdlcztcbiBcdFx0dTE2IHBiYTtcbi1cdFx0YWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpO1xuIFxuIFx0XHQvKiBOb3Qgb3ZlcmZsb3dpbmcgY2FwYWNpdHk/ICovXG4gXHRcdGlmIChsYmEgXHUwMDNlPSBtYXhfbGJhKSB7XG5AQCAtOTY0LDYgKzk5NCwxMyBAQCBzdGF0aWMgaW50IGFsYXVkYV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbitcdFx0em9uZSA9IGxiYSAvIHV6b25lc2l6ZTsgLyogaW50ZWdlciBkaXZpc2lvbiAqL1xuK1x0XHRsYmFfb2Zmc2V0ID0gbGJhIC0gKHpvbmUgKiB1em9uZXNpemUpO1xuK1xuK1x0XHRyZXN1bHQgPSBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZSh1cywgem9uZSk7XG4rXHRcdGlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG4rXHRcdFx0YnJlYWs7XG4rXG4gXHRcdC8qIEZpbmQgbnVtYmVyIG9mIHBhZ2VzIHdlIGNhbiByZWFkIGluIHRoaXMgYmxvY2sgKi9cbiBcdFx0cGFnZXMgPSBtaW4oc2VjdG9ycywgYmxvY2tzaXplIC0gcGFnZSk7XG4gXHRcdGxlbiA9IHBhZ2VzIFx1MDAzY1x1MDAzYyBwYWdlc2hpZnQ7XG5AQCAtMTAyMSw2ICsxMDU4LDkgQEAgc3RhdGljIGludCBhbGF1ZGFfd3JpdGVfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdHUxNiBsYmEsIG1heF9sYmE7XG4gXHRpbnQgcmVzdWx0O1xuIFxuK1x0aWYgKCFNRURJQV9JTkZPKHVzKS51em9uZXNpemUpXG4rXHRcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XG4rXG4gXHQvKlxuIFx0ICogU2luY2Ugd2UgZG9uJ3Qgd3JpdGUgdGhlIHVzZXIgZGF0YSBkaXJlY3RseSB0byB0aGUgZGV2aWNlLFxuIFx0ICogd2UgaGF2ZSB0byBjcmVhdGUgYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2VcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjQ5OjE1Ljc5NDIzNjI4OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTc0MzYzMzMxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bi4gVGhlIHRhcmdldCBmaWxlIGlzIGBkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCBpdCBpbnZvbHZlcyBzb21lIHJlZmFjdG9yaW5nIGFuZCBidWcgZml4ZXMsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBtb3ZpbmcgYG1lZGlhX2luaXRpYWxpemVkYCBpbnRvIGEgcGVyLW1lZGlhIHN0cnVjdCwgd2hpY2ggaXMgZ2VuZXJhbGx5IGEgZ29vZCBwcmFjdGljZSBmb3IgY29ycmVjdCBzdGF0ZSBtYW5hZ2VtZW50LiBCZXlvbmQgdGhhdCwgaXQncyBhZGRyZXNzaW5nIGEgaGFuZGZ1bCBvZiBpc3N1ZXM6IG1lbW9yeSBsZWFrcyAoc3BlY2lmaWNhbGx5IGluIGBhbGF1ZGFfZnJlZV9tYXBzKClgLCB3aGVyZSB0aGUgYXJyYXkgb2YgcG9pbnRlcnMgd2FzIGJlaW5nIGxlYWtlZCwgdGhvdWdoIHRoZSBlbGVtZW50cyB3ZXJlIGZyZWVkKSwgYW5kIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgZGl2aXNpb24tYnktemVybyBlcnJvcnMuIFRoZSBmaXhlcyBpbmNsdWRlIHNldHRpbmcgY2FwYWNpdHkgYW5kIHNpemUgdG8gemVybywgZnJlZWluZyBtYXBzIG9uIGZhaWx1cmUsIHVwZGF0aW5nIG1lZGlhIGluaXRpYWxpemVkIHBlciBtZWRpYSwgYW5kIHByb3BlciBlcnJvciBoYW5kbGluZy4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IHRob3JvdWdoIGNsZWFudXAuIEl0J3MgZ29vZCB0byBzZWUgcm9idXN0IGVycm9yIGNoZWNraW5nIGFkZGVkIGluIHNldmVyYWwgZnVuY3Rpb25zIHN1Y2ggYXMgaW4gYGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKClgLCBgYWxhdWRhX3dyaXRlX2xiYSgpYCwgYGFsYXVkYV9yZWFkX2RhdGEoKWAsIGFuZCBgYWxhdWRhX3dyaXRlX2RhdGEoKWAuXG5cbk5vdywgYmVmb3JlIEkganVtcCB0byBhIGNvbmNsdXNpb24sIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBleGFtaW5lIHRoZSBjb250ZXh0IHdpdGhpbiBgYWxhdWRhLmNgLiBNeSBtYWluIGNvbmNlcm5zIGFyZTogQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmlza3MgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYXJlIHRoZXJlIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhcmUgdGhlcmUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgcmVhZCBvciBjb3BpZWQ/IEknbGwgbmVlZCB0byBsb29rIGF0IGhvdyB0aGVzZSBjaGFuZ2VzIGludGVyYWN0IHdpdGggdGhlIGV4aXN0aW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGlmIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIHdlcmUgaW50cm9kdWNlZCwgb3IgaWYgdGhlIHBhdGNoZXMgaW5hZHZlcnRlbnRseSBleHBvc2VkIHNvbWV0aGluZyBwcmV2aW91c2x5IGhpZGRlbi4gVGhhdCdzIHdoZXJlIGEgS01TQU4gc2Vzc2lvbiBtaWdodCBiZSB1c2VmdWwsIHBhcnRpY3VsYXJseSBpZiB0aGVyZSBhcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgb3IgY29udHJvbCBmbG93IGNoYW5nZXMgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1OTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0OTozNy41Mzc4NzQ3NTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjY3NDYxMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUVESUFfSU5GT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTAzPXN0cnVjdCBhbGF1ZGFfaW5mbyB7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNi0jZGVmaW5lIE1FRElBX1BPUlQodXMpIHVzLVxcdTAwM2VzcmItXFx1MDAzZWRldmljZS1cXHUwMDNlbHVuXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTc6I2RlZmluZSBNRURJQV9JTkZPKHVzKSAoKHN0cnVjdCBhbGF1ZGFfaW5mbyAqKXVzLVxcdTAwM2VleHRyYSktXFx1MDAzZXBvcnRbTUVESUFfUE9SVCh1cyldXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTgtXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTM5MD1zdGF0aWMgaW50IGFsYXVkYV9pbml0X21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDMyLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDMzOlxcdE1FRElBX0lORk8odXMpLmNhcGFjaXR5ID0gMSBcXHUwMDNjXFx1MDAzYyBtZWRpYV9pbmZvLVxcdTAwM2VjaGlwc2hpZnQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MzQtXFx0dXNiX3N0b3JfZGJnKHVzLCBcXFwiRm91bmQgbWVkaWEgd2l0aCBjYXBhY2l0eTogJWxkTUJcXFxcblxcXCIsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MzU6XFx0XFx0ICAgICBNRURJQV9JTkZPKHVzKS5jYXBhY2l0eSBcXHUwMDNlXFx1MDAzZSAyMCk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MzYtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0Mzc6XFx0TUVESUFfSU5GTyh1cykucGFnZXNoaWZ0ID0gbWVkaWFfaW5mby1cXHUwMDNlcGFnZXNoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDM4OlxcdE1FRElBX0lORk8odXMpLmJsb2Nrc2hpZnQgPSBtZWRpYV9pbmZvLVxcdTAwM2VibG9ja3NoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDM5OlxcdE1FRElBX0lORk8odXMpLnpvbmVzaGlmdCA9IG1lZGlhX2luZm8tXFx1MDAzZXpvbmVzaGlmdDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ0MC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0MTpcXHRNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZSA9IDEgXFx1MDAzY1xcdTAwM2MgbWVkaWFfaW5mby1cXHUwMDNlcGFnZXNoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDQyOlxcdE1FRElBX0lORk8odXMpLmJsb2Nrc2l6ZSA9IDEgXFx1MDAzY1xcdTAwM2MgbWVkaWFfaW5mby1cXHUwMDNlYmxvY2tzaGlmdDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0MzpcXHRNRURJQV9JTkZPKHVzKS56b25lc2l6ZSA9IDEgXFx1MDAzY1xcdTAwM2MgbWVkaWFfaW5mby1cXHUwMDNlem9uZXNoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDQ0LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDQ1OlxcdE1FRElBX0lORk8odXMpLnV6b25lc2l6ZSA9ICgoMSBcXHUwMDNjXFx1MDAzYyBtZWRpYV9pbmZvLVxcdTAwM2V6b25lc2hpZnQpIC8gMTI4KSAqIDEyNTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0NjpcXHRNRURJQV9JTkZPKHVzKS5ibG9ja21hc2sgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemUgLSAxO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDQ3LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDQ4OlxcdG51bV96b25lcyA9IE1FRElBX0lORk8odXMpLmNhcGFjaXR5IFxcdTAwM2VcXHUwMDNlIChNRURJQV9JTkZPKHVzKS56b25lc2hpZnRcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0OTpcXHRcXHQrIE1FRElBX0lORk8odXMpLmJsb2Nrc2hpZnQgKyBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDUwOlxcdE1FRElBX0lORk8odXMpLnBiYV90b19sYmEgPSBrY2FsbG9jKG51bV96b25lcywgc2l6ZW9mKHUxNiopLCBHRlBfTk9JTyk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NTE6XFx0TUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9IGtjYWxsb2MobnVtX3pvbmVzLCBzaXplb2YodTE2KiksIEdGUF9OT0lPKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ1MjpcXHRpZiAoTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYSA9PSBOVUxMIHx8IE1FRElBX0lORk8odXMpLmxiYV90b19wYmEgPT0gTlVMTCkge1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDUzOlxcdFxcdGFsYXVkYV9mcmVlX21hcHMoXFx1MDAyNk1FRElBX0lORk8odXMpKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ1NC1cXHRcXHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NTctXFx0aWYgKGFsYXVkYV9yZXNldF9tZWRpYSh1cykgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NTg6XFx0XFx0YWxhdWRhX2ZyZWVfbWFwcyhcXHUwMDI2TUVESUFfSU5GTyh1cykpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDU5LVxcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTQ2OT1zdGF0aWMgaW50IGFsYXVkYV9jaGVja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ3MS1cXHRzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIHVzLVxcdTAwM2VleHRyYTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ3MjpcXHRzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gKm1lZGlhX2luZm8gPSBcXHUwMDI2TUVESUFfSU5GTyh1cyk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NzMtXFx0dW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtXFx1MDAzZWlvYnVmO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz01ODM9c3RhdGljIGludCBhbGF1ZGFfcmVhZF9tYXAoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTg3LVxcdGludCBpLCBqO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NTg4OlxcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NTg5OlxcdHVuc2lnbmVkIGludCB1em9uZXNpemUgPSBNRURJQV9JTkZPKHVzKS51em9uZXNpemU7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01OTAtXFx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQsIGxiYV9yZWFsLCBibG9ja251bTtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjkwLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NjkxOlxcdE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV0gPSBsYmFfdG9fcGJhO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NjkyOlxcdE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV0gPSBwYmFfdG9fbGJhO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjkzLVxcdHJlc3VsdCA9IDA7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTcwNz1zdGF0aWMgaW50IGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHpvbmUpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03MDgte1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzA5OlxcdGlmICghTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSB8fCAhTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYSlcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTcxMC1cXHRcXHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzExLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzEyOlxcdGlmIChNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdID09IE5VTExcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjcxMzpcXHRcXHR8fCBNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhW3pvbmVdID09IE5VTEwpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03MTQtXFx0XFx0cmV0dXJuIGFsYXVkYV9yZWFkX21hcCh1cywgem9uZSk7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTc1MT1zdGF0aWMgaW50IGFsYXVkYV9yZWFkX2Jsb2NrX3JhdyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc2Ny1cXHRyZXR1cm4gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLVxcdTAwM2VyZWN2X2J1bGtfcGlwZSxcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjc2ODpcXHRcXHRkYXRhLCAoTUVESUFfSU5GTyh1cykucGFnZXNpemUgKyA2NCkgKiBwYWdlcywgTlVMTCk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03NjktfVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz03Nzc9c3RhdGljIGludCBhbGF1ZGFfcmVhZF9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc4MC1cXHRpbnQgaSwgcmM7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3ODE6XFx0dW5zaWduZWQgaW50IHBhZ2VzaXplID0gTUVESUFfSU5GTyh1cykucGFnZXNpemU7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03ODItXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTgwMj1zdGF0aWMgaW50IGFsYXVkYV93cml0ZV9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgxOC1cXHRyYyA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCBpbmZvLVxcdTAwM2V3cl9lcCwgZGF0YSxcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgxOTpcXHRcXHQoTUVESUFfSU5GTyh1cykucGFnZXNpemUgKyA2NCkgKiBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemUsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MjAtXFx0XFx0TlVMTCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTgzMD1zdGF0aWMgaW50IGFsYXVkYV93cml0ZV9sYmEoc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgbGJhLFxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MzctXFx0aW50IGksIHJlc3VsdDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgzODpcXHR1bnNpZ25lZCBpbnQgdXpvbmVzaXplID0gTUVESUFfSU5GTyh1cykudXpvbmVzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODM5OlxcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODQwOlxcdHVuc2lnbmVkIGludCBwYWdlc2l6ZSA9IE1FRElBX0lORk8odXMpLnBhZ2VzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODQxOlxcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemU7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NDItXFx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQ7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg1NS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjg1NjpcXHRwYmEgPSBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdW2xiYV9vZmZzZXRdO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODU3LVxcdGlmIChwYmEgPT0gMSkge1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NjYtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4Njc6XFx0bmV3X3BiYSA9IGFsYXVkYV9maW5kX3VudXNlZF9wYmEoXFx1MDAyNk1FRElBX0lORk8odXMpLCB6b25lKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg2OC1cXHRpZiAoIW5ld19wYmEpIHtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTI1LVxcdG5ld19wYmFfb2Zmc2V0ID0gbmV3X3BiYSAtICh6b25lICogem9uZXNpemUpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTI2OlxcdE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV1bbmV3X3BiYV9vZmZzZXRdID0gbGJhO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTI3OlxcdE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV1bbGJhX29mZnNldF0gPSBuZXdfcGJhO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTI4LVxcdHVzYl9zdG9yX2RiZyh1cywgXFxcIlJlbWFwcGVkIExCQSAlZCB0byBQQkEgJWRcXFxcblxcXCIsIGxiYSwgbmV3X3BiYSk7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTkzNC1cXHRcXHRcXHRyZXR1cm4gcmVzdWx0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTM1OlxcdFxcdE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV1bcGJhX29mZnNldF0gPSBVTkRFRjtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTkzNi1cXHR9XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTk0ND1zdGF0aWMgaW50IGFsYXVkYV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTk0OS1cXHR1bnNpZ25lZCBpbnQgcGFnZSwgbGVuLCBvZmZzZXQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5NTA6XFx0dW5zaWduZWQgaW50IGJsb2Nrc2hpZnQgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTUxOlxcdHVuc2lnbmVkIGludCBwYWdlc2hpZnQgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5NTI6XFx0dW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IE1FRElBX0lORk8odXMpLmJsb2Nrc2l6ZTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjk1MzpcXHR1bnNpZ25lZCBpbnQgcGFnZXNpemUgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjk1NDpcXHR1bnNpZ25lZCBpbnQgdXpvbmVzaXplID0gTUVESUFfSU5GTyh1cykudXpvbmVzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTU1LVxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTk3NS1cXHRsYmEgPSBhZGRyZXNzIFxcdTAwM2VcXHUwMDNlIGJsb2Nrc2hpZnQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5NzY6XFx0cGFnZSA9IChhZGRyZXNzIFxcdTAwMjYgTUVESUFfSU5GTyh1cykuYmxvY2ttYXNrKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjk3NzpcXHRtYXhfbGJhID0gTUVESUFfSU5GTyh1cykuY2FwYWNpdHkgXFx1MDAzZVxcdTAwM2UgKGJsb2Nrc2hpZnQgKyBwYWdlc2hpZnQpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTc4LVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDA4LVxcdFxcdC8qIEZpbmQgd2hlcmUgdGhpcyBsYmEgbGl2ZXMgb24gZGlzayAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTAwOTpcXHRcXHRwYmEgPSBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdW2xiYV9vZmZzZXRdO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTAxMC1cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTA0OD1zdGF0aWMgaW50IGFsYXVkYV93cml0ZV9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDUyLVxcdHVuc2lnbmVkIGludCBwYWdlLCBsZW4sIG9mZnNldDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwNTM6XFx0dW5zaWduZWQgaW50IGJsb2Nrc2hpZnQgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTA1NDpcXHR1bnNpZ25lZCBpbnQgcGFnZXNoaWZ0ID0gTUVESUFfSU5GTyh1cykucGFnZXNoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTA1NTpcXHR1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTA1NjpcXHR1bnNpZ25lZCBpbnQgcGFnZXNpemUgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwNTctXFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTA2MC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwNjE6XFx0aWYgKCFNRURJQV9JTkZPKHVzKS51em9uZXNpemUpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDYyLVxcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwODYtXFx0bGJhID0gYWRkcmVzcyBcXHUwMDNlXFx1MDAzZSBibG9ja3NoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTA4NzpcXHRwYWdlID0gKGFkZHJlc3MgXFx1MDAyNiBNRURJQV9JTkZPKHVzKS5ibG9ja21hc2spO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTA4ODpcXHRtYXhfbGJhID0gTUVESUFfSU5GTyh1cykuY2FwYWNpdHkgXFx1MDAzZVxcdTAwM2UgKHBhZ2VzaGlmdCArIGJsb2Nrc2hpZnQpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTA4OS1cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTE3MD1zdGF0aWMgaW50IGFsYXVkYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExOTgtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTk5OlxcdFxcdG51bV96b25lcyA9IE1FRElBX0lORk8odXMpLmNhcGFjaXR5IFxcdTAwM2VcXHUwMDNlIChNRURJQV9JTkZPKHVzKS56b25lc2hpZnRcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyMDA6XFx0XFx0XFx0KyBNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0ICsgTUVESUFfSU5GTyh1cykucGFnZXNoaWZ0KTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyMDEtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjAyOlxcdFxcdGNhcGFjaXR5ID0gbnVtX3pvbmVzICogTUVESUFfSU5GTyh1cykudXpvbmVzaXplXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjAzOlxcdFxcdFxcdCogTUVESUFfSU5GTyh1cykuYmxvY2tzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTIwNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDk6MzkuMTA0NjI2MTU4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMzczNjM2ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBhbGF1ZGFfaW5mb2AgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpc3NlY3QgaG93IHRoZSBgc3RydWN0IGFsYXVkYV9pbmZvYCBpcyBiZWluZyBhbGxvY2F0ZWQgaW4gdGhpcyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbWVtb3J5IGZvb3RwcmludCwgaG93IGl0J3MgaW5pdGlhbGl6ZWQsIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGl0cyBsaWZldGltZS4gSXMgaXQgc3RhY2stYWxsb2NhdGVkLCBoZWFwLWFsbG9jYXRlZCwgc3RhdGljYWxseSBhbGxvY2F0ZWQ/IEVhY2ggbWV0aG9kIGhhcyBkaWZmZXJlbnQgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSwgcmVzb3VyY2UgdXNhZ2UsIGFuZCBwb3RlbnRpYWwgZm9yIG1lbW9yeSBsZWFrcyBvciBmcmFnbWVudGF0aW9uLiBJIG5lZWQgdG8gbWVudGFsbHkgdHJhY2UgdGhlIGNvZGUgdG8gcGlucG9pbnQgZXhhY3RseSB3aGVyZSB0aGlzIHN0cnVjdHVyZSBpcyBjcmVhdGVkLCBhbmQgaWRlYWxseSwgd2hlcmUgaXQncyBkZXN0cm95ZWQgb3IgcmVsZWFzZWQgaWYgaXQncyBkeW5hbWljYWxseSBhbGxvY2F0ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgaXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnQgb2YgdGhlIHN5c3RlbSBiZWhhdmVzIHVuZGVyIGRpZmZlcmVudCBsb2FkIGNvbmRpdGlvbnMuIFRoaXMgd2lsbCBoZWxwIGluZm9ybSB3aGV0aGVyIGl0IGNvdWxkIGJlIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgd2hldGhlciBpdCdzIHN1c2NlcHRpYmxlIHRvIG1lbW9yeSBsZWFrcywgb3IgaWYgaXQgaGFzIGFueSBvdGhlciBwb3RlbnRpYWwgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjEwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDk6NDEuMzQxOTkzNDQ0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTczODQxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jLiphbGF1ZGFfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTE1MD1zdGF0aWMgaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cylcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE1NS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNTY6XFx0dXMtXFx1MDAzZWV4dHJhID0ga3phbGxvY19vYmooc3RydWN0IGFsYXVkYV9pbmZvLCBHRlBfTk9JTyk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTU3LVxcdGlmICghdXMtXFx1MDAzZWV4dHJhKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0OTo0MS40MTE3NDAwNzNaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM5NDAxNzM2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS01TQU4gTmVjZXNzaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIGB1cy1cdTAwM2VleHRyYWAsIHdoaWNoIGlzIGEgYHN0cnVjdCBhbGF1ZGFfaW5mb2AsIGlzIGluaXRpYWxpemVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgd2hpY2ggbWVhbnMgZXZlcnl0aGluZywgaW5jbHVkaW5nIHRoZSBlbWJlZGRlZCBgc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvIHBvcnRbMl1gLCBpcyB6ZXJvZWQgb3V0IHJpZ2h0IGZyb20gdGhlIHN0YXJ0LiBUaGF0J3MgY3J1Y2lhbC4gVGhlIGBtZWRpYV9pbml0aWFsaXplZGAgZmxhZywgd2hpY2ggd2FzIG1vdmVkIGludG8gdGhhdCB6ZXJvLWluaXRpYWxpemVkIGBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm9gLCBpcyBub3cgYWxzbyBndWFyYW50ZWVkIHRvIHN0YXJ0IGF0IHplcm8uXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgYnVnIGZpeGVzIHRoZW1zZWx2ZXMuIFdlJ3JlIGFkZHJlc3NpbmcgYSBtZW1vcnkgbGVhayBpbiBgYWxhdWRhX2ZyZWVfbWFwcygpYCwgd2hlcmUgb3V0ZXIgYXJyYXlzIGBsYmFfdG9fcGJhYCBhbmQgYHBiYV90b19sYmFgIHdlcmVuJ3QgYmVpbmcgZnJlZWQuIFdlJ3JlIGFsc28gemVyb2luZyBvdXQgYGNhcGFjaXR5YCBhbmQgYHV6b25lc2l6ZWAgdXBvbiBmcmVlaW5nIHRob3NlIG1hcHMgYW5kIGNoZWNraW5nIGZvciBOVUxMIG9yIHplcm8gYHV6b25lc2l6ZWAgaW4gdGhlIHJlYWQvd3JpdGUgcGF0aHMgdG8gcHJldmVudCB0aG9zZSBuYXN0eSBkaXZpc2lvbi1ieS16ZXJvIG9yIE5VTEwgcG9pbnRlciBpc3N1ZXMuIEZ1cnRoZXJtb3JlLCB0aGUgZXJyb3IgY2xlYW51cCBpbiBgYWxhdWRhX2luaXRfbWVkaWEoKWAgbm93IGNvcnJlY3RseSBjYWxscyBgYWxhdWRhX2ZyZWVfbWFwcygpYCwgd2hpY2ggaXMgZ29vZC4gQW5kIGZpbmFsbHksIGBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZSgpYCBoYXMgYSBjaGVjayBmb3IgYE1FRElBX0lORk8odXMpLmxiYV90b19wYmFgIGJlZm9yZSBpdCBpbmRleGVzIGl0LiBUaGF0J3MgYWxsIGdvb2QsIHNvbGlkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogYXJlIHdlIGluYWR2ZXJ0ZW50bHkgY3JlYXRpbmcsIGFjY2Vzc2luZywgb3IgcGFzc2luZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB0byB1c2VyIHNwYWNlPyBUaGUgYW5zd2VyIGlzIGEgY2xlYXIgXCJuby5cIiBBbGwgYWxsb2NhdGlvbnMgdXNlIGVpdGhlciBga3phbGxvY19vYmpgIG9yIGBrY2FsbG9jYCwgbWVhbmluZyB0aGV5J3JlIHplcm8taW5pdGlhbGl6ZWQuIFRoaXMgaXNuJ3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzOyBpdCdzIGFib3V0IGNsZWFuaW5nIHVwIG1lbW9yeSBsZWFrcywgcHJldmVudGluZyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBhcml0aG1ldGljIGVycm9ycywgYW5kIG1vdmluZyBhIGZsYWcgdG8gYWxsb3cgdHJhY2tpbmcgcGVyLXBvcnQgbWVkaWEgaW5pdGlhbGl6YXRpb24gaW5zdGVhZCBvZiBnbG9iYWxseS5cblxuVGhlc2UgYXJlIGNsYXNzaWMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGVycm9yIGhhbmRsaW5nIGlzc3Vlcy4gS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGNhdGNoIHRoZSBvdXQtb2YtYm91bmRzLCB1c2UtYWZ0ZXItZnJlZSwgYW5kIGRvdWJsZS1mcmVlIHByb2JsZW1zLCBhcyB3ZSdyZSBub3QgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UgZG9uJ3QgbmVlZCBLTVNBTiBoZXJlLlxuXG5MZXQncyBkbyBhIGZpbmFsIGNoZWNrIGFnYWluc3QgdGhlIEtNU0FOIGNyaXRlcmlhOlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmc/IE5vLiBBbGwncyBpbml0aWFsaXplZC5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIEV2ZXJ5dGhpbmcgaXMgemVyby1pbml0aWFsaXplZC5cbjMuICBBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggbGF0ZXIgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOZWdhdGl2ZS4gWmVyby1pbml0aWFsaXplZC5cbjQuICBCb3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBieXRlcz8gQWJzb2x1dGVseSBub3QuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU49ZmFsc2VgLiBUaW1lIHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU4NiwiT3V0cHV0VG9rZW5zIjoyMTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDk6NTUuMzUxOTE4NDE3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgbWVtb3J5IGxlYWtzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbmQgcG90ZW50aWFsIGRpdmlzaW9uLWJ5LXplcm8gZXJyb3JzIGluIGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMuIFNwZWNpZmljYWxseSwgaXQgZnJlZXMgdGhlIG91dGVyIHBvaW50ZXIgYXJyYXlzIGluIGFsYXVkYV9mcmVlX21hcHMoKSwgYWRkcyBlcnJvciBjbGVhbnVwIGluIGFsYXVkYV9pbml0X21lZGlhKCksIGFkZHMgY2hlY2tzIGZvciBOVUxMIHBvaW50ZXJzIGluIGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKCksIGFkZHMgY2hlY2tzIGZvciB6ZXJvIHV6b25lc2l6ZSB0byBhdm9pZCBkaXZpc2lvbiBieSB6ZXJvLCBhbmQgbW92ZXMgbWVkaWFfaW5pdGlhbGl6ZWQgdG8gc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvLlxcblxcblRoZSBzdHJ1Y3QgYWxhdWRhX2luZm8gY29udGFpbmluZyBhbGF1ZGFfbWVkaWFfaW5mbyBpcyBhbGxvY2F0ZWQgdXNpbmcga3phbGxvY19vYmooKSwgZW5zdXJpbmcgYWxsIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC4gUEJBL0xCQSBtYXBwaW5nIHRhYmxlcyBhcmUgYWxsb2NhdGVkIHZpYSBrY2FsbG9jLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFNpbmNlIHRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgZml4IG1lbW9yeSBsZWFrcyBhbmQgTlVMTC96ZXJvLWNoZWNrIHNhZmV0eSBpc3N1ZXMsIHRoZXkgZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG8gbm90IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBtZW1vcnkgbGVha3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFuZCBwb3RlbnRpYWwgZGl2aXNpb24tYnktemVybyBlcnJvcnMgaW4gZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy4gU3BlY2lmaWNhbGx5LCBpdCBmcmVlcyB0aGUgb3V0ZXIgcG9pbnRlciBhcnJheXMgaW4gYWxhdWRhX2ZyZWVfbWFwcygpLCBhZGRzIGVycm9yIGNsZWFudXAgaW4gYWxhdWRhX2luaXRfbWVkaWEoKSwgYWRkcyBjaGVja3MgZm9yIE5VTEwgcG9pbnRlcnMgaW4gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoKSwgYWRkcyBjaGVja3MgZm9yIHplcm8gdXpvbmVzaXplIHRvIGF2b2lkIGRpdmlzaW9uIGJ5IHplcm8sIGFuZCBtb3ZlcyBtZWRpYV9pbml0aWFsaXplZCB0byBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8uXFxuXFxuVGhlIHN0cnVjdCBhbGF1ZGFfaW5mbyBjb250YWluaW5nIGFsYXVkYV9tZWRpYV9pbmZvIGlzIGFsbG9jYXRlZCB1c2luZyBremFsbG9jX29iaigpLCBlbnN1cmluZyBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBQQkEvTEJBIG1hcHBpbmcgdGFibGVzIGFyZSBhbGxvY2F0ZWQgdmlhIGtjYWxsb2MuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gU2luY2UgdGhlc2UgY2hhbmdlcyBzdHJpY3RseSBmaXggbWVtb3J5IGxlYWtzIGFuZCBOVUxML3plcm8tY2hlY2sgc2FmZXR5IGlzc3VlcywgdGhleSBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkbyBub3QgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowp284f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-28 20:44:47 +0000 UTC FinishedAt: 2026-08-28 20:49:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_STORAGE_ALAUDA", "USB_STORAGE", "USB", "SCSI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "8d3ae59288f1e7d58d76558a6ee96d533bc5019f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_STORAGE_ALAUDA", "USB_STORAGE", "USB", "SCSI" ], "series_id": "f0d53c92-bfa9-4bd9-95ec-138de1289886" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alauda_transport", "alauda_probe", "init_alauda", "alauda_check_media", "alauda_read_data", "alauda_write_data", "alauda_write_lba", "alauda_free_maps" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9TVE9SQUdFX0FMQVVEQSYjMzQ7LAogICAgJiMzNDtVU0JfU1RPUkFHRSYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7U0NTSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FsYXVkYV90cmFuc3BvcnQmIzM0OywKICAgICYjMzQ7YWxhdWRhX3Byb2JlJiMzNDssCiAgICAmIzM0O2luaXRfYWxhdWRhJiMzNDssCiAgICAmIzM0O2FsYXVkYV9jaGVja19tZWRpYSYjMzQ7LAogICAgJiMzNDthbGF1ZGFfcmVhZF9kYXRhJiMzNDssCiAgICAmIzM0O2FsYXVkYV93cml0ZV9kYXRhJiMzNDssCiAgICAmIzM0O2FsYXVkYV93cml0ZV9sYmEmIzM0OywKICAgICYjMzQ7YWxhdWRhX2ZyZWVfbWFwcyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBtZW1vcnkgbGVha3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFuZCBwb3RlbnRpYWwgZGl2aXNpb24tYnktemVybyBlcnJvcnMgaW4gZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy4gU3BlY2lmaWNhbGx5LCBpdCBmcmVlcyB0aGUgb3V0ZXIgcG9pbnRlciBhcnJheXMgaW4gYWxhdWRhX2ZyZWVfbWFwcygpLCBhZGRzIGVycm9yIGNsZWFudXAgaW4gYWxhdWRhX2luaXRfbWVkaWEoKSwgYWRkcyBjaGVja3MgZm9yIE5VTEwgcG9pbnRlcnMgaW4gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoKSwgYWRkcyBjaGVja3MgZm9yIHplcm8gdXpvbmVzaXplIHRvIGF2b2lkIGRpdmlzaW9uIGJ5IHplcm8sIGFuZCBtb3ZlcyBtZWRpYV9pbml0aWFsaXplZCB0byBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8uXG5cblRoZSBzdHJ1Y3QgYWxhdWRhX2luZm8gY29udGFpbmluZyBhbGF1ZGFfbWVkaWFfaW5mbyBpcyBhbGxvY2F0ZWQgdXNpbmcga3phbGxvY19vYmooKSwgZW5zdXJpbmcgYWxsIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC4gUEJBL0xCQSBtYXBwaW5nIHRhYmxlcyBhcmUgYWxsb2NhdGVkIHZpYSBrY2FsbG9jLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFNpbmNlIHRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgZml4IG1lbW9yeSBsZWFrcyBhbmQgTlVMTC96ZXJvLWNoZWNrIHNhZmV0eSBpc3N1ZXMsIHRoZXkgZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG8gbm90IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgemVyby1kaXZpc2lvbiBidWdzLCBtZW1vcnkgbGVha3MsIGFuZCBtZWRpYSBpbml0aWFsaXphdGlvbiBzdGF0ZSBoYW5kbGluZyBhY3Jvc3Mgem9uZSBtYXAgYWxsb2NhdGlvbnMgYW5kIEkvTyBoYW5kbGluZyBpbiB0aGUgT2x5bXB1cyBNQVVTQi0xMC9GdWppZmlsbSBEUEMtUjEgKEFsYXVkYSkgVVNCIG1hc3Mgc3RvcmFnZSBkcml2ZXIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIHZpYSBVU0IgZW11bGF0aW9uL2Z1enppbmcgZnJhbWV3b3Jrcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDUzYTBhNjA1MWE3YjZmMTJkYjVmOGE1MmJhZGI0N2RiODM1MGY2OWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyOCAyMDo0ODozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1xuaW5kZXggNjkxZmU0NzAwOWNmNi4uYTJhMzMzNDE5ZjFmNyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNcbkBAIC05Niw2ICYjNDM7OTYsOCBAQCBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8ge1xuIFxuIFx0dTE2ICoqbGJhX3RvX3BiYTtcdFx0LyogbG9naWNhbCB0byBwaHlzaWNhbCBibG9jayBtYXAgKi9cbiBcdHUxNiAqKnBiYV90b19sYmE7XHRcdC8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgYmxvY2sgbWFwICovXG4mIzQzO1xuJiM0MztcdGJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7XG4gfTtcbiBcbiBzdHJ1Y3QgYWxhdWRhX2luZm8ge1xuQEAgLTEwNSw4ICYjNDM7MTA3LDYgQEAgc3RydWN0IGFsYXVkYV9pbmZvIHtcbiBcdHVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5O1xuIFx0dW5zaWduZWQgbG9uZyBzZW5zZV9hc2M7XHQvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi9cbiBcdHVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjcTtcdC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi9cbi1cbi1cdGJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7XG4gfTtcbiBcbiAjZGVmaW5lIHNob3J0X3BhY2sobHNiLG1zYikgKCAoKHUxNikobHNiKSkgfCAoICgodTE2KShtc2IpKVx1MDAzY1x1MDAzYzggKSApXG5AQCAtMjkwLDE3ICYjNDM7MjkwLDI1IEBAIHN0YXRpYyB2b2lkIGFsYXVkYV9mcmVlX21hcHMgKHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyAqbWVkaWFfaW5mbylcbiBcdHVuc2lnbmVkIGludCBudW1fem9uZXMgPSBtZWRpYV9pbmZvLVx1MDAzZWNhcGFjaXR5IFx1MDAzZVx1MDAzZSBzaGlmdDtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuLVx0aWYgKG1lZGlhX2luZm8tXHUwMDNlbGJhX3RvX3BiYSAhPSBOVUxMKVxuJiM0MztcdGlmIChtZWRpYV9pbmZvLVx1MDAzZWxiYV90b19wYmEgIT0gTlVMTCkge1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fem9uZXM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdFx0a2ZyZWUobWVkaWFfaW5mby1cdTAwM2VsYmFfdG9fcGJhW2ldKTtcbiBcdFx0XHRtZWRpYV9pbmZvLVx1MDAzZWxiYV90b19wYmFbaV0gPSBOVUxMO1xuIFx0XHR9XG4mIzQzO1x0XHRrZnJlZShtZWRpYV9pbmZvLVx1MDAzZWxiYV90b19wYmEpO1xuJiM0MztcdFx0bWVkaWFfaW5mby1cdTAwM2VsYmFfdG9fcGJhID0gTlVMTDtcbiYjNDM7XHR9XG4gXG4tXHRpZiAobWVkaWFfaW5mby1cdTAwM2VwYmFfdG9fbGJhICE9IE5VTEwpXG4mIzQzO1x0aWYgKG1lZGlhX2luZm8tXHUwMDNlcGJhX3RvX2xiYSAhPSBOVUxMKSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV96b25lczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0XHRrZnJlZShtZWRpYV9pbmZvLVx1MDAzZXBiYV90b19sYmFbaV0pO1xuIFx0XHRcdG1lZGlhX2luZm8tXHUwMDNlcGJhX3RvX2xiYVtpXSA9IE5VTEw7XG4gXHRcdH1cbiYjNDM7XHRcdGtmcmVlKG1lZGlhX2luZm8tXHUwMDNlcGJhX3RvX2xiYSk7XG4mIzQzO1x0XHRtZWRpYV9pbmZvLVx1MDAzZXBiYV90b19sYmEgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XHRtZWRpYV9pbmZvLVx1MDAzZWNhcGFjaXR5ID0gMDtcbiYjNDM7XHRtZWRpYV9pbmZvLVx1MDAzZXV6b25lc2l6ZSA9IDA7XG4gfVxuIFxuIC8qXG5AQCAtNDQxLDExICYjNDM7NDQ5LDE1IEBAIHN0YXRpYyBpbnQgYWxhdWRhX2luaXRfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxuIFx0XHQmIzQzOyBNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0ICYjNDM7IE1FRElBX0lORk8odXMpLnBhZ2VzaGlmdCk7XG4gXHRNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID0ga2NhbGxvYyhudW1fem9uZXMsIHNpemVvZih1MTYqKSwgR0ZQX05PSU8pO1xuIFx0TUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9IGtjYWxsb2MobnVtX3pvbmVzLCBzaXplb2YodTE2KiksIEdGUF9OT0lPKTtcbi1cdGlmIChNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID09IE5VTEwgfHwgTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9PSBOVUxMKVxuJiM0MztcdGlmIChNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID09IE5VTEwgfHwgTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9PSBOVUxMKSB7XG4mIzQzO1x0XHRhbGF1ZGFfZnJlZV9tYXBzKFx1MDAyNk1FRElBX0lORk8odXMpKTtcbiBcdFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcbiYjNDM7XHR9XG4gXG4tXHRpZiAoYWxhdWRhX3Jlc2V0X21lZGlhKHVzKSAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpXG4mIzQzO1x0aWYgKGFsYXVkYV9yZXNldF9tZWRpYSh1cykgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7XG4mIzQzO1x0XHRhbGF1ZGFfZnJlZV9tYXBzKFx1MDAyNk1FRElBX0lORk8odXMpKTtcbiBcdFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7XG4gfVxuQEAgLTQ1Nyw2ICYjNDM7NDY5LDcgQEAgc3RhdGljIGludCBhbGF1ZGFfaW5pdF9tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4gc3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxuIHtcbiBcdHN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYWxhdWRhX2luZm8gKikgdXMtXHUwMDNlZXh0cmE7XG4mIzQzO1x0c3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICptZWRpYV9pbmZvID0gXHUwMDI2TUVESUFfSU5GTyh1cyk7XG4gXHR1bnNpZ25lZCBjaGFyICpzdGF0dXMgPSB1cy1cdTAwM2Vpb2J1ZjtcbiBcdGludCByYztcbiBcbkBAIC00NzAsNyAmIzQzOzQ4Myw4IEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbiBcdGlmICgoc3RhdHVzWzBdIFx1MDAyNiAweDgwKSB8fCAoKHN0YXR1c1swXSBcdTAwMjYgMHgxRikgPT0gMHgxMClcbiBcdFx0fHwgKChzdGF0dXNbMV0gXHUwMDI2IDB4MDEpID09IDApKSB7XG4gXHRcdHVzYl9zdG9yX2RiZyh1cywgXCYjMzQ7Tm8gbWVkaWEsIG9yIGRvb3Igb3BlblxcblwmIzM0Oyk7XG4tXHRcdGFsYXVkYV9mcmVlX21hcHMoXHUwMDI2TUVESUFfSU5GTyh1cykpO1xuJiM0MztcdFx0YWxhdWRhX2ZyZWVfbWFwcyhtZWRpYV9pbmZvKTtcbiYjNDM7XHRcdG1lZGlhX2luZm8tXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9rZXkgPSAweDAyO1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2FzYyA9IDB4M0E7XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2VfYXNjcSA9IDB4MDA7XG5AQCAtNDc4LDEyICYjNDM7NDkyLDEzIEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbiBcdH1cbiBcbiBcdC8qIENoZWNrIGZvciBtZWRpYSBjaGFuZ2UgKi9cbi1cdGlmIChzdGF0dXNbMF0gXHUwMDI2IDB4MDggfHwgIWluZm8tXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQpIHtcbiYjNDM7XHRpZiAoc3RhdHVzWzBdIFx1MDAyNiAweDA4IHx8ICFtZWRpYV9pbmZvLVx1MDAzZW1lZGlhX2luaXRpYWxpemVkKSB7XG4gXHRcdHVzYl9zdG9yX2RiZyh1cywgXCYjMzQ7TWVkaWEgY2hhbmdlIGRldGVjdGVkXFxuXCYjMzQ7KTtcbi1cdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG4mIzQzO1x0XHRhbGF1ZGFfZnJlZV9tYXBzKG1lZGlhX2luZm8pO1xuJiM0MztcdFx0bWVkaWFfaW5mby1cdTAwM2VtZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xuIFx0XHRyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTtcbiBcdFx0aWYgKHJjID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKVxuLVx0XHRcdGluZm8tXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlO1xuJiM0MztcdFx0XHRtZWRpYV9pbmZvLVx1MDAzZW1lZGlhX2luaXRpYWxpemVkID0gdHJ1ZTtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9rZXkgPSBVTklUX0FUVEVOVElPTjtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9hc2MgPSAweDI4O1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2FzY3EgPSAweDAwO1xuQEAgLTY4OSwxMSAmIzQzOzcwNCwxNiBAQCBzdGF0aWMgaW50IGFsYXVkYV9yZWFkX21hcChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKVxuICAqIENoZWNrcyB0byBzZWUgd2hldGhlciB3ZSBoYXZlIGFscmVhZHkgbWFwcGVkIGEgY2VydGFpbiB6b25lXG4gICogSWYgd2UgaGF2ZW4mIzM5O3QsIHRoZSBtYXAgaXMgZ2VuZXJhdGVkXG4gICovXG4tc3RhdGljIHZvaWQgYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcbiYjNDM7c3RhdGljIGludCBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKVxuIHtcbiYjNDM7XHRpZiAoIU1FRElBX0lORk8odXMpLmxiYV90b19wYmEgfHwgIU1FRElBX0lORk8odXMpLnBiYV90b19sYmEpXG4mIzQzO1x0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuJiM0MztcbiBcdGlmIChNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdID09IE5VTExcbiBcdFx0fHwgTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXSA9PSBOVUxMKVxuLVx0XHRhbGF1ZGFfcmVhZF9tYXAodXMsIHpvbmUpO1xuJiM0MztcdFx0cmV0dXJuIGFsYXVkYV9yZWFkX21hcCh1cywgem9uZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDtcbiB9XG4gXG4gLypcbkBAIC04MTksMTEgJiM0Mzs4MzksMTkgQEAgc3RhdGljIGludCBhbGF1ZGFfd3JpdGVfbGJhKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IGxiYSxcbiBcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xuIFx0dW5zaWduZWQgaW50IHBhZ2VzaXplID0gTUVESUFfSU5GTyh1cykucGFnZXNpemU7XG4gXHR1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaXplO1xuLVx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQgPSBsYmEgJSB1em9uZXNpemU7XG4mIzQzO1x0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQ7XG4gXHR1bnNpZ25lZCBpbnQgbmV3X3BiYV9vZmZzZXQ7XG4tXHR1bnNpZ25lZCBpbnQgem9uZSA9IGxiYSAvIHV6b25lc2l6ZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgem9uZTtcbiBcbi1cdGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHVzLCB6b25lKTtcbiYjNDM7XHRpZiAoIXV6b25lc2l6ZSlcbiYjNDM7XHRcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XG4mIzQzO1xuJiM0MztcdGxiYV9vZmZzZXQgPSBsYmEgJSB1em9uZXNpemU7XG4mIzQzO1x0em9uZSA9IGxiYSAvIHV6b25lc2l6ZTtcbiYjNDM7XG4mIzQzO1x0cmVzdWx0ID0gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpO1xuJiM0MztcdGlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG4mIzQzO1x0XHRyZXR1cm4gcmVzdWx0O1xuIFxuIFx0cGJhID0gTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYVt6b25lXVtsYmFfb2Zmc2V0XTtcbiBcdGlmIChwYmEgPT0gMSkge1xuQEAgLTkyNyw2ICYjNDM7OTU1LDkgQEAgc3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbiBcdGludCByZXN1bHQ7XG4gXG4mIzQzO1x0aWYgKCF1em9uZXNpemUpXG4mIzQzO1x0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBTaW5jZSB3ZSBvbmx5IHJlYWQgaW4gb25lIGJsb2NrIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGVcbiBcdCAqIGEgYm91bmNlIGJ1ZmZlciBhbmQgbW92ZSB0aGUgZGF0YSBhIHBpZWNlIGF0IGEgdGltZSBiZXR3ZWVuIHRoZVxuQEAgLTk1MCwxMSAmIzQzOzk4MSwxMCBAQCBzdGF0aWMgaW50IGFsYXVkYV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXHRzZyA9IE5VTEw7XG4gXG4gXHR3aGlsZSAoc2VjdG9ycyBcdTAwM2UgMCkge1xuLVx0XHR1bnNpZ25lZCBpbnQgem9uZSA9IGxiYSAvIHV6b25lc2l6ZTsgLyogaW50ZWdlciBkaXZpc2lvbiAqL1xuLVx0XHR1bnNpZ25lZCBpbnQgbGJhX29mZnNldCA9IGxiYSAtICh6b25lICogdXpvbmVzaXplKTtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCB6b25lO1xuJiM0MztcdFx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQ7XG4gXHRcdHVuc2lnbmVkIGludCBwYWdlcztcbiBcdFx0dTE2IHBiYTtcbi1cdFx0YWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpO1xuIFxuIFx0XHQvKiBOb3Qgb3ZlcmZsb3dpbmcgY2FwYWNpdHk/ICovXG4gXHRcdGlmIChsYmEgXHUwMDNlPSBtYXhfbGJhKSB7XG5AQCAtOTY0LDYgJiM0Mzs5OTQsMTMgQEAgc3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4mIzQzO1x0XHR6b25lID0gbGJhIC8gdXpvbmVzaXplOyAvKiBpbnRlZ2VyIGRpdmlzaW9uICovXG4mIzQzO1x0XHRsYmFfb2Zmc2V0ID0gbGJhIC0gKHpvbmUgKiB1em9uZXNpemUpO1xuJiM0MztcbiYjNDM7XHRcdHJlc3VsdCA9IGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHVzLCB6b25lKTtcbiYjNDM7XHRcdGlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcbiBcdFx0LyogRmluZCBudW1iZXIgb2YgcGFnZXMgd2UgY2FuIHJlYWQgaW4gdGhpcyBibG9jayAqL1xuIFx0XHRwYWdlcyA9IG1pbihzZWN0b3JzLCBibG9ja3NpemUgLSBwYWdlKTtcbiBcdFx0bGVuID0gcGFnZXMgXHUwMDNjXHUwMDNjIHBhZ2VzaGlmdDtcbkBAIC0xMDIxLDYgJiM0MzsxMDU4LDkgQEAgc3RhdGljIGludCBhbGF1ZGFfd3JpdGVfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdHUxNiBsYmEsIG1heF9sYmE7XG4gXHRpbnQgcmVzdWx0O1xuIFxuJiM0MztcdGlmICghTUVESUFfSU5GTyh1cykudXpvbmVzaXplKVxuJiM0MztcdFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcbiYjNDM7XG4gXHQvKlxuIFx0ICogU2luY2Ugd2UgZG9uJiMzOTt0IHdyaXRlIHRoZSB1c2VyIGRhdGEgZGlyZWN0bHkgdG8gdGhlIGRldmljZSxcbiBcdCAqIHdlIGhhdmUgdG8gY3JlYXRlIGEgYm91bmNlIGJ1ZmZlciBhbmQgbW92ZSB0aGUgZGF0YSBhIHBpZWNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX1NUT1JBR0VfQUxBVURBJiMzNDssCiAgICAmIzM0O1VTQl9TVE9SQUdFJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtTQ1NJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxhdWRhX3RyYW5zcG9ydCYjMzQ7LAogICAgJiMzNDthbGF1ZGFfcHJvYmUmIzM0OywKICAgICYjMzQ7aW5pdF9hbGF1ZGEmIzM0OywKICAgICYjMzQ7YWxhdWRhX2NoZWNrX21lZGlhJiMzNDssCiAgICAmIzM0O2FsYXVkYV9yZWFkX2RhdGEmIzM0OywKICAgICYjMzQ7YWxhdWRhX3dyaXRlX2RhdGEmIzM0OywKICAgICYjMzQ7YWxhdWRhX3dyaXRlX2xiYSYjMzQ7LAogICAgJiMzNDthbGF1ZGFfZnJlZV9tYXBzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCB6ZXJvLWRpdmlzaW9uIGJ1Z3MsIG1lbW9yeSBsZWFrcywgYW5kIG1lZGlhIGluaXRpYWxpemF0aW9uIHN0YXRlIGhhbmRsaW5nIGFjcm9zcyB6b25lIG1hcCBhbGxvY2F0aW9ucyBhbmQgSS9PIGhhbmRsaW5nIGluIHRoZSBPbHltcHVzIE1BVVNCLTEwL0Z1amlmaWxtIERQQy1SMSAoQWxhdWRhKSBVU0IgbWFzcyBzdG9yYWdlIGRyaXZlci4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgdmlhIFVTQiBlbXVsYXRpb24vZnV6emluZyBmcmFtZXdvcmtzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTNhMGE2MDUxYTdiNmYxMmRiNWY4YTUyYmFkYjQ3ZGI4MzUwZjY5YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDI4IDIwOjQ4OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMKaW5kZXggNjkxZmU0NzAwOWNmNi4uYTJhMzMzNDE5ZjFmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jCkBAIC05Niw2ICYjNDM7OTYsOCBAQCBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gewogCiAJdTE2ICoqbGJhX3RvX3BiYTsJCS8qIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYmxvY2sgbWFwICovCiAJdTE2ICoqcGJhX3RvX2xiYTsJCS8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgYmxvY2sgbWFwICovCiYjNDM7CiYjNDM7CWJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7CiB9OwogCiBzdHJ1Y3QgYWxhdWRhX2luZm8gewpAQCAtMTA1LDggJiM0MzsxMDcsNiBAQCBzdHJ1Y3QgYWxhdWRhX2luZm8gewogCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OwogCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KIAl1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KLQotCWJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7CiB9OwogCiAjZGVmaW5lIHNob3J0X3BhY2sobHNiLG1zYikgKCAoKHUxNikobHNiKSkgfCAoICgodTE2KShtc2IpKSZsdDsmbHQ7OCApICkKQEAgLTI5MCwxNyAmIzQzOzI5MCwyNSBAQCBzdGF0aWMgdm9pZCBhbGF1ZGFfZnJlZV9tYXBzIChzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gKm1lZGlhX2luZm8pCiAJdW5zaWduZWQgaW50IG51bV96b25lcyA9IG1lZGlhX2luZm8tJmd0O2NhcGFjaXR5ICZndDsmZ3Q7IHNoaWZ0OwogCXVuc2lnbmVkIGludCBpOwogCi0JaWYgKG1lZGlhX2luZm8tJmd0O2xiYV90b19wYmEgIT0gTlVMTCkKJiM0MzsJaWYgKG1lZGlhX2luZm8tJmd0O2xiYV90b19wYmEgIT0gTlVMTCkgewogCQlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3pvbmVzOyBpJiM0MzsmIzQzOykgewogCQkJa2ZyZWUobWVkaWFfaW5mby0mZ3Q7bGJhX3RvX3BiYVtpXSk7CiAJCQltZWRpYV9pbmZvLSZndDtsYmFfdG9fcGJhW2ldID0gTlVMTDsKIAkJfQomIzQzOwkJa2ZyZWUobWVkaWFfaW5mby0mZ3Q7bGJhX3RvX3BiYSk7CiYjNDM7CQltZWRpYV9pbmZvLSZndDtsYmFfdG9fcGJhID0gTlVMTDsKJiM0MzsJfQogCi0JaWYgKG1lZGlhX2luZm8tJmd0O3BiYV90b19sYmEgIT0gTlVMTCkKJiM0MzsJaWYgKG1lZGlhX2luZm8tJmd0O3BiYV90b19sYmEgIT0gTlVMTCkgewogCQlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3pvbmVzOyBpJiM0MzsmIzQzOykgewogCQkJa2ZyZWUobWVkaWFfaW5mby0mZ3Q7cGJhX3RvX2xiYVtpXSk7CiAJCQltZWRpYV9pbmZvLSZndDtwYmFfdG9fbGJhW2ldID0gTlVMTDsKIAkJfQomIzQzOwkJa2ZyZWUobWVkaWFfaW5mby0mZ3Q7cGJhX3RvX2xiYSk7CiYjNDM7CQltZWRpYV9pbmZvLSZndDtwYmFfdG9fbGJhID0gTlVMTDsKJiM0MzsJfQomIzQzOwltZWRpYV9pbmZvLSZndDtjYXBhY2l0eSA9IDA7CiYjNDM7CW1lZGlhX2luZm8tJmd0O3V6b25lc2l6ZSA9IDA7CiB9CiAKIC8qCkBAIC00NDEsMTEgJiM0Mzs0NDksMTUgQEAgc3RhdGljIGludCBhbGF1ZGFfaW5pdF9tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpCiAJCSYjNDM7IE1FRElBX0lORk8odXMpLmJsb2Nrc2hpZnQgJiM0MzsgTUVESUFfSU5GTyh1cykucGFnZXNoaWZ0KTsKIAlNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID0ga2NhbGxvYyhudW1fem9uZXMsIHNpemVvZih1MTYqKSwgR0ZQX05PSU8pOwogCU1FRElBX0lORk8odXMpLmxiYV90b19wYmEgPSBrY2FsbG9jKG51bV96b25lcywgc2l6ZW9mKHUxNiopLCBHRlBfTk9JTyk7Ci0JaWYgKE1FRElBX0lORk8odXMpLnBiYV90b19sYmEgPT0gTlVMTCB8fCBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhID09IE5VTEwpCiYjNDM7CWlmIChNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID09IE5VTEwgfHwgTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9PSBOVUxMKSB7CiYjNDM7CQlhbGF1ZGFfZnJlZV9tYXBzKCZhbXA7TUVESUFfSU5GTyh1cykpOwogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwomIzQzOwl9CiAKLQlpZiAoYWxhdWRhX3Jlc2V0X21lZGlhKHVzKSAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCiYjNDM7CWlmIChhbGF1ZGFfcmVzZXRfbWVkaWEodXMpICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgewomIzQzOwkJYWxhdWRhX2ZyZWVfbWFwcygmYW1wO01FRElBX0lORk8odXMpKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKJiM0MzsJfQogCiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOwogfQpAQCAtNDU3LDYgJiM0Mzs0NjksNyBAQCBzdGF0aWMgaW50IGFsYXVkYV9pbml0X21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIHVzLSZndDtleHRyYTsKJiM0MzsJc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICptZWRpYV9pbmZvID0gJmFtcDtNRURJQV9JTkZPKHVzKTsKIAl1bnNpZ25lZCBjaGFyICpzdGF0dXMgPSB1cy0mZ3Q7aW9idWY7CiAJaW50IHJjOwogCkBAIC00NzAsNyAmIzQzOzQ4Myw4IEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKIAlpZiAoKHN0YXR1c1swXSAmYW1wOyAweDgwKSB8fCAoKHN0YXR1c1swXSAmYW1wOyAweDFGKSA9PSAweDEwKQogCQl8fCAoKHN0YXR1c1sxXSAmYW1wOyAweDAxKSA9PSAwKSkgewogCQl1c2Jfc3Rvcl9kYmcodXMsICYjMzQ7Tm8gbWVkaWEsIG9yIGRvb3Igb3BlblxuJiMzNDspOwotCQlhbGF1ZGFfZnJlZV9tYXBzKCZhbXA7TUVESUFfSU5GTyh1cykpOwomIzQzOwkJYWxhdWRhX2ZyZWVfbWFwcyhtZWRpYV9pbmZvKTsKJiM0MzsJCW1lZGlhX2luZm8tJmd0O21lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7CiAJCWluZm8tJmd0O3NlbnNlX2tleSA9IDB4MDI7CiAJCWluZm8tJmd0O3NlbnNlX2FzYyA9IDB4M0E7CiAJCWluZm8tJmd0O3NlbnNlX2FzY3EgPSAweDAwOwpAQCAtNDc4LDEyICYjNDM7NDkyLDEzIEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKIAl9CiAKIAkvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovCi0JaWYgKHN0YXR1c1swXSAmYW1wOyAweDA4IHx8ICFpbmZvLSZndDttZWRpYV9pbml0aWFsaXplZCkgewomIzQzOwlpZiAoc3RhdHVzWzBdICZhbXA7IDB4MDggfHwgIW1lZGlhX2luZm8tJmd0O21lZGlhX2luaXRpYWxpemVkKSB7CiAJCXVzYl9zdG9yX2RiZyh1cywgJiMzNDtNZWRpYSBjaGFuZ2UgZGV0ZWN0ZWRcbiYjMzQ7KTsKLQkJYWxhdWRhX2ZyZWVfbWFwcygmYW1wO01FRElBX0lORk8odXMpKTsKJiM0MzsJCWFsYXVkYV9mcmVlX21hcHMobWVkaWFfaW5mbyk7CiYjNDM7CQltZWRpYV9pbmZvLSZndDttZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlOwogCQlyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTsKIAkJaWYgKHJjID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQotCQkJaW5mby0mZ3Q7bWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlOwomIzQzOwkJCW1lZGlhX2luZm8tJmd0O21lZGlhX2luaXRpYWxpemVkID0gdHJ1ZTsKIAkJaW5mby0mZ3Q7c2Vuc2Vfa2V5ID0gVU5JVF9BVFRFTlRJT047CiAJCWluZm8tJmd0O3NlbnNlX2FzYyA9IDB4Mjg7CiAJCWluZm8tJmd0O3NlbnNlX2FzY3EgPSAweDAwOwpAQCAtNjg5LDExICYjNDM7NzA0LDE2IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfbWFwKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHpvbmUpCiAgKiBDaGVja3MgdG8gc2VlIHdoZXRoZXIgd2UgaGF2ZSBhbHJlYWR5IG1hcHBlZCBhIGNlcnRhaW4gem9uZQogICogSWYgd2UgaGF2ZW4mIzM5O3QsIHRoZSBtYXAgaXMgZ2VuZXJhdGVkCiAgKi8KLXN0YXRpYyB2b2lkIGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHpvbmUpCiYjNDM7c3RhdGljIGludCBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKQogewomIzQzOwlpZiAoIU1FRElBX0lORk8odXMpLmxiYV90b19wYmEgfHwgIU1FRElBX0lORk8odXMpLnBiYV90b19sYmEpCiYjNDM7CQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwomIzQzOwogCWlmIChNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdID09IE5VTEwKIAkJfHwgTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXSA9PSBOVUxMKQotCQlhbGF1ZGFfcmVhZF9tYXAodXMsIHpvbmUpOwomIzQzOwkJcmV0dXJuIGFsYXVkYV9yZWFkX21hcCh1cywgem9uZSk7CiYjNDM7CiYjNDM7CXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKIH0KIAogLyoKQEAgLTgxOSwxMSAmIzQzOzgzOSwxOSBAQCBzdGF0aWMgaW50IGFsYXVkYV93cml0ZV9sYmEoc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgbGJhLAogCXVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplOwogCXVuc2lnbmVkIGludCBwYWdlc2l6ZSA9IE1FRElBX0lORk8odXMpLnBhZ2VzaXplOwogCXVuc2lnbmVkIGludCBibG9ja3NpemUgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemU7Ci0JdW5zaWduZWQgaW50IGxiYV9vZmZzZXQgPSBsYmEgJSB1em9uZXNpemU7CiYjNDM7CXVuc2lnbmVkIGludCBsYmFfb2Zmc2V0OwogCXVuc2lnbmVkIGludCBuZXdfcGJhX29mZnNldDsKLQl1bnNpZ25lZCBpbnQgem9uZSA9IGxiYSAvIHV6b25lc2l6ZTsKJiM0MzsJdW5zaWduZWQgaW50IHpvbmU7CiAKLQlhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZSh1cywgem9uZSk7CiYjNDM7CWlmICghdXpvbmVzaXplKQomIzQzOwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKJiM0MzsKJiM0MzsJbGJhX29mZnNldCA9IGxiYSAlIHV6b25lc2l6ZTsKJiM0MzsJem9uZSA9IGxiYSAvIHV6b25lc2l6ZTsKJiM0MzsKJiM0MzsJcmVzdWx0ID0gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpOwomIzQzOwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQomIzQzOwkJcmV0dXJuIHJlc3VsdDsKIAogCXBiYSA9IE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV1bbGJhX29mZnNldF07CiAJaWYgKHBiYSA9PSAxKSB7CkBAIC05MjcsNiAmIzQzOzk1NSw5IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCWludCByZXN1bHQ7CiAKJiM0MzsJaWYgKCF1em9uZXNpemUpCiYjNDM7CQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwomIzQzOwogCS8qCiAJICogU2luY2Ugd2Ugb25seSByZWFkIGluIG9uZSBibG9jayBhdCBhIHRpbWUsIHdlIGhhdmUgdG8gY3JlYXRlCiAJICogYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UgYXQgYSB0aW1lIGJldHdlZW4gdGhlCkBAIC05NTAsMTEgJiM0Mzs5ODEsMTAgQEAgc3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCXNnID0gTlVMTDsKIAogCXdoaWxlIChzZWN0b3JzICZndDsgMCkgewotCQl1bnNpZ25lZCBpbnQgem9uZSA9IGxiYSAvIHV6b25lc2l6ZTsgLyogaW50ZWdlciBkaXZpc2lvbiAqLwotCQl1bnNpZ25lZCBpbnQgbGJhX29mZnNldCA9IGxiYSAtICh6b25lICogdXpvbmVzaXplKTsKJiM0MzsJCXVuc2lnbmVkIGludCB6b25lOwomIzQzOwkJdW5zaWduZWQgaW50IGxiYV9vZmZzZXQ7CiAJCXVuc2lnbmVkIGludCBwYWdlczsKIAkJdTE2IHBiYTsKLQkJYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpOwogCiAJCS8qIE5vdCBvdmVyZmxvd2luZyBjYXBhY2l0eT8gKi8KIAkJaWYgKGxiYSAmZ3Q7PSBtYXhfbGJhKSB7CkBAIC05NjQsNiAmIzQzOzk5NCwxMyBAQCBzdGF0aWMgaW50IGFsYXVkYV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJCQlicmVhazsKIAkJfQogCiYjNDM7CQl6b25lID0gbGJhIC8gdXpvbmVzaXplOyAvKiBpbnRlZ2VyIGRpdmlzaW9uICovCiYjNDM7CQlsYmFfb2Zmc2V0ID0gbGJhIC0gKHpvbmUgKiB1em9uZXNpemUpOwomIzQzOwomIzQzOwkJcmVzdWx0ID0gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpOwomIzQzOwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKJiM0MzsJCQlicmVhazsKJiM0MzsKIAkJLyogRmluZCBudW1iZXIgb2YgcGFnZXMgd2UgY2FuIHJlYWQgaW4gdGhpcyBibG9jayAqLwogCQlwYWdlcyA9IG1pbihzZWN0b3JzLCBibG9ja3NpemUgLSBwYWdlKTsKIAkJbGVuID0gcGFnZXMgJmx0OyZsdDsgcGFnZXNoaWZ0OwpAQCAtMTAyMSw2ICYjNDM7MTA1OCw5IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJdTE2IGxiYSwgbWF4X2xiYTsKIAlpbnQgcmVzdWx0OwogCiYjNDM7CWlmICghTUVESUFfSU5GTyh1cykudXpvbmVzaXplKQomIzQzOwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKJiM0MzsKIAkvKgogCSAqIFNpbmNlIHdlIGRvbiYjMzk7dCB3cml0ZSB0aGUgdXNlciBkYXRhIGRpcmVjdGx5IHRvIHRoZSBkZXZpY2UsCiAJICogd2UgaGF2ZSB0byBjcmVhdGUgYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU5NQoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVTQiBTdG9yYWdlIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBhIHBhdGNoIGhhcyBoaXQgbXkgZGVzayBhbmQgaXQmIzM5O3MgdG91Y2hpbmcgYGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNgLiBNeSBpbml0aWFsIHJlYWN0aW9uPyBMZXQmIzM5O3MgZGl2ZSBpbi4gVGhpcyByZXF1aXJlcyBhIHN5c3RlbWF0aWMgYXBwcm9hY2guIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqZXhhY3RseSogd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQg4oCTIHdoYXQgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyB0d2Vha2VkLCBhZGRlZCwgb3IgcmVtb3ZlZC4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdG9vbHMg4oCTIGxpa2VseSBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAg4oCTIHRvIHF1aWNrbHkgc2NhbiB0aGUgS2NvbmZpZyBvcHRpb25zIHdpdGhpbiB0aGUgYGRyaXZlcnMvdXNiL3N0b3JhZ2UvYCBkaXJlY3RvcnkuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCB3aGV0aGVyIHRoaXMgYGFsYXVkYS5jYCBkcml2ZXIgaXMgZXZlbiBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlcmUgYXJlIHNwZWNpZmljIHNldHRpbmdzIHRoYXQgY29udHJvbCBpdHMgaW5jbHVzaW9uLiBUaGVuLCBhbmQgb25seSB0aGVuLCBjYW4gSSBkZXRlcm1pbmUgaWYgdGhpcyBtb2R1bGUgaXMgZXZlbiAqcmVhY2hhYmxlKiBhbmQgd29ydGh5IG9mIGF0dGVudGlvbiwgaW4gdGVybXMgb2YgZnV6emluZy4gSXMgaXQgcGFydCBvZiB0aGUgZGVmYXVsdCBrZXJuZWwgY29uZmlndXJhdGlvbj8gQXJlIHRoZXJlIHNwZWNpZmljIGhhcmR3YXJlIHJlcXVpcmVtZW50cyB0aGF0IG1ha2UgaXQgbGVzcyBpbnRlcmVzdGluZz8gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEl0IHdpbGwgYmUgd29ydGggc2VlaW5nIGlmIHRoZSBjaGFuZ2VzIGNvdWxkIGJlIHZ1bG5lcmFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxhdWRhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2Ivc3RvcmFnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc9MTI3PWNvbmZpZyBVU0JfU1RPUkFHRV9BTEFVREFcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWctMTM1LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjEzNjpcdCAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLWFsYXVkYS5cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMzctXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZT0xOT11c2Itc3RvcmFnZS0kKENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRykgJiM0Mzs9IGRlYnVnLm9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUtMjAtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlOjIxOm9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEpXHQmIzQzOz0gdW1zLWFsYXVkYS5vXG5kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCKSAmIzQzOz0gdW1zLWN5cHJlc3Mub1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGU9MzM9b2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUKVx0XHQmIzQzOz0gdW1zLXVzYmF0Lm9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUtMzQtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlOjM1OnVtcy1hbGF1ZGEteVx0XHQ6PSBhbGF1ZGEub1xuZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZS0zNi11bXMtY3lwcmVzcy15XHRcdDo9IGN5cHJlc3NfYXRhY2Iub1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTctICpcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTg6ICogRm9yIHByb3RvY29sIGluZm8sIHNlZSBodHRwOi8vYWxhdWRhLnNvdXJjZWZvcmdlLm5ldFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xOS0gKi9cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTMzLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzozNDojZGVmaW5lIERSVl9OQU1FIFwmIzM0O3Vtcy1hbGF1ZGFcJiMzNDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzUtXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0zOT1NT0RVTEVfSU1QT1JUX05TKFwmIzM0O1VTQl9TVE9SQUdFXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg0LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4NTpzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8ge1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04Ni1cdHVuc2lnbmVkIGxvbmcgY2FwYWNpdHk7XHRcdC8qIHRvdGFsIG1lZGlhIHNpemUgaW4gYnl0ZXMgKi9cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwMi1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTAzOnN0cnVjdCBhbGF1ZGFfaW5mbyB7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwNDpcdHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyBwb3J0WzJdO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDUtXHRpbnQgd3JfZXA7XHRcdFx0LyogZW5kcG9pbnQgdG8gd3JpdGUgZGF0YSBvdXQgb2YgKi9cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNi0jZGVmaW5lIE1FRElBX1BPUlQodXMpIHVzLVx1MDAzZXNyYi1cdTAwM2VkZXZpY2UtXHUwMDNlbHVuXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNzojZGVmaW5lIE1FRElBX0lORk8odXMpICgoc3RydWN0IGFsYXVkYV9pbmZvICopdXMtXHUwMDNlZXh0cmEpLVx1MDAzZXBvcnRbTUVESUFfUE9SVCh1cyldXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExOC1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyMi1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTIzOnN0YXRpYyBpbnQgaW5pdF9hbGF1ZGEoc3RydWN0IHVzX2RhdGEgKnVzKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI0LVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTM0LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMzU6c3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFsYXVkYV91c2JfaWRzW10gPSB7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEzNjojXHRpbmNsdWRlIFwmIzM0O3VudXN1YWxfYWxhdWRhLmhcJiMzNDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTM3LVx0eyB9XHRcdC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEzOC19O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMzk6TU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGFsYXVkYV91c2JfaWRzKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTQwLVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTU2LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxNTc6c3RhdGljIGNvbnN0IHN0cnVjdCB1c191bnVzdWFsX2RldiBhbGF1ZGFfdW51c3VhbF9kZXZfbGlzdFtdID0ge1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxNTg6I1x0aW5jbHVkZSBcJiMzNDt1bnVzdWFsX2FsYXVkYS5oXCYjMzQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTE1OS1cdHsgfVx0XHQvKiBUZXJtaW5hdGluZyBlbnRyeSAqL1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTY4LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxNjk6c3RydWN0IGFsYXVkYV9jYXJkX2luZm8ge1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xNzAtXHR1bnNpZ25lZCBjaGFyIGlkO1x0XHQvKiBpZCBieXRlICovXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xNzYtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjE3NzpzdGF0aWMgY29uc3Qgc3RydWN0IGFsYXVkYV9jYXJkX2luZm8gYWxhdWRhX2NhcmRfaWRzW10gPSB7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTE3OC1cdC8qIE5BTkQgZmxhc2ggKi9cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTIwMi1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MjAzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYWxhdWRhX2NhcmRfaW5mbyAqYWxhdWRhX2NhcmRfZmluZF9pZCh1bnNpZ25lZCBjaGFyIGlkKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yMDQte1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjA2LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoyMDc6XHRmb3IgKGkgPSAwOyBhbGF1ZGFfY2FyZF9pZHNbaV0uaWQgIT0gMDsgaSYjNDM7JiM0MzspXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjIwODpcdFx0aWYgKGFsYXVkYV9jYXJkX2lkc1tpXS5pZCA9PSBpZClcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MjA5Olx0XHRcdHJldHVybiBcdTAwMjYoYWxhdWRhX2NhcmRfaWRzW2ldKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjEwLVx0cmV0dXJuIE5VTEw7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0yNzQ9c3RhdGljIHZvaWQgbmFuZF9zdG9yZV9lY2ModW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgY2hhciAqZWNjKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjg1LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoyODY6c3RhdGljIHZvaWQgYWxhdWRhX2ZyZWVfbWFwcyAoc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICptZWRpYV9pbmZvKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yODcte1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzE3LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzozMTg6c3RhdGljIGludCBhbGF1ZGFfZ2V0X21lZGlhX3N0YXR1cyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTMxOS17XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNDAtICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjM0MTpzdGF0aWMgaW50IGFsYXVkYV9hY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNDIte1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzU3LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzozNTg6c3RhdGljIGludCBhbGF1ZGFfZ2V0X21lZGlhX3NpZ25hdHVyZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTM1OS17XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNzMtICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjM3NDpzdGF0aWMgaW50IGFsYXVkYV9yZXNldF9tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTM3NS17XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zODktICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjM5MDpzdGF0aWMgaW50IGFsYXVkYV9pbml0X21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzkxLXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTM5My1cdGludCByZWFkeSA9IDA7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjM5NDpcdGNvbnN0IHN0cnVjdCBhbGF1ZGFfY2FyZF9pbmZvICptZWRpYV9pbmZvO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zOTUtXHR1bnNpZ25lZCBpbnQgbnVtX3pvbmVzO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzk5LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MDA6XHRcdGlmIChhbGF1ZGFfZ2V0X21lZGlhX3N0YXR1cyh1cywgZGF0YSkgIT0gVVNCX1NUT1JfWEZFUl9HT09EKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MDEtXHRcdFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQwOC1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDA5Olx0aWYgKGFsYXVkYV9hY2tfbWVkaWEodXMpICE9IFVTQl9TVE9SX1hGRVJfR09PRClcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDEwLVx0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDEzLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MTQ6XHRpZiAoYWxhdWRhX2dldF9tZWRpYV9zdGF0dXModXMsIGRhdGEpICE9IFVTQl9TVE9SX1hGRVJfR09PRClcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDE1LVx0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDIxLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MjI6XHRpZiAoYWxhdWRhX2dldF9tZWRpYV9zaWduYXR1cmUodXMsIGRhdGEpICE9IFVTQl9TVE9SX1hGRVJfR09PRClcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDIzLVx0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDI1LVx0dXNiX3N0b3JfZGJnKHVzLCBcJiMzNDtNZWRpYSBzaWduYXR1cmU6ICU0cGhcXG5cJiMzNDssIGRhdGEpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MjY6XHRtZWRpYV9pbmZvID0gYWxhdWRhX2NhcmRfZmluZF9pZChkYXRhWzFdKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDI3LVx0aWYgKG1lZGlhX2luZm8gPT0gTlVMTCkge1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0Mjg6XHRcdHByX3dhcm4oXCYjMzQ7YWxhdWRhX2luaXRfbWVkaWE6IFVucmVjb2duaXNlZCBtZWRpYSBzaWduYXR1cmU6ICU0cGhcXG5cJiMzNDssXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQyOS1cdFx0XHRkYXRhKTtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ1Mi1cdGlmIChNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID09IE5VTEwgfHwgTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9PSBOVUxMKSB7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ1MzpcdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ1NC1cdFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ1Ni1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDU3Olx0aWYgKGFsYXVkYV9yZXNldF9tZWRpYSh1cykgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ1ODpcdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ1OS1cdFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ2OC0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDY5OnN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDcwLXtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDcxOlx0c3RydWN0IGFsYXVkYV9pbmZvICppbmZvID0gKHN0cnVjdCBhbGF1ZGFfaW5mbyAqKSB1cy1cdTAwM2VleHRyYTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDcyOlx0c3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICptZWRpYV9pbmZvID0gXHUwMDI2TUVESUFfSU5GTyh1cyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ3My1cdHVuc2lnbmVkIGNoYXIgKnN0YXR1cyA9IHVzLVx1MDAzZWlvYnVmO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDc1LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NzY6XHRyYyA9IGFsYXVkYV9nZXRfbWVkaWFfc3RhdHVzKHVzLCBzdGF0dXMpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NzctXHRpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00ODUtXHRcdHVzYl9zdG9yX2RiZyh1cywgXCYjMzQ7Tm8gbWVkaWEsIG9yIGRvb3Igb3BlblxcblwmIzM0Oyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ4NjpcdFx0YWxhdWRhX2ZyZWVfbWFwcyhtZWRpYV9pbmZvKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDg3LVx0XHRtZWRpYV9pbmZvLVx1MDAzZW1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00OTYtXHRcdHVzYl9zdG9yX2RiZyh1cywgXCYjMzQ7TWVkaWEgY2hhbmdlIGRldGVjdGVkXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDk3Olx0XHRhbGF1ZGFfZnJlZV9tYXBzKG1lZGlhX2luZm8pO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00OTgtXHRcdG1lZGlhX2luZm8tXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDk5Olx0XHRyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTAwLVx0XHRpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01MTQtICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjUxNTpzdGF0aWMgaW50IGFsYXVkYV9jaGVja19zdGF0dXMyKHN0cnVjdCB1c19kYXRhICp1cylcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTE2LXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU0NC0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NTQ1OnN0YXRpYyBpbnQgYWxhdWRhX2dldF9yZWR1X2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgcGJhLCB1bnNpZ25lZCBjaGFyICpkYXRhKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01NDYte1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTY1LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo1NjY6c3RhdGljIHUxNiBhbGF1ZGFfZmluZF91bnVzZWRfcGJhKHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyAqaW5mbyxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTY3LVx0dW5zaWduZWQgaW50IHpvbmUpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01ODItICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjU4MzpzdGF0aWMgaW50IGFsYXVkYV9yZWFkX21hcChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01ODQte1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjA4LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo2MDk6XHRcdHJlc3VsdCA9IGFsYXVkYV9nZXRfcmVkdV9kYXRhKHVzLCBibG9ja251bSwgZGF0YSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTYxMC1cdFx0aWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTY1MS1cdFx0XHRwcmludGsoS0VSTl9XQVJOSU5HXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjY1MjpcdFx0XHQgICAgICAgXCYjMzQ7YWxhdWRhX3JlYWRfbWFwOiBCYWQgcGFyaXR5IGluIExCQSBmb3IgYmxvY2sgJWRcJiMzNDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjUzLVx0XHRcdCAgICAgICBcJiMzNDsgKCUwMlggJTAyWClcXG5cJiMzNDssIGksIGRhdGFbNl0sIGRhdGFbN10pO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjcyLVx0XHRcdHByaW50ayhLRVJOX1dBUk5JTkdcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NjczOlx0XHRcdCAgICAgICBcJiMzNDthbGF1ZGFfcmVhZF9tYXA6IEJhZCBsb3cgTEJBICVkIGZvciBibG9jayAlZFxcblwmIzM0OyxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjc0LVx0XHRcdCAgICAgICBsYmFfcmVhbCwgYmxvY2tudW0pO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjc5LVx0XHRcdHByaW50ayhLRVJOX1dBUk5JTkdcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NjgwOlx0XHRcdCAgICAgICBcJiMzNDthbGF1ZGFfcmVhZF9tYXA6IFwmIzM0O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy02ODEtXHRcdFx0ICAgICAgIFwmIzM0O0xCQSAlZCBzZWVuIGZvciBQQkEgJWQgYW5kICVkXFxuXCYjMzQ7LFxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzA2LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3MDc6c3RhdGljIGludCBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03MDgte1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzEzLVx0XHR8fCBNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhW3pvbmVdID09IE5VTEwpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjcxNDpcdFx0cmV0dXJuIGFsYXVkYV9yZWFkX21hcCh1cywgem9uZSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTcxNS1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTcyMS0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzIyOnN0YXRpYyBpbnQgYWxhdWRhX2VyYXNlX2Jsb2NrKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSlcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzIzLXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc1MC0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzUxOnN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfYmxvY2tfcmF3KHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzUyLVx0XHR1bnNpZ25lZCBpbnQgcGFnZSwgdW5zaWduZWQgaW50IHBhZ2VzLCB1bnNpZ25lZCBjaGFyICpkYXRhKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzc2LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3Nzc6c3RhdGljIGludCBhbGF1ZGFfcmVhZF9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc3OC1cdFx0dW5zaWduZWQgaW50IHBhZ2UsIHVuc2lnbmVkIGludCBwYWdlcywgdW5zaWduZWQgY2hhciAqZGF0YSlcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc4Mi1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzgzOlx0cmMgPSBhbGF1ZGFfcmVhZF9ibG9ja19yYXcodXMsIHBiYSwgcGFnZSwgcGFnZXMsIGRhdGEpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03ODQtXHRpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODAxLSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4MDI6c3RhdGljIGludCBhbGF1ZGFfd3JpdGVfYmxvY2soc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgcGJhLCB1bnNpZ25lZCBjaGFyICpkYXRhKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MDMte1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MDQtXHRpbnQgcmM7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgwNTpcdHN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYWxhdWRhX2luZm8gKikgdXMtXHUwMDNlZXh0cmE7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgwNi1cdHVuc2lnbmVkIGNoYXIgY29tbWFuZFtdID0ge1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODIzLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4MjQ6XHRyZXR1cm4gYWxhdWRhX2NoZWNrX3N0YXR1czIodXMpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MjUtfVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODI5LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4MzA6c3RhdGljIGludCBhbGF1ZGFfd3JpdGVfbGJhKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IGxiYSxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODMxLVx0XHQgdW5zaWduZWQgaW50IHBhZ2UsIHVuc2lnbmVkIGludCBwYWdlcyxcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg1MS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODUyOlx0cmVzdWx0ID0gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NTMtXHRpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODYyLVx0XHRwcmludGsoS0VSTl9XQVJOSU5HXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjg2MzpcdFx0ICAgICAgIFwmIzM0O2FsYXVkYV93cml0ZV9sYmE6IGF2b2lkIHdyaXRpbmcgdG8gcGJhIDFcXG5cJiMzNDspO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NjQtXHRcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg2Ni1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODY3Olx0bmV3X3BiYSA9IGFsYXVkYV9maW5kX3VudXNlZF9wYmEoXHUwMDI2TUVESUFfSU5GTyh1cyksIHpvbmUpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NjgtXHRpZiAoIW5ld19wYmEpIHtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODY5LVx0XHRwcmludGsoS0VSTl9XQVJOSU5HXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjg3MDpcdFx0ICAgICAgIFwmIzM0O2FsYXVkYV93cml0ZV9sYmE6IE91dCBvZiB1bnVzZWQgYmxvY2tzXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODcxLVx0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODc1LVx0aWYgKHBiYSAhPSBVTkRFRikge1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4NzY6XHRcdHJlc3VsdCA9IGFsYXVkYV9yZWFkX2Jsb2NrX3Jhdyh1cywgcGJhLCAwLFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NzctXHRcdFx0YmxvY2tzaXplLCBibG9ja2J1ZmZlcik7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05MjAtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkyMTpcdHJlc3VsdCA9IGFsYXVkYV93cml0ZV9ibG9jayh1cywgbmV3X3BiYSwgYmxvY2tidWZmZXIpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05MjItXHRpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRClcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTkzMS1cdFx0dW5zaWduZWQgaW50IHBiYV9vZmZzZXQgPSBwYmEgLSAoem9uZSAqIHpvbmVzaXplKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTMyOlx0XHRyZXN1bHQgPSBhbGF1ZGFfZXJhc2VfYmxvY2sodXMsIHBiYSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTkzMy1cdFx0aWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05NDMtICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjk0NDpzdGF0aWMgaW50IGFsYXVkYV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTk0NS1cdFx0dW5zaWduZWQgaW50IHNlY3RvcnMpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05OTktXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwMDA6XHRcdHJlc3VsdCA9IGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHVzLCB6b25lKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTAwMS1cdFx0aWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwMjYtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwMjc6XHRcdFx0cmVzdWx0ID0gYWxhdWRhX3JlYWRfYmxvY2sodXMsIHBiYSwgcGFnZSwgcGFnZXMsIGJ1ZmZlcik7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwMjgtXHRcdFx0aWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwNDctICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwNDg6c3RhdGljIGludCBhbGF1ZGFfd3JpdGVfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTA0OS1cdFx0dW5zaWduZWQgaW50IHNlY3RvcnMpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTEwLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTExOlx0XHRyZXN1bHQgPSBhbGF1ZGFfd3JpdGVfbGJhKHVzLCBsYmEsIHBhZ2UsIHBhZ2VzLCBidWZmZXIsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExMTItXHRcdFx0YmxvY2tidWZmZXIpO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTEyOS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTEzMDpzdGF0aWMgdm9pZCBhbGF1ZGFfaW5mb19kZXN0cnVjdG9yKHZvaWQgKmV4dHJhKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTMxLXtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTEzMjpcdHN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYWxhdWRhX2luZm8gKikgZXh0cmE7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExMzMtXHRpbnQgcG9ydDtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExMzgtXHRmb3IgKHBvcnQgPSAwOyBwb3J0IFx1MDAzYyAyOyBwb3J0JiM0MzsmIzQzOykge1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTM5Olx0XHRzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gKm1lZGlhX2luZm8gPSBcdTAwMjZpbmZvLVx1MDAzZXBvcnRbcG9ydF07XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNDAtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNDE6XHRcdGFsYXVkYV9mcmVlX21hcHMobWVkaWFfaW5mbyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNDItXHRcdGtmcmVlKG1lZGlhX2luZm8tXHUwMDNlbGJhX3RvX3BiYSk7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTQ3LS8qXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNDg6ICogSW5pdGlhbGl6ZSBhbGF1ZGFfaW5mbyBzdHJ1Y3QgYW5kIGZpbmQgdGhlIGRhdGEtd3JpdGUgZW5kcG9pbnRcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE0OS0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE1MDpzdGF0aWMgaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cylcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE1MS17XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNTI6XHRzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm87XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNTMtXHRzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHRzZXR0aW5nID0gdXMtXHUwMDNlcHVzYl9pbnRmLVx1MDAzZWN1cl9hbHRzZXR0aW5nO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE1NS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE1NjpcdHVzLVx1MDAzZWV4dHJhID0ga3phbGxvY19vYmooc3RydWN0IGFsYXVkYV9pbmZvLCBHRlBfTk9JTyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNTctXHRpZiAoIXVzLVx1MDAzZWV4dHJhKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE1OS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE2MDpcdGluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIHVzLVx1MDAzZWV4dHJhO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTYxOlx0dXMtXHUwMDNlZXh0cmFfZGVzdHJ1Y3RvciA9IGFsYXVkYV9pbmZvX2Rlc3RydWN0b3I7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNjItXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTY5LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTcwOnN0YXRpYyBpbnQgYWxhdWRhX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cylcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE3MS17XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNzItXHRpbnQgcmM7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNzM6XHRzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIHVzLVx1MDAzZWV4dHJhO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTc0LVx0dW5zaWduZWQgY2hhciAqcHRyID0gdXMtXHUwMDNlaW9idWY7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTg3LVx0XHR1c2Jfc3Rvcl9kYmcodXMsIFwmIzM0O1RFU1RfVU5JVF9SRUFEWVxcblwmIzM0Oyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExODg6XHRcdHJldHVybiBhbGF1ZGFfY2hlY2tfbWVkaWEodXMpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTg5LVx0fVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE5NC1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE5NTpcdFx0cmMgPSBhbGF1ZGFfY2hlY2tfbWVkaWEodXMpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTk2LVx0XHRpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjE1LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjE2Olx0XHRyYyA9IGFsYXVkYV9jaGVja19tZWRpYSh1cyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyMTctXHRcdGlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyMjYtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyMjc6XHRcdHJldHVybiBhbGF1ZGFfcmVhZF9kYXRhKHVzLCBwYWdlLCBwYWdlcyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyMjgtXHR9XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjMyLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjMzOlx0XHRyYyA9IGFsYXVkYV9jaGVja19tZWRpYSh1cyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyMzQtXHRcdGlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyNDMtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyNDQ6XHRcdHJldHVybiBhbGF1ZGFfd3JpdGVfZGF0YSh1cywgcGFnZSwgcGFnZXMpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjQ1LVx0fVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI3Ni1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTI3NzpzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhbGF1ZGFfaG9zdF90ZW1wbGF0ZTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI3OC1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTI3OTpzdGF0aWMgaW50IGFsYXVkYV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI4MC1cdFx0XHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI4NS1cdHJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMShcdTAwMjZ1cywgaW50ZiwgaWQsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyODY6XHRcdFx0KGlkIC0gYWxhdWRhX3VzYl9pZHMpICYjNDM7IGFsYXVkYV91bnVzdWFsX2Rldl9saXN0LFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjg3Olx0XHRcdFx1MDAyNmFsYXVkYV9ob3N0X3RlbXBsYXRlKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI4OC1cdGlmIChyZXN1bHQpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjkxLVx0dXMtXHUwMDNldHJhbnNwb3J0X25hbWUgID0gXCYjMzQ7QWxhdWRhIENvbnRyb2wvQnVsa1wmIzM0OztcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTI5MjpcdHVzLVx1MDAzZXRyYW5zcG9ydCA9IGFsYXVkYV90cmFuc3BvcnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyOTMtXHR1cy1cdTAwM2V0cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0O1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI5OS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTMwMDpzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYWxhdWRhX2RyaXZlciA9IHtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTMwMS1cdC5uYW1lID1cdFx0RFJWX05BTUUsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEzMDI6XHQucHJvYmUgPVx0YWxhdWRhX3Byb2JlLFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMzAzLVx0LmRpc2Nvbm5lY3QgPVx0dXNiX3N0b3JfZGlzY29ubmVjdCxcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEzMDgtXHQucG9zdF9yZXNldCA9XHR1c2Jfc3Rvcl9wb3N0X3Jlc2V0LFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMzA5Olx0LmlkX3RhYmxlID1cdGFsYXVkYV91c2JfaWRzLFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMzEwLVx0LnNvZnRfdW5iaW5kID1cdDEsXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMzEzLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMzE0Om1vZHVsZV91c2Jfc3Rvcl9kcml2ZXIoYWxhdWRhX2RyaXZlciwgYWxhdWRhX2hvc3RfdGVtcGxhdGUsIERSVl9OQU1FKTtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfYWxhdWRhLmg9OT1VTlVTVUFMX0RFViggIDB4MDU4NCwgMHgwMDA4LCAweDAxMDIsIDB4MDEwMixcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfYWxhdWRhLmgtMTEtXHRcdFwmIzM0O0RQQy1SMSAoQWxhdWRhKVwmIzM0OyxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9hbGF1ZGEuaDoxMjpcdFx0VVNCX1NDX1NDU0ksIFVTQl9QUl9BTEFVREEsIGluaXRfYWxhdWRhLCAwKSxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9hbGF1ZGEuaC0xMy1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9hbGF1ZGEuaD0xND1VTlVTVUFMX0RFViggIDB4MDdiNCwgMHgwMTBhLCAweDAxMDIsIDB4MDEwMixcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfYWxhdWRhLmgtMTYtXHRcdFwmIzM0O01BVVNCLTEwIChBbGF1ZGEpXCYjMzQ7LFxuZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2FsYXVkYS5oOjE3Olx0XHRVU0JfU0NfU0NTSSwgVVNCX1BSX0FMQVVEQSwgaW5pdF9hbGF1ZGEsIDApLFxuZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2FsYXVkYS5oLTE4LVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdXN1YWwtdGFibGVzLmM9NTY9c3RhdGljIGNvbnN0IHN0cnVjdCBpZ25vcmVfZW50cnkgaWdub3JlX2lkc1tdID0ge1xuZHJpdmVycy91c2Ivc3RvcmFnZS91c3VhbC10YWJsZXMuYzo1NzojXHRpbmNsdWRlIFwmIzM0O3VudXN1YWxfYWxhdWRhLmhcJiMzNDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdXN1YWwtdGFibGVzLmMtNTgtI1x0aW5jbHVkZSBcJiMzNDt1bnVzdWFsX2N5cHJlc3MuaFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzg0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2NvbmZpZyBEZXBlbmRlbmN5IERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBVU0JfU1RPUkFHRV9BTEFVREFgIGFuZCBtYWtlIHN1cmUgaXQmIzM5O3MgcHJvcGVybHkgY29uZmlndXJlZC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGBLY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIHRob3JvdWdobHkuIEFyZSB0aGVyZSBhbnkgaGlkZGVuIGdvdGNoYXMsIG9ic2N1cmUgc2V0dGluZ3MsIG9yIHBsYXRmb3JtLXNwZWNpZmljIHByZXJlcXVpc2l0ZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZmxpY3RzIEkgbmVlZCB0byBmbGFnPyBBcmUgdGhlcmUgYW55IGRlZmF1bHQgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSBvdmVycmlkZGVuIGZvciB0aGUgc3BlY2lmaWMgdXNlIGNhc2U/IEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBkb3duIGVhY2ggZGVwZW5kZW5jeSwgbm90IGp1c3QgdGhlIGRpcmVjdCBvbmVzLCBidXQgdGhlIHRyYW5zaXRpdmUgb25lcyBhcyB3ZWxsLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IG1ha2luZyBzdXJlIGl0IGNvbXBpbGVzOyBpdCYjMzk7cyBhYm91dCBtYWtpbmcgc3VyZSBpdCAqYmVoYXZlcyogY29ycmVjdGx5LCB3aXRoIG1pbmltYWwgc3VycHJpc2VzLCBvbiB0aGlzIHNwZWNpZmljIGhhcmR3YXJlLiBJIG5lZWQgdG8gYW50aWNpcGF0ZSB0aGUgcG90ZW50aWFsIGltcGFjdCBvbiBwb3dlciBjb25zdW1wdGlvbiwgcGVyZm9ybWFuY2UsIGFuZCBvdmVyYWxsIHN5c3RlbSBzdGFiaWxpdHkgYmFzZWQgb24gaXRzIGludGVyYWN0aW9uIHdpdGggb3RoZXIgVVNCIHN1YnN5c3RlbXMgYW5kIHN0b3JhZ2UgZHJpdmVycy4gU28sIGBLY29uZmlnYCBmaXJzdCwgdGhlbiBhIGRlZXBlciBkaXZlIGludG8gdGhlIGNvZGUgaWYgYW55dGhpbmcgbG9va3Mgc3VzcGljaW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTIwOlx0XHR0cmlzdGF0ZSBcJiMzNDtMZXhhciBKdW1wc2hvdCBDb21wYWN0IEZsYXNoIFJlYWRlclwmIzM0O1xuIDEyMTpcdFx0aGVscFxuIDEyMjpcdFx0ICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIExleGFyIEp1bXBzaG90XG4gMTIzOlx0XHQgIFVTQiBDb21wYWN0Rmxhc2ggcmVhZGVyLlxuIDEyNDpcdFxuIDEyNTpcdFx0ICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtanVtcHNob3QuXG4gMTI2Olx0XG4gMTI3Olx0Y29uZmlnIFVTQl9TVE9SQUdFX0FMQVVEQVxuIDEyODpcdFx0dHJpc3RhdGUgXCYjMzQ7T2x5bXB1cyBNQVVTQi0xMC9GdWppIERQQy1SMSBzdXBwb3J0XCYjMzQ7XG4gMTI5Olx0XHRoZWxwXG4gMTMwOlx0XHQgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgT2x5bXB1cyBNQVVTQi0xMFxuIDEzMTpcdFx0ICBhbmQgRnVqaWZpbG0gRFBDLVIxIFVTQiBDYXJkIHJlYWRlci93cml0ZXIgZGV2aWNlcy5cbiAxMzI6XHRcbiAxMzM6XHRcdCAgVGhlc2UgZGV2aWNlcyBhcmUgYmFzZWQgb24gdGhlIEFsYXVkYSBjaGlwIGFuZCBzdXBwb3J0IGJvdGhcbiAxMzQ6XHRcdCAgWEQgYW5kIFNtYXJ0TWVkaWEgY2FyZHMuXG4gMTM1Olx0XG4gMTM2Olx0XHQgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1hbGF1ZGEuXG4gMTM3Olx0XG4gMTM4Olx0Y29uZmlnIFVTQl9TVE9SQUdFX09ORVRPVUNIXG4gMTM5Olx0XHR0cmlzdGF0ZSBcJiMzNDtTdXBwb3J0IE9uZVRvdWNoIEJ1dHRvbiBvbiBNYXh0b3IgSGFyZCBEcml2ZXNcJiMzNDtcbiAxNDA6XHRcdGRlcGVuZHMgb24gSU5QVVQ9eSB8fCBJTlBVVD1VU0JfU1RPUkFHRVxuIDE0MTpcdFx0aGVscFxuIDE0MjpcdFx0ICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIE1heHRvciBPbmVUb3VjaFxuIDE0MzpcdFx0ICBVU0IgaGFyZCBkcml2ZSYjMzk7cyBvbmV0b3VjaCBidXR0b24uXG4gMTQ0Olx0XG4gMTQ1Olx0XHQgIFRoaXMgY29kZSByZWdpc3RlcnMgdGhlIGJ1dHRvbiBvbiB0aGUgZnJvbnQgb2YgTWF4dG9yIE9uZVRvdWNoIFVTQlxuIDE0NjpcdFx0ICBoYXJkIGRyaXZlJiMzOTtzIGFzIGFuIGlucHV0IGRldmljZS4gQW4gYWN0aW9uIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGhcbiAxNDc6XHRcdCAgdGhpcyBpbnB1dCBpbiBhbnkga2V5YmluZGluZyBzb2Z0d2FyZS4gKGUuZy4gZ25vbWUmIzM5O3Mga2V5Ym9hcmQgc2hvcnQtXG4gMTQ4Olx0XHQgIGN1dHMpXG4gMTQ5Olx0XG4gMTUwOlx0XHQgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1vbmV0b3VjaC5cbiAxNTE6XHRcbiAxNTI6XHRjb25maWcgVVNCX1NUT1JBR0VfS0FSTUFcbiAxNTM6XHRcdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgZm9yIFJpbyBLYXJtYSBtdXNpYyBwbGF5ZXJcJiMzNDtcbiAxNTQ6XHRcdGhlbHBcbiAxNTU6XHRcdCAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBSaW8gS2FybWFcbiAxNTY6XHRcdCAgVVNCIGludGVyZmFjZS5cbiAxNTc6XHRcbiAxNTg6XHRcdCAgVGhpcyBjb2RlIHBsYWNlcyB0aGUgUmlvIEthcm1hIGludG8gbWFzcyBzdG9yYWdlIG1vZGUsIGVuYWJsaW5nXG4gMTU5Olx0XHQgIGl0IHRvIGJlIG1vdW50ZWQgYXMgYW4gb3JkaW5hcnkgZmlsZXN5c3RlbS4gUGVyZm9ybWluZyBhbiBlamVjdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzI0CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqQ2hlY2tpbmcgdGhlIEZvdW5kYXRpb24gZm9yIFVTQiBTdG9yYWdlIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoaXMgYFVTQl9TVE9SQUdFX0FMQVVEQWAgb3B0aW9uLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gV2hlcmUgZG9lcyB0aGlzIGZpdCBpbiB0aGUgb3ZlcmFsbCBwaWN0dXJlPyBUaGUgZmlyc3QsIGFuZCBtb3N0IG9idmlvdXMsIHBsYWNlIHRvIGxvb2sgaXMgdGhlIHBhcmVudCBjb25maWd1cmF0aW9uIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgZXhhbWluZSB0aGUgYmVnaW5uaW5nIG9mIGBkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWdgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBicm9hZGVyIGZyYW1ld29yayBhbmQgcmV2ZWFsIGFueSBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzIG9yIHJlbGV2YW50IHVwc3RyZWFtIHNldHRpbmdzIHRoYXQgZ292ZXJuIGhvdyBgVVNCX1NUT1JBR0VfQUxBVURBYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBVbmRlcnN0YW5kaW5nIHRoZSBwYXJlbnQgY29uZmlndXJhdGlvbiBpcyBmdW5kYW1lbnRhbCB0byBncmFzcGluZyB0aGUgaW50ZW50IGJlaGluZCB0aGlzIHNwZWNpZmljIHNldHRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgVVNCIFN0b3JhZ2UgZHJpdmVyIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29tbWVudCBcJiMzNDtOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvXCYjMzQ7XG4gICA3Olx0XG4gICA4Olx0Y29uZmlnIFVTQl9TVE9SQUdFXG4gICA5Olx0XHR0cmlzdGF0ZSBcJiMzNDtVU0IgTWFzcyBTdG9yYWdlIHN1cHBvcnRcJiMzNDtcbiAgMTA6XHRcdGRlcGVuZHMgb24gU0NTSVxuICAxMTpcdFx0aGVscFxuICAxMjpcdFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgVVNCIG1hc3Mgc3RvcmFnZSBkZXZpY2VzIHRvIHlvdXJcbiAgMTM6XHRcdCAgY29tcHV0ZXImIzM5O3MgVVNCIHBvcnQuIFRoaXMgaXMgdGhlIGRyaXZlciB5b3UgbmVlZCBmb3IgVVNCXG4gIDE0Olx0XHQgIGZsb3BweSBkcml2ZXMsIFVTQiBoYXJkIGRpc2tzLCBVU0IgdGFwZSBkcml2ZXMsIFVTQiBDRC1ST01zLFxuICAxNTpcdFx0ICBVU0IgZmxhc2ggZGV2aWNlcywgYW5kIG1lbW9yeSBzdGlja3MsIGFsb25nIHdpdGhcbiAgMTY6XHRcdCAgc2ltaWxhciBkZXZpY2VzLiBUaGlzIGRyaXZlciBtYXkgYWxzbyBiZSB1c2VkIGZvciBzb21lIGNhbWVyYXNcbiAgMTc6XHRcdCAgYW5kIGNhcmQgcmVhZGVycy5cbiAgMTg6XHRcbiAgMTk6XHRcdCAgVGhpcyBvcHRpb24gZGVwZW5kcyBvbiAmIzM5O1NDU0kmIzM5OyBzdXBwb3J0IGJlaW5nIGVuYWJsZWQsIGJ1dCB5b3VcbiAgMjA6XHRcdCAgcHJvYmFibHkgYWxzbyBuZWVkICYjMzk7U0NTSSBkZXZpY2Ugc3VwcG9ydDogU0NTSSBkaXNrIHN1cHBvcnQmIzM5O1xuICAyMTpcdFx0ICAoQkxLX0RFVl9TRCkgZm9yIG1vc3QgVVNCIHN0b3JhZ2UgZGV2aWNlcy5cbiAgMjI6XHRcbiAgMjM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gIDI0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2Itc3RvcmFnZS5cbiAgMjU6XHRcbiAgMjY6XHRpZiBVU0JfU1RPUkFHRVxuICAyNzpcdFxuICAyODpcdGNvbmZpZyBVU0JfU1RPUkFHRV9ERUJVR1xuICAyOTpcdFx0Ym9vbCBcJiMzNDtVU0IgTWFzcyBTdG9yYWdlIHZlcmJvc2UgZGVidWdcJiMzNDtcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgU2F5IFkgaGVyZSBpbiBvcmRlciB0byBoYXZlIHRoZSBVU0IgTWFzcyBTdG9yYWdlIGNvZGUgZ2VuZXJhdGVcbiAgMzI6XHRcdCAgdmVyYm9zZSBkZWJ1Z2dpbmcgbWVzc2FnZXMuXG4gIDMzOlx0XG4gIDM0Olx0Y29uZmlnIFVTQl9TVE9SQUdFX1JFQUxURUtcbiAgMzU6XHRcdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgQ2FyZCBSZWFkZXIgc3VwcG9ydFwmIzM0O1xuICAzNjpcdFx0aGVscFxuICAzNzpcdFx0ICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIHBvd2VyLXNhdmluZyBmdW5jdGlvblxuICAzODpcdFx0ICBmb3IgUmVhbHRlayBSVFM1MXh4IFVTQiBjYXJkIHJlYWRlcnMuXG4gIDM5Olx0XG4gIDQwOlx0XHQgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1yZWFsdGVrLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDk0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgVVNCIFN0b3JhZ2UgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGRpZ2dpbmcgaW50byB0aGUgVVNCIHN0b3JhZ2UgY29uZmlndXJhdGlvbiwgYW5kIGJlZm9yZSBJIHN0YXJ0IG1ha2luZyBhc3N1bXB0aW9ucywgbGV0JiMzOTtzIHRha2UgYSBxdWljayBkZXRvdXIuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIGZvdW5kYXRpb25hbCBVU0Igc3VwcG9ydC4gSXQmIzM5O3Mgc2Vjb25kIG5hdHVyZSwgcmVhbGx5LCBidXQgYmV0dGVyIHRvIGJlIG1ldGljdWxvdXMuIEkgc2hvdWxkIGNoZWNrIHRoZSBgZHJpdmVycy91c2IvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB3aGF0IGBkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWdgIGRlcGVuZHMgb24uIFRoaW5ncyBsaWtlIHRoZSBicm9hZCBgVVNCX1NVUFBPUlRgIG9wdGlvbiBhbmQgdGhlIG1vcmUgZnVuZGFtZW50YWwgYFVTQmAgb3B0aW9uIGFyZSBwcm9iYWJseSBpbnZvbHZlZCwgYnV0IEkgd2FudCB0byB2ZXJpZnkgdGhhdC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNsZWFyZXN0IHBpY3R1cmUgb2YgdGhlIHByZWNvbmRpdGlvbnMgYW5kIGVuc3VyZSBhbnkgY2hhbmdlcyBJIG1ha2UgYXJlIHByb3Blcmx5IHNjb3BlZCB3aXRoaW4gdGhlIHdpZGVyIFVTQiBzdWJzeXN0ZW0uIEdldHRpbmcgdGhpcyByaWdodCBmcm9tIHRoZSBvdXRzZXQgcHJldmVudHMgZG93bnN0cmVhbSBoZWFkYWNoZXMsIHlvdSBrbm93LCB0aGUgdXN1YWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvdXJjZS4qZHJpdmVycy91c2Ivc3RvcmFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL0tjb25maWc9MTE0PXNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL3VzYi9LY29uZmlnLTExNS1cbmRyaXZlcnMvdXNiL0tjb25maWc6MTE2OnNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvdXNiL0tjb25maWctMTE3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDgzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGJhc2VkIG9uIHRoZSBwcm92aWRlZCB0aG91Z2h0OgoKKipEaXZpbmcgaW50byBVU0IgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIFVTQiBkcml2ZXIgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgb3V0IHRoZSBgZHJpdmVycy91c2IvS2NvbmZpZ2AgZmlsZSwgZm9jdXNpbmcgb24gbGluZXMgcm91Z2hseSBhcm91bmQgMTEwLTEyMC4gSSYjMzk7bSBwcm9iYWJseSBsb29raW5nIGZvciBhIHNwZWNpZmljIG9wdGlvbiBvciBkZXBlbmRlbmN5LCBtYXliZSBzb21ldGhpbmcgcmVsYXRlZCB0byBhIG5ldyBkZXZpY2UgY2xhc3MgSSYjMzk7bSBpbnRlZ3JhdGluZywgb3IgcGVyaGFwcyBJJiMzOTttIGRlYnVnZ2luZyBhIGNvbmZpZ3VyYXRpb24gaXNzdWUuIFdoYXRldmVyIHRoZSByZWFzb24sIHRoYXQgc2VjdGlvbiBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlbGV2YW50IG9wdGlvbnMgZm9yIHRoZSBtb2R1bGUgSSYjMzk7bSB3b3JraW5nIHdpdGggYXJlIGRlZmluZWQsIG9yIHdoZXJlIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHN0YXRlZC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEwMDpcdFx0ICBhbmQgbGF0ZXIgc291dGggYnJpZGdlIGltcGxlbWVudGF0aW9ucy4gVGhlc2UgYXJlIGNvbW1vbiBvbiB4ODYgUENzXG4gMTAxOlx0XHQgIHdpdGggQU1EIENQVXMgYnV0IHJhcmVseSB1c2VkIGVsc2V3aGVyZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGEgZmV3XG4gMTAyOlx0XHQgIHBvd2VycGMgYW5kIG1pcHMgZGVza3RvcCBtYWNoaW5lcy5cbiAxMDM6XHRcbiAxMDQ6XHRpZiBVU0JcbiAxMDU6XHRcbiAxMDY6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2IvY29yZS9LY29uZmlnXCYjMzQ7XG4gMTA3Olx0XG4gMTA4Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL21vbi9LY29uZmlnXCYjMzQ7XG4gMTA5Olx0XG4gMTEwOlx0c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZ1wmIzM0O1xuIDExMTpcdFxuIDExMjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL0tjb25maWdcJiMzNDtcbiAxMTM6XHRcbiAxMTQ6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2IvY2xhc3MvS2NvbmZpZ1wmIzM0O1xuIDExNTpcdFxuIDExNjpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWdcJiMzNDtcbiAxMTc6XHRcbiAxMTg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2IvaW1hZ2UvS2NvbmZpZ1wmIzM0O1xuIDExOTpcdFxuIDEyMDpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi91c2JpcC9LY29uZmlnXCYjMzQ7XG4gMTIxOlx0XG4gMTIyOlx0ZW5kaWZcbiAxMjM6XHRcbiAxMjQ6XHRjb21tZW50IFwmIzM0O1VTQiBkdWFsLW1vZGUgY29udHJvbGxlciBkcml2ZXJzXCYjMzQ7XG4gMTI1Olx0XG4gMTI2Olx0c291cmNlIFwmIzM0O2RyaXZlcnMvdXNiL2NkbnMzL0tjb25maWdcJiMzNDtcbiAxMjc6XHRcbiAxMjg6XHRzb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2IvZm90ZzIxMC9LY29uZmlnXCYjMzQ7XG4gMTI5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NDUwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNzI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFsYXVkYSBVU0IgU3RvcmFnZSBEcml2ZXIgQW5hbHlzaXMgJmFtcDsgRnV6emluZyBTdHJhdGVneSoqCgpPa2F5LCBzbyBgVVNCX1NUT1JBR0VfQUxBVURBYCBpcyBidWlsdCBvbiBhIGRlcGVuZGVuY3kgY2hhaW46IGl0IG5lZWRzIGBVU0JfU1RPUkFHRWAgd2hpY2gsIGluIHR1cm4sIGhpbmdlcyBvbiBgU0NTSWAsIGFuZCBmaW5hbGx5IGBVU0JgLCBsb2NhdGVkIGluIGBkcml2ZXJzL3VzYi9LY29uZmlnYCB1bmRlciB0aGUgYGlmIFVTQmAgY29uZGl0aW9uLiAgVGhlIGtleSBxdWVzdGlvbiBpcyBhbHdheXMgd2hldGhlciB3ZSBjYW4gaGl0IHRoZXNlIGRyaXZlcnMgdmlhIGZ1enppbmcsIGFuZCB0aGUgYW5zd2VyIGhlcmUgaXMgYSByZXNvdW5kaW5nICp5ZXMqLiBTeXprYWxsZXIgaXMga25vd24gZm9yIGl0cyBleHRlbnNpdmUgZnV6emluZyBvZiBVU0IgZHJpdmVycywgaGVhdmlseSBsZXZlcmFnaW5nIHJhdy1nYWRnZXQgYW5kIGR1bW15X2hjZCBlbXVsYXRpb24uCgpNeSBwcmltYXJ5IGdvYWwgbm93IGlzIHRvIGRldGVybWluZSB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoaXMgYGFsYXVkYWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2hldGhlciBpdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGVpdGhlciBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiBvciBieSBpc3N1aW5nIFNDU0kgY29tbWFuZHMuICBJdCBzZWVtcyB3aGVuIGEgVVNCIGRldmljZSB3aXRoIGEgdmVuZG9yIElEL3Byb2R1Y3QgSUQgKFZJRC9QSUQpIHRoYXQgbWF0Y2hlcyBlbnRyaWVzIGluIGBhbGF1ZGFfdXNiX2lkc2AgKGxpa2UgYDA1ODQ6MDAwOGAgb3IgYDA3YjQ6MDEwYWApIGlzICYjMzQ7Y29ubmVjdGVkJiMzNDsg4oCTIHZpYSBlbXVsYXRpb24sIG9mIGNvdXJzZSDigJMgYGFsYXVkYV9wcm9iZWAgZ2V0cyBjYWxsZWQuICBUaGF0JiMzOTtzIG91ciBlbnRyeSBwb2ludC4gRm9sbG93aW5nIHRoYXQsIFNDU0kgY29tbWFuZHMgaXNzdWVkIHRvIHRoZSBtYXNzIHN0b3JhZ2UgZGV2aWNlIGVtdWxhdGUgdGhlIFVTQiBjb25uZWN0aW9uLCBhbmQgc2hvdWxkIGludm9rZSBgYWxhdWRhX3RyYW5zcG9ydGAsIHdoaWNoIGlzIHRoZSBrZXkgZnVuY3Rpb24gYmVjYXVzZSBpdCBpbiB0dXJuIGNhbGxzIGNyaXRpY2FsIHJvdXRpbmVzIGxpa2UgYGFsYXVkYV9jaGVja19tZWRpYWAsIGBhbGF1ZGFfaW5pdF9tZWRpYWAsIGBhbGF1ZGFfcmVhZF9kYXRhYCwgYGFsYXVkYV93cml0ZV9kYXRhYCwgYGFsYXVkYV93cml0ZV9sYmFgLCBhbmQgc28gb24uCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB2YWx1ZSBsaWVzLiAgSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZml4ZXMgYW5kIGNoYW5nZXMgdGhhdCB3ZXJlIGRvbmU6CgoxLiAgYG1lZGlhX2luaXRpYWxpemVkYCBoYXMgYmVlbiBtb3ZlZCBmcm9tIHRoZSBgc3RydWN0IGFsYXVkYV9pbmZvYCB0byBgc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvYC4KMi4gIEluIGBhbGF1ZGFfZnJlZV9tYXBzYCwgdGhlIHBhdGNoIG5vdyBmcmVlcyB0aGUgb3V0ZXIgYXJyYXlzIG9mIGBtZWRpYV9pbmZvLSZndDtsYmFfdG9fcGJhYCBhbmQgYG1lZGlhX2luZm8tJmd0O3BiYV90b19sYmFgIGFuZCBzZXRzIHRoZW0gdG8gYE5VTExgLCBpbiBhZGRpdGlvbiB0byByZXNldHRpbmcgY2FwYWNpdHkgYW5kIHV6b25lc2l6ZSB0byAwLiBQcmV2aW91c2x5LCBpdCB3YXMgb25seSB0aGUgaW5uZXIgYXJyYXlzLiBUaGlzIGluZGljYXRlcyBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIHN0YWxlIHBvaW50ZXIgaXNzdWVzIHdlcmUgcHJlc2VudCBhbmQgY29ycmVjdGVkLgozLiAgRXJyb3IgaGFuZGxpbmcgaW4gYGFsYXVkYV9pbml0X21lZGlhYCBoYXMgYmVlbiBpbXByb3ZlZCwgd2l0aCBgYWxhdWRhX2ZyZWVfbWFwcygmYW1wO01FRElBX0lORk8odXMpKWAgYmVpbmcgY2FsbGVkIG9uIGZhaWx1cmUuCjQuICBgYWxhdWRhX2NoZWNrX21lZGlhYCBpcyBub3cgbW9yZSByb2J1c3QuIE9uIGRldGVjdGlvbiBvZiBubyBtZWRpYSwgb3IgYSBtZWRpYSBjaGFuZ2UsIGl0IGNhbGxzIGBhbGF1ZGFfZnJlZV9tYXBzYCBhbmQgcmVzZXRzIGBtZWRpYV9pbmZvLSZndDttZWRpYV9pbml0aWFsaXplZGAgdG8gYGZhbHNlYC4KNS4gIGBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZWAgaGFzIGFkZGVkIGNydWNpYWwgY2hlY2tzIHRvIHNlZSBpZiBgbGJhX3RvX3BiYWAgb3IgYHBiYV90b19sYmFgIGlzIE5VTEwuIEl0IGFsc28gbm93IHJldHVybnMgYSBgVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SYCBpbiB0aGlzIGNhc2UsIG9yIGNhbGxzIGBhbGF1ZGFfcmVhZF9tYXBgLiBQcmV2aW91c2x5IGl0IHJldHVybmVkIGB2b2lkYC4KNi4gIGBhbGF1ZGFfd3JpdGVfbGJhYCwgYGFsYXVkYV9yZWFkX2RhdGFgLCBhbmQgYGFsYXVkYV93cml0ZV9kYXRhYCBoYXZlIGFkZGl0aW9uYWwgZGl2aXNpb24tYnktemVybyBjaGVja3MgKGAhdXpvbmVzaXplYCkgYW5kIGFsc28gY2hlY2tzIHRoZSByZXR1cm4gdmFsdWVzIG9mIHRoZSBjYWxsZWQgZnVuY3Rpb24uCgpUaGUgZ29vZCBuZXdzIGlzIHRoYXQgdGhpcyBjb3JlIGxvZ2ljIGlzIGFsbCBuZWF0bHkgdHVja2VkIGF3YXkgaW4gYGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNgLgoKR2l2ZW4gdGhhdCB0aGlzIGlzIGFsbCBhY2Nlc3NpYmxlIHZpYSBVU0IgZW11bGF0aW9uIHdpdGhpbiBRRU1VIGFuZCBTeXprYWxsZXIgKHNwZWNpZmljYWxseSB1c2luZyBkdW1teV9oY2QgYW5kIHJhdy1nYWRnZXQgZm9yIFVTQiBlbXVsYXRpb24pLCBteSBhbmFseXNpcyBwb2ludHMgdG93YXJkcyB0aGlzIGRyaXZlciBiZWluZyAqZGVmaW5pdGVseSogYFdvcnRoRnV6emluZ2AuCgpOb3csIEkgd2lsbCBwcm9jZWVkIHRvIGFuYWx5emUgdGhlIGF2YWlsYWJsZSBzeW1ib2xzIHdpdGhpbiBgZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY2AuIExldCYjMzk7cyBkaWcgaW50byB0aGUgZnVuY3Rpb25zIGRlZmluZWQgdGhlcmUgYW5kIHNlZSB3aGF0IGlzIGF2YWlsYWJsZSBhcyBub24tc3RhdGljLCBleHBvcnRlZCwgb3IgY2FsbGJhY2sgZnVuY3Rpb25zIHdoaWNoIGNhbiBiZSBob29rZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEyNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTI3NTpcdH1cbjEyNzY6XHRcbjEyNzc6XHRzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhbGF1ZGFfaG9zdF90ZW1wbGF0ZTtcbjEyNzg6XHRcbjEyNzk6XHRzdGF0aWMgaW50IGFsYXVkYV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbjEyODA6XHRcdFx0XHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuMTI4MTpcdHtcbjEyODI6XHRcdHN0cnVjdCB1c19kYXRhICp1cztcbjEyODM6XHRcdGludCByZXN1bHQ7XG4xMjg0Olx0XG4xMjg1Olx0XHRyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTEoXHUwMDI2dXMsIGludGYsIGlkLFxuMTI4NjpcdFx0XHRcdChpZCAtIGFsYXVkYV91c2JfaWRzKSAmIzQzOyBhbGF1ZGFfdW51c3VhbF9kZXZfbGlzdCxcbjEyODc6XHRcdFx0XHRcdTAwMjZhbGF1ZGFfaG9zdF90ZW1wbGF0ZSk7XG4xMjg4Olx0XHRpZiAocmVzdWx0KVxuMTI4OTpcdFx0XHRyZXR1cm4gcmVzdWx0O1xuMTI5MDpcdFxuMTI5MTpcdFx0dXMtXHUwMDNldHJhbnNwb3J0X25hbWUgID0gXCYjMzQ7QWxhdWRhIENvbnRyb2wvQnVsa1wmIzM0OztcbjEyOTI6XHRcdHVzLVx1MDAzZXRyYW5zcG9ydCA9IGFsYXVkYV90cmFuc3BvcnQ7XG4xMjkzOlx0XHR1cy1cdTAwM2V0cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0O1xuMTI5NDpcdFx0dXMtXHUwMDNlbWF4X2x1biA9IDE7XG4xMjk1Olx0XG4xMjk2Olx0XHRyZXN1bHQgPSB1c2Jfc3Rvcl9wcm9iZTIodXMpO1xuMTI5NzpcdFx0cmV0dXJuIHJlc3VsdDtcbjEyOTg6XHR9XG4xMjk5Olx0XG4xMzAwOlx0c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFsYXVkYV9kcml2ZXIgPSB7XG4xMzAxOlx0XHQubmFtZSA9XHRcdERSVl9OQU1FLFxuMTMwMjpcdFx0LnByb2JlID1cdGFsYXVkYV9wcm9iZSxcbjEzMDM6XHRcdC5kaXNjb25uZWN0ID1cdHVzYl9zdG9yX2Rpc2Nvbm5lY3QsXG4xMzA0Olx0XHQuc3VzcGVuZCA9XHR1c2Jfc3Rvcl9zdXNwZW5kLFxuMTMwNTpcdFx0LnJlc3VtZSA9XHR1c2Jfc3Rvcl9yZXN1bWUsXG4xMzA2Olx0XHQucmVzZXRfcmVzdW1lID1cdHVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSxcbjEzMDc6XHRcdC5wcmVfcmVzZXQgPVx0dXNiX3N0b3JfcHJlX3Jlc2V0LFxuMTMwODpcdFx0LnBvc3RfcmVzZXQgPVx0dXNiX3N0b3JfcG9zdF9yZXNldCxcbjEzMDk6XHRcdC5pZF90YWJsZSA9XHRhbGF1ZGFfdXNiX2lkcyxcbjEzMTA6XHRcdC5zb2Z0X3VuYmluZCA9XHQxLFxuMTMxMTpcdFx0Lm5vX2R5bmFtaWNfaWQgPSAxLFxuMTMxMjpcdH07XG4xMzEzOlx0XG4xMzE0Olx0bW9kdWxlX3VzYl9zdG9yX2RyaXZlcihhbGF1ZGFfZHJpdmVyLCBhbGF1ZGFfaG9zdF90ZW1wbGF0ZSwgRFJWX05BTUUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY3OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgYWxhdWRhLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIGBhbGF1ZGEuY2AuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bGwgbmVlZCB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQsIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGRlZmluZWQgaW4gdGVybXMgb2Ygc3ltYm9scy4gVmFyaWFibGVzLCBjb25zdGFudHMsIHN0cnVjdHMsIGFuZCBzbyBvbiDigJMgYSBxdWljayBzd2VlcCBvZiB0aGUgbGFuZHNjYXBlIHdpbGwgZ2l2ZSBtZSBhIGJhc2VsaW5lLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBob25lIGluIG9uIHRoZSBjb3JlIG9mIGFueSBDIGZpbGU6IHRoZSBmdW5jdGlvbnMuIEkmIzM5O2xsIHNlYXJjaCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4gVGhvc2UgYXJlIHdoZXJlIHRoZSByZWFsIHdvcmsgaGFwcGVucywgYW5kIHdoZXJlIEkgY2FuIHN0YXJ0IHRvIHVuZGVyc3RhbmQgdGhlIHByb2dyYW0mIzM5O3MgbG9naWMgYW5kIGJlaGF2aW9yLiBLbm93aW5nIHRoZSBmdW5jdGlvbnMgd2lsbCBnaXZlIG1lIHRoZSBidWlsZGluZyBibG9ja3MgdG8gdW5kZXJzdGFuZCBob3cgYGFsYXVkYS5jYCBkb2VzIGl0cyB0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXowLTlfXSYjNDM7LipcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTAzPXN0cnVjdCBhbGF1ZGFfaW5mbyB7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjItXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyMzpzdGF0aWMgaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cyk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyNC1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTE3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGFsYXVkYV9jYXJkX2luZm8gYWxhdWRhX2NhcmRfaWRzW10gPSB7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yMDItXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjIwMzpzdGF0aWMgY29uc3Qgc3RydWN0IGFsYXVkYV9jYXJkX2luZm8gKmFsYXVkYV9jYXJkX2ZpbmRfaWQodW5zaWduZWQgY2hhciBpZClcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjA0LXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTIxOD1zdGF0aWMgdW5zaWduZWQgY2hhciBlY2MyWzI1Nl07XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTIxOS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MjIwOnN0YXRpYyB2b2lkIG5hbmRfaW5pdF9lY2Modm9pZClcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjIxLXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTI0NC0vKiBjb21wdXRlIDMtYnl0ZSBlY2Mgb24gMjU2IGJ5dGVzICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjI0NTpzdGF0aWMgdm9pZCBuYW5kX2NvbXB1dGVfZWNjKHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKmVjYylcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjQ2LXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTI2OC1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MjY5OnN0YXRpYyBpbnQgbmFuZF9jb21wYXJlX2VjYyh1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBjaGFyICplY2MpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTI3MC17XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yNzMtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjI3NDpzdGF0aWMgdm9pZCBuYW5kX3N0b3JlX2VjYyh1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBjaGFyICplY2MpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTI3NS17XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yODUtICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjI4NjpzdGF0aWMgdm9pZCBhbGF1ZGFfZnJlZV9tYXBzIChzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gKm1lZGlhX2luZm8pXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTI4Ny17XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zMTctICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjMxODpzdGF0aWMgaW50IGFsYXVkYV9nZXRfbWVkaWFfc3RhdHVzKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciAqZGF0YSlcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzE5LXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTM0MC0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MzQxOnN0YXRpYyBpbnQgYWxhdWRhX2Fja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTM0Mi17XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNTctICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjM1ODpzdGF0aWMgaW50IGFsYXVkYV9nZXRfbWVkaWFfc2lnbmF0dXJlKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgY2hhciAqZGF0YSlcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzU5LXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTM3My0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6Mzc0OnN0YXRpYyBpbnQgYWxhdWRhX3Jlc2V0X21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzc1LXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTM4OS0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MzkwOnN0YXRpYyBpbnQgYWxhdWRhX2luaXRfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zOTEte1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDY4LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0Njk6c3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NzAte1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTE0LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo1MTU6c3RhdGljIGludCBhbGF1ZGFfY2hlY2tfc3RhdHVzMihzdHJ1Y3QgdXNfZGF0YSAqdXMpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTUxNi17XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01NDQtICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjU0NTpzdGF0aWMgaW50IGFsYXVkYV9nZXRfcmVkdV9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSwgdW5zaWduZWQgY2hhciAqZGF0YSlcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTQ2LXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU2NS0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NTY2OnN0YXRpYyB1MTYgYWxhdWRhX2ZpbmRfdW51c2VkX3BiYShzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gKmluZm8sXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU2Ny1cdHVuc2lnbmVkIGludCB6b25lKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTgyLSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo1ODM6c3RhdGljIGludCBhbGF1ZGFfcmVhZF9tYXAoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTg0LXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTcwNi0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzA3OnN0YXRpYyBpbnQgYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzA4LXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTcyMS0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzIyOnN0YXRpYyBpbnQgYWxhdWRhX2VyYXNlX2Jsb2NrKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSlcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzIzLXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc1MC0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzUxOnN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfYmxvY2tfcmF3KHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzUyLVx0XHR1bnNpZ25lZCBpbnQgcGFnZSwgdW5zaWduZWQgaW50IHBhZ2VzLCB1bnNpZ25lZCBjaGFyICpkYXRhKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzc2LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3Nzc6c3RhdGljIGludCBhbGF1ZGFfcmVhZF9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc3OC1cdFx0dW5zaWduZWQgaW50IHBhZ2UsIHVuc2lnbmVkIGludCBwYWdlcywgdW5zaWduZWQgY2hhciAqZGF0YSlcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgwMS0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODAyOnN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2Jsb2NrKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSwgdW5zaWduZWQgY2hhciAqZGF0YSlcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODAzLXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgyOS0gKi9cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODMwOnN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2xiYShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBsYmEsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgzMS1cdFx0IHVuc2lnbmVkIGludCBwYWdlLCB1bnNpZ25lZCBpbnQgcGFnZXMsXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05NDMtICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjk0NDpzdGF0aWMgaW50IGFsYXVkYV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTk0NS1cdFx0dW5zaWduZWQgaW50IHNlY3RvcnMpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDQ3LSAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMDQ4OnN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwNDktXHRcdHVuc2lnbmVkIGludCBzZWN0b3JzKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTEyOS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTEzMDpzdGF0aWMgdm9pZCBhbGF1ZGFfaW5mb19kZXN0cnVjdG9yKHZvaWQgKmV4dHJhKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTMxLXtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNDktICovXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNTA6c3RhdGljIGludCBpbml0X2FsYXVkYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNTEte1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE2OS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE3MDpzdGF0aWMgaW50IGFsYXVkYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNzEte1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTI3Nz1zdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhbGF1ZGFfaG9zdF90ZW1wbGF0ZTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI3OC1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTI3OTpzdGF0aWMgaW50IGFsYXVkYV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZixcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI4MC1cdFx0XHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTMwMD1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYWxhdWRhX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEzMTMtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEzMTQ6bW9kdWxlX3VzYl9zdG9yX2RyaXZlcihhbGF1ZGFfZHJpdmVyLCBhbGF1ZGFfaG9zdF90ZW1wbGF0ZSwgRFJWX05BTUUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDI3MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGUgYG1vZHVsZV91c2Jfc3Rvcl9kcml2ZXJgLCBhbmQgSSB3YW50IHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgZXhhY3RseSB3aGF0IGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvci4gV2hhdCBmdW5jdGlvbmFsaXRpZXMgZG9lcyB0aGlzIG1vZHVsZSBwcm92aWRlPyBXaGF0IFVTQiBzdG9yYWdlIGRldmljZXMgZG9lcyBpdCBoYW5kbGU/IERvZXMgaXQgdXNlIHRoZSBTQ1NJIGNvbW1hbmQgc2V0IG9yIGEgZGlmZmVyZW50IHByb3RvY29sPyBJIGtub3cgaXQmIzM5O3MgYSBkcml2ZXIsIG9mIGNvdXJzZSwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgVVNCIHN1YnN5c3RlbS4gRG9lcyBpdCBoYW5kbGUgcXVpcmtzIGZvciBkaWZmZXJlbnQgc3RvcmFnZSBkZXZpY2VzPyBEb2VzIGl0IGludGVyYWN0IHdpdGggYmxvY2sgbGF5ZXJzIG9yIHZpcnR1YWwgZmlsZSBzeXN0ZW1zIGRpcmVjdGx5PyBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBhcmNoaXRlY3R1cmUgYW5kIGhvdyBpdCBvcmNoZXN0cmF0ZXMgdGhlIHByb2Nlc3Mgb2YgZGF0YSB0cmFuc2ZlciBiZXR3ZWVuIHRoZSBVU0Igc3RvcmFnZSBkZXZpY2UgYW5kIHRoZSBob3N0IHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBtb2R1bGVfdXNiX3N0b3JfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2Ivc3RvcmFnZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oPTE5ND1leHRlcm4gdm9pZCB1c2Jfc3Rvcl9hZGp1c3RfcXVpcmtzKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuaC0xOTYtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oOjE5NzojZGVmaW5lIG1vZHVsZV91c2Jfc3Rvcl9kcml2ZXIoX19kcml2ZXIsIF9fc2h0LCBfX25hbWUpIFxcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oLTE5OC1zdGF0aWMgaW50IF9faW5pdCBfX2RyaXZlciMjX2luaXQodm9pZCkgXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1OTcKCQkJCQkJCW91dHB1dDogMTg4CgkJCQkJCQl0aG91Z2h0czogNzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFsYXVkYSBVU0IgRHJpdmVyIEFuYWx5c2lzIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgQWxhdWRhIFVTQiBzdG9yYWdlIGRyaXZlciAoYGFsYXVkYS5jYCkuIEkmIzM5O3ZlIGdvbmUgdGhyb3VnaCB0aGUgY29kZSBhbmQgaWRlbnRpZmllZCB0aGUga2V5IGZ1bmN0aW9ucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoOiBgYWxhdWRhX3Byb2JlYCwgYGluaXRfYWxhdWRhYCwgYGFsYXVkYV90cmFuc3BvcnRgLCBgYWxhdWRhX3JlYWRfZGF0YWAsIGBhbGF1ZGFfd3JpdGVfZGF0YWAsIGBhbGF1ZGFfY2hlY2tfbWVkaWFgLCBgYWxhdWRhX2luaXRfbWVkaWFgLCBgYWxhdWRhX2ZyZWVfbWFwc2AsIGBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZWAsIGFuZCBgYWxhdWRhX3dyaXRlX2xiYWAuCgpNeSBmb2N1cyBpcyBvbiBmdXp6aW5nLCBzbyBJJiMzOTt2ZSBzcGVjaWZpY2FsbHkgZWFybWFya2VkIHRoZSBub24taG90LXBhdGggZnVuY3Rpb25zLiBUaGlzIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyB3aWxsIGJlIGNydWNpYWwgZm9yIGd1aWRpbmcgdGhlIGZ1enplci4gSSYjMzk7dmUgbmFycm93ZWQgaXQgdG8gYGFsYXVkYV90cmFuc3BvcnRgLCBgYWxhdWRhX3Byb2JlYCwgYGluaXRfYWxhdWRhYCwgYGFsYXVkYV9jaGVja19tZWRpYWAsIGBhbGF1ZGFfcmVhZF9kYXRhYCwgYGFsYXVkYV93cml0ZV9kYXRhYCwgYGFsYXVkYV93cml0ZV9sYmFgLCBhbmQgYGFsYXVkYV9mcmVlX21hcHNgLgoKTmV4dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkIGZvciB0aGlzIG1vZHVsZSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYnVpbGQuIEnigJl2ZSBjaGVja2VkIHRoZSBLY29uZmlnIGZpbGVzLCBhbmQgY29uZmlybWVkIHRoYXQgd2UgbmVlZCBgVVNCX1NUT1JBR0VfQUxBVURBYCwgd2hpY2ggZGVwZW5kcyBvbiBgVVNCX1NUT1JBR0VgLCB3aGljaCBkZXBlbmRzIG9uIGBTQ1NJYCwgd2hpY2ggaW4gdHVybiwgaXMgZGVwZW5kZW50IG9uIHRoZSBpbmNsdXNpb24gb2YgYFVTQmAsIHdoaWNoIGRlcGVuZHMgb24gYFVTQl9TVVBQT1JUYC4gTm8gb3RoZXIgZGVwZW5kZW5jaWVzIHdlcmUgZm91bmQgZm9yIGBVU0JfU1RPUkFHRV9BTEFVREFgLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGVzZSBhcmUgdGhlIHJlcXVpcmVkIGNvbmZpZ3MuCgpJJiMzOTt2ZSBhbHNvIHF1aWNrbHkgdmFsaWRhdGVkIHRoYXQgdGhlIGBNYWtlZmlsZWAgZW50cnkgZm9yIHRoaXMgbW9kdWxlIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQuIEl0IGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIG9iamVjdCBmaWxlIGB1bXMtYWxhdWRhLm9gIGlzIGJlaW5nIGluY2x1ZGVkIGluIHRoZSBidWlsZCBhcyBleHBlY3RlZC4KCkZpbmFsbHksIEkmIzM5O20gcmVhZHkgdG8gY3JhZnQgdGhlIGNhbGwgdG8gdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoIGFkZHJlc3NlcyBtZW1vcnkgbWFuYWdlbWVudCwgYm91bmRzIGNoZWNrcywgemVybyBkaXZpc2lvbiBpc3N1ZXMsIGFuZCBtZWRpYSBpbml0aWFsaXphdGlvbiBzdGF0ZSBoYW5kbGluZy4gQWxsIHRoZXNlIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIGFuZCBhbGwgc2hvdWxkIGJlIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBzdGFuZGFyZCBTQ1NJIGNvbW1hbmQgaW50ZXJhY3Rpb24gd2l0aCBlbXVsYXRlZCBkZXZpY2VzLiBUaGVyZWZvcmUsIFdvcnRoRnV6emluZyBpcyBzZXQgdG8gYHRydWVgLiBJJiMzOTt2ZSBwcm92aWRlZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXMgdGhhdCBjcml0aWNhbCBsaXN0IG9mIGZ1bmN0aW9ucyBhbmQgY29uZmlybWVkIHRoZSBgRW5hYmxlQ29uZmlnc2AuIEl0JiMzOTtzIGFsbCBjbGVhbiBhbmQgcmVhZHkuIExldCYjMzk7cyBzZW5kIHRoZSByZXN1bHRzIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX1NUT1JBR0VfQUxBVURBJiMzNDssCiAgICAmIzM0O1VTQl9TVE9SQUdFJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtTQ1NJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxhdWRhX3RyYW5zcG9ydCYjMzQ7LAogICAgJiMzNDthbGF1ZGFfcHJvYmUmIzM0OywKICAgICYjMzQ7aW5pdF9hbGF1ZGEmIzM0OywKICAgICYjMzQ7YWxhdWRhX2NoZWNrX21lZGlhJiMzNDssCiAgICAmIzM0O2FsYXVkYV9yZWFkX2RhdGEmIzM0OywKICAgICYjMzQ7YWxhdWRhX3dyaXRlX2RhdGEmIzM0OywKICAgICYjMzQ7YWxhdWRhX3dyaXRlX2xiYSYjMzQ7LAogICAgJiMzNDthbGF1ZGFfZnJlZV9tYXBzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCB6ZXJvLWRpdmlzaW9uIGJ1Z3MsIG1lbW9yeSBsZWFrcywgYW5kIG1lZGlhIGluaXRpYWxpemF0aW9uIHN0YXRlIGhhbmRsaW5nIGFjcm9zcyB6b25lIG1hcCBhbGxvY2F0aW9ucyBhbmQgSS9PIGhhbmRsaW5nIGluIHRoZSBPbHltcHVzIE1BVVNCLTEwL0Z1amlmaWxtIERQQy1SMSAoQWxhdWRhKSBVU0IgbWFzcyBzdG9yYWdlIGRyaXZlci4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgdmlhIFVTQiBlbXVsYXRpb24vZnV6emluZyBmcmFtZXdvcmtzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfU1RPUkFHRV9BTEFVREEmIzM0OywKICAgICYjMzQ7VVNCX1NUT1JBR0UmIzM0OywKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O1NDU0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGF1ZGFfdHJhbnNwb3J0JiMzNDssCiAgICAmIzM0O2FsYXVkYV9wcm9iZSYjMzQ7LAogICAgJiMzNDtpbml0X2FsYXVkYSYjMzQ7LAogICAgJiMzNDthbGF1ZGFfY2hlY2tfbWVkaWEmIzM0OywKICAgICYjMzQ7YWxhdWRhX3JlYWRfZGF0YSYjMzQ7LAogICAgJiMzNDthbGF1ZGFfd3JpdGVfZGF0YSYjMzQ7LAogICAgJiMzNDthbGF1ZGFfd3JpdGVfbGJhJiMzNDssCiAgICAmIzM0O2FsYXVkYV9mcmVlX21hcHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIHplcm8tZGl2aXNpb24gYnVncywgbWVtb3J5IGxlYWtzLCBhbmQgbWVkaWEgaW5pdGlhbGl6YXRpb24gc3RhdGUgaGFuZGxpbmcgYWNyb3NzIHpvbmUgbWFwIGFsbG9jYXRpb25zIGFuZCBJL08gaGFuZGxpbmcgaW4gdGhlIE9seW1wdXMgTUFVU0ItMTAvRnVqaWZpbG0gRFBDLVIxIChBbGF1ZGEpIFVTQiBtYXNzIHN0b3JhZ2UgZHJpdmVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSB2aWEgVVNCIGVtdWxhdGlvbi9mdXp6aW5nIGZyYW1ld29ya3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMjA6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgbWVtb3J5IGxlYWtzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbmQgcG90ZW50aWFsIGRpdmlzaW9uLWJ5LXplcm8gZXJyb3JzIGluIGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMuIFNwZWNpZmljYWxseSwgaXQgZnJlZXMgdGhlIG91dGVyIHBvaW50ZXIgYXJyYXlzIGluIGFsYXVkYV9mcmVlX21hcHMoKSwgYWRkcyBlcnJvciBjbGVhbnVwIGluIGFsYXVkYV9pbml0X21lZGlhKCksIGFkZHMgY2hlY2tzIGZvciBOVUxMIHBvaW50ZXJzIGluIGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKCksIGFkZHMgY2hlY2tzIGZvciB6ZXJvIHV6b25lc2l6ZSB0byBhdm9pZCBkaXZpc2lvbiBieSB6ZXJvLCBhbmQgbW92ZXMgbWVkaWFfaW5pdGlhbGl6ZWQgdG8gc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvLlxuXG5UaGUgc3RydWN0IGFsYXVkYV9pbmZvIGNvbnRhaW5pbmcgYWxhdWRhX21lZGlhX2luZm8gaXMgYWxsb2NhdGVkIHVzaW5nIGt6YWxsb2Nfb2JqKCksIGVuc3VyaW5nIGFsbCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQuIFBCQS9MQkEgbWFwcGluZyB0YWJsZXMgYXJlIGFsbG9jYXRlZCB2aWEga2NhbGxvYy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBTaW5jZSB0aGVzZSBjaGFuZ2VzIHN0cmljdGx5IGZpeCBtZW1vcnkgbGVha3MgYW5kIE5VTEwvemVyby1jaGVjayBzYWZldHkgaXNzdWVzLCB0aGV5IGRvIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvIG5vdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTNhMGE2MDUxYTdiNmYxMmRiNWY4YTUyYmFkYjQ3ZGI4MzUwZjY5YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDI4IDIwOjQ4OjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMKaW5kZXggNjkxZmU0NzAwOWNmNi4uYTJhMzMzNDE5ZjFmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jCkBAIC05Niw2ICYjNDM7OTYsOCBAQCBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gewogCiAJdTE2ICoqbGJhX3RvX3BiYTsJCS8qIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYmxvY2sgbWFwICovCiAJdTE2ICoqcGJhX3RvX2xiYTsJCS8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgYmxvY2sgbWFwICovCiYjNDM7CiYjNDM7CWJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7CiB9OwogCiBzdHJ1Y3QgYWxhdWRhX2luZm8gewpAQCAtMTA1LDggJiM0MzsxMDcsNiBAQCBzdHJ1Y3QgYWxhdWRhX2luZm8gewogCXVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5OwogCXVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjOwkvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi8KIAl1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7CS8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi8KLQotCWJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7CiB9OwogCiAjZGVmaW5lIHNob3J0X3BhY2sobHNiLG1zYikgKCAoKHUxNikobHNiKSkgfCAoICgodTE2KShtc2IpKSZsdDsmbHQ7OCApICkKQEAgLTI5MCwxNyAmIzQzOzI5MCwyNSBAQCBzdGF0aWMgdm9pZCBhbGF1ZGFfZnJlZV9tYXBzIChzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gKm1lZGlhX2luZm8pCiAJdW5zaWduZWQgaW50IG51bV96b25lcyA9IG1lZGlhX2luZm8tJmd0O2NhcGFjaXR5ICZndDsmZ3Q7IHNoaWZ0OwogCXVuc2lnbmVkIGludCBpOwogCi0JaWYgKG1lZGlhX2luZm8tJmd0O2xiYV90b19wYmEgIT0gTlVMTCkKJiM0MzsJaWYgKG1lZGlhX2luZm8tJmd0O2xiYV90b19wYmEgIT0gTlVMTCkgewogCQlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3pvbmVzOyBpJiM0MzsmIzQzOykgewogCQkJa2ZyZWUobWVkaWFfaW5mby0mZ3Q7bGJhX3RvX3BiYVtpXSk7CiAJCQltZWRpYV9pbmZvLSZndDtsYmFfdG9fcGJhW2ldID0gTlVMTDsKIAkJfQomIzQzOwkJa2ZyZWUobWVkaWFfaW5mby0mZ3Q7bGJhX3RvX3BiYSk7CiYjNDM7CQltZWRpYV9pbmZvLSZndDtsYmFfdG9fcGJhID0gTlVMTDsKJiM0MzsJfQogCi0JaWYgKG1lZGlhX2luZm8tJmd0O3BiYV90b19sYmEgIT0gTlVMTCkKJiM0MzsJaWYgKG1lZGlhX2luZm8tJmd0O3BiYV90b19sYmEgIT0gTlVMTCkgewogCQlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX3pvbmVzOyBpJiM0MzsmIzQzOykgewogCQkJa2ZyZWUobWVkaWFfaW5mby0mZ3Q7cGJhX3RvX2xiYVtpXSk7CiAJCQltZWRpYV9pbmZvLSZndDtwYmFfdG9fbGJhW2ldID0gTlVMTDsKIAkJfQomIzQzOwkJa2ZyZWUobWVkaWFfaW5mby0mZ3Q7cGJhX3RvX2xiYSk7CiYjNDM7CQltZWRpYV9pbmZvLSZndDtwYmFfdG9fbGJhID0gTlVMTDsKJiM0MzsJfQomIzQzOwltZWRpYV9pbmZvLSZndDtjYXBhY2l0eSA9IDA7CiYjNDM7CW1lZGlhX2luZm8tJmd0O3V6b25lc2l6ZSA9IDA7CiB9CiAKIC8qCkBAIC00NDEsMTEgJiM0Mzs0NDksMTUgQEAgc3RhdGljIGludCBhbGF1ZGFfaW5pdF9tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpCiAJCSYjNDM7IE1FRElBX0lORk8odXMpLmJsb2Nrc2hpZnQgJiM0MzsgTUVESUFfSU5GTyh1cykucGFnZXNoaWZ0KTsKIAlNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID0ga2NhbGxvYyhudW1fem9uZXMsIHNpemVvZih1MTYqKSwgR0ZQX05PSU8pOwogCU1FRElBX0lORk8odXMpLmxiYV90b19wYmEgPSBrY2FsbG9jKG51bV96b25lcywgc2l6ZW9mKHUxNiopLCBHRlBfTk9JTyk7Ci0JaWYgKE1FRElBX0lORk8odXMpLnBiYV90b19sYmEgPT0gTlVMTCB8fCBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhID09IE5VTEwpCiYjNDM7CWlmIChNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID09IE5VTEwgfHwgTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9PSBOVUxMKSB7CiYjNDM7CQlhbGF1ZGFfZnJlZV9tYXBzKCZhbXA7TUVESUFfSU5GTyh1cykpOwogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwomIzQzOwl9CiAKLQlpZiAoYWxhdWRhX3Jlc2V0X21lZGlhKHVzKSAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCiYjNDM7CWlmIChhbGF1ZGFfcmVzZXRfbWVkaWEodXMpICE9IFVTQl9TVE9SX1hGRVJfR09PRCkgewomIzQzOwkJYWxhdWRhX2ZyZWVfbWFwcygmYW1wO01FRElBX0lORk8odXMpKTsKIAkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKJiM0MzsJfQogCiAJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EOwogfQpAQCAtNDU3LDYgJiM0Mzs0NjksNyBAQCBzdGF0aWMgaW50IGFsYXVkYV9pbml0X21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKIHsKIAlzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIHVzLSZndDtleHRyYTsKJiM0MzsJc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICptZWRpYV9pbmZvID0gJmFtcDtNRURJQV9JTkZPKHVzKTsKIAl1bnNpZ25lZCBjaGFyICpzdGF0dXMgPSB1cy0mZ3Q7aW9idWY7CiAJaW50IHJjOwogCkBAIC00NzAsNyAmIzQzOzQ4Myw4IEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKIAlpZiAoKHN0YXR1c1swXSAmYW1wOyAweDgwKSB8fCAoKHN0YXR1c1swXSAmYW1wOyAweDFGKSA9PSAweDEwKQogCQl8fCAoKHN0YXR1c1sxXSAmYW1wOyAweDAxKSA9PSAwKSkgewogCQl1c2Jfc3Rvcl9kYmcodXMsICYjMzQ7Tm8gbWVkaWEsIG9yIGRvb3Igb3BlblxuJiMzNDspOwotCQlhbGF1ZGFfZnJlZV9tYXBzKCZhbXA7TUVESUFfSU5GTyh1cykpOwomIzQzOwkJYWxhdWRhX2ZyZWVfbWFwcyhtZWRpYV9pbmZvKTsKJiM0MzsJCW1lZGlhX2luZm8tJmd0O21lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7CiAJCWluZm8tJmd0O3NlbnNlX2tleSA9IDB4MDI7CiAJCWluZm8tJmd0O3NlbnNlX2FzYyA9IDB4M0E7CiAJCWluZm8tJmd0O3NlbnNlX2FzY3EgPSAweDAwOwpAQCAtNDc4LDEyICYjNDM7NDkyLDEzIEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cykKIAl9CiAKIAkvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovCi0JaWYgKHN0YXR1c1swXSAmYW1wOyAweDA4IHx8ICFpbmZvLSZndDttZWRpYV9pbml0aWFsaXplZCkgewomIzQzOwlpZiAoc3RhdHVzWzBdICZhbXA7IDB4MDggfHwgIW1lZGlhX2luZm8tJmd0O21lZGlhX2luaXRpYWxpemVkKSB7CiAJCXVzYl9zdG9yX2RiZyh1cywgJiMzNDtNZWRpYSBjaGFuZ2UgZGV0ZWN0ZWRcbiYjMzQ7KTsKLQkJYWxhdWRhX2ZyZWVfbWFwcygmYW1wO01FRElBX0lORk8odXMpKTsKJiM0MzsJCWFsYXVkYV9mcmVlX21hcHMobWVkaWFfaW5mbyk7CiYjNDM7CQltZWRpYV9pbmZvLSZndDttZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlOwogCQlyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTsKIAkJaWYgKHJjID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQotCQkJaW5mby0mZ3Q7bWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlOwomIzQzOwkJCW1lZGlhX2luZm8tJmd0O21lZGlhX2luaXRpYWxpemVkID0gdHJ1ZTsKIAkJaW5mby0mZ3Q7c2Vuc2Vfa2V5ID0gVU5JVF9BVFRFTlRJT047CiAJCWluZm8tJmd0O3NlbnNlX2FzYyA9IDB4Mjg7CiAJCWluZm8tJmd0O3NlbnNlX2FzY3EgPSAweDAwOwpAQCAtNjg5LDExICYjNDM7NzA0LDE2IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfbWFwKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHpvbmUpCiAgKiBDaGVja3MgdG8gc2VlIHdoZXRoZXIgd2UgaGF2ZSBhbHJlYWR5IG1hcHBlZCBhIGNlcnRhaW4gem9uZQogICogSWYgd2UgaGF2ZW4mIzM5O3QsIHRoZSBtYXAgaXMgZ2VuZXJhdGVkCiAgKi8KLXN0YXRpYyB2b2lkIGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHpvbmUpCiYjNDM7c3RhdGljIGludCBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKQogewomIzQzOwlpZiAoIU1FRElBX0lORk8odXMpLmxiYV90b19wYmEgfHwgIU1FRElBX0lORk8odXMpLnBiYV90b19sYmEpCiYjNDM7CQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwomIzQzOwogCWlmIChNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdID09IE5VTEwKIAkJfHwgTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXSA9PSBOVUxMKQotCQlhbGF1ZGFfcmVhZF9tYXAodXMsIHpvbmUpOwomIzQzOwkJcmV0dXJuIGFsYXVkYV9yZWFkX21hcCh1cywgem9uZSk7CiYjNDM7CiYjNDM7CXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDsKIH0KIAogLyoKQEAgLTgxOSwxMSAmIzQzOzgzOSwxOSBAQCBzdGF0aWMgaW50IGFsYXVkYV93cml0ZV9sYmEoc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgbGJhLAogCXVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplOwogCXVuc2lnbmVkIGludCBwYWdlc2l6ZSA9IE1FRElBX0lORk8odXMpLnBhZ2VzaXplOwogCXVuc2lnbmVkIGludCBibG9ja3NpemUgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemU7Ci0JdW5zaWduZWQgaW50IGxiYV9vZmZzZXQgPSBsYmEgJSB1em9uZXNpemU7CiYjNDM7CXVuc2lnbmVkIGludCBsYmFfb2Zmc2V0OwogCXVuc2lnbmVkIGludCBuZXdfcGJhX29mZnNldDsKLQl1bnNpZ25lZCBpbnQgem9uZSA9IGxiYSAvIHV6b25lc2l6ZTsKJiM0MzsJdW5zaWduZWQgaW50IHpvbmU7CiAKLQlhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZSh1cywgem9uZSk7CiYjNDM7CWlmICghdXpvbmVzaXplKQomIzQzOwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKJiM0MzsKJiM0MzsJbGJhX29mZnNldCA9IGxiYSAlIHV6b25lc2l6ZTsKJiM0MzsJem9uZSA9IGxiYSAvIHV6b25lc2l6ZTsKJiM0MzsKJiM0MzsJcmVzdWx0ID0gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpOwomIzQzOwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQomIzQzOwkJcmV0dXJuIHJlc3VsdDsKIAogCXBiYSA9IE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV1bbGJhX29mZnNldF07CiAJaWYgKHBiYSA9PSAxKSB7CkBAIC05MjcsNiAmIzQzOzk1NSw5IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCWludCByZXN1bHQ7CiAKJiM0MzsJaWYgKCF1em9uZXNpemUpCiYjNDM7CQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwomIzQzOwogCS8qCiAJICogU2luY2Ugd2Ugb25seSByZWFkIGluIG9uZSBibG9jayBhdCBhIHRpbWUsIHdlIGhhdmUgdG8gY3JlYXRlCiAJICogYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UgYXQgYSB0aW1lIGJldHdlZW4gdGhlCkBAIC05NTAsMTEgJiM0Mzs5ODEsMTAgQEAgc3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCXNnID0gTlVMTDsKIAogCXdoaWxlIChzZWN0b3JzICZndDsgMCkgewotCQl1bnNpZ25lZCBpbnQgem9uZSA9IGxiYSAvIHV6b25lc2l6ZTsgLyogaW50ZWdlciBkaXZpc2lvbiAqLwotCQl1bnNpZ25lZCBpbnQgbGJhX29mZnNldCA9IGxiYSAtICh6b25lICogdXpvbmVzaXplKTsKJiM0MzsJCXVuc2lnbmVkIGludCB6b25lOwomIzQzOwkJdW5zaWduZWQgaW50IGxiYV9vZmZzZXQ7CiAJCXVuc2lnbmVkIGludCBwYWdlczsKIAkJdTE2IHBiYTsKLQkJYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpOwogCiAJCS8qIE5vdCBvdmVyZmxvd2luZyBjYXBhY2l0eT8gKi8KIAkJaWYgKGxiYSAmZ3Q7PSBtYXhfbGJhKSB7CkBAIC05NjQsNiAmIzQzOzk5NCwxMyBAQCBzdGF0aWMgaW50IGFsYXVkYV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJCQlicmVhazsKIAkJfQogCiYjNDM7CQl6b25lID0gbGJhIC8gdXpvbmVzaXplOyAvKiBpbnRlZ2VyIGRpdmlzaW9uICovCiYjNDM7CQlsYmFfb2Zmc2V0ID0gbGJhIC0gKHpvbmUgKiB1em9uZXNpemUpOwomIzQzOwomIzQzOwkJcmVzdWx0ID0gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpOwomIzQzOwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRCkKJiM0MzsJCQlicmVhazsKJiM0MzsKIAkJLyogRmluZCBudW1iZXIgb2YgcGFnZXMgd2UgY2FuIHJlYWQgaW4gdGhpcyBibG9jayAqLwogCQlwYWdlcyA9IG1pbihzZWN0b3JzLCBibG9ja3NpemUgLSBwYWdlKTsKIAkJbGVuID0gcGFnZXMgJmx0OyZsdDsgcGFnZXNoaWZ0OwpAQCAtMTAyMSw2ICYjNDM7MTA1OCw5IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJdTE2IGxiYSwgbWF4X2xiYTsKIAlpbnQgcmVzdWx0OwogCiYjNDM7CWlmICghTUVESUFfSU5GTyh1cykudXpvbmVzaXplKQomIzQzOwkJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjsKJiM0MzsKIAkvKgogCSAqIFNpbmNlIHdlIGRvbiYjMzk7dCB3cml0ZSB0aGUgdXNlciBkYXRhIGRpcmVjdGx5IHRvIHRoZSBkZXZpY2UsCiAJICogd2UgaGF2ZSB0byBjcmVhdGUgYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2UKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1OTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA0MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEFzc2Vzc21lbnQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bi4gVGhlIHRhcmdldCBmaWxlIGlzIGBkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCBpdCBpbnZvbHZlcyBzb21lIHJlZmFjdG9yaW5nIGFuZCBidWcgZml4ZXMsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2ggaW52b2x2ZXMgbW92aW5nIGBtZWRpYV9pbml0aWFsaXplZGAgaW50byBhIHBlci1tZWRpYSBzdHJ1Y3QsIHdoaWNoIGlzIGdlbmVyYWxseSBhIGdvb2QgcHJhY3RpY2UgZm9yIGNvcnJlY3Qgc3RhdGUgbWFuYWdlbWVudC4gQmV5b25kIHRoYXQsIGl0JiMzOTtzIGFkZHJlc3NpbmcgYSBoYW5kZnVsIG9mIGlzc3VlczogbWVtb3J5IGxlYWtzIChzcGVjaWZpY2FsbHkgaW4gYGFsYXVkYV9mcmVlX21hcHMoKWAsIHdoZXJlIHRoZSBhcnJheSBvZiBwb2ludGVycyB3YXMgYmVpbmcgbGVha2VkLCB0aG91Z2ggdGhlIGVsZW1lbnRzIHdlcmUgZnJlZWQpLCBhbmQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBkaXZpc2lvbi1ieS16ZXJvIGVycm9ycy4gVGhlIGZpeGVzIGluY2x1ZGUgc2V0dGluZyBjYXBhY2l0eSBhbmQgc2l6ZSB0byB6ZXJvLCBmcmVlaW5nIG1hcHMgb24gZmFpbHVyZSwgdXBkYXRpbmcgbWVkaWEgaW5pdGlhbGl6ZWQgcGVyIG1lZGlhLCBhbmQgcHJvcGVyIGVycm9yIGhhbmRsaW5nLiBUaGlzIHNlZW1zIGxpa2UgYSBwcmV0dHkgdGhvcm91Z2ggY2xlYW51cC4gSXQmIzM5O3MgZ29vZCB0byBzZWUgcm9idXN0IGVycm9yIGNoZWNraW5nIGFkZGVkIGluIHNldmVyYWwgZnVuY3Rpb25zIHN1Y2ggYXMgaW4gYGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKClgLCBgYWxhdWRhX3dyaXRlX2xiYSgpYCwgYGFsYXVkYV9yZWFkX2RhdGEoKWAsIGFuZCBgYWxhdWRhX3dyaXRlX2RhdGEoKWAuCgpOb3csIGJlZm9yZSBJIGp1bXAgdG8gYSBjb25jbHVzaW9uLCBJIG5lZWQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgZXhhbWluZSB0aGUgY29udGV4dCB3aXRoaW4gYGFsYXVkYS5jYC4gTXkgbWFpbiBjb25jZXJucyBhcmU6IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJpc2tzIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnksIGFyZSB0aGVyZSBpbmZvcm1hdGlvbiBsZWFrcywgb3IgYXJlIHRoZXJlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHJlYWQgb3IgY29waWVkPyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaG93IHRoZXNlIGNoYW5nZXMgaW50ZXJhY3Qgd2l0aCB0aGUgZXhpc3RpbmcgY29kZSB0byBkZXRlcm1pbmUgaWYgYW55IG5ldyB2dWxuZXJhYmlsaXRpZXMgd2VyZSBpbnRyb2R1Y2VkLCBvciBpZiB0aGUgcGF0Y2hlcyBpbmFkdmVydGVudGx5IGV4cG9zZWQgc29tZXRoaW5nIHByZXZpb3VzbHkgaGlkZGVuLiBUaGF0JiMzOTtzIHdoZXJlIGEgS01TQU4gc2Vzc2lvbiBtaWdodCBiZSB1c2VmdWwsIHBhcnRpY3VsYXJseSBpZiB0aGVyZSBhcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgb3IgY29udHJvbCBmbG93IGNoYW5nZXMgaW52b2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01FRElBX0lORk8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTAzPXN0cnVjdCBhbGF1ZGFfaW5mbyB7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTYtI2RlZmluZSBNRURJQV9QT1JUKHVzKSB1cy1cdTAwM2VzcmItXHUwMDNlZGV2aWNlLVx1MDAzZWx1blxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTc6I2RlZmluZSBNRURJQV9JTkZPKHVzKSAoKHN0cnVjdCBhbGF1ZGFfaW5mbyAqKXVzLVx1MDAzZWV4dHJhKS1cdTAwM2Vwb3J0W01FRElBX1BPUlQodXMpXVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTgtXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0zOTA9c3RhdGljIGludCBhbGF1ZGFfaW5pdF9tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MzItXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQzMzpcdE1FRElBX0lORk8odXMpLmNhcGFjaXR5ID0gMSBcdTAwM2NcdTAwM2MgbWVkaWFfaW5mby1cdTAwM2VjaGlwc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQzNC1cdHVzYl9zdG9yX2RiZyh1cywgXCYjMzQ7Rm91bmQgbWVkaWEgd2l0aCBjYXBhY2l0eTogJWxkTUJcXG5cJiMzNDssXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQzNTpcdFx0ICAgICBNRURJQV9JTkZPKHVzKS5jYXBhY2l0eSBcdTAwM2VcdTAwM2UgMjApO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MzYtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQzNzpcdE1FRElBX0lORk8odXMpLnBhZ2VzaGlmdCA9IG1lZGlhX2luZm8tXHUwMDNlcGFnZXNoaWZ0O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0Mzg6XHRNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0ID0gbWVkaWFfaW5mby1cdTAwM2VibG9ja3NoaWZ0O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0Mzk6XHRNRURJQV9JTkZPKHVzKS56b25lc2hpZnQgPSBtZWRpYV9pbmZvLVx1MDAzZXpvbmVzaGlmdDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDQwLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NDE6XHRNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZSA9IDEgXHUwMDNjXHUwMDNjIG1lZGlhX2luZm8tXHUwMDNlcGFnZXNoaWZ0O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NDI6XHRNRURJQV9JTkZPKHVzKS5ibG9ja3NpemUgPSAxIFx1MDAzY1x1MDAzYyBtZWRpYV9pbmZvLVx1MDAzZWJsb2Nrc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0MzpcdE1FRElBX0lORk8odXMpLnpvbmVzaXplID0gMSBcdTAwM2NcdTAwM2MgbWVkaWFfaW5mby1cdTAwM2V6b25lc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ0NC1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDQ1Olx0TUVESUFfSU5GTyh1cykudXpvbmVzaXplID0gKCgxIFx1MDAzY1x1MDAzYyBtZWRpYV9pbmZvLVx1MDAzZXpvbmVzaGlmdCkgLyAxMjgpICogMTI1O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NDY6XHRNRURJQV9JTkZPKHVzKS5ibG9ja21hc2sgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemUgLSAxO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NDctXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0ODpcdG51bV96b25lcyA9IE1FRElBX0lORk8odXMpLmNhcGFjaXR5IFx1MDAzZVx1MDAzZSAoTUVESUFfSU5GTyh1cykuem9uZXNoaWZ0XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0OTpcdFx0JiM0MzsgTUVESUFfSU5GTyh1cykuYmxvY2tzaGlmdCAmIzQzOyBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NTA6XHRNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID0ga2NhbGxvYyhudW1fem9uZXMsIHNpemVvZih1MTYqKSwgR0ZQX05PSU8pO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NTE6XHRNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhID0ga2NhbGxvYyhudW1fem9uZXMsIHNpemVvZih1MTYqKSwgR0ZQX05PSU8pO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NTI6XHRpZiAoTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYSA9PSBOVUxMIHx8IE1FRElBX0lORk8odXMpLmxiYV90b19wYmEgPT0gTlVMTCkge1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NTM6XHRcdGFsYXVkYV9mcmVlX21hcHMoXHUwMDI2TUVESUFfSU5GTyh1cykpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NTQtXHRcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NTctXHRpZiAoYWxhdWRhX3Jlc2V0X21lZGlhKHVzKSAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDU4Olx0XHRhbGF1ZGFfZnJlZV9tYXBzKFx1MDAyNk1FRElBX0lORk8odXMpKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDU5LVx0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9NDY5PXN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ3MS1cdHN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYWxhdWRhX2luZm8gKikgdXMtXHUwMDNlZXh0cmE7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ3MjpcdHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyAqbWVkaWFfaW5mbyA9IFx1MDAyNk1FRElBX0lORk8odXMpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NzMtXHR1bnNpZ25lZCBjaGFyICpzdGF0dXMgPSB1cy1cdTAwM2Vpb2J1Zjtcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTU4Mz1zdGF0aWMgaW50IGFsYXVkYV9yZWFkX21hcChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTg3LVx0aW50IGksIGo7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjU4ODpcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo1ODk6XHR1bnNpZ25lZCBpbnQgdXpvbmVzaXplID0gTUVESUFfSU5GTyh1cykudXpvbmVzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01OTAtXHR1bnNpZ25lZCBpbnQgbGJhX29mZnNldCwgbGJhX3JlYWwsIGJsb2NrbnVtO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjkwLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo2OTE6XHRNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdID0gbGJhX3RvX3BiYTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NjkyOlx0TUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXSA9IHBiYV90b19sYmE7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTY5My1cdHJlc3VsdCA9IDA7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz03MDc9c3RhdGljIGludCBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03MDgte1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3MDk6XHRpZiAoIU1FRElBX0lORk8odXMpLmxiYV90b19wYmEgfHwgIU1FRElBX0lORk8odXMpLnBiYV90b19sYmEpXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTcxMC1cdFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzExLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3MTI6XHRpZiAoTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYVt6b25lXSA9PSBOVUxMXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjcxMzpcdFx0fHwgTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXSA9PSBOVUxMKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03MTQtXHRcdHJldHVybiBhbGF1ZGFfcmVhZF9tYXAodXMsIHpvbmUpO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9NzUxPXN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfYmxvY2tfcmF3KHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSxcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc2Ny1cdHJldHVybiB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtXHUwMDNlcmVjdl9idWxrX3BpcGUsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjc2ODpcdFx0ZGF0YSwgKE1FRElBX0lORk8odXMpLnBhZ2VzaXplICYjNDM7IDY0KSAqIHBhZ2VzLCBOVUxMKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzY5LX1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTc3Nz1zdGF0aWMgaW50IGFsYXVkYV9yZWFkX2Jsb2NrKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSxcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc4MC1cdGludCBpLCByYztcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzgxOlx0dW5zaWduZWQgaW50IHBhZ2VzaXplID0gTUVESUFfSU5GTyh1cykucGFnZXNpemU7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc4Mi1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTgwMj1zdGF0aWMgaW50IGFsYXVkYV93cml0ZV9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MTgtXHRyYyA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCBpbmZvLVx1MDAzZXdyX2VwLCBkYXRhLFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4MTk6XHRcdChNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZSAmIzQzOyA2NCkgKiBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemUsXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgyMC1cdFx0TlVMTCk7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz04MzA9c3RhdGljIGludCBhbGF1ZGFfd3JpdGVfbGJhKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IGxiYSxcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgzNy1cdGludCBpLCByZXN1bHQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgzODpcdHVuc2lnbmVkIGludCB1em9uZXNpemUgPSBNRURJQV9JTkZPKHVzKS51em9uZXNpemU7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgzOTpcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4NDA6XHR1bnNpZ25lZCBpbnQgcGFnZXNpemUgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODQxOlx0dW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IE1FRElBX0lORk8odXMpLmJsb2Nrc2l6ZTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODQyLVx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQ7XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NTUtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjg1NjpcdHBiYSA9IE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV1bbGJhX29mZnNldF07XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg1Ny1cdGlmIChwYmEgPT0gMSkge1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODY2LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4Njc6XHRuZXdfcGJhID0gYWxhdWRhX2ZpbmRfdW51c2VkX3BiYShcdTAwMjZNRURJQV9JTkZPKHVzKSwgem9uZSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg2OC1cdGlmICghbmV3X3BiYSkge1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTI1LVx0bmV3X3BiYV9vZmZzZXQgPSBuZXdfcGJhIC0gKHpvbmUgKiB6b25lc2l6ZSk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkyNjpcdE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV1bbmV3X3BiYV9vZmZzZXRdID0gbGJhO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5Mjc6XHRNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdW2xiYV9vZmZzZXRdID0gbmV3X3BiYTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTI4LVx0dXNiX3N0b3JfZGJnKHVzLCBcJiMzNDtSZW1hcHBlZCBMQkEgJWQgdG8gUEJBICVkXFxuXCYjMzQ7LCBsYmEsIG5ld19wYmEpO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTM0LVx0XHRcdHJldHVybiByZXN1bHQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkzNTpcdFx0TUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXVtwYmFfb2Zmc2V0XSA9IFVOREVGO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05MzYtXHR9XG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz05NDQ9c3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTQ5LVx0dW5zaWduZWQgaW50IHBhZ2UsIGxlbiwgb2Zmc2V0O1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5NTA6XHR1bnNpZ25lZCBpbnQgYmxvY2tzaGlmdCA9IE1FRElBX0lORk8odXMpLmJsb2Nrc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjk1MTpcdHVuc2lnbmVkIGludCBwYWdlc2hpZnQgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjk1MjpcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemU7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjk1MzpcdHVuc2lnbmVkIGludCBwYWdlc2l6ZSA9IE1FRElBX0lORk8odXMpLnBhZ2VzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5NTQ6XHR1bnNpZ25lZCBpbnQgdXpvbmVzaXplID0gTUVESUFfSU5GTyh1cykudXpvbmVzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05NTUtXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTc1LVx0bGJhID0gYWRkcmVzcyBcdTAwM2VcdTAwM2UgYmxvY2tzaGlmdDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTc2Olx0cGFnZSA9IChhZGRyZXNzIFx1MDAyNiBNRURJQV9JTkZPKHVzKS5ibG9ja21hc2spO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5Nzc6XHRtYXhfbGJhID0gTUVESUFfSU5GTyh1cykuY2FwYWNpdHkgXHUwMDNlXHUwMDNlIChibG9ja3NoaWZ0ICYjNDM7IHBhZ2VzaGlmdCk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTk3OC1cbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwMDgtXHRcdC8qIEZpbmQgd2hlcmUgdGhpcyBsYmEgbGl2ZXMgb24gZGlzayAqL1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMDA5Olx0XHRwYmEgPSBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdW2xiYV9vZmZzZXRdO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDEwLVxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTA0OD1zdGF0aWMgaW50IGFsYXVkYV93cml0ZV9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTA1Mi1cdHVuc2lnbmVkIGludCBwYWdlLCBsZW4sIG9mZnNldDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTA1MzpcdHVuc2lnbmVkIGludCBibG9ja3NoaWZ0ID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaGlmdDtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTA1NDpcdHVuc2lnbmVkIGludCBwYWdlc2hpZnQgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwNTU6XHR1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMDU2Olx0dW5zaWduZWQgaW50IHBhZ2VzaXplID0gTUVESUFfSU5GTyh1cykucGFnZXNpemU7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwNTctXHRzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTA2MC1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTA2MTpcdGlmICghTUVESUFfSU5GTyh1cykudXpvbmVzaXplKVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDYyLVx0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuLS1cbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTA4Ni1cdGxiYSA9IGFkZHJlc3MgXHUwMDNlXHUwMDNlIGJsb2Nrc2hpZnQ7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwODc6XHRwYWdlID0gKGFkZHJlc3MgXHUwMDI2IE1FRElBX0lORk8odXMpLmJsb2NrbWFzayk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwODg6XHRtYXhfbGJhID0gTUVESUFfSU5GTyh1cykuY2FwYWNpdHkgXHUwMDNlXHUwMDNlIChwYWdlc2hpZnQgJiM0MzsgYmxvY2tzaGlmdCk7XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwODktXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0xMTcwPXN0YXRpYyBpbnQgYWxhdWRhX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cylcbi0tXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExOTgtXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExOTk6XHRcdG51bV96b25lcyA9IE1FRElBX0lORk8odXMpLmNhcGFjaXR5IFx1MDAzZVx1MDAzZSAoTUVESUFfSU5GTyh1cykuem9uZXNoaWZ0XG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyMDA6XHRcdFx0JiM0MzsgTUVESUFfSU5GTyh1cykuYmxvY2tzaGlmdCAmIzQzOyBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQpO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjAxLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjAyOlx0XHRjYXBhY2l0eSA9IG51bV96b25lcyAqIE1FRElBX0lORk8odXMpLnV6b25lc2l6ZVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjAzOlx0XHRcdCogTUVESUFfSU5GTyh1cykuYmxvY2tzaXplO1xuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjA0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjEwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGFsYXVkYV9pbmZvYCBBbGxvY2F0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaXNzZWN0IGhvdyB0aGUgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgaXMgYmVpbmcgYWxsb2NhdGVkIGluIHRoaXMgY29kZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIG1lbW9yeSBmb290cHJpbnQsIGhvdyBpdCYjMzk7cyBpbml0aWFsaXplZCwgYW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIHJlbGF0ZWQgdG8gaXRzIGxpZmV0aW1lLiBJcyBpdCBzdGFjay1hbGxvY2F0ZWQsIGhlYXAtYWxsb2NhdGVkLCBzdGF0aWNhbGx5IGFsbG9jYXRlZD8gRWFjaCBtZXRob2QgaGFzIGRpZmZlcmVudCBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLCByZXNvdXJjZSB1c2FnZSwgYW5kIHBvdGVudGlhbCBmb3IgbWVtb3J5IGxlYWtzIG9yIGZyYWdtZW50YXRpb24uIEkgbmVlZCB0byBtZW50YWxseSB0cmFjZSB0aGUgY29kZSB0byBwaW5wb2ludCBleGFjdGx5IHdoZXJlIHRoaXMgc3RydWN0dXJlIGlzIGNyZWF0ZWQsIGFuZCBpZGVhbGx5LCB3aGVyZSBpdCYjMzk7cyBkZXN0cm95ZWQgb3IgcmVsZWFzZWQgaWYgaXQmIzM5O3MgZHluYW1pY2FsbHkgYWxsb2NhdGVkLiBVbmRlcnN0YW5kaW5nIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0IG9mIHRoZSBzeXN0ZW0gYmVoYXZlcyB1bmRlciBkaWZmZXJlbnQgbG9hZCBjb25kaXRpb25zLiBUaGlzIHdpbGwgaGVscCBpbmZvcm0gd2hldGhlciBpdCBjb3VsZCBiZSBhIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2ssIHdoZXRoZXIgaXQmIzM5O3Mgc3VzY2VwdGlibGUgdG8gbWVtb3J5IGxlYWtzLCBvciBpZiBpdCBoYXMgYW55IG90aGVyIHBvdGVudGlhbCBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t6YWxsb2MuKmFsYXVkYV9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTExNTA9c3RhdGljIGludCBpbml0X2FsYXVkYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4tLVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTU1LVxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTU2Olx0dXMtXHUwMDNlZXh0cmEgPSBremFsbG9jX29iaihzdHJ1Y3QgYWxhdWRhX2luZm8sIEdGUF9OT0lPKTtcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE1Ny1cdGlmICghdXMtXHUwMDNlZXh0cmEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDIwOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1ODYKCQkJCQkJCW91dHB1dDogMjE5CgkJCQkJCQl0aG91Z2h0czogNTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtNU0FOIE5lY2Vzc2l0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIGB1cy0mZ3Q7ZXh0cmFgLCB3aGljaCBpcyBhIGBzdHJ1Y3QgYWxhdWRhX2luZm9gLCBpcyBpbml0aWFsaXplZCB3aXRoIGBremFsbG9jX29iamAsIHdoaWNoIG1lYW5zIGV2ZXJ5dGhpbmcsIGluY2x1ZGluZyB0aGUgZW1iZWRkZWQgYHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyBwb3J0WzJdYCwgaXMgemVyb2VkIG91dCByaWdodCBmcm9tIHRoZSBzdGFydC4gVGhhdCYjMzk7cyBjcnVjaWFsLiBUaGUgYG1lZGlhX2luaXRpYWxpemVkYCBmbGFnLCB3aGljaCB3YXMgbW92ZWQgaW50byB0aGF0IHplcm8taW5pdGlhbGl6ZWQgYHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mb2AsIGlzIG5vdyBhbHNvIGd1YXJhbnRlZWQgdG8gc3RhcnQgYXQgemVyby4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIGJ1ZyBmaXhlcyB0aGVtc2VsdmVzLiBXZSYjMzk7cmUgYWRkcmVzc2luZyBhIG1lbW9yeSBsZWFrIGluIGBhbGF1ZGFfZnJlZV9tYXBzKClgLCB3aGVyZSBvdXRlciBhcnJheXMgYGxiYV90b19wYmFgIGFuZCBgcGJhX3RvX2xiYWAgd2VyZW4mIzM5O3QgYmVpbmcgZnJlZWQuIFdlJiMzOTtyZSBhbHNvIHplcm9pbmcgb3V0IGBjYXBhY2l0eWAgYW5kIGB1em9uZXNpemVgIHVwb24gZnJlZWluZyB0aG9zZSBtYXBzIGFuZCBjaGVja2luZyBmb3IgTlVMTCBvciB6ZXJvIGB1em9uZXNpemVgIGluIHRoZSByZWFkL3dyaXRlIHBhdGhzIHRvIHByZXZlbnQgdGhvc2UgbmFzdHkgZGl2aXNpb24tYnktemVybyBvciBOVUxMIHBvaW50ZXIgaXNzdWVzLiBGdXJ0aGVybW9yZSwgdGhlIGVycm9yIGNsZWFudXAgaW4gYGFsYXVkYV9pbml0X21lZGlhKClgIG5vdyBjb3JyZWN0bHkgY2FsbHMgYGFsYXVkYV9mcmVlX21hcHMoKWAsIHdoaWNoIGlzIGdvb2QuIEFuZCBmaW5hbGx5LCBgYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoKWAgaGFzIGEgY2hlY2sgZm9yIGBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhYCBiZWZvcmUgaXQgaW5kZXhlcyBpdC4gVGhhdCYjMzk7cyBhbGwgZ29vZCwgc29saWQgZGVmZW5zaXZlIHByb2dyYW1taW5nLgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogYXJlIHdlIGluYWR2ZXJ0ZW50bHkgY3JlYXRpbmcsIGFjY2Vzc2luZywgb3IgcGFzc2luZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB0byB1c2VyIHNwYWNlPyBUaGUgYW5zd2VyIGlzIGEgY2xlYXIgJiMzNDtuby4mIzM0OyBBbGwgYWxsb2NhdGlvbnMgdXNlIGVpdGhlciBga3phbGxvY19vYmpgIG9yIGBrY2FsbG9jYCwgbWVhbmluZyB0aGV5JiMzOTtyZSB6ZXJvLWluaXRpYWxpemVkLiBUaGlzIGlzbiYjMzk7dCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3M7IGl0JiMzOTtzIGFib3V0IGNsZWFuaW5nIHVwIG1lbW9yeSBsZWFrcywgcHJldmVudGluZyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBhcml0aG1ldGljIGVycm9ycywgYW5kIG1vdmluZyBhIGZsYWcgdG8gYWxsb3cgdHJhY2tpbmcgcGVyLXBvcnQgbWVkaWEgaW5pdGlhbGl6YXRpb24gaW5zdGVhZCBvZiBnbG9iYWxseS4KClRoZXNlIGFyZSBjbGFzc2ljIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBlcnJvciBoYW5kbGluZyBpc3N1ZXMuIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHNob3VsZCBjYXRjaCB0aGUgb3V0LW9mLWJvdW5kcywgdXNlLWFmdGVyLWZyZWUsIGFuZCBkb3VibGUtZnJlZSBwcm9ibGVtcywgYXMgd2UmIzM5O3JlIG5vdCBpbnRyb2R1Y2luZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSBkb24mIzM5O3QgbmVlZCBLTVNBTiBoZXJlLgoKTGV0JiMzOTtzIGRvIGEgZmluYWwgY2hlY2sgYWdhaW5zdCB0aGUgS01TQU4gY3JpdGVyaWE6CgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmc/IE5vLiBBbGwmIzM5O3MgaW5pdGlhbGl6ZWQuCjIuICBDb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIEV2ZXJ5dGhpbmcgaXMgemVyby1pbml0aWFsaXplZC4KMy4gIEFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBsYXRlciBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBmaWVsZHM/IE5lZ2F0aXZlLiBaZXJvLWluaXRpYWxpemVkLgo0LiAgQm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXM/IEFic29sdXRlbHkgbm90LgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTj1mYWxzZWAuIFRpbWUgdG8gY2FsbCB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAyMDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgbWVtb3J5IGxlYWtzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbmQgcG90ZW50aWFsIGRpdmlzaW9uLWJ5LXplcm8gZXJyb3JzIGluIGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMuIFNwZWNpZmljYWxseSwgaXQgZnJlZXMgdGhlIG91dGVyIHBvaW50ZXIgYXJyYXlzIGluIGFsYXVkYV9mcmVlX21hcHMoKSwgYWRkcyBlcnJvciBjbGVhbnVwIGluIGFsYXVkYV9pbml0X21lZGlhKCksIGFkZHMgY2hlY2tzIGZvciBOVUxMIHBvaW50ZXJzIGluIGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKCksIGFkZHMgY2hlY2tzIGZvciB6ZXJvIHV6b25lc2l6ZSB0byBhdm9pZCBkaXZpc2lvbiBieSB6ZXJvLCBhbmQgbW92ZXMgbWVkaWFfaW5pdGlhbGl6ZWQgdG8gc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvLlxuXG5UaGUgc3RydWN0IGFsYXVkYV9pbmZvIGNvbnRhaW5pbmcgYWxhdWRhX21lZGlhX2luZm8gaXMgYWxsb2NhdGVkIHVzaW5nIGt6YWxsb2Nfb2JqKCksIGVuc3VyaW5nIGFsbCBmaWVsZHMgYXJlIHplcm8taW5pdGlhbGl6ZWQuIFBCQS9MQkEgbWFwcGluZyB0YWJsZXMgYXJlIGFsbG9jYXRlZCB2aWEga2NhbGxvYy4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlLiBTaW5jZSB0aGVzZSBjaGFuZ2VzIHN0cmljdGx5IGZpeCBtZW1vcnkgbGVha3MgYW5kIE5VTEwvemVyby1jaGVjayBzYWZldHkgaXNzdWVzLCB0aGV5IGRvIG5vdCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvIG5vdCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBtZW1vcnkgbGVha3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFuZCBwb3RlbnRpYWwgZGl2aXNpb24tYnktemVybyBlcnJvcnMgaW4gZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy4gU3BlY2lmaWNhbGx5LCBpdCBmcmVlcyB0aGUgb3V0ZXIgcG9pbnRlciBhcnJheXMgaW4gYWxhdWRhX2ZyZWVfbWFwcygpLCBhZGRzIGVycm9yIGNsZWFudXAgaW4gYWxhdWRhX2luaXRfbWVkaWEoKSwgYWRkcyBjaGVja3MgZm9yIE5VTEwgcG9pbnRlcnMgaW4gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoKSwgYWRkcyBjaGVja3MgZm9yIHplcm8gdXpvbmVzaXplIHRvIGF2b2lkIGRpdmlzaW9uIGJ5IHplcm8sIGFuZCBtb3ZlcyBtZWRpYV9pbml0aWFsaXplZCB0byBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8uXG5cblRoZSBzdHJ1Y3QgYWxhdWRhX2luZm8gY29udGFpbmluZyBhbGF1ZGFfbWVkaWFfaW5mbyBpcyBhbGxvY2F0ZWQgdXNpbmcga3phbGxvY19vYmooKSwgZW5zdXJpbmcgYWxsIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC4gUEJBL0xCQSBtYXBwaW5nIHRhYmxlcyBhcmUgYWxsb2NhdGVkIHZpYSBrY2FsbG9jLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFNpbmNlIHRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgZml4IG1lbW9yeSBsZWFrcyBhbmQgTlVMTC96ZXJvLWNoZWNrIHNhZmV0eSBpc3N1ZXMsIHRoZXkgZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG8gbm90IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0ODo0MC4wMzQxODk2NjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NTMxNzc4MDc4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfU1RPUkFHRV9BTEFVREFcIixcbiAgICBcIlVTQl9TVE9SQUdFXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIlNDU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGF1ZGFfdHJhbnNwb3J0XCIsXG4gICAgXCJhbGF1ZGFfcHJvYmVcIixcbiAgICBcImluaXRfYWxhdWRhXCIsXG4gICAgXCJhbGF1ZGFfY2hlY2tfbWVkaWFcIixcbiAgICBcImFsYXVkYV9yZWFkX2RhdGFcIixcbiAgICBcImFsYXVkYV93cml0ZV9kYXRhXCIsXG4gICAgXCJhbGF1ZGFfd3JpdGVfbGJhXCIsXG4gICAgXCJhbGF1ZGFfZnJlZV9tYXBzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgbWVtb3J5IGxlYWtzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbmQgcG90ZW50aWFsIGRpdmlzaW9uLWJ5LXplcm8gZXJyb3JzIGluIGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMuIFNwZWNpZmljYWxseSwgaXQgZnJlZXMgdGhlIG91dGVyIHBvaW50ZXIgYXJyYXlzIGluIGFsYXVkYV9mcmVlX21hcHMoKSwgYWRkcyBlcnJvciBjbGVhbnVwIGluIGFsYXVkYV9pbml0X21lZGlhKCksIGFkZHMgY2hlY2tzIGZvciBOVUxMIHBvaW50ZXJzIGluIGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKCksIGFkZHMgY2hlY2tzIGZvciB6ZXJvIHV6b25lc2l6ZSB0byBhdm9pZCBkaXZpc2lvbiBieSB6ZXJvLCBhbmQgbW92ZXMgbWVkaWFfaW5pdGlhbGl6ZWQgdG8gc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvLlxcblxcblRoZSBzdHJ1Y3QgYWxhdWRhX2luZm8gY29udGFpbmluZyBhbGF1ZGFfbWVkaWFfaW5mbyBpcyBhbGxvY2F0ZWQgdXNpbmcga3phbGxvY19vYmooKSwgZW5zdXJpbmcgYWxsIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC4gUEJBL0xCQSBtYXBwaW5nIHRhYmxlcyBhcmUgYWxsb2NhdGVkIHZpYSBrY2FsbG9jLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFNpbmNlIHRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgZml4IG1lbW9yeSBsZWFrcyBhbmQgTlVMTC96ZXJvLWNoZWNrIHNhZmV0eSBpc3N1ZXMsIHRoZXkgZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG8gbm90IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCB6ZXJvLWRpdmlzaW9uIGJ1Z3MsIG1lbW9yeSBsZWFrcywgYW5kIG1lZGlhIGluaXRpYWxpemF0aW9uIHN0YXRlIGhhbmRsaW5nIGFjcm9zcyB6b25lIG1hcCBhbGxvY2F0aW9ucyBhbmQgSS9PIGhhbmRsaW5nIGluIHRoZSBPbHltcHVzIE1BVVNCLTEwL0Z1amlmaWxtIERQQy1SMSAoQWxhdWRhKSBVU0IgbWFzcyBzdG9yYWdlIGRyaXZlci4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgdmlhIFVTQiBlbXVsYXRpb24vZnV6emluZyBmcmFtZXdvcmtzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0ODo0MC4wMzQxOTcxOTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MDQ5NDQzMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1M2EwYTYwNTFhN2I2ZjEyZGI1ZjhhNTJiYWRiNDdkYjgzNTBmNjlhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDI4IDIwOjQ4OjM4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jXFxuaW5kZXggNjkxZmU0NzAwOWNmNi4uYTJhMzMzNDE5ZjFmNyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jXFxuKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1xcbkBAIC05Niw2ICs5Niw4IEBAIHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyB7XFxuIFxcbiBcXHR1MTYgKipsYmFfdG9fcGJhO1xcdFxcdC8qIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYmxvY2sgbWFwICovXFxuIFxcdHUxNiAqKnBiYV90b19sYmE7XFx0XFx0LyogcGh5c2ljYWwgdG8gbG9naWNhbCBibG9jayBtYXAgKi9cXG4rXFxuK1xcdGJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgYWxhdWRhX2luZm8ge1xcbkBAIC0xMDUsOCArMTA3LDYgQEAgc3RydWN0IGFsYXVkYV9pbmZvIHtcXG4gXFx0dW5zaWduZWQgY2hhciBzZW5zZV9rZXk7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjO1xcdC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSAqL1xcbiBcXHR1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7XFx0LyogYWRkaXRpb25hbCBzZW5zZSBjb2RlIHF1YWxpZmllciAqL1xcbi1cXG4tXFx0Ym9vbCBtZWRpYV9pbml0aWFsaXplZDtcXG4gfTtcXG4gXFxuICNkZWZpbmUgc2hvcnRfcGFjayhsc2IsbXNiKSAoICgodTE2KShsc2IpKSB8ICggKCh1MTYpKG1zYikpXFx1MDAzY1xcdTAwM2M4ICkgKVxcbkBAIC0yOTAsMTcgKzI5MCwyNSBAQCBzdGF0aWMgdm9pZCBhbGF1ZGFfZnJlZV9tYXBzIChzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gKm1lZGlhX2luZm8pXFxuIFxcdHVuc2lnbmVkIGludCBudW1fem9uZXMgPSBtZWRpYV9pbmZvLVxcdTAwM2VjYXBhY2l0eSBcXHUwMDNlXFx1MDAzZSBzaGlmdDtcXG4gXFx0dW5zaWduZWQgaW50IGk7XFxuIFxcbi1cXHRpZiAobWVkaWFfaW5mby1cXHUwMDNlbGJhX3RvX3BiYSAhPSBOVUxMKVxcbitcXHRpZiAobWVkaWFfaW5mby1cXHUwMDNlbGJhX3RvX3BiYSAhPSBOVUxMKSB7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fem9uZXM7IGkrKykge1xcbiBcXHRcXHRcXHRrZnJlZShtZWRpYV9pbmZvLVxcdTAwM2VsYmFfdG9fcGJhW2ldKTtcXG4gXFx0XFx0XFx0bWVkaWFfaW5mby1cXHUwMDNlbGJhX3RvX3BiYVtpXSA9IE5VTEw7XFxuIFxcdFxcdH1cXG4rXFx0XFx0a2ZyZWUobWVkaWFfaW5mby1cXHUwMDNlbGJhX3RvX3BiYSk7XFxuK1xcdFxcdG1lZGlhX2luZm8tXFx1MDAzZWxiYV90b19wYmEgPSBOVUxMO1xcbitcXHR9XFxuIFxcbi1cXHRpZiAobWVkaWFfaW5mby1cXHUwMDNlcGJhX3RvX2xiYSAhPSBOVUxMKVxcbitcXHRpZiAobWVkaWFfaW5mby1cXHUwMDNlcGJhX3RvX2xiYSAhPSBOVUxMKSB7XFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fem9uZXM7IGkrKykge1xcbiBcXHRcXHRcXHRrZnJlZShtZWRpYV9pbmZvLVxcdTAwM2VwYmFfdG9fbGJhW2ldKTtcXG4gXFx0XFx0XFx0bWVkaWFfaW5mby1cXHUwMDNlcGJhX3RvX2xiYVtpXSA9IE5VTEw7XFxuIFxcdFxcdH1cXG4rXFx0XFx0a2ZyZWUobWVkaWFfaW5mby1cXHUwMDNlcGJhX3RvX2xiYSk7XFxuK1xcdFxcdG1lZGlhX2luZm8tXFx1MDAzZXBiYV90b19sYmEgPSBOVUxMO1xcbitcXHR9XFxuK1xcdG1lZGlhX2luZm8tXFx1MDAzZWNhcGFjaXR5ID0gMDtcXG4rXFx0bWVkaWFfaW5mby1cXHUwMDNldXpvbmVzaXplID0gMDtcXG4gfVxcbiBcXG4gLypcXG5AQCAtNDQxLDExICs0NDksMTUgQEAgc3RhdGljIGludCBhbGF1ZGFfaW5pdF9tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXFxuIFxcdFxcdCsgTUVESUFfSU5GTyh1cykuYmxvY2tzaGlmdCArIE1FRElBX0lORk8odXMpLnBhZ2VzaGlmdCk7XFxuIFxcdE1FRElBX0lORk8odXMpLnBiYV90b19sYmEgPSBrY2FsbG9jKG51bV96b25lcywgc2l6ZW9mKHUxNiopLCBHRlBfTk9JTyk7XFxuIFxcdE1FRElBX0lORk8odXMpLmxiYV90b19wYmEgPSBrY2FsbG9jKG51bV96b25lcywgc2l6ZW9mKHUxNiopLCBHRlBfTk9JTyk7XFxuLVxcdGlmIChNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID09IE5VTEwgfHwgTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9PSBOVUxMKVxcbitcXHRpZiAoTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYSA9PSBOVUxMIHx8IE1FRElBX0lORk8odXMpLmxiYV90b19wYmEgPT0gTlVMTCkge1xcbitcXHRcXHRhbGF1ZGFfZnJlZV9tYXBzKFxcdTAwMjZNRURJQV9JTkZPKHVzKSk7XFxuIFxcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XFxuK1xcdH1cXG4gXFxuLVxcdGlmIChhbGF1ZGFfcmVzZXRfbWVkaWEodXMpICE9IFVTQl9TVE9SX1hGRVJfR09PRClcXG4rXFx0aWYgKGFsYXVkYV9yZXNldF9tZWRpYSh1cykgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7XFxuK1xcdFxcdGFsYXVkYV9mcmVlX21hcHMoXFx1MDAyNk1FRElBX0lORk8odXMpKTtcXG4gXFx0XFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcXG4rXFx0fVxcbiBcXG4gXFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EO1xcbiB9XFxuQEAgLTQ1Nyw2ICs0NjksNyBAQCBzdGF0aWMgaW50IGFsYXVkYV9pbml0X21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG4gc3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxcbiB7XFxuIFxcdHN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYWxhdWRhX2luZm8gKikgdXMtXFx1MDAzZWV4dHJhO1xcbitcXHRzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gKm1lZGlhX2luZm8gPSBcXHUwMDI2TUVESUFfSU5GTyh1cyk7XFxuIFxcdHVuc2lnbmVkIGNoYXIgKnN0YXR1cyA9IHVzLVxcdTAwM2Vpb2J1ZjtcXG4gXFx0aW50IHJjO1xcbiBcXG5AQCAtNDcwLDcgKzQ4Myw4IEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG4gXFx0aWYgKChzdGF0dXNbMF0gXFx1MDAyNiAweDgwKSB8fCAoKHN0YXR1c1swXSBcXHUwMDI2IDB4MUYpID09IDB4MTApXFxuIFxcdFxcdHx8ICgoc3RhdHVzWzFdIFxcdTAwMjYgMHgwMSkgPT0gMCkpIHtcXG4gXFx0XFx0dXNiX3N0b3JfZGJnKHVzLCBcXFwiTm8gbWVkaWEsIG9yIGRvb3Igb3BlblxcXFxuXFxcIik7XFxuLVxcdFxcdGFsYXVkYV9mcmVlX21hcHMoXFx1MDAyNk1FRElBX0lORk8odXMpKTtcXG4rXFx0XFx0YWxhdWRhX2ZyZWVfbWFwcyhtZWRpYV9pbmZvKTtcXG4rXFx0XFx0bWVkaWFfaW5mby1cXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcXG4gXFx0XFx0aW5mby1cXHUwMDNlc2Vuc2Vfa2V5ID0gMHgwMjtcXG4gXFx0XFx0aW5mby1cXHUwMDNlc2Vuc2VfYXNjID0gMHgzQTtcXG4gXFx0XFx0aW5mby1cXHUwMDNlc2Vuc2VfYXNjcSA9IDB4MDA7XFxuQEAgLTQ3OCwxMiArNDkyLDEzIEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG4gXFx0fVxcbiBcXG4gXFx0LyogQ2hlY2sgZm9yIG1lZGlhIGNoYW5nZSAqL1xcbi1cXHRpZiAoc3RhdHVzWzBdIFxcdTAwMjYgMHgwOCB8fCAhaW5mby1cXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQpIHtcXG4rXFx0aWYgKHN0YXR1c1swXSBcXHUwMDI2IDB4MDggfHwgIW1lZGlhX2luZm8tXFx1MDAzZW1lZGlhX2luaXRpYWxpemVkKSB7XFxuIFxcdFxcdHVzYl9zdG9yX2RiZyh1cywgXFxcIk1lZGlhIGNoYW5nZSBkZXRlY3RlZFxcXFxuXFxcIik7XFxuLVxcdFxcdGFsYXVkYV9mcmVlX21hcHMoXFx1MDAyNk1FRElBX0lORk8odXMpKTtcXG4rXFx0XFx0YWxhdWRhX2ZyZWVfbWFwcyhtZWRpYV9pbmZvKTtcXG4rXFx0XFx0bWVkaWFfaW5mby1cXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcXG4gXFx0XFx0cmMgPSBhbGF1ZGFfaW5pdF9tZWRpYSh1cyk7XFxuIFxcdFxcdGlmIChyYyA9PSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcXG4tXFx0XFx0XFx0aW5mby1cXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlO1xcbitcXHRcXHRcXHRtZWRpYV9pbmZvLVxcdTAwM2VtZWRpYV9pbml0aWFsaXplZCA9IHRydWU7XFxuIFxcdFxcdGluZm8tXFx1MDAzZXNlbnNlX2tleSA9IFVOSVRfQVRURU5USU9OO1xcbiBcXHRcXHRpbmZvLVxcdTAwM2VzZW5zZV9hc2MgPSAweDI4O1xcbiBcXHRcXHRpbmZvLVxcdTAwM2VzZW5zZV9hc2NxID0gMHgwMDtcXG5AQCAtNjg5LDExICs3MDQsMTYgQEAgc3RhdGljIGludCBhbGF1ZGFfcmVhZF9tYXAoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcXG4gICogQ2hlY2tzIHRvIHNlZSB3aGV0aGVyIHdlIGhhdmUgYWxyZWFkeSBtYXBwZWQgYSBjZXJ0YWluIHpvbmVcXG4gICogSWYgd2UgaGF2ZW4ndCwgdGhlIG1hcCBpcyBnZW5lcmF0ZWRcXG4gICovXFxuLXN0YXRpYyB2b2lkIGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHpvbmUpXFxuK3N0YXRpYyBpbnQgYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcXG4ge1xcbitcXHRpZiAoIU1FRElBX0lORk8odXMpLmxiYV90b19wYmEgfHwgIU1FRElBX0lORk8odXMpLnBiYV90b19sYmEpXFxuK1xcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XFxuK1xcbiBcXHRpZiAoTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYVt6b25lXSA9PSBOVUxMXFxuIFxcdFxcdHx8IE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV0gPT0gTlVMTClcXG4tXFx0XFx0YWxhdWRhX3JlYWRfbWFwKHVzLCB6b25lKTtcXG4rXFx0XFx0cmV0dXJuIGFsYXVkYV9yZWFkX21hcCh1cywgem9uZSk7XFxuK1xcbitcXHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7XFxuIH1cXG4gXFxuIC8qXFxuQEAgLTgxOSwxMSArODM5LDE5IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2xiYShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBsYmEsXFxuIFxcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xcbiBcXHR1bnNpZ25lZCBpbnQgcGFnZXNpemUgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZTtcXG4gXFx0dW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IE1FRElBX0lORk8odXMpLmJsb2Nrc2l6ZTtcXG4tXFx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQgPSBsYmEgJSB1em9uZXNpemU7XFxuK1xcdHVuc2lnbmVkIGludCBsYmFfb2Zmc2V0O1xcbiBcXHR1bnNpZ25lZCBpbnQgbmV3X3BiYV9vZmZzZXQ7XFxuLVxcdHVuc2lnbmVkIGludCB6b25lID0gbGJhIC8gdXpvbmVzaXplO1xcbitcXHR1bnNpZ25lZCBpbnQgem9uZTtcXG4gXFxuLVxcdGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHVzLCB6b25lKTtcXG4rXFx0aWYgKCF1em9uZXNpemUpXFxuK1xcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XFxuK1xcbitcXHRsYmFfb2Zmc2V0ID0gbGJhICUgdXpvbmVzaXplO1xcbitcXHR6b25lID0gbGJhIC8gdXpvbmVzaXplO1xcbitcXG4rXFx0cmVzdWx0ID0gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpO1xcbitcXHRpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKVxcbitcXHRcXHRyZXR1cm4gcmVzdWx0O1xcbiBcXG4gXFx0cGJhID0gTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYVt6b25lXVtsYmFfb2Zmc2V0XTtcXG4gXFx0aWYgKHBiYSA9PSAxKSB7XFxuQEAgLTkyNyw2ICs5NTUsOSBAQCBzdGF0aWMgaW50IGFsYXVkYV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIFxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuIFxcdGludCByZXN1bHQ7XFxuIFxcbitcXHRpZiAoIXV6b25lc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFNpbmNlIHdlIG9ubHkgcmVhZCBpbiBvbmUgYmxvY2sgYXQgYSB0aW1lLCB3ZSBoYXZlIHRvIGNyZWF0ZVxcbiBcXHQgKiBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGVcXG5AQCAtOTUwLDExICs5ODEsMTAgQEAgc3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbiBcXHRzZyA9IE5VTEw7XFxuIFxcbiBcXHR3aGlsZSAoc2VjdG9ycyBcXHUwMDNlIDApIHtcXG4tXFx0XFx0dW5zaWduZWQgaW50IHpvbmUgPSBsYmEgLyB1em9uZXNpemU7IC8qIGludGVnZXIgZGl2aXNpb24gKi9cXG4tXFx0XFx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQgPSBsYmEgLSAoem9uZSAqIHV6b25lc2l6ZSk7XFxuK1xcdFxcdHVuc2lnbmVkIGludCB6b25lO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgbGJhX29mZnNldDtcXG4gXFx0XFx0dW5zaWduZWQgaW50IHBhZ2VzO1xcbiBcXHRcXHR1MTYgcGJhO1xcbi1cXHRcXHRhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZSh1cywgem9uZSk7XFxuIFxcbiBcXHRcXHQvKiBOb3Qgb3ZlcmZsb3dpbmcgY2FwYWNpdHk/ICovXFxuIFxcdFxcdGlmIChsYmEgXFx1MDAzZT0gbWF4X2xiYSkge1xcbkBAIC05NjQsNiArOTk0LDEzIEBAIHN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdHpvbmUgPSBsYmEgLyB1em9uZXNpemU7IC8qIGludGVnZXIgZGl2aXNpb24gKi9cXG4rXFx0XFx0bGJhX29mZnNldCA9IGxiYSAtICh6b25lICogdXpvbmVzaXplKTtcXG4rXFxuK1xcdFxcdHJlc3VsdCA9IGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHVzLCB6b25lKTtcXG4rXFx0XFx0aWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcbiBcXHRcXHQvKiBGaW5kIG51bWJlciBvZiBwYWdlcyB3ZSBjYW4gcmVhZCBpbiB0aGlzIGJsb2NrICovXFxuIFxcdFxcdHBhZ2VzID0gbWluKHNlY3RvcnMsIGJsb2Nrc2l6ZSAtIHBhZ2UpO1xcbiBcXHRcXHRsZW4gPSBwYWdlcyBcXHUwMDNjXFx1MDAzYyBwYWdlc2hpZnQ7XFxuQEAgLTEwMjEsNiArMTA1OCw5IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuIFxcdHUxNiBsYmEsIG1heF9sYmE7XFxuIFxcdGludCByZXN1bHQ7XFxuIFxcbitcXHRpZiAoIU1FRElBX0lORk8odXMpLnV6b25lc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIFNpbmNlIHdlIGRvbid0IHdyaXRlIHRoZSB1c2VyIGRhdGEgZGlyZWN0bHkgdG8gdGhlIGRldmljZSxcXG4gXFx0ICogd2UgaGF2ZSB0byBjcmVhdGUgYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDg6NDEuNjQyMTgwMTM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNDE1MTUwMzYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfU1RPUkFHRV9BTEFVREFcIixcbiAgICBcIlVTQl9TVE9SQUdFXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIlNDU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGF1ZGFfdHJhbnNwb3J0XCIsXG4gICAgXCJhbGF1ZGFfcHJvYmVcIixcbiAgICBcImluaXRfYWxhdWRhXCIsXG4gICAgXCJhbGF1ZGFfY2hlY2tfbWVkaWFcIixcbiAgICBcImFsYXVkYV9yZWFkX2RhdGFcIixcbiAgICBcImFsYXVkYV93cml0ZV9kYXRhXCIsXG4gICAgXCJhbGF1ZGFfd3JpdGVfbGJhXCIsXG4gICAgXCJhbGF1ZGFfZnJlZV9tYXBzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIHplcm8tZGl2aXNpb24gYnVncywgbWVtb3J5IGxlYWtzLCBhbmQgbWVkaWEgaW5pdGlhbGl6YXRpb24gc3RhdGUgaGFuZGxpbmcgYWNyb3NzIHpvbmUgbWFwIGFsbG9jYXRpb25zIGFuZCBJL08gaGFuZGxpbmcgaW4gdGhlIE9seW1wdXMgTUFVU0ItMTAvRnVqaWZpbG0gRFBDLVIxIChBbGF1ZGEpIFVTQiBtYXNzIHN0b3JhZ2UgZHJpdmVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSB2aWEgVVNCIGVtdWxhdGlvbi9mdXp6aW5nIGZyYW1ld29ya3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDUzYTBhNjA1MWE3YjZmMTJkYjVmOGE1MmJhZGI0N2RiODM1MGY2OWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyOCAyMDo0ODozOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jXG5pbmRleCA2OTFmZTQ3MDA5Y2Y2Li5hMmEzMzM0MTlmMWY3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1xuKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1xuQEAgLTk2LDYgKzk2LDggQEAgc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvIHtcbiBcbiBcdHUxNiAqKmxiYV90b19wYmE7XHRcdC8qIGxvZ2ljYWwgdG8gcGh5c2ljYWwgYmxvY2sgbWFwICovXG4gXHR1MTYgKipwYmFfdG9fbGJhO1x0XHQvKiBwaHlzaWNhbCB0byBsb2dpY2FsIGJsb2NrIG1hcCAqL1xuK1xuK1x0Ym9vbCBtZWRpYV9pbml0aWFsaXplZDtcbiB9O1xuIFxuIHN0cnVjdCBhbGF1ZGFfaW5mbyB7XG5AQCAtMTA1LDggKzEwNyw2IEBAIHN0cnVjdCBhbGF1ZGFfaW5mbyB7XG4gXHR1bnNpZ25lZCBjaGFyIHNlbnNlX2tleTtcbiBcdHVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjO1x0LyogYWRkaXRpb25hbCBzZW5zZSBjb2RlICovXG4gXHR1bnNpZ25lZCBsb25nIHNlbnNlX2FzY3E7XHQvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgcXVhbGlmaWVyICovXG4tXG4tXHRib29sIG1lZGlhX2luaXRpYWxpemVkO1xuIH07XG4gXG4gI2RlZmluZSBzaG9ydF9wYWNrKGxzYixtc2IpICggKCh1MTYpKGxzYikpIHwgKCAoKHUxNikobXNiKSlcdTAwM2NcdTAwM2M4ICkgKVxuQEAgLTI5MCwxNyArMjkwLDI1IEBAIHN0YXRpYyB2b2lkIGFsYXVkYV9mcmVlX21hcHMgKHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyAqbWVkaWFfaW5mbylcbiBcdHVuc2lnbmVkIGludCBudW1fem9uZXMgPSBtZWRpYV9pbmZvLVx1MDAzZWNhcGFjaXR5IFx1MDAzZVx1MDAzZSBzaGlmdDtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuLVx0aWYgKG1lZGlhX2luZm8tXHUwMDNlbGJhX3RvX3BiYSAhPSBOVUxMKVxuK1x0aWYgKG1lZGlhX2luZm8tXHUwMDNlbGJhX3RvX3BiYSAhPSBOVUxMKSB7XG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV96b25lczsgaSsrKSB7XG4gXHRcdFx0a2ZyZWUobWVkaWFfaW5mby1cdTAwM2VsYmFfdG9fcGJhW2ldKTtcbiBcdFx0XHRtZWRpYV9pbmZvLVx1MDAzZWxiYV90b19wYmFbaV0gPSBOVUxMO1xuIFx0XHR9XG4rXHRcdGtmcmVlKG1lZGlhX2luZm8tXHUwMDNlbGJhX3RvX3BiYSk7XG4rXHRcdG1lZGlhX2luZm8tXHUwMDNlbGJhX3RvX3BiYSA9IE5VTEw7XG4rXHR9XG4gXG4tXHRpZiAobWVkaWFfaW5mby1cdTAwM2VwYmFfdG9fbGJhICE9IE5VTEwpXG4rXHRpZiAobWVkaWFfaW5mby1cdTAwM2VwYmFfdG9fbGJhICE9IE5VTEwpIHtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3pvbmVzOyBpKyspIHtcbiBcdFx0XHRrZnJlZShtZWRpYV9pbmZvLVx1MDAzZXBiYV90b19sYmFbaV0pO1xuIFx0XHRcdG1lZGlhX2luZm8tXHUwMDNlcGJhX3RvX2xiYVtpXSA9IE5VTEw7XG4gXHRcdH1cbitcdFx0a2ZyZWUobWVkaWFfaW5mby1cdTAwM2VwYmFfdG9fbGJhKTtcbitcdFx0bWVkaWFfaW5mby1cdTAwM2VwYmFfdG9fbGJhID0gTlVMTDtcbitcdH1cbitcdG1lZGlhX2luZm8tXHUwMDNlY2FwYWNpdHkgPSAwO1xuK1x0bWVkaWFfaW5mby1cdTAwM2V1em9uZXNpemUgPSAwO1xuIH1cbiBcbiAvKlxuQEAgLTQ0MSwxMSArNDQ5LDE1IEBAIHN0YXRpYyBpbnQgYWxhdWRhX2luaXRfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxuIFx0XHQrIE1FRElBX0lORk8odXMpLmJsb2Nrc2hpZnQgKyBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQpO1xuIFx0TUVESUFfSU5GTyh1cykucGJhX3RvX2xiYSA9IGtjYWxsb2MobnVtX3pvbmVzLCBzaXplb2YodTE2KiksIEdGUF9OT0lPKTtcbiBcdE1FRElBX0lORk8odXMpLmxiYV90b19wYmEgPSBrY2FsbG9jKG51bV96b25lcywgc2l6ZW9mKHUxNiopLCBHRlBfTk9JTyk7XG4tXHRpZiAoTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYSA9PSBOVUxMIHx8IE1FRElBX0lORk8odXMpLmxiYV90b19wYmEgPT0gTlVMTClcbitcdGlmIChNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID09IE5VTEwgfHwgTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9PSBOVUxMKSB7XG4rXHRcdGFsYXVkYV9mcmVlX21hcHMoXHUwMDI2TUVESUFfSU5GTyh1cykpO1xuIFx0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuK1x0fVxuIFxuLVx0aWYgKGFsYXVkYV9yZXNldF9tZWRpYSh1cykgIT0gVVNCX1NUT1JfWEZFUl9HT09EKVxuK1x0aWYgKGFsYXVkYV9yZXNldF9tZWRpYSh1cykgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7XG4rXHRcdGFsYXVkYV9mcmVlX21hcHMoXHUwMDI2TUVESUFfSU5GTyh1cykpO1xuIFx0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuK1x0fVxuIFxuIFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EO1xuIH1cbkBAIC00NTcsNiArNDY5LDcgQEAgc3RhdGljIGludCBhbGF1ZGFfaW5pdF9tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4gc3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxuIHtcbiBcdHN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgYWxhdWRhX2luZm8gKikgdXMtXHUwMDNlZXh0cmE7XG4rXHRzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gKm1lZGlhX2luZm8gPSBcdTAwMjZNRURJQV9JTkZPKHVzKTtcbiBcdHVuc2lnbmVkIGNoYXIgKnN0YXR1cyA9IHVzLVx1MDAzZWlvYnVmO1xuIFx0aW50IHJjO1xuIFxuQEAgLTQ3MCw3ICs0ODMsOCBAQCBzdGF0aWMgaW50IGFsYXVkYV9jaGVja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4gXHRpZiAoKHN0YXR1c1swXSBcdTAwMjYgMHg4MCkgfHwgKChzdGF0dXNbMF0gXHUwMDI2IDB4MUYpID09IDB4MTApXG4gXHRcdHx8ICgoc3RhdHVzWzFdIFx1MDAyNiAweDAxKSA9PSAwKSkge1xuIFx0XHR1c2Jfc3Rvcl9kYmcodXMsIFwiTm8gbWVkaWEsIG9yIGRvb3Igb3BlblxcblwiKTtcbi1cdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG4rXHRcdGFsYXVkYV9mcmVlX21hcHMobWVkaWFfaW5mbyk7XG4rXHRcdG1lZGlhX2luZm8tXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9rZXkgPSAweDAyO1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2FzYyA9IDB4M0E7XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2VfYXNjcSA9IDB4MDA7XG5AQCAtNDc4LDEyICs0OTIsMTMgQEAgc3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxuIFx0fVxuIFxuIFx0LyogQ2hlY2sgZm9yIG1lZGlhIGNoYW5nZSAqL1xuLVx0aWYgKHN0YXR1c1swXSBcdTAwMjYgMHgwOCB8fCAhaW5mby1cdTAwM2VtZWRpYV9pbml0aWFsaXplZCkge1xuK1x0aWYgKHN0YXR1c1swXSBcdTAwMjYgMHgwOCB8fCAhbWVkaWFfaW5mby1cdTAwM2VtZWRpYV9pbml0aWFsaXplZCkge1xuIFx0XHR1c2Jfc3Rvcl9kYmcodXMsIFwiTWVkaWEgY2hhbmdlIGRldGVjdGVkXFxuXCIpO1xuLVx0XHRhbGF1ZGFfZnJlZV9tYXBzKFx1MDAyNk1FRElBX0lORk8odXMpKTtcbitcdFx0YWxhdWRhX2ZyZWVfbWFwcyhtZWRpYV9pbmZvKTtcbitcdFx0bWVkaWFfaW5mby1cdTAwM2VtZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xuIFx0XHRyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTtcbiBcdFx0aWYgKHJjID09IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKVxuLVx0XHRcdGluZm8tXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlO1xuK1x0XHRcdG1lZGlhX2luZm8tXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSB0cnVlO1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2tleSA9IFVOSVRfQVRURU5USU9OO1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2FzYyA9IDB4Mjg7XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2VfYXNjcSA9IDB4MDA7XG5AQCAtNjg5LDExICs3MDQsMTYgQEAgc3RhdGljIGludCBhbGF1ZGFfcmVhZF9tYXAoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcbiAgKiBDaGVja3MgdG8gc2VlIHdoZXRoZXIgd2UgaGF2ZSBhbHJlYWR5IG1hcHBlZCBhIGNlcnRhaW4gem9uZVxuICAqIElmIHdlIGhhdmVuJ3QsIHRoZSBtYXAgaXMgZ2VuZXJhdGVkXG4gICovXG4tc3RhdGljIHZvaWQgYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcbitzdGF0aWMgaW50IGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHpvbmUpXG4ge1xuK1x0aWYgKCFNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhIHx8ICFNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhKVxuK1x0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuK1xuIFx0aWYgKE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV0gPT0gTlVMTFxuIFx0XHR8fCBNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhW3pvbmVdID09IE5VTEwpXG4tXHRcdGFsYXVkYV9yZWFkX21hcCh1cywgem9uZSk7XG4rXHRcdHJldHVybiBhbGF1ZGFfcmVhZF9tYXAodXMsIHpvbmUpO1xuK1xuK1x0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EO1xuIH1cbiBcbiAvKlxuQEAgLTgxOSwxMSArODM5LDE5IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2xiYShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBsYmEsXG4gXHR1bnNpZ25lZCBpbnQgem9uZXNpemUgPSBNRURJQV9JTkZPKHVzKS56b25lc2l6ZTtcbiBcdHVuc2lnbmVkIGludCBwYWdlc2l6ZSA9IE1FRElBX0lORk8odXMpLnBhZ2VzaXplO1xuIFx0dW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IE1FRElBX0lORk8odXMpLmJsb2Nrc2l6ZTtcbi1cdHVuc2lnbmVkIGludCBsYmFfb2Zmc2V0ID0gbGJhICUgdXpvbmVzaXplO1xuK1x0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQ7XG4gXHR1bnNpZ25lZCBpbnQgbmV3X3BiYV9vZmZzZXQ7XG4tXHR1bnNpZ25lZCBpbnQgem9uZSA9IGxiYSAvIHV6b25lc2l6ZTtcbitcdHVuc2lnbmVkIGludCB6b25lO1xuIFxuLVx0YWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpO1xuK1x0aWYgKCF1em9uZXNpemUpXG4rXHRcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XG4rXG4rXHRsYmFfb2Zmc2V0ID0gbGJhICUgdXpvbmVzaXplO1xuK1x0em9uZSA9IGxiYSAvIHV6b25lc2l6ZTtcbitcbitcdHJlc3VsdCA9IGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHVzLCB6b25lKTtcbitcdGlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG4rXHRcdHJldHVybiByZXN1bHQ7XG4gXG4gXHRwYmEgPSBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdW2xiYV9vZmZzZXRdO1xuIFx0aWYgKHBiYSA9PSAxKSB7XG5AQCAtOTI3LDYgKzk1NSw5IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XG4gXHRpbnQgcmVzdWx0O1xuIFxuK1x0aWYgKCF1em9uZXNpemUpXG4rXHRcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XG4rXG4gXHQvKlxuIFx0ICogU2luY2Ugd2Ugb25seSByZWFkIGluIG9uZSBibG9jayBhdCBhIHRpbWUsIHdlIGhhdmUgdG8gY3JlYXRlXG4gXHQgKiBhIGJvdW5jZSBidWZmZXIgYW5kIG1vdmUgdGhlIGRhdGEgYSBwaWVjZSBhdCBhIHRpbWUgYmV0d2VlbiB0aGVcbkBAIC05NTAsMTEgKzk4MSwxMCBAQCBzdGF0aWMgaW50IGFsYXVkYV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXHRzZyA9IE5VTEw7XG4gXG4gXHR3aGlsZSAoc2VjdG9ycyBcdTAwM2UgMCkge1xuLVx0XHR1bnNpZ25lZCBpbnQgem9uZSA9IGxiYSAvIHV6b25lc2l6ZTsgLyogaW50ZWdlciBkaXZpc2lvbiAqL1xuLVx0XHR1bnNpZ25lZCBpbnQgbGJhX29mZnNldCA9IGxiYSAtICh6b25lICogdXpvbmVzaXplKTtcbitcdFx0dW5zaWduZWQgaW50IHpvbmU7XG4rXHRcdHVuc2lnbmVkIGludCBsYmFfb2Zmc2V0O1xuIFx0XHR1bnNpZ25lZCBpbnQgcGFnZXM7XG4gXHRcdHUxNiBwYmE7XG4tXHRcdGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHVzLCB6b25lKTtcbiBcbiBcdFx0LyogTm90IG92ZXJmbG93aW5nIGNhcGFjaXR5PyAqL1xuIFx0XHRpZiAobGJhIFx1MDAzZT0gbWF4X2xiYSkge1xuQEAgLTk2NCw2ICs5OTQsMTMgQEAgc3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4rXHRcdHpvbmUgPSBsYmEgLyB1em9uZXNpemU7IC8qIGludGVnZXIgZGl2aXNpb24gKi9cbitcdFx0bGJhX29mZnNldCA9IGxiYSAtICh6b25lICogdXpvbmVzaXplKTtcbitcbitcdFx0cmVzdWx0ID0gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpO1xuK1x0XHRpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKVxuK1x0XHRcdGJyZWFrO1xuK1xuIFx0XHQvKiBGaW5kIG51bWJlciBvZiBwYWdlcyB3ZSBjYW4gcmVhZCBpbiB0aGlzIGJsb2NrICovXG4gXHRcdHBhZ2VzID0gbWluKHNlY3RvcnMsIGJsb2Nrc2l6ZSAtIHBhZ2UpO1xuIFx0XHRsZW4gPSBwYWdlcyBcdTAwM2NcdTAwM2MgcGFnZXNoaWZ0O1xuQEAgLTEwMjEsNiArMTA1OCw5IEBAIHN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXHR1MTYgbGJhLCBtYXhfbGJhO1xuIFx0aW50IHJlc3VsdDtcbiBcbitcdGlmICghTUVESUFfSU5GTyh1cykudXpvbmVzaXplKVxuK1x0XHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xuK1xuIFx0LypcbiBcdCAqIFNpbmNlIHdlIGRvbid0IHdyaXRlIHRoZSB1c2VyIGRhdGEgZGlyZWN0bHkgdG8gdGhlIGRldmljZSxcbiBcdCAqIHdlIGhhdmUgdG8gY3JlYXRlIGEgYm91bmNlIGJ1ZmZlciBhbmQgbW92ZSB0aGUgZGF0YSBhIHBpZWNlXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0ODo0MS42NDIxODM0ODlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTAyMjY2MjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBTdG9yYWdlIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIGEgcGF0Y2ggaGFzIGhpdCBteSBkZXNrIGFuZCBpdCdzIHRvdWNoaW5nIGBkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jYC4gTXkgaW5pdGlhbCByZWFjdGlvbj8gTGV0J3MgZGl2ZSBpbi4gVGhpcyByZXF1aXJlcyBhIHN5c3RlbWF0aWMgYXBwcm9hY2guIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqZXhhY3RseSogd2hhdCdzIGJlZW4gY2hhbmdlZCDigJMgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGJlaW5nIHR3ZWFrZWQsIGFkZGVkLCBvciByZW1vdmVkLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIOKAkyBsaWtlbHkgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIOKAkyB0byBxdWlja2x5IHNjYW4gdGhlIEtjb25maWcgb3B0aW9ucyB3aXRoaW4gdGhlIGBkcml2ZXJzL3VzYi9zdG9yYWdlL2AgZGlyZWN0b3J5LiBJJ20gbG9va2luZyBmb3IgdGhlIGRlcGVuZGVuY2llcywgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLCB3aGV0aGVyIHRoaXMgYGFsYXVkYS5jYCBkcml2ZXIgaXMgZXZlbiBlbmFibGVkIGJ5IGRlZmF1bHQgb3IgaWYgdGhlcmUgYXJlIHNwZWNpZmljIHNldHRpbmdzIHRoYXQgY29udHJvbCBpdHMgaW5jbHVzaW9uLiBUaGVuLCBhbmQgb25seSB0aGVuLCBjYW4gSSBkZXRlcm1pbmUgaWYgdGhpcyBtb2R1bGUgaXMgZXZlbiAqcmVhY2hhYmxlKiBhbmQgd29ydGh5IG9mIGF0dGVudGlvbiwgaW4gdGVybXMgb2YgZnV6emluZy4gSXMgaXQgcGFydCBvZiB0aGUgZGVmYXVsdCBrZXJuZWwgY29uZmlndXJhdGlvbj8gQXJlIHRoZXJlIHNwZWNpZmljIGhhcmR3YXJlIHJlcXVpcmVtZW50cyB0aGF0IG1ha2UgaXQgbGVzcyBpbnRlcmVzdGluZz8gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uIEl0IHdpbGwgYmUgd29ydGggc2VlaW5nIGlmIHRoZSBjaGFuZ2VzIGNvdWxkIGJlIHZ1bG5lcmFibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1OTUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjQ4OjQ2Ljc0NDQ3NTk1OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTI1MjY4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGF1ZGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWc9MTI3PWNvbmZpZyBVU0JfU1RPUkFHRV9BTEFVREFcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZy0xMzUtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnOjEzNjpcXHQgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1hbGF1ZGEuXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnLTEzNy1cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGU9MTk9dXNiLXN0b3JhZ2UtJChDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcpICs9IGRlYnVnLm9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlLTIwLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGU6MjE6b2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSlcXHQrPSB1bXMtYWxhdWRhLm9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlLTIyLW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCKSArPSB1bXMtY3lwcmVzcy5vXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlPTMzPW9iai0kKENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVClcXHRcXHQrPSB1bXMtdXNiYXQub1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUtMzQtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZTozNTp1bXMtYWxhdWRhLXlcXHRcXHQ6PSBhbGF1ZGEub1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUtMzYtdW1zLWN5cHJlc3MteVxcdFxcdDo9IGN5cHJlc3NfYXRhY2Iub1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xNy0gKlxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTg6ICogRm9yIHByb3RvY29sIGluZm8sIHNlZSBodHRwOi8vYWxhdWRhLnNvdXJjZWZvcmdlLm5ldFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTktICovXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTMzLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MzQ6I2RlZmluZSBEUlZfTkFNRSBcXFwidW1zLWFsYXVkYVxcXCJcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTM1LVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0zOT1NT0RVTEVfSU1QT1JUX05TKFxcXCJVU0JfU1RPUkFHRVxcXCIpO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjg1OnN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyB7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04Ni1cXHR1bnNpZ25lZCBsb25nIGNhcGFjaXR5O1xcdFxcdC8qIHRvdGFsIG1lZGlhIHNpemUgaW4gYnl0ZXMgKi9cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTAyLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTAzOnN0cnVjdCBhbGF1ZGFfaW5mbyB7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMDQ6XFx0c3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvIHBvcnRbMl07XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDUtXFx0aW50IHdyX2VwO1xcdFxcdFxcdC8qIGVuZHBvaW50IHRvIHdyaXRlIGRhdGEgb3V0IG9mICovXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNi0jZGVmaW5lIE1FRElBX1BPUlQodXMpIHVzLVxcdTAwM2VzcmItXFx1MDAzZWRldmljZS1cXHUwMDNlbHVuXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTc6I2RlZmluZSBNRURJQV9JTkZPKHVzKSAoKHN0cnVjdCBhbGF1ZGFfaW5mbyAqKXVzLVxcdTAwM2VleHRyYSktXFx1MDAzZXBvcnRbTUVESUFfUE9SVCh1cyldXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTgtXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyMi1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyMzpzdGF0aWMgaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cyk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjQtXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEzNC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEzNTpzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgYWxhdWRhX3VzYl9pZHNbXSA9IHtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEzNjojXFx0aW5jbHVkZSBcXFwidW51c3VhbF9hbGF1ZGEuaFxcXCJcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEzNy1cXHR7IH1cXHRcXHQvKiBUZXJtaW5hdGluZyBlbnRyeSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTM4LX07XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMzk6TU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGFsYXVkYV91c2JfaWRzKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTE0MC1cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTU2LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTU3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNfdW51c3VhbF9kZXYgYWxhdWRhX3VudXN1YWxfZGV2X2xpc3RbXSA9IHtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjE1ODojXFx0aW5jbHVkZSBcXFwidW51c3VhbF9hbGF1ZGEuaFxcXCJcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTE1OS1cXHR7IH1cXHRcXHQvKiBUZXJtaW5hdGluZyBlbnRyeSAqL1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xNjgtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxNjk6c3RydWN0IGFsYXVkYV9jYXJkX2luZm8ge1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTcwLVxcdHVuc2lnbmVkIGNoYXIgaWQ7XFx0XFx0LyogaWQgYnl0ZSAqL1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xNzYtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxNzc6c3RhdGljIGNvbnN0IHN0cnVjdCBhbGF1ZGFfY2FyZF9pbmZvIGFsYXVkYV9jYXJkX2lkc1tdID0ge1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTc4LVxcdC8qIE5BTkQgZmxhc2ggKi9cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjAyLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MjAzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYWxhdWRhX2NhcmRfaW5mbyAqYWxhdWRhX2NhcmRfZmluZF9pZCh1bnNpZ25lZCBjaGFyIGlkKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjA0LXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjA2LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MjA3OlxcdGZvciAoaSA9IDA7IGFsYXVkYV9jYXJkX2lkc1tpXS5pZCAhPSAwOyBpKyspXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoyMDg6XFx0XFx0aWYgKGFsYXVkYV9jYXJkX2lkc1tpXS5pZCA9PSBpZClcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjIwOTpcXHRcXHRcXHRyZXR1cm4gXFx1MDAyNihhbGF1ZGFfY2FyZF9pZHNbaV0pO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjEwLVxcdHJldHVybiBOVUxMO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0yNzQ9c3RhdGljIHZvaWQgbmFuZF9zdG9yZV9lY2ModW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgY2hhciAqZWNjKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yODUtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoyODY6c3RhdGljIHZvaWQgYWxhdWRhX2ZyZWVfbWFwcyAoc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICptZWRpYV9pbmZvKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjg3LXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzE3LSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MzE4OnN0YXRpYyBpbnQgYWxhdWRhX2dldF9tZWRpYV9zdGF0dXMoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBjaGFyICpkYXRhKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzE5LXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzQwLSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MzQxOnN0YXRpYyBpbnQgYWxhdWRhX2Fja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNDIte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNTctICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzozNTg6c3RhdGljIGludCBhbGF1ZGFfZ2V0X21lZGlhX3NpZ25hdHVyZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNTkte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNzMtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzozNzQ6c3RhdGljIGludCBhbGF1ZGFfcmVzZXRfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzc1LXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzg5LSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MzkwOnN0YXRpYyBpbnQgYWxhdWRhX2luaXRfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzkxLXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzkzLVxcdGludCByZWFkeSA9IDA7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzozOTQ6XFx0Y29uc3Qgc3RydWN0IGFsYXVkYV9jYXJkX2luZm8gKm1lZGlhX2luZm87XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zOTUtXFx0dW5zaWduZWQgaW50IG51bV96b25lcztcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzk5LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDAwOlxcdFxcdGlmIChhbGF1ZGFfZ2V0X21lZGlhX3N0YXR1cyh1cywgZGF0YSkgIT0gVVNCX1NUT1JfWEZFUl9HT09EKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDAxLVxcdFxcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQwOC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQwOTpcXHRpZiAoYWxhdWRhX2Fja19tZWRpYSh1cykgIT0gVVNCX1NUT1JfWEZFUl9HT09EKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDEwLVxcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQxMy1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQxNDpcXHRpZiAoYWxhdWRhX2dldF9tZWRpYV9zdGF0dXModXMsIGRhdGEpICE9IFVTQl9TVE9SX1hGRVJfR09PRClcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQxNS1cXHRcXHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MjEtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MjI6XFx0aWYgKGFsYXVkYV9nZXRfbWVkaWFfc2lnbmF0dXJlKHVzLCBkYXRhKSAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MjMtXFx0XFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDI1LVxcdHVzYl9zdG9yX2RiZyh1cywgXFxcIk1lZGlhIHNpZ25hdHVyZTogJTRwaFxcXFxuXFxcIiwgZGF0YSk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MjY6XFx0bWVkaWFfaW5mbyA9IGFsYXVkYV9jYXJkX2ZpbmRfaWQoZGF0YVsxXSk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MjctXFx0aWYgKG1lZGlhX2luZm8gPT0gTlVMTCkge1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDI4OlxcdFxcdHByX3dhcm4oXFxcImFsYXVkYV9pbml0X21lZGlhOiBVbnJlY29nbmlzZWQgbWVkaWEgc2lnbmF0dXJlOiAlNHBoXFxcXG5cXFwiLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDI5LVxcdFxcdFxcdGRhdGEpO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NTItXFx0aWYgKE1FRElBX0lORk8odXMpLnBiYV90b19sYmEgPT0gTlVMTCB8fCBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhID09IE5VTEwpIHtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ1MzpcXHRcXHRhbGF1ZGFfZnJlZV9tYXBzKFxcdTAwMjZNRURJQV9JTkZPKHVzKSk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NTQtXFx0XFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDU2LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDU3OlxcdGlmIChhbGF1ZGFfcmVzZXRfbWVkaWEodXMpICE9IFVTQl9TVE9SX1hGRVJfR09PRCkge1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDU4OlxcdFxcdGFsYXVkYV9mcmVlX21hcHMoXFx1MDAyNk1FRElBX0lORk8odXMpKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ1OS1cXHRcXHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NjgtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0Njk6c3RhdGljIGludCBhbGF1ZGFfY2hlY2tfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDcwLXtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ3MTpcXHRzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIHVzLVxcdTAwM2VleHRyYTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ3MjpcXHRzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gKm1lZGlhX2luZm8gPSBcXHUwMDI2TUVESUFfSU5GTyh1cyk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NzMtXFx0dW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtXFx1MDAzZWlvYnVmO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NzUtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NzY6XFx0cmMgPSBhbGF1ZGFfZ2V0X21lZGlhX3N0YXR1cyh1cywgc3RhdHVzKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ3Ny1cXHRpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ4NS1cXHRcXHR1c2Jfc3Rvcl9kYmcodXMsIFxcXCJObyBtZWRpYSwgb3IgZG9vciBvcGVuXFxcXG5cXFwiKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ4NjpcXHRcXHRhbGF1ZGFfZnJlZV9tYXBzKG1lZGlhX2luZm8pO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDg3LVxcdFxcdG1lZGlhX2luZm8tXFx1MDAzZW1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ5Ni1cXHRcXHR1c2Jfc3Rvcl9kYmcodXMsIFxcXCJNZWRpYSBjaGFuZ2UgZGV0ZWN0ZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDk3OlxcdFxcdGFsYXVkYV9mcmVlX21hcHMobWVkaWFfaW5mbyk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00OTgtXFx0XFx0bWVkaWFfaW5mby1cXHUwMDNlbWVkaWFfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ5OTpcXHRcXHRyYyA9IGFsYXVkYV9pbml0X21lZGlhKHVzKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTUwMC1cXHRcXHRpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTUxNC0gKi9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjUxNTpzdGF0aWMgaW50IGFsYXVkYV9jaGVja19zdGF0dXMyKHN0cnVjdCB1c19kYXRhICp1cylcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTUxNi17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU0NC0gKi9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjU0NTpzdGF0aWMgaW50IGFsYXVkYV9nZXRfcmVkdV9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSwgdW5zaWduZWQgY2hhciAqZGF0YSlcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU0Ni17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU2NS0gKi9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjU2NjpzdGF0aWMgdTE2IGFsYXVkYV9maW5kX3VudXNlZF9wYmEoc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICppbmZvLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTY3LVxcdHVuc2lnbmVkIGludCB6b25lKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01ODItICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo1ODM6c3RhdGljIGludCBhbGF1ZGFfcmVhZF9tYXAoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU4NC17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTYwOC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjYwOTpcXHRcXHRyZXN1bHQgPSBhbGF1ZGFfZ2V0X3JlZHVfZGF0YSh1cywgYmxvY2tudW0sIGRhdGEpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjEwLVxcdFxcdGlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTY1MS1cXHRcXHRcXHRwcmludGsoS0VSTl9XQVJOSU5HXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo2NTI6XFx0XFx0XFx0ICAgICAgIFxcXCJhbGF1ZGFfcmVhZF9tYXA6IEJhZCBwYXJpdHkgaW4gTEJBIGZvciBibG9jayAlZFxcXCJcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTY1My1cXHRcXHRcXHQgICAgICAgXFxcIiAoJTAyWCAlMDJYKVxcXFxuXFxcIiwgaSwgZGF0YVs2XSwgZGF0YVs3XSk7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTY3Mi1cXHRcXHRcXHRwcmludGsoS0VSTl9XQVJOSU5HXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo2NzM6XFx0XFx0XFx0ICAgICAgIFxcXCJhbGF1ZGFfcmVhZF9tYXA6IEJhZCBsb3cgTEJBICVkIGZvciBibG9jayAlZFxcXFxuXFxcIixcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTY3NC1cXHRcXHRcXHQgICAgICAgbGJhX3JlYWwsIGJsb2NrbnVtKTtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjc5LVxcdFxcdFxcdHByaW50ayhLRVJOX1dBUk5JTkdcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjY4MDpcXHRcXHRcXHQgICAgICAgXFxcImFsYXVkYV9yZWFkX21hcDogXFxcIlxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjgxLVxcdFxcdFxcdCAgICAgICBcXFwiTEJBICVkIHNlZW4gZm9yIFBCQSAlZCBhbmQgJWRcXFxcblxcXCIsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTcwNi0gKi9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjcwNzpzdGF0aWMgaW50IGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHpvbmUpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03MDgte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03MTMtXFx0XFx0fHwgTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYVt6b25lXSA9PSBOVUxMKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzE0OlxcdFxcdHJldHVybiBhbGF1ZGFfcmVhZF9tYXAodXMsIHpvbmUpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzE1LVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03MjEtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3MjI6c3RhdGljIGludCBhbGF1ZGFfZXJhc2VfYmxvY2soc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgcGJhKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzIzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzUwLSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzUxOnN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfYmxvY2tfcmF3KHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSxcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc1Mi1cXHRcXHR1bnNpZ25lZCBpbnQgcGFnZSwgdW5zaWduZWQgaW50IHBhZ2VzLCB1bnNpZ25lZCBjaGFyICpkYXRhKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03NzYtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3Nzc6c3RhdGljIGludCBhbGF1ZGFfcmVhZF9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03NzgtXFx0XFx0dW5zaWduZWQgaW50IHBhZ2UsIHVuc2lnbmVkIGludCBwYWdlcywgdW5zaWduZWQgY2hhciAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzgyLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzgzOlxcdHJjID0gYWxhdWRhX3JlYWRfYmxvY2tfcmF3KHVzLCBwYmEsIHBhZ2UsIHBhZ2VzLCBkYXRhKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc4NC1cXHRpZiAocmMgIT0gVVNCX1NUT1JfWEZFUl9HT09EKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MDEtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4MDI6c3RhdGljIGludCBhbGF1ZGFfd3JpdGVfYmxvY2soc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgcGJhLCB1bnNpZ25lZCBjaGFyICpkYXRhKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODAzLXtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgwNC1cXHRpbnQgcmM7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4MDU6XFx0c3RydWN0IGFsYXVkYV9pbmZvICppbmZvID0gKHN0cnVjdCBhbGF1ZGFfaW5mbyAqKSB1cy1cXHUwMDNlZXh0cmE7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MDYtXFx0dW5zaWduZWQgY2hhciBjb21tYW5kW10gPSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgyMy1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgyNDpcXHRyZXR1cm4gYWxhdWRhX2NoZWNrX3N0YXR1czIodXMpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODI1LX1cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODI5LSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODMwOnN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2xiYShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBsYmEsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MzEtXFx0XFx0IHVuc2lnbmVkIGludCBwYWdlLCB1bnNpZ25lZCBpbnQgcGFnZXMsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg1MS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjg1MjpcXHRyZXN1bHQgPSBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZSh1cywgem9uZSk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NTMtXFx0aWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODYyLVxcdFxcdHByaW50ayhLRVJOX1dBUk5JTkdcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjg2MzpcXHRcXHQgICAgICAgXFxcImFsYXVkYV93cml0ZV9sYmE6IGF2b2lkIHdyaXRpbmcgdG8gcGJhIDFcXFxcblxcXCIpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODY0LVxcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRDtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODY2LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODY3OlxcdG5ld19wYmEgPSBhbGF1ZGFfZmluZF91bnVzZWRfcGJhKFxcdTAwMjZNRURJQV9JTkZPKHVzKSwgem9uZSk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NjgtXFx0aWYgKCFuZXdfcGJhKSB7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NjktXFx0XFx0cHJpbnRrKEtFUk5fV0FSTklOR1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODcwOlxcdFxcdCAgICAgICBcXFwiYWxhdWRhX3dyaXRlX2xiYTogT3V0IG9mIHVudXNlZCBibG9ja3NcXFxcblxcXCIpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODcxLVxcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg3NS1cXHRpZiAocGJhICE9IFVOREVGKSB7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4NzY6XFx0XFx0cmVzdWx0ID0gYWxhdWRhX3JlYWRfYmxvY2tfcmF3KHVzLCBwYmEsIDAsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NzctXFx0XFx0XFx0YmxvY2tzaXplLCBibG9ja2J1ZmZlcik7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTkyMC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjkyMTpcXHRyZXN1bHQgPSBhbGF1ZGFfd3JpdGVfYmxvY2sodXMsIG5ld19wYmEsIGJsb2NrYnVmZmVyKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTkyMi1cXHRpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRClcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTMxLVxcdFxcdHVuc2lnbmVkIGludCBwYmFfb2Zmc2V0ID0gcGJhIC0gKHpvbmUgKiB6b25lc2l6ZSk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5MzI6XFx0XFx0cmVzdWx0ID0gYWxhdWRhX2VyYXNlX2Jsb2NrKHVzLCBwYmEpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTMzLVxcdFxcdGlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05NDMtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5NDQ6c3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTQ1LVxcdFxcdHVuc2lnbmVkIGludCBzZWN0b3JzKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05OTktXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMDAwOlxcdFxcdHJlc3VsdCA9IGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHVzLCB6b25lKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwMDEtXFx0XFx0aWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTAyNi1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwMjc6XFx0XFx0XFx0cmVzdWx0ID0gYWxhdWRhX3JlYWRfYmxvY2sodXMsIHBiYSwgcGFnZSwgcGFnZXMsIGJ1ZmZlcik7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDI4LVxcdFxcdFxcdGlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwNDctICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMDQ4OnN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDQ5LVxcdFxcdHVuc2lnbmVkIGludCBzZWN0b3JzKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTEwLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTExMTpcXHRcXHRyZXN1bHQgPSBhbGF1ZGFfd3JpdGVfbGJhKHVzLCBsYmEsIHBhZ2UsIHBhZ2VzLCBidWZmZXIsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTEyLVxcdFxcdFxcdGJsb2NrYnVmZmVyKTtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTEyOS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExMzA6c3RhdGljIHZvaWQgYWxhdWRhX2luZm9fZGVzdHJ1Y3Rvcih2b2lkICpleHRyYSlcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExMzEte1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTEzMjpcXHRzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIGV4dHJhO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTEzMy1cXHRpbnQgcG9ydDtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTEzOC1cXHRmb3IgKHBvcnQgPSAwOyBwb3J0IFxcdTAwM2MgMjsgcG9ydCsrKSB7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTM5OlxcdFxcdHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyAqbWVkaWFfaW5mbyA9IFxcdTAwMjZpbmZvLVxcdTAwM2Vwb3J0W3BvcnRdO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE0MC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNDE6XFx0XFx0YWxhdWRhX2ZyZWVfbWFwcyhtZWRpYV9pbmZvKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNDItXFx0XFx0a2ZyZWUobWVkaWFfaW5mby1cXHUwMDNlbGJhX3RvX3BiYSk7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNDctLypcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNDg6ICogSW5pdGlhbGl6ZSBhbGF1ZGFfaW5mbyBzdHJ1Y3QgYW5kIGZpbmQgdGhlIGRhdGEtd3JpdGUgZW5kcG9pbnRcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNDktICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTUwOnN0YXRpYyBpbnQgaW5pdF9hbGF1ZGEoc3RydWN0IHVzX2RhdGEgKnVzKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE1MS17XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTUyOlxcdHN0cnVjdCBhbGF1ZGFfaW5mbyAqaW5mbztcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNTMtXFx0c3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0c2V0dGluZyA9IHVzLVxcdTAwM2VwdXNiX2ludGYtXFx1MDAzZWN1cl9hbHRzZXR0aW5nO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTU1LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE1NjpcXHR1cy1cXHUwMDNlZXh0cmEgPSBremFsbG9jX29iaihzdHJ1Y3QgYWxhdWRhX2luZm8sIEdGUF9OT0lPKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNTctXFx0aWYgKCF1cy1cXHUwMDNlZXh0cmEpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNTktXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTYwOlxcdGluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIHVzLVxcdTAwM2VleHRyYTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNjE6XFx0dXMtXFx1MDAzZWV4dHJhX2Rlc3RydWN0b3IgPSBhbGF1ZGFfaW5mb19kZXN0cnVjdG9yO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE2Mi1cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE2OS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNzA6c3RhdGljIGludCBhbGF1ZGFfdHJhbnNwb3J0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYiwgc3RydWN0IHVzX2RhdGEgKnVzKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE3MS17XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTcyLVxcdGludCByYztcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNzM6XFx0c3RydWN0IGFsYXVkYV9pbmZvICppbmZvID0gKHN0cnVjdCBhbGF1ZGFfaW5mbyAqKSB1cy1cXHUwMDNlZXh0cmE7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTc0LVxcdHVuc2lnbmVkIGNoYXIgKnB0ciA9IHVzLVxcdTAwM2Vpb2J1ZjtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE4Ny1cXHRcXHR1c2Jfc3Rvcl9kYmcodXMsIFxcXCJURVNUX1VOSVRfUkVBRFlcXFxcblxcXCIpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE4ODpcXHRcXHRyZXR1cm4gYWxhdWRhX2NoZWNrX21lZGlhKHVzKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExODktXFx0fVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTk0LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE5NTpcXHRcXHRyYyA9IGFsYXVkYV9jaGVja19tZWRpYSh1cyk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTk2LVxcdFxcdGlmIChyYyAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTIxNS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyMTY6XFx0XFx0cmMgPSBhbGF1ZGFfY2hlY2tfbWVkaWEodXMpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTIxNy1cXHRcXHRpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyMjYtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjI3OlxcdFxcdHJldHVybiBhbGF1ZGFfcmVhZF9kYXRhKHVzLCBwYWdlLCBwYWdlcyk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjI4LVxcdH1cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTIzMi1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyMzM6XFx0XFx0cmMgPSBhbGF1ZGFfY2hlY2tfbWVkaWEodXMpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTIzNC1cXHRcXHRpZiAocmMgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyNDMtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjQ0OlxcdFxcdHJldHVybiBhbGF1ZGFfd3JpdGVfZGF0YSh1cywgcGFnZSwgcGFnZXMpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI0NS1cXHR9XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyNzYtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjc3OnN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGFsYXVkYV9ob3N0X3RlbXBsYXRlO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI3OC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyNzk6c3RhdGljIGludCBhbGF1ZGFfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjgwLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyODUtXFx0cmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKFxcdTAwMjZ1cywgaW50ZiwgaWQsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjg2OlxcdFxcdFxcdChpZCAtIGFsYXVkYV91c2JfaWRzKSArIGFsYXVkYV91bnVzdWFsX2Rldl9saXN0LFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTI4NzpcXHRcXHRcXHRcXHUwMDI2YWxhdWRhX2hvc3RfdGVtcGxhdGUpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI4OC1cXHRpZiAocmVzdWx0KVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjkxLVxcdHVzLVxcdTAwM2V0cmFuc3BvcnRfbmFtZSAgPSBcXFwiQWxhdWRhIENvbnRyb2wvQnVsa1xcXCI7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjkyOlxcdHVzLVxcdTAwM2V0cmFuc3BvcnQgPSBhbGF1ZGFfdHJhbnNwb3J0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI5My1cXHR1cy1cXHUwMDNldHJhbnNwb3J0X3Jlc2V0ID0gdXNiX3N0b3JfQnVsa19yZXNldDtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI5OS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEzMDA6c3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFsYXVkYV9kcml2ZXIgPSB7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMzAxLVxcdC5uYW1lID1cXHRcXHREUlZfTkFNRSxcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEzMDI6XFx0LnByb2JlID1cXHRhbGF1ZGFfcHJvYmUsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMzAzLVxcdC5kaXNjb25uZWN0ID1cXHR1c2Jfc3Rvcl9kaXNjb25uZWN0LFxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMzA4LVxcdC5wb3N0X3Jlc2V0ID1cXHR1c2Jfc3Rvcl9wb3N0X3Jlc2V0LFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTMwOTpcXHQuaWRfdGFibGUgPVxcdGFsYXVkYV91c2JfaWRzLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTMxMC1cXHQuc29mdF91bmJpbmQgPVxcdDEsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEzMTMtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMzE0Om1vZHVsZV91c2Jfc3Rvcl9kcml2ZXIoYWxhdWRhX2RyaXZlciwgYWxhdWRhX2hvc3RfdGVtcGxhdGUsIERSVl9OQU1FKTtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9hbGF1ZGEuaD05PVVOVVNVQUxfREVWKCAgMHgwNTg0LCAweDAwMDgsIDB4MDEwMiwgMHgwMTAyLFxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2FsYXVkYS5oLTExLVxcdFxcdFxcXCJEUEMtUjEgKEFsYXVkYSlcXFwiLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9hbGF1ZGEuaDoxMjpcXHRcXHRVU0JfU0NfU0NTSSwgVVNCX1BSX0FMQVVEQSwgaW5pdF9hbGF1ZGEsIDApLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9hbGF1ZGEuaC0xMy1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfYWxhdWRhLmg9MTQ9VU5VU1VBTF9ERVYoICAweDA3YjQsIDB4MDEwYSwgMHgwMTAyLCAweDAxMDIsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfYWxhdWRhLmgtMTYtXFx0XFx0XFxcIk1BVVNCLTEwIChBbGF1ZGEpXFxcIixcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfYWxhdWRhLmg6MTc6XFx0XFx0VVNCX1NDX1NDU0ksIFVTQl9QUl9BTEFVREEsIGluaXRfYWxhdWRhLCAwKSxcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfYWxhdWRhLmgtMTgtXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VzdWFsLXRhYmxlcy5jPTU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWdub3JlX2VudHJ5IGlnbm9yZV9pZHNbXSA9IHtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VzdWFsLXRhYmxlcy5jOjU3OiNcXHRpbmNsdWRlIFxcXCJ1bnVzdWFsX2FsYXVkYS5oXFxcIlxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvdXN1YWwtdGFibGVzLmMtNTgtI1xcdGluY2x1ZGUgXFxcInVudXN1YWxfY3lwcmVzcy5oXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0ODo0Ni44MTM3MzU1NjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjM4NDUxNzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipLY29uZmlnIERlcGVuZGVuY3kgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBgVVNCX1NUT1JBR0VfQUxBVURBYCBhbmQgbWFrZSBzdXJlIGl0J3MgcHJvcGVybHkgY29uZmlndXJlZC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGBLY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIHRob3JvdWdobHkuIEFyZSB0aGVyZSBhbnkgaGlkZGVuIGdvdGNoYXMsIG9ic2N1cmUgc2V0dGluZ3MsIG9yIHBsYXRmb3JtLXNwZWNpZmljIHByZXJlcXVpc2l0ZXMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgY29uZmxpY3RzIEkgbmVlZCB0byBmbGFnPyBBcmUgdGhlcmUgYW55IGRlZmF1bHQgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSBvdmVycmlkZGVuIGZvciB0aGUgc3BlY2lmaWMgdXNlIGNhc2U/IEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gdHJhY2UgZG93biBlYWNoIGRlcGVuZGVuY3ksIG5vdCBqdXN0IHRoZSBkaXJlY3Qgb25lcywgYnV0IHRoZSB0cmFuc2l0aXZlIG9uZXMgYXMgd2VsbC4gVGhpcyBpc24ndCBqdXN0IGFib3V0IG1ha2luZyBzdXJlIGl0IGNvbXBpbGVzOyBpdCdzIGFib3V0IG1ha2luZyBzdXJlIGl0ICpiZWhhdmVzKiBjb3JyZWN0bHksIHdpdGggbWluaW1hbCBzdXJwcmlzZXMsIG9uIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUuIEkgbmVlZCB0byBhbnRpY2lwYXRlIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9uIHBvd2VyIGNvbnN1bXB0aW9uLCBwZXJmb3JtYW5jZSwgYW5kIG92ZXJhbGwgc3lzdGVtIHN0YWJpbGl0eSBiYXNlZCBvbiBpdHMgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBVU0Igc3Vic3lzdGVtcyBhbmQgc3RvcmFnZSBkcml2ZXJzLiBTbywgYEtjb25maWdgIGZpcnN0LCB0aGVuIGEgZGVlcGVyIGRpdmUgaW50byB0aGUgY29kZSBpZiBhbnl0aGluZyBsb29rcyBzdXNwaWNpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjc4NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjQ4OjQ5LjA1MjE5MTAwM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNzExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdFxcdHRyaXN0YXRlIFxcXCJMZXhhciBKdW1wc2hvdCBDb21wYWN0IEZsYXNoIFJlYWRlclxcXCJcXG4gMTIxOlxcdFxcdGhlbHBcXG4gMTIyOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBMZXhhciBKdW1wc2hvdFxcbiAxMjM6XFx0XFx0ICBVU0IgQ29tcGFjdEZsYXNoIHJlYWRlci5cXG4gMTI0OlxcdFxcbiAxMjU6XFx0XFx0ICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtanVtcHNob3QuXFxuIDEyNjpcXHRcXG4gMTI3OlxcdGNvbmZpZyBVU0JfU1RPUkFHRV9BTEFVREFcXG4gMTI4OlxcdFxcdHRyaXN0YXRlIFxcXCJPbHltcHVzIE1BVVNCLTEwL0Z1amkgRFBDLVIxIHN1cHBvcnRcXFwiXFxuIDEyOTpcXHRcXHRoZWxwXFxuIDEzMDpcXHRcXHQgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgT2x5bXB1cyBNQVVTQi0xMFxcbiAxMzE6XFx0XFx0ICBhbmQgRnVqaWZpbG0gRFBDLVIxIFVTQiBDYXJkIHJlYWRlci93cml0ZXIgZGV2aWNlcy5cXG4gMTMyOlxcdFxcbiAxMzM6XFx0XFx0ICBUaGVzZSBkZXZpY2VzIGFyZSBiYXNlZCBvbiB0aGUgQWxhdWRhIGNoaXAgYW5kIHN1cHBvcnQgYm90aFxcbiAxMzQ6XFx0XFx0ICBYRCBhbmQgU21hcnRNZWRpYSBjYXJkcy5cXG4gMTM1OlxcdFxcbiAxMzY6XFx0XFx0ICBJZiB0aGlzIGRyaXZlciBpcyBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBuYW1lZCB1bXMtYWxhdWRhLlxcbiAxMzc6XFx0XFxuIDEzODpcXHRjb25maWcgVVNCX1NUT1JBR0VfT05FVE9VQ0hcXG4gMTM5OlxcdFxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IE9uZVRvdWNoIEJ1dHRvbiBvbiBNYXh0b3IgSGFyZCBEcml2ZXNcXFwiXFxuIDE0MDpcXHRcXHRkZXBlbmRzIG9uIElOUFVUPXkgfHwgSU5QVVQ9VVNCX1NUT1JBR0VcXG4gMTQxOlxcdFxcdGhlbHBcXG4gMTQyOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBNYXh0b3IgT25lVG91Y2hcXG4gMTQzOlxcdFxcdCAgVVNCIGhhcmQgZHJpdmUncyBvbmV0b3VjaCBidXR0b24uXFxuIDE0NDpcXHRcXG4gMTQ1OlxcdFxcdCAgVGhpcyBjb2RlIHJlZ2lzdGVycyB0aGUgYnV0dG9uIG9uIHRoZSBmcm9udCBvZiBNYXh0b3IgT25lVG91Y2ggVVNCXFxuIDE0NjpcXHRcXHQgIGhhcmQgZHJpdmUncyBhcyBhbiBpbnB1dCBkZXZpY2UuIEFuIGFjdGlvbiBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoXFxuIDE0NzpcXHRcXHQgIHRoaXMgaW5wdXQgaW4gYW55IGtleWJpbmRpbmcgc29mdHdhcmUuIChlLmcuIGdub21lJ3Mga2V5Ym9hcmQgc2hvcnQtXFxuIDE0ODpcXHRcXHQgIGN1dHMpXFxuIDE0OTpcXHRcXG4gMTUwOlxcdFxcdCAgSWYgdGhpcyBkcml2ZXIgaXMgY29tcGlsZWQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgbmFtZWQgdW1zLW9uZXRvdWNoLlxcbiAxNTE6XFx0XFxuIDE1MjpcXHRjb25maWcgVVNCX1NUT1JBR0VfS0FSTUFcXG4gMTUzOlxcdFxcdHRyaXN0YXRlIFxcXCJTdXBwb3J0IGZvciBSaW8gS2FybWEgbXVzaWMgcGxheWVyXFxcIlxcbiAxNTQ6XFx0XFx0aGVscFxcbiAxNTU6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgYWRkaXRpb25hbCBjb2RlIHRvIHN1cHBvcnQgdGhlIFJpbyBLYXJtYVxcbiAxNTY6XFx0XFx0ICBVU0IgaW50ZXJmYWNlLlxcbiAxNTc6XFx0XFxuIDE1ODpcXHRcXHQgIFRoaXMgY29kZSBwbGFjZXMgdGhlIFJpbyBLYXJtYSBpbnRvIG1hc3Mgc3RvcmFnZSBtb2RlLCBlbmFibGluZ1xcbiAxNTk6XFx0XFx0ICBpdCB0byBiZSBtb3VudGVkIGFzIGFuIG9yZGluYXJ5IGZpbGVzeXN0ZW0uIFBlcmZvcm1pbmcgYW4gZWplY3RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDg6NDkuMDUyMzAyMzgzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUzNDY1Nzg0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqQ2hlY2tpbmcgdGhlIEZvdW5kYXRpb24gZm9yIFVTQiBTdG9yYWdlIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGludG8gdGhpcyBgVVNCX1NUT1JBR0VfQUxBVURBYCBvcHRpb24sIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBXaGVyZSBkb2VzIHRoaXMgZml0IGluIHRoZSBvdmVyYWxsIHBpY3R1cmU/IFRoZSBmaXJzdCwgYW5kIG1vc3Qgb2J2aW91cywgcGxhY2UgdG8gbG9vayBpcyB0aGUgcGFyZW50IGNvbmZpZ3VyYXRpb24gZmlsZS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGV4YW1pbmUgdGhlIGJlZ2lubmluZyBvZiBgZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgYnJvYWRlciBmcmFtZXdvcmsgYW5kIHJldmVhbCBhbnkgaW1tZWRpYXRlIGRlcGVuZGVuY2llcyBvciByZWxldmFudCB1cHN0cmVhbSBzZXR0aW5ncyB0aGF0IGdvdmVybiBob3cgYFVTQl9TVE9SQUdFX0FMQVVEQWAgaXMgZGVmaW5lZCBhbmQgdXNlZC4gVW5kZXJzdGFuZGluZyB0aGUgcGFyZW50IGNvbmZpZ3VyYXRpb24gaXMgZnVuZGFtZW50YWwgdG8gZ3Jhc3BpbmcgdGhlIGludGVudCBiZWhpbmQgdGhpcyBzcGVjaWZpYyBzZXR0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzcyNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDg6NTIuNTg2OTYyMDk5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBVU0IgU3RvcmFnZSBkcml2ZXIgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb21tZW50IFxcXCJOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvXFxcIlxcbiAgIDc6XFx0XFxuICAgODpcXHRjb25maWcgVVNCX1NUT1JBR0VcXG4gICA5OlxcdFxcdHRyaXN0YXRlIFxcXCJVU0IgTWFzcyBTdG9yYWdlIHN1cHBvcnRcXFwiXFxuICAxMDpcXHRcXHRkZXBlbmRzIG9uIFNDU0lcXG4gIDExOlxcdFxcdGhlbHBcXG4gIDEyOlxcdFxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IFVTQiBtYXNzIHN0b3JhZ2UgZGV2aWNlcyB0byB5b3VyXFxuICAxMzpcXHRcXHQgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFRoaXMgaXMgdGhlIGRyaXZlciB5b3UgbmVlZCBmb3IgVVNCXFxuICAxNDpcXHRcXHQgIGZsb3BweSBkcml2ZXMsIFVTQiBoYXJkIGRpc2tzLCBVU0IgdGFwZSBkcml2ZXMsIFVTQiBDRC1ST01zLFxcbiAgMTU6XFx0XFx0ICBVU0IgZmxhc2ggZGV2aWNlcywgYW5kIG1lbW9yeSBzdGlja3MsIGFsb25nIHdpdGhcXG4gIDE2OlxcdFxcdCAgc2ltaWxhciBkZXZpY2VzLiBUaGlzIGRyaXZlciBtYXkgYWxzbyBiZSB1c2VkIGZvciBzb21lIGNhbWVyYXNcXG4gIDE3OlxcdFxcdCAgYW5kIGNhcmQgcmVhZGVycy5cXG4gIDE4OlxcdFxcbiAgMTk6XFx0XFx0ICBUaGlzIG9wdGlvbiBkZXBlbmRzIG9uICdTQ1NJJyBzdXBwb3J0IGJlaW5nIGVuYWJsZWQsIGJ1dCB5b3VcXG4gIDIwOlxcdFxcdCAgcHJvYmFibHkgYWxzbyBuZWVkICdTQ1NJIGRldmljZSBzdXBwb3J0OiBTQ1NJIGRpc2sgc3VwcG9ydCdcXG4gIDIxOlxcdFxcdCAgKEJMS19ERVZfU0QpIGZvciBtb3N0IFVTQiBzdG9yYWdlIGRldmljZXMuXFxuICAyMjpcXHRcXG4gIDIzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAyNDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2Itc3RvcmFnZS5cXG4gIDI1OlxcdFxcbiAgMjY6XFx0aWYgVVNCX1NUT1JBR0VcXG4gIDI3OlxcdFxcbiAgMjg6XFx0Y29uZmlnIFVTQl9TVE9SQUdFX0RFQlVHXFxuICAyOTpcXHRcXHRib29sIFxcXCJVU0IgTWFzcyBTdG9yYWdlIHZlcmJvc2UgZGVidWdcXFwiXFxuICAzMDpcXHRcXHRoZWxwXFxuICAzMTpcXHRcXHQgIFNheSBZIGhlcmUgaW4gb3JkZXIgdG8gaGF2ZSB0aGUgVVNCIE1hc3MgU3RvcmFnZSBjb2RlIGdlbmVyYXRlXFxuICAzMjpcXHRcXHQgIHZlcmJvc2UgZGVidWdnaW5nIG1lc3NhZ2VzLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRjb25maWcgVVNCX1NUT1JBR0VfUkVBTFRFS1xcbiAgMzU6XFx0XFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgQ2FyZCBSZWFkZXIgc3VwcG9ydFxcXCJcXG4gIDM2OlxcdFxcdGhlbHBcXG4gIDM3OlxcdFxcdCAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgY29kZSB0byBzdXBwb3J0IHRoZSBwb3dlci1zYXZpbmcgZnVuY3Rpb25cXG4gIDM4OlxcdFxcdCAgZm9yIFJlYWx0ZWsgUlRTNTF4eCBVU0IgY2FyZCByZWFkZXJzLlxcbiAgMzk6XFx0XFxuICA0MDpcXHRcXHQgIElmIHRoaXMgZHJpdmVyIGlzIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIG5hbWVkIHVtcy1yZWFsdGVrLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0ODo1Mi41ODcwMzg1MzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDk5MjU2MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFVTQiBTdG9yYWdlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gd2UncmUgZGlnZ2luZyBpbnRvIHRoZSBVU0Igc3RvcmFnZSBjb25maWd1cmF0aW9uLCBhbmQgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFzc3VtcHRpb25zLCBsZXQncyB0YWtlIGEgcXVpY2sgZGV0b3VyLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIG9mIHRoZSBmb3VuZGF0aW9uYWwgVVNCIHN1cHBvcnQuIEl0J3Mgc2Vjb25kIG5hdHVyZSwgcmVhbGx5LCBidXQgYmV0dGVyIHRvIGJlIG1ldGljdWxvdXMuIEkgc2hvdWxkIGNoZWNrIHRoZSBgZHJpdmVycy91c2IvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY29uZmlybSB3aGF0IGBkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWdgIGRlcGVuZHMgb24uIFRoaW5ncyBsaWtlIHRoZSBicm9hZCBgVVNCX1NVUFBPUlRgIG9wdGlvbiBhbmQgdGhlIG1vcmUgZnVuZGFtZW50YWwgYFVTQmAgb3B0aW9uIGFyZSBwcm9iYWJseSBpbnZvbHZlZCwgYnV0IEkgd2FudCB0byB2ZXJpZnkgdGhhdC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNsZWFyZXN0IHBpY3R1cmUgb2YgdGhlIHByZWNvbmRpdGlvbnMgYW5kIGVuc3VyZSBhbnkgY2hhbmdlcyBJIG1ha2UgYXJlIHByb3Blcmx5IHNjb3BlZCB3aXRoaW4gdGhlIHdpZGVyIFVTQiBzdWJzeXN0ZW0uIEdldHRpbmcgdGhpcyByaWdodCBmcm9tIHRoZSBvdXRzZXQgcHJldmVudHMgZG93bnN0cmVhbSBoZWFkYWNoZXMsIHlvdSBrbm93LCB0aGUgdXN1YWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDk0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0ODo1NC42ODYyOTY4MTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzEzNjIyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UuKmRyaXZlcnMvdXNiL3N0b3JhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvS2NvbmZpZz0xMTQ9c291cmNlIFxcXCJkcml2ZXJzL3VzYi9jbGFzcy9LY29uZmlnXFxcIlxcbmRyaXZlcnMvdXNiL0tjb25maWctMTE1LVxcbmRyaXZlcnMvdXNiL0tjb25maWc6MTE2OnNvdXJjZSBcXFwiZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvdXNiL0tjb25maWctMTE3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0ODo1NC43OTk0MzgyNTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA0NjQxMjc3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGJhc2VkIG9uIHRoZSBwcm92aWRlZCB0aG91Z2h0OlxuXG4qKkRpdmluZyBpbnRvIFVTQiBEcml2ZXIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIFVTQiBkcml2ZXIgY29uZmlndXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgb3V0IHRoZSBgZHJpdmVycy91c2IvS2NvbmZpZ2AgZmlsZSwgZm9jdXNpbmcgb24gbGluZXMgcm91Z2hseSBhcm91bmQgMTEwLTEyMC4gSSdtIHByb2JhYmx5IGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgb3B0aW9uIG9yIGRlcGVuZGVuY3ksIG1heWJlIHNvbWV0aGluZyByZWxhdGVkIHRvIGEgbmV3IGRldmljZSBjbGFzcyBJJ20gaW50ZWdyYXRpbmcsIG9yIHBlcmhhcHMgSSdtIGRlYnVnZ2luZyBhIGNvbmZpZ3VyYXRpb24gaXNzdWUuIFdoYXRldmVyIHRoZSByZWFzb24sIHRoYXQgc2VjdGlvbiBpcyBsaWtlbHkgd2hlcmUgdGhlIHJlbGV2YW50IG9wdGlvbnMgZm9yIHRoZSBtb2R1bGUgSSdtIHdvcmtpbmcgd2l0aCBhcmUgZGVmaW5lZCwgb3Igd2hlcmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgc3RhdGVkLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDgzNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjQ4OjU2Ljg0NTg1NDAyM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDA6XFx0XFx0ICBhbmQgbGF0ZXIgc291dGggYnJpZGdlIGltcGxlbWVudGF0aW9ucy4gVGhlc2UgYXJlIGNvbW1vbiBvbiB4ODYgUENzXFxuIDEwMTpcXHRcXHQgIHdpdGggQU1EIENQVXMgYnV0IHJhcmVseSB1c2VkIGVsc2V3aGVyZSwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGEgZmV3XFxuIDEwMjpcXHRcXHQgIHBvd2VycGMgYW5kIG1pcHMgZGVza3RvcCBtYWNoaW5lcy5cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0aWYgVVNCXFxuIDEwNTpcXHRcXG4gMTA2OlxcdHNvdXJjZSBcXFwiZHJpdmVycy91c2IvY29yZS9LY29uZmlnXFxcIlxcbiAxMDc6XFx0XFxuIDEwODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvdXNiL21vbi9LY29uZmlnXFxcIlxcbiAxMDk6XFx0XFxuIDExMDpcXHRzb3VyY2UgXFxcImRyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZ1xcXCJcXG4gMTExOlxcdFxcbiAxMTI6XFx0c291cmNlIFxcXCJkcml2ZXJzL3VzYi9yZW5lc2FzX3VzYmhzL0tjb25maWdcXFwiXFxuIDExMzpcXHRcXG4gMTE0OlxcdHNvdXJjZSBcXFwiZHJpdmVycy91c2IvY2xhc3MvS2NvbmZpZ1xcXCJcXG4gMTE1OlxcdFxcbiAxMTY6XFx0c291cmNlIFxcXCJkcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWdcXFwiXFxuIDExNzpcXHRcXG4gMTE4OlxcdHNvdXJjZSBcXFwiZHJpdmVycy91c2IvaW1hZ2UvS2NvbmZpZ1xcXCJcXG4gMTE5OlxcdFxcbiAxMjA6XFx0c291cmNlIFxcXCJkcml2ZXJzL3VzYi91c2JpcC9LY29uZmlnXFxcIlxcbiAxMjE6XFx0XFxuIDEyMjpcXHRlbmRpZlxcbiAxMjM6XFx0XFxuIDEyNDpcXHRjb21tZW50IFxcXCJVU0IgZHVhbC1tb2RlIGNvbnRyb2xsZXIgZHJpdmVyc1xcXCJcXG4gMTI1OlxcdFxcbiAxMjY6XFx0c291cmNlIFxcXCJkcml2ZXJzL3VzYi9jZG5zMy9LY29uZmlnXFxcIlxcbiAxMjc6XFx0XFxuIDEyODpcXHRzb3VyY2UgXFxcImRyaXZlcnMvdXNiL2ZvdGcyMTAvS2NvbmZpZ1xcXCJcXG4gMTI5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0ODo1Ni44NDYwMjY1MDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzA2Njk5MDA1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbGF1ZGEgVVNCIFN0b3JhZ2UgRHJpdmVyIEFuYWx5c2lzIFx1MDAyNiBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gYFVTQl9TVE9SQUdFX0FMQVVEQWAgaXMgYnVpbHQgb24gYSBkZXBlbmRlbmN5IGNoYWluOiBpdCBuZWVkcyBgVVNCX1NUT1JBR0VgIHdoaWNoLCBpbiB0dXJuLCBoaW5nZXMgb24gYFNDU0lgLCBhbmQgZmluYWxseSBgVVNCYCwgbG9jYXRlZCBpbiBgZHJpdmVycy91c2IvS2NvbmZpZ2AgdW5kZXIgdGhlIGBpZiBVU0JgIGNvbmRpdGlvbi4gIFRoZSBrZXkgcXVlc3Rpb24gaXMgYWx3YXlzIHdoZXRoZXIgd2UgY2FuIGhpdCB0aGVzZSBkcml2ZXJzIHZpYSBmdXp6aW5nLCBhbmQgdGhlIGFuc3dlciBoZXJlIGlzIGEgcmVzb3VuZGluZyAqeWVzKi4gU3l6a2FsbGVyIGlzIGtub3duIGZvciBpdHMgZXh0ZW5zaXZlIGZ1enppbmcgb2YgVVNCIGRyaXZlcnMsIGhlYXZpbHkgbGV2ZXJhZ2luZyByYXctZ2FkZ2V0IGFuZCBkdW1teV9oY2QgZW11bGF0aW9uLlxuXG5NeSBwcmltYXJ5IGdvYWwgbm93IGlzIHRvIGRldGVybWluZSB0aGUgcmVhY2hhYmlsaXR5IG9mIHRoaXMgYGFsYXVkYWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgd2hldGhlciBpdCBjYW4gYmUgdHJpZ2dlcmVkIGJ5IGVpdGhlciBVU0IgZ2FkZ2V0IGVtdWxhdGlvbiBvciBieSBpc3N1aW5nIFNDU0kgY29tbWFuZHMuICBJdCBzZWVtcyB3aGVuIGEgVVNCIGRldmljZSB3aXRoIGEgdmVuZG9yIElEL3Byb2R1Y3QgSUQgKFZJRC9QSUQpIHRoYXQgbWF0Y2hlcyBlbnRyaWVzIGluIGBhbGF1ZGFfdXNiX2lkc2AgKGxpa2UgYDA1ODQ6MDAwOGAgb3IgYDA3YjQ6MDEwYWApIGlzIFwiY29ubmVjdGVkXCIg4oCTIHZpYSBlbXVsYXRpb24sIG9mIGNvdXJzZSDigJMgYGFsYXVkYV9wcm9iZWAgZ2V0cyBjYWxsZWQuICBUaGF0J3Mgb3VyIGVudHJ5IHBvaW50LiBGb2xsb3dpbmcgdGhhdCwgU0NTSSBjb21tYW5kcyBpc3N1ZWQgdG8gdGhlIG1hc3Mgc3RvcmFnZSBkZXZpY2UgZW11bGF0ZSB0aGUgVVNCIGNvbm5lY3Rpb24sIGFuZCBzaG91bGQgaW52b2tlIGBhbGF1ZGFfdHJhbnNwb3J0YCwgd2hpY2ggaXMgdGhlIGtleSBmdW5jdGlvbiBiZWNhdXNlIGl0IGluIHR1cm4gY2FsbHMgY3JpdGljYWwgcm91dGluZXMgbGlrZSBgYWxhdWRhX2NoZWNrX21lZGlhYCwgYGFsYXVkYV9pbml0X21lZGlhYCwgYGFsYXVkYV9yZWFkX2RhdGFgLCBgYWxhdWRhX3dyaXRlX2RhdGFgLCBgYWxhdWRhX3dyaXRlX2xiYWAsIGFuZCBzbyBvbi5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB2YWx1ZSBsaWVzLiAgSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBmaXhlcyBhbmQgY2hhbmdlcyB0aGF0IHdlcmUgZG9uZTpcblxuMS4gIGBtZWRpYV9pbml0aWFsaXplZGAgaGFzIGJlZW4gbW92ZWQgZnJvbSB0aGUgYHN0cnVjdCBhbGF1ZGFfaW5mb2AgdG8gYHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mb2AuXG4yLiAgSW4gYGFsYXVkYV9mcmVlX21hcHNgLCB0aGUgcGF0Y2ggbm93IGZyZWVzIHRoZSBvdXRlciBhcnJheXMgb2YgYG1lZGlhX2luZm8tXHUwMDNlbGJhX3RvX3BiYWAgYW5kIGBtZWRpYV9pbmZvLVx1MDAzZXBiYV90b19sYmFgIGFuZCBzZXRzIHRoZW0gdG8gYE5VTExgLCBpbiBhZGRpdGlvbiB0byByZXNldHRpbmcgY2FwYWNpdHkgYW5kIHV6b25lc2l6ZSB0byAwLiBQcmV2aW91c2x5LCBpdCB3YXMgb25seSB0aGUgaW5uZXIgYXJyYXlzLiBUaGlzIGluZGljYXRlcyBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIHN0YWxlIHBvaW50ZXIgaXNzdWVzIHdlcmUgcHJlc2VudCBhbmQgY29ycmVjdGVkLlxuMy4gIEVycm9yIGhhbmRsaW5nIGluIGBhbGF1ZGFfaW5pdF9tZWRpYWAgaGFzIGJlZW4gaW1wcm92ZWQsIHdpdGggYGFsYXVkYV9mcmVlX21hcHMoXHUwMDI2TUVESUFfSU5GTyh1cykpYCBiZWluZyBjYWxsZWQgb24gZmFpbHVyZS5cbjQuICBgYWxhdWRhX2NoZWNrX21lZGlhYCBpcyBub3cgbW9yZSByb2J1c3QuIE9uIGRldGVjdGlvbiBvZiBubyBtZWRpYSwgb3IgYSBtZWRpYSBjaGFuZ2UsIGl0IGNhbGxzIGBhbGF1ZGFfZnJlZV9tYXBzYCBhbmQgcmVzZXRzIGBtZWRpYV9pbmZvLVx1MDAzZW1lZGlhX2luaXRpYWxpemVkYCB0byBgZmFsc2VgLlxuNS4gIGBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZWAgaGFzIGFkZGVkIGNydWNpYWwgY2hlY2tzIHRvIHNlZSBpZiBgbGJhX3RvX3BiYWAgb3IgYHBiYV90b19sYmFgIGlzIE5VTEwuIEl0IGFsc28gbm93IHJldHVybnMgYSBgVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SYCBpbiB0aGlzIGNhc2UsIG9yIGNhbGxzIGBhbGF1ZGFfcmVhZF9tYXBgLiBQcmV2aW91c2x5IGl0IHJldHVybmVkIGB2b2lkYC5cbjYuICBgYWxhdWRhX3dyaXRlX2xiYWAsIGBhbGF1ZGFfcmVhZF9kYXRhYCwgYW5kIGBhbGF1ZGFfd3JpdGVfZGF0YWAgaGF2ZSBhZGRpdGlvbmFsIGRpdmlzaW9uLWJ5LXplcm8gY2hlY2tzIChgIXV6b25lc2l6ZWApIGFuZCBhbHNvIGNoZWNrcyB0aGUgcmV0dXJuIHZhbHVlcyBvZiB0aGUgY2FsbGVkIGZ1bmN0aW9uLlxuXG5UaGUgZ29vZCBuZXdzIGlzIHRoYXQgdGhpcyBjb3JlIGxvZ2ljIGlzIGFsbCBuZWF0bHkgdHVja2VkIGF3YXkgaW4gYGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNgLlxuXG5HaXZlbiB0aGF0IHRoaXMgaXMgYWxsIGFjY2Vzc2libGUgdmlhIFVTQiBlbXVsYXRpb24gd2l0aGluIFFFTVUgYW5kIFN5emthbGxlciAoc3BlY2lmaWNhbGx5IHVzaW5nIGR1bW15X2hjZCBhbmQgcmF3LWdhZGdldCBmb3IgVVNCIGVtdWxhdGlvbiksIG15IGFuYWx5c2lzIHBvaW50cyB0b3dhcmRzIHRoaXMgZHJpdmVyIGJlaW5nICpkZWZpbml0ZWx5KiBgV29ydGhGdXp6aW5nYC5cblxuTm93LCBJIHdpbGwgcHJvY2VlZCB0byBhbmFseXplIHRoZSBhdmFpbGFibGUgc3ltYm9scyB3aXRoaW4gYGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNgLiBMZXQncyBkaWcgaW50byB0aGUgZnVuY3Rpb25zIGRlZmluZWQgdGhlcmUgYW5kIHNlZSB3aGF0IGlzIGF2YWlsYWJsZSBhcyBub24tc3RhdGljLCBleHBvcnRlZCwgb3IgY2FsbGJhY2sgZnVuY3Rpb25zIHdoaWNoIGNhbiBiZSBob29rZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NDUwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDk6MDMuOTEzMDE4NzkzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODM2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNzUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNzU6XFx0fVxcbjEyNzY6XFx0XFxuMTI3NzpcXHRzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhbGF1ZGFfaG9zdF90ZW1wbGF0ZTtcXG4xMjc4OlxcdFxcbjEyNzk6XFx0c3RhdGljIGludCBhbGF1ZGFfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsXFxuMTI4MDpcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbjEyODE6XFx0e1xcbjEyODI6XFx0XFx0c3RydWN0IHVzX2RhdGEgKnVzO1xcbjEyODM6XFx0XFx0aW50IHJlc3VsdDtcXG4xMjg0OlxcdFxcbjEyODU6XFx0XFx0cmVzdWx0ID0gdXNiX3N0b3JfcHJvYmUxKFxcdTAwMjZ1cywgaW50ZiwgaWQsXFxuMTI4NjpcXHRcXHRcXHRcXHQoaWQgLSBhbGF1ZGFfdXNiX2lkcykgKyBhbGF1ZGFfdW51c3VhbF9kZXZfbGlzdCxcXG4xMjg3OlxcdFxcdFxcdFxcdFxcdTAwMjZhbGF1ZGFfaG9zdF90ZW1wbGF0ZSk7XFxuMTI4ODpcXHRcXHRpZiAocmVzdWx0KVxcbjEyODk6XFx0XFx0XFx0cmV0dXJuIHJlc3VsdDtcXG4xMjkwOlxcdFxcbjEyOTE6XFx0XFx0dXMtXFx1MDAzZXRyYW5zcG9ydF9uYW1lICA9IFxcXCJBbGF1ZGEgQ29udHJvbC9CdWxrXFxcIjtcXG4xMjkyOlxcdFxcdHVzLVxcdTAwM2V0cmFuc3BvcnQgPSBhbGF1ZGFfdHJhbnNwb3J0O1xcbjEyOTM6XFx0XFx0dXMtXFx1MDAzZXRyYW5zcG9ydF9yZXNldCA9IHVzYl9zdG9yX0J1bGtfcmVzZXQ7XFxuMTI5NDpcXHRcXHR1cy1cXHUwMDNlbWF4X2x1biA9IDE7XFxuMTI5NTpcXHRcXG4xMjk2OlxcdFxcdHJlc3VsdCA9IHVzYl9zdG9yX3Byb2JlMih1cyk7XFxuMTI5NzpcXHRcXHRyZXR1cm4gcmVzdWx0O1xcbjEyOTg6XFx0fVxcbjEyOTk6XFx0XFxuMTMwMDpcXHRzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYWxhdWRhX2RyaXZlciA9IHtcXG4xMzAxOlxcdFxcdC5uYW1lID1cXHRcXHREUlZfTkFNRSxcXG4xMzAyOlxcdFxcdC5wcm9iZSA9XFx0YWxhdWRhX3Byb2JlLFxcbjEzMDM6XFx0XFx0LmRpc2Nvbm5lY3QgPVxcdHVzYl9zdG9yX2Rpc2Nvbm5lY3QsXFxuMTMwNDpcXHRcXHQuc3VzcGVuZCA9XFx0dXNiX3N0b3Jfc3VzcGVuZCxcXG4xMzA1OlxcdFxcdC5yZXN1bWUgPVxcdHVzYl9zdG9yX3Jlc3VtZSxcXG4xMzA2OlxcdFxcdC5yZXNldF9yZXN1bWUgPVxcdHVzYl9zdG9yX3Jlc2V0X3Jlc3VtZSxcXG4xMzA3OlxcdFxcdC5wcmVfcmVzZXQgPVxcdHVzYl9zdG9yX3ByZV9yZXNldCxcXG4xMzA4OlxcdFxcdC5wb3N0X3Jlc2V0ID1cXHR1c2Jfc3Rvcl9wb3N0X3Jlc2V0LFxcbjEzMDk6XFx0XFx0LmlkX3RhYmxlID1cXHRhbGF1ZGFfdXNiX2lkcyxcXG4xMzEwOlxcdFxcdC5zb2Z0X3VuYmluZCA9XFx0MSxcXG4xMzExOlxcdFxcdC5ub19keW5hbWljX2lkID0gMSxcXG4xMzEyOlxcdH07XFxuMTMxMzpcXHRcXG4xMzE0OlxcdG1vZHVsZV91c2Jfc3Rvcl9kcml2ZXIoYWxhdWRhX2RyaXZlciwgYWxhdWRhX2hvc3RfdGVtcGxhdGUsIERSVl9OQU1FKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDk6MDMuOTEzMTU4NTczWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxNDEzMjM2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgYWxhdWRhLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiBpbiBgYWxhdWRhLmNgLiBGaXJzdCB0aGluZ3MgZmlyc3QsIEknbGwgbmVlZCB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQsIHVuZGVyc3RhbmQgd2hhdCdzIGJlZW4gZGVmaW5lZCBpbiB0ZXJtcyBvZiBzeW1ib2xzLiBWYXJpYWJsZXMsIGNvbnN0YW50cywgc3RydWN0cywgYW5kIHNvIG9uIOKAkyBhIHF1aWNrIHN3ZWVwIG9mIHRoZSBsYW5kc2NhcGUgd2lsbCBnaXZlIG1lIGEgYmFzZWxpbmUuIEZyb20gdGhlcmUsIEknbGwgaG9uZSBpbiBvbiB0aGUgY29yZSBvZiBhbnkgQyBmaWxlOiB0aGUgZnVuY3Rpb25zLiBJJ2xsIHNlYXJjaCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucy4gVGhvc2UgYXJlIHdoZXJlIHRoZSByZWFsIHdvcmsgaGFwcGVucywgYW5kIHdoZXJlIEkgY2FuIHN0YXJ0IHRvIHVuZGVyc3RhbmQgdGhlIHByb2dyYW0ncyBsb2dpYyBhbmQgYmVoYXZpb3IuIEtub3dpbmcgdGhlIGZ1bmN0aW9ucyB3aWxsIGdpdmUgbWUgdGhlIGJ1aWxkaW5nIGJsb2NrcyB0byB1bmRlcnN0YW5kIGhvdyBgYWxhdWRhLmNgIGRvZXMgaXRzIHRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY3OSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDk6MDcuMDU0NDg1MDQ0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTA4NTU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtejAtOV9dKy4qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTEwMz1zdHJ1Y3QgYWxhdWRhX2luZm8ge1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMjItXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjM6c3RhdGljIGludCBpbml0X2FsYXVkYShzdHJ1Y3QgdXNfZGF0YSAqdXMpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI0LVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0xNzc9c3RhdGljIGNvbnN0IHN0cnVjdCBhbGF1ZGFfY2FyZF9pbmZvIGFsYXVkYV9jYXJkX2lkc1tdID0ge1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yMDItXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoyMDM6c3RhdGljIGNvbnN0IHN0cnVjdCBhbGF1ZGFfY2FyZF9pbmZvICphbGF1ZGFfY2FyZF9maW5kX2lkKHVuc2lnbmVkIGNoYXIgaWQpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yMDQte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0yMTg9c3RhdGljIHVuc2lnbmVkIGNoYXIgZWNjMlsyNTZdO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjE5LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MjIwOnN0YXRpYyB2b2lkIG5hbmRfaW5pdF9lY2Modm9pZClcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTIyMS17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTI0NC0vKiBjb21wdXRlIDMtYnl0ZSBlY2Mgb24gMjU2IGJ5dGVzICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoyNDU6c3RhdGljIHZvaWQgbmFuZF9jb21wdXRlX2VjYyh1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBjaGFyICplY2MpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yNDYte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yNjgtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoyNjk6c3RhdGljIGludCBuYW5kX2NvbXBhcmVfZWNjKHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKmVjYylcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTI3MC17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTI3My1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjI3NDpzdGF0aWMgdm9pZCBuYW5kX3N0b3JlX2VjYyh1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBjaGFyICplY2MpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yNzUte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0yODUtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoyODY6c3RhdGljIHZvaWQgYWxhdWRhX2ZyZWVfbWFwcyAoc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICptZWRpYV9pbmZvKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMjg3LXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzE3LSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MzE4OnN0YXRpYyBpbnQgYWxhdWRhX2dldF9tZWRpYV9zdGF0dXMoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBjaGFyICpkYXRhKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzE5LXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzQwLSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MzQxOnN0YXRpYyBpbnQgYWxhdWRhX2Fja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNDIte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNTctICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzozNTg6c3RhdGljIGludCBhbGF1ZGFfZ2V0X21lZGlhX3NpZ25hdHVyZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNTkte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0zNzMtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzozNzQ6c3RhdGljIGludCBhbGF1ZGFfcmVzZXRfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzc1LXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzg5LSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MzkwOnN0YXRpYyBpbnQgYWxhdWRhX2luaXRfbWVkaWEoc3RydWN0IHVzX2RhdGEgKnVzKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMzkxLXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDY4LSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDY5OnN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ3MC17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTUxNC0gKi9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjUxNTpzdGF0aWMgaW50IGFsYXVkYV9jaGVja19zdGF0dXMyKHN0cnVjdCB1c19kYXRhICp1cylcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTUxNi17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU0NC0gKi9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjU0NTpzdGF0aWMgaW50IGFsYXVkYV9nZXRfcmVkdV9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSwgdW5zaWduZWQgY2hhciAqZGF0YSlcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU0Ni17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU2NS0gKi9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjU2NjpzdGF0aWMgdTE2IGFsYXVkYV9maW5kX3VudXNlZF9wYmEoc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICppbmZvLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTY3LVxcdHVuc2lnbmVkIGludCB6b25lKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01ODItICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo1ODM6c3RhdGljIGludCBhbGF1ZGFfcmVhZF9tYXAoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTU4NC17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTcwNi0gKi9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjcwNzpzdGF0aWMgaW50IGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHpvbmUpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03MDgte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03MjEtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3MjI6c3RhdGljIGludCBhbGF1ZGFfZXJhc2VfYmxvY2soc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgcGJhKVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzIzLXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzUwLSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzUxOnN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfYmxvY2tfcmF3KHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSxcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc1Mi1cXHRcXHR1bnNpZ25lZCBpbnQgcGFnZSwgdW5zaWduZWQgaW50IHBhZ2VzLCB1bnNpZ25lZCBjaGFyICpkYXRhKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03NzYtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3Nzc6c3RhdGljIGludCBhbGF1ZGFfcmVhZF9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03NzgtXFx0XFx0dW5zaWduZWQgaW50IHBhZ2UsIHVuc2lnbmVkIGludCBwYWdlcywgdW5zaWduZWQgY2hhciAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODAxLSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODAyOnN0YXRpYyBpbnQgYWxhdWRhX3dyaXRlX2Jsb2NrKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IHBiYSwgdW5zaWduZWQgY2hhciAqZGF0YSlcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgwMy17XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgyOS0gKi9cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgzMDpzdGF0aWMgaW50IGFsYXVkYV93cml0ZV9sYmEoc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgbGJhLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODMxLVxcdFxcdCB1bnNpZ25lZCBpbnQgcGFnZSwgdW5zaWduZWQgaW50IHBhZ2VzLFxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy05NDMtICovXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5NDQ6c3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTQ1LVxcdFxcdHVuc2lnbmVkIGludCBzZWN0b3JzKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDQ3LSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTA0ODpzdGF0aWMgaW50IGFsYXVkYV93cml0ZV9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTA0OS1cXHRcXHR1bnNpZ25lZCBpbnQgc2VjdG9ycylcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTEyOS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExMzA6c3RhdGljIHZvaWQgYWxhdWRhX2luZm9fZGVzdHJ1Y3Rvcih2b2lkICpleHRyYSlcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExMzEte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTQ5LSAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE1MDpzdGF0aWMgaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cylcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNTEte1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTY5LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTE3MDpzdGF0aWMgaW50IGFsYXVkYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTcxLXtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTI3Nz1zdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhbGF1ZGFfaG9zdF90ZW1wbGF0ZTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyNzgtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjc5OnN0YXRpYyBpbnQgYWxhdWRhX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTI4MC1cXHRcXHRcXHQgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz0xMzAwPXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBhbGF1ZGFfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMzEzLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTMxNDptb2R1bGVfdXNiX3N0b3JfZHJpdmVyKGFsYXVkYV9kcml2ZXIsIGFsYXVkYV9ob3N0X3RlbXBsYXRlLCBEUlZfTkFNRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjQ5OjA3LjExNTU3NTYyM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzQ4NDM0NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSdtIHRha2luZyBhIGxvb2sgYXQgdGhlIGBtb2R1bGVfdXNiX3N0b3JfZHJpdmVyYCwgYW5kIEkgd2FudCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGV4YWN0bHkgd2hhdCBpdCdzIHJlc3BvbnNpYmxlIGZvci4gV2hhdCBmdW5jdGlvbmFsaXRpZXMgZG9lcyB0aGlzIG1vZHVsZSBwcm92aWRlPyBXaGF0IFVTQiBzdG9yYWdlIGRldmljZXMgZG9lcyBpdCBoYW5kbGU/IERvZXMgaXQgdXNlIHRoZSBTQ1NJIGNvbW1hbmQgc2V0IG9yIGEgZGlmZmVyZW50IHByb3RvY29sPyBJIGtub3cgaXQncyBhIGRyaXZlciwgb2YgY291cnNlLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBpbnRlZ3JhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCdzIFVTQiBzdWJzeXN0ZW0uIERvZXMgaXQgaGFuZGxlIHF1aXJrcyBmb3IgZGlmZmVyZW50IHN0b3JhZ2UgZGV2aWNlcz8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIGJsb2NrIGxheWVycyBvciB2aXJ0dWFsIGZpbGUgc3lzdGVtcyBkaXJlY3RseT8gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgYXJjaGl0ZWN0dXJlIGFuZCBob3cgaXQgb3JjaGVzdHJhdGVzIHRoZSBwcm9jZXNzIG9mIGRhdGEgdHJhbnNmZXIgYmV0d2VlbiB0aGUgVVNCIHN0b3JhZ2UgZGV2aWNlIGFuZCB0aGUgaG9zdCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMjcxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDk6MDkuODY0MDE0MTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExOTQzOTE2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIG1vZHVsZV91c2Jfc3Rvcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2Ivc3RvcmFnZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oPTE5ND1leHRlcm4gdm9pZCB1c2Jfc3Rvcl9hZGp1c3RfcXVpcmtzKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oLTE5Ni1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oOjE5NzojZGVmaW5lIG1vZHVsZV91c2Jfc3Rvcl9kcml2ZXIoX19kcml2ZXIsIF9fc2h0LCBfX25hbWUpIFxcXFxcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5oLTE5OC1zdGF0aWMgaW50IF9faW5pdCBfX2RyaXZlciMjX2luaXQodm9pZCkgXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0OTowOS45ODM0NjAyNDhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY2OTIzMTk5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbGF1ZGEgVVNCIERyaXZlciBBbmFseXNpcyBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBBbGF1ZGEgVVNCIHN0b3JhZ2UgZHJpdmVyIChgYWxhdWRhLmNgKS4gSSd2ZSBnb25lIHRocm91Z2ggdGhlIGNvZGUgYW5kIGlkZW50aWZpZWQgdGhlIGtleSBmdW5jdGlvbnMgd2UncmUgZGVhbGluZyB3aXRoOiBgYWxhdWRhX3Byb2JlYCwgYGluaXRfYWxhdWRhYCwgYGFsYXVkYV90cmFuc3BvcnRgLCBgYWxhdWRhX3JlYWRfZGF0YWAsIGBhbGF1ZGFfd3JpdGVfZGF0YWAsIGBhbGF1ZGFfY2hlY2tfbWVkaWFgLCBgYWxhdWRhX2luaXRfbWVkaWFgLCBgYWxhdWRhX2ZyZWVfbWFwc2AsIGBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZWAsIGFuZCBgYWxhdWRhX3dyaXRlX2xiYWAuXG5cbk15IGZvY3VzIGlzIG9uIGZ1enppbmcsIHNvIEkndmUgc3BlY2lmaWNhbGx5IGVhcm1hcmtlZCB0aGUgbm9uLWhvdC1wYXRoIGZ1bmN0aW9ucy4gVGhpcyBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgd2lsbCBiZSBjcnVjaWFsIGZvciBndWlkaW5nIHRoZSBmdXp6ZXIuIEkndmUgbmFycm93ZWQgaXQgdG8gYGFsYXVkYV90cmFuc3BvcnRgLCBgYWxhdWRhX3Byb2JlYCwgYGluaXRfYWxhdWRhYCwgYGFsYXVkYV9jaGVja19tZWRpYWAsIGBhbGF1ZGFfcmVhZF9kYXRhYCwgYGFsYXVkYV93cml0ZV9kYXRhYCwgYGFsYXVkYV93cml0ZV9sYmFgLCBhbmQgYGFsYXVkYV9mcmVlX21hcHNgLlxuXG5OZXh0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgbW9kdWxlIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBidWlsZC4gSeKAmXZlIGNoZWNrZWQgdGhlIEtjb25maWcgZmlsZXMsIGFuZCBjb25maXJtZWQgdGhhdCB3ZSBuZWVkIGBVU0JfU1RPUkFHRV9BTEFVREFgLCB3aGljaCBkZXBlbmRzIG9uIGBVU0JfU1RPUkFHRWAsIHdoaWNoIGRlcGVuZHMgb24gYFNDU0lgLCB3aGljaCBpbiB0dXJuLCBpcyBkZXBlbmRlbnQgb24gdGhlIGluY2x1c2lvbiBvZiBgVVNCYCwgd2hpY2ggZGVwZW5kcyBvbiBgVVNCX1NVUFBPUlRgLiBObyBvdGhlciBkZXBlbmRlbmNpZXMgd2VyZSBmb3VuZCBmb3IgYFVTQl9TVE9SQUdFX0FMQVVEQWAuIEkndmUgY29uZmlybWVkIHRoYXQgdGhlc2UgYXJlIHRoZSByZXF1aXJlZCBjb25maWdzLlxuXG5JJ3ZlIGFsc28gcXVpY2tseSB2YWxpZGF0ZWQgdGhhdCB0aGUgYE1ha2VmaWxlYCBlbnRyeSBmb3IgdGhpcyBtb2R1bGUgaXMgcHJvcGVybHkgY29uZmlndXJlZC4gSXQgbG9va3Mgc3RyYWlnaHRmb3J3YXJkLiBUaGUgb2JqZWN0IGZpbGUgYHVtcy1hbGF1ZGEub2AgaXMgYmVpbmcgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkIGFzIGV4cGVjdGVkLlxuXG5GaW5hbGx5LCBJJ20gcmVhZHkgdG8gY3JhZnQgdGhlIGNhbGwgdG8gdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoIGFkZHJlc3NlcyBtZW1vcnkgbWFuYWdlbWVudCwgYm91bmRzIGNoZWNrcywgemVybyBkaXZpc2lvbiBpc3N1ZXMsIGFuZCBtZWRpYSBpbml0aWFsaXphdGlvbiBzdGF0ZSBoYW5kbGluZy4gQWxsIHRoZXNlIGFyZSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcsIGFuZCBhbGwgc2hvdWxkIGJlIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBzdGFuZGFyZCBTQ1NJIGNvbW1hbmQgaW50ZXJhY3Rpb24gd2l0aCBlbXVsYXRlZCBkZXZpY2VzLiBUaGVyZWZvcmUsIFdvcnRoRnV6emluZyBpcyBzZXQgdG8gYHRydWVgLiBJJ3ZlIHByb3ZpZGVkIHRoZSBgRm9jdXNTeW1ib2xzYCBhcyB0aGF0IGNyaXRpY2FsIGxpc3Qgb2YgZnVuY3Rpb25zIGFuZCBjb25maXJtZWQgdGhlIGBFbmFibGVDb25maWdzYC4gSXQncyBhbGwgY2xlYW4gYW5kIHJlYWR5LiBMZXQncyBzZW5kIHRoZSByZXN1bHRzIGFuZCBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU5NywiT3V0cHV0VG9rZW5zIjoxODgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDk6MTUuNjUyNjk0ODExWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwOTg1NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfU1RPUkFHRV9BTEFVREFcIixcbiAgICBcIlVTQl9TVE9SQUdFXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIlNDU0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGF1ZGFfdHJhbnNwb3J0XCIsXG4gICAgXCJhbGF1ZGFfcHJvYmVcIixcbiAgICBcImluaXRfYWxhdWRhXCIsXG4gICAgXCJhbGF1ZGFfY2hlY2tfbWVkaWFcIixcbiAgICBcImFsYXVkYV9yZWFkX2RhdGFcIixcbiAgICBcImFsYXVkYV93cml0ZV9kYXRhXCIsXG4gICAgXCJhbGF1ZGFfd3JpdGVfbGJhXCIsXG4gICAgXCJhbGF1ZGFfZnJlZV9tYXBzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIHplcm8tZGl2aXNpb24gYnVncywgbWVtb3J5IGxlYWtzLCBhbmQgbWVkaWEgaW5pdGlhbGl6YXRpb24gc3RhdGUgaGFuZGxpbmcgYWNyb3NzIHpvbmUgbWFwIGFsbG9jYXRpb25zIGFuZCBJL08gaGFuZGxpbmcgaW4gdGhlIE9seW1wdXMgTUFVU0ItMTAvRnVqaWZpbG0gRFBDLVIxIChBbGF1ZGEpIFVTQiBtYXNzIHN0b3JhZ2UgZHJpdmVyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSB2aWEgVVNCIGVtdWxhdGlvbi9mdXp6aW5nIGZyYW1ld29ya3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX1NUT1JBR0VfQUxBVURBXCIsXG4gICAgXCJVU0JfU1RPUkFHRVwiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJTQ1NJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxhdWRhX3RyYW5zcG9ydFwiLFxuICAgIFwiYWxhdWRhX3Byb2JlXCIsXG4gICAgXCJpbml0X2FsYXVkYVwiLFxuICAgIFwiYWxhdWRhX2NoZWNrX21lZGlhXCIsXG4gICAgXCJhbGF1ZGFfcmVhZF9kYXRhXCIsXG4gICAgXCJhbGF1ZGFfd3JpdGVfZGF0YVwiLFxuICAgIFwiYWxhdWRhX3dyaXRlX2xiYVwiLFxuICAgIFwiYWxhdWRhX2ZyZWVfbWFwc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCB6ZXJvLWRpdmlzaW9uIGJ1Z3MsIG1lbW9yeSBsZWFrcywgYW5kIG1lZGlhIGluaXRpYWxpemF0aW9uIHN0YXRlIGhhbmRsaW5nIGFjcm9zcyB6b25lIG1hcCBhbGxvY2F0aW9ucyBhbmQgSS9PIGhhbmRsaW5nIGluIHRoZSBPbHltcHVzIE1BVVNCLTEwL0Z1amlmaWxtIERQQy1SMSAoQWxhdWRhKSBVU0IgbWFzcyBzdG9yYWdlIGRyaXZlci4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgdmlhIFVTQiBlbXVsYXRpb24vZnV6emluZyBmcmFtZXdvcmtzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0OToxNS43OTM2ODgyMDhaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5NTU4MjY5MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDk6MTUuNzk0MjM1NDc4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mzk1NTc3MTU5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBtZW1vcnkgbGVha3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFuZCBwb3RlbnRpYWwgZGl2aXNpb24tYnktemVybyBlcnJvcnMgaW4gZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy4gU3BlY2lmaWNhbGx5LCBpdCBmcmVlcyB0aGUgb3V0ZXIgcG9pbnRlciBhcnJheXMgaW4gYWxhdWRhX2ZyZWVfbWFwcygpLCBhZGRzIGVycm9yIGNsZWFudXAgaW4gYWxhdWRhX2luaXRfbWVkaWEoKSwgYWRkcyBjaGVja3MgZm9yIE5VTEwgcG9pbnRlcnMgaW4gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoKSwgYWRkcyBjaGVja3MgZm9yIHplcm8gdXpvbmVzaXplIHRvIGF2b2lkIGRpdmlzaW9uIGJ5IHplcm8sIGFuZCBtb3ZlcyBtZWRpYV9pbml0aWFsaXplZCB0byBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8uXFxuXFxuVGhlIHN0cnVjdCBhbGF1ZGFfaW5mbyBjb250YWluaW5nIGFsYXVkYV9tZWRpYV9pbmZvIGlzIGFsbG9jYXRlZCB1c2luZyBremFsbG9jX29iaigpLCBlbnN1cmluZyBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBQQkEvTEJBIG1hcHBpbmcgdGFibGVzIGFyZSBhbGxvY2F0ZWQgdmlhIGtjYWxsb2MuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gU2luY2UgdGhlc2UgY2hhbmdlcyBzdHJpY3RseSBmaXggbWVtb3J5IGxlYWtzIGFuZCBOVUxML3plcm8tY2hlY2sgc2FmZXR5IGlzc3VlcywgdGhleSBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkbyBub3QgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTNhMGE2MDUxYTdiNmYxMmRiNWY4YTUyYmFkYjQ3ZGI4MzUwZjY5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDI4IDIwOjQ4OjM4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmNcbmluZGV4IDY5MWZlNDcwMDljZjYuLmEyYTMzMzQxOWYxZjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jXG4rKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jXG5AQCAtOTYsNiArOTYsOCBAQCBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8ge1xuIFxuIFx0dTE2ICoqbGJhX3RvX3BiYTtcdFx0LyogbG9naWNhbCB0byBwaHlzaWNhbCBibG9jayBtYXAgKi9cbiBcdHUxNiAqKnBiYV90b19sYmE7XHRcdC8qIHBoeXNpY2FsIHRvIGxvZ2ljYWwgYmxvY2sgbWFwICovXG4rXG4rXHRib29sIG1lZGlhX2luaXRpYWxpemVkO1xuIH07XG4gXG4gc3RydWN0IGFsYXVkYV9pbmZvIHtcbkBAIC0xMDUsOCArMTA3LDYgQEAgc3RydWN0IGFsYXVkYV9pbmZvIHtcbiBcdHVuc2lnbmVkIGNoYXIgc2Vuc2Vfa2V5O1xuIFx0dW5zaWduZWQgbG9uZyBzZW5zZV9hc2M7XHQvKiBhZGRpdGlvbmFsIHNlbnNlIGNvZGUgKi9cbiBcdHVuc2lnbmVkIGxvbmcgc2Vuc2VfYXNjcTtcdC8qIGFkZGl0aW9uYWwgc2Vuc2UgY29kZSBxdWFsaWZpZXIgKi9cbi1cbi1cdGJvb2wgbWVkaWFfaW5pdGlhbGl6ZWQ7XG4gfTtcbiBcbiAjZGVmaW5lIHNob3J0X3BhY2sobHNiLG1zYikgKCAoKHUxNikobHNiKSkgfCAoICgodTE2KShtc2IpKVx1MDAzY1x1MDAzYzggKSApXG5AQCAtMjkwLDE3ICsyOTAsMjUgQEAgc3RhdGljIHZvaWQgYWxhdWRhX2ZyZWVfbWFwcyAoc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvICptZWRpYV9pbmZvKVxuIFx0dW5zaWduZWQgaW50IG51bV96b25lcyA9IG1lZGlhX2luZm8tXHUwMDNlY2FwYWNpdHkgXHUwMDNlXHUwMDNlIHNoaWZ0O1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4tXHRpZiAobWVkaWFfaW5mby1cdTAwM2VsYmFfdG9fcGJhICE9IE5VTEwpXG4rXHRpZiAobWVkaWFfaW5mby1cdTAwM2VsYmFfdG9fcGJhICE9IE5VTEwpIHtcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX3pvbmVzOyBpKyspIHtcbiBcdFx0XHRrZnJlZShtZWRpYV9pbmZvLVx1MDAzZWxiYV90b19wYmFbaV0pO1xuIFx0XHRcdG1lZGlhX2luZm8tXHUwMDNlbGJhX3RvX3BiYVtpXSA9IE5VTEw7XG4gXHRcdH1cbitcdFx0a2ZyZWUobWVkaWFfaW5mby1cdTAwM2VsYmFfdG9fcGJhKTtcbitcdFx0bWVkaWFfaW5mby1cdTAwM2VsYmFfdG9fcGJhID0gTlVMTDtcbitcdH1cbiBcbi1cdGlmIChtZWRpYV9pbmZvLVx1MDAzZXBiYV90b19sYmEgIT0gTlVMTClcbitcdGlmIChtZWRpYV9pbmZvLVx1MDAzZXBiYV90b19sYmEgIT0gTlVMTCkge1xuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fem9uZXM7IGkrKykge1xuIFx0XHRcdGtmcmVlKG1lZGlhX2luZm8tXHUwMDNlcGJhX3RvX2xiYVtpXSk7XG4gXHRcdFx0bWVkaWFfaW5mby1cdTAwM2VwYmFfdG9fbGJhW2ldID0gTlVMTDtcbiBcdFx0fVxuK1x0XHRrZnJlZShtZWRpYV9pbmZvLVx1MDAzZXBiYV90b19sYmEpO1xuK1x0XHRtZWRpYV9pbmZvLVx1MDAzZXBiYV90b19sYmEgPSBOVUxMO1xuK1x0fVxuK1x0bWVkaWFfaW5mby1cdTAwM2VjYXBhY2l0eSA9IDA7XG4rXHRtZWRpYV9pbmZvLVx1MDAzZXV6b25lc2l6ZSA9IDA7XG4gfVxuIFxuIC8qXG5AQCAtNDQxLDExICs0NDksMTUgQEAgc3RhdGljIGludCBhbGF1ZGFfaW5pdF9tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4gXHRcdCsgTUVESUFfSU5GTyh1cykuYmxvY2tzaGlmdCArIE1FRElBX0lORk8odXMpLnBhZ2VzaGlmdCk7XG4gXHRNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID0ga2NhbGxvYyhudW1fem9uZXMsIHNpemVvZih1MTYqKSwgR0ZQX05PSU8pO1xuIFx0TUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9IGtjYWxsb2MobnVtX3pvbmVzLCBzaXplb2YodTE2KiksIEdGUF9OT0lPKTtcbi1cdGlmIChNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhID09IE5VTEwgfHwgTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9PSBOVUxMKVxuK1x0aWYgKE1FRElBX0lORk8odXMpLnBiYV90b19sYmEgPT0gTlVMTCB8fCBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhID09IE5VTEwpIHtcbitcdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG4gXHRcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XG4rXHR9XG4gXG4tXHRpZiAoYWxhdWRhX3Jlc2V0X21lZGlhKHVzKSAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpXG4rXHRpZiAoYWxhdWRhX3Jlc2V0X21lZGlhKHVzKSAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpIHtcbitcdFx0YWxhdWRhX2ZyZWVfbWFwcyhcdTAwMjZNRURJQV9JTkZPKHVzKSk7XG4gXHRcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XG4rXHR9XG4gXG4gXHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7XG4gfVxuQEAgLTQ1Nyw2ICs0NjksNyBAQCBzdGF0aWMgaW50IGFsYXVkYV9pbml0X21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbiBzdGF0aWMgaW50IGFsYXVkYV9jaGVja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4ge1xuIFx0c3RydWN0IGFsYXVkYV9pbmZvICppbmZvID0gKHN0cnVjdCBhbGF1ZGFfaW5mbyAqKSB1cy1cdTAwM2VleHRyYTtcbitcdHN0cnVjdCBhbGF1ZGFfbWVkaWFfaW5mbyAqbWVkaWFfaW5mbyA9IFx1MDAyNk1FRElBX0lORk8odXMpO1xuIFx0dW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtXHUwMDNlaW9idWY7XG4gXHRpbnQgcmM7XG4gXG5AQCAtNDcwLDcgKzQ4Myw4IEBAIHN0YXRpYyBpbnQgYWxhdWRhX2NoZWNrX21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcbiBcdGlmICgoc3RhdHVzWzBdIFx1MDAyNiAweDgwKSB8fCAoKHN0YXR1c1swXSBcdTAwMjYgMHgxRikgPT0gMHgxMClcbiBcdFx0fHwgKChzdGF0dXNbMV0gXHUwMDI2IDB4MDEpID09IDApKSB7XG4gXHRcdHVzYl9zdG9yX2RiZyh1cywgXCJObyBtZWRpYSwgb3IgZG9vciBvcGVuXFxuXCIpO1xuLVx0XHRhbGF1ZGFfZnJlZV9tYXBzKFx1MDAyNk1FRElBX0lORk8odXMpKTtcbitcdFx0YWxhdWRhX2ZyZWVfbWFwcyhtZWRpYV9pbmZvKTtcbitcdFx0bWVkaWFfaW5mby1cdTAwM2VtZWRpYV9pbml0aWFsaXplZCA9IGZhbHNlO1xuIFx0XHRpbmZvLVx1MDAzZXNlbnNlX2tleSA9IDB4MDI7XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2VfYXNjID0gMHgzQTtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9hc2NxID0gMHgwMDtcbkBAIC00NzgsMTIgKzQ5MiwxMyBAQCBzdGF0aWMgaW50IGFsYXVkYV9jaGVja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXG4gXHR9XG4gXG4gXHQvKiBDaGVjayBmb3IgbWVkaWEgY2hhbmdlICovXG4tXHRpZiAoc3RhdHVzWzBdIFx1MDAyNiAweDA4IHx8ICFpbmZvLVx1MDAzZW1lZGlhX2luaXRpYWxpemVkKSB7XG4rXHRpZiAoc3RhdHVzWzBdIFx1MDAyNiAweDA4IHx8ICFtZWRpYV9pbmZvLVx1MDAzZW1lZGlhX2luaXRpYWxpemVkKSB7XG4gXHRcdHVzYl9zdG9yX2RiZyh1cywgXCJNZWRpYSBjaGFuZ2UgZGV0ZWN0ZWRcXG5cIik7XG4tXHRcdGFsYXVkYV9mcmVlX21hcHMoXHUwMDI2TUVESUFfSU5GTyh1cykpO1xuK1x0XHRhbGF1ZGFfZnJlZV9tYXBzKG1lZGlhX2luZm8pO1xuK1x0XHRtZWRpYV9pbmZvLVx1MDAzZW1lZGlhX2luaXRpYWxpemVkID0gZmFsc2U7XG4gXHRcdHJjID0gYWxhdWRhX2luaXRfbWVkaWEodXMpO1xuIFx0XHRpZiAocmMgPT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG4tXHRcdFx0aW5mby1cdTAwM2VtZWRpYV9pbml0aWFsaXplZCA9IHRydWU7XG4rXHRcdFx0bWVkaWFfaW5mby1cdTAwM2VtZWRpYV9pbml0aWFsaXplZCA9IHRydWU7XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2Vfa2V5ID0gVU5JVF9BVFRFTlRJT047XG4gXHRcdGluZm8tXHUwMDNlc2Vuc2VfYXNjID0gMHgyODtcbiBcdFx0aW5mby1cdTAwM2VzZW5zZV9hc2NxID0gMHgwMDtcbkBAIC02ODksMTEgKzcwNCwxNiBAQCBzdGF0aWMgaW50IGFsYXVkYV9yZWFkX21hcChzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKVxuICAqIENoZWNrcyB0byBzZWUgd2hldGhlciB3ZSBoYXZlIGFscmVhZHkgbWFwcGVkIGEgY2VydGFpbiB6b25lXG4gICogSWYgd2UgaGF2ZW4ndCwgdGhlIG1hcCBpcyBnZW5lcmF0ZWRcbiAgKi9cbi1zdGF0aWMgdm9pZCBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGludCB6b25lKVxuK3N0YXRpYyBpbnQgYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcbiB7XG4rXHRpZiAoIU1FRElBX0lORk8odXMpLmxiYV90b19wYmEgfHwgIU1FRElBX0lORk8odXMpLnBiYV90b19sYmEpXG4rXHRcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XG4rXG4gXHRpZiAoTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYVt6b25lXSA9PSBOVUxMXG4gXHRcdHx8IE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV0gPT0gTlVMTClcbi1cdFx0YWxhdWRhX3JlYWRfbWFwKHVzLCB6b25lKTtcbitcdFx0cmV0dXJuIGFsYXVkYV9yZWFkX21hcCh1cywgem9uZSk7XG4rXG4rXHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0Q7XG4gfVxuIFxuIC8qXG5AQCAtODE5LDExICs4MzksMTkgQEAgc3RhdGljIGludCBhbGF1ZGFfd3JpdGVfbGJhKHN0cnVjdCB1c19kYXRhICp1cywgdTE2IGxiYSxcbiBcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xuIFx0dW5zaWduZWQgaW50IHBhZ2VzaXplID0gTUVESUFfSU5GTyh1cykucGFnZXNpemU7XG4gXHR1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaXplO1xuLVx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQgPSBsYmEgJSB1em9uZXNpemU7XG4rXHR1bnNpZ25lZCBpbnQgbGJhX29mZnNldDtcbiBcdHVuc2lnbmVkIGludCBuZXdfcGJhX29mZnNldDtcbi1cdHVuc2lnbmVkIGludCB6b25lID0gbGJhIC8gdXpvbmVzaXplO1xuK1x0dW5zaWduZWQgaW50IHpvbmU7XG4gXG4tXHRhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZSh1cywgem9uZSk7XG4rXHRpZiAoIXV6b25lc2l6ZSlcbitcdFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcbitcbitcdGxiYV9vZmZzZXQgPSBsYmEgJSB1em9uZXNpemU7XG4rXHR6b25lID0gbGJhIC8gdXpvbmVzaXplO1xuK1xuK1x0cmVzdWx0ID0gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpO1xuK1x0aWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9UUkFOU1BPUlRfR09PRClcbitcdFx0cmV0dXJuIHJlc3VsdDtcbiBcbiBcdHBiYSA9IE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV1bbGJhX29mZnNldF07XG4gXHRpZiAocGJhID09IDEpIHtcbkBAIC05MjcsNiArOTU1LDkgQEAgc3RhdGljIGludCBhbGF1ZGFfcmVhZF9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcbiBcdGludCByZXN1bHQ7XG4gXG4rXHRpZiAoIXV6b25lc2l6ZSlcbitcdFx0cmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9FUlJPUjtcbitcbiBcdC8qXG4gXHQgKiBTaW5jZSB3ZSBvbmx5IHJlYWQgaW4gb25lIGJsb2NrIGF0IGEgdGltZSwgd2UgaGF2ZSB0byBjcmVhdGVcbiBcdCAqIGEgYm91bmNlIGJ1ZmZlciBhbmQgbW92ZSB0aGUgZGF0YSBhIHBpZWNlIGF0IGEgdGltZSBiZXR3ZWVuIHRoZVxuQEAgLTk1MCwxMSArOTgxLDEwIEBAIHN0YXRpYyBpbnQgYWxhdWRhX3JlYWRfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdHNnID0gTlVMTDtcbiBcbiBcdHdoaWxlIChzZWN0b3JzIFx1MDAzZSAwKSB7XG4tXHRcdHVuc2lnbmVkIGludCB6b25lID0gbGJhIC8gdXpvbmVzaXplOyAvKiBpbnRlZ2VyIGRpdmlzaW9uICovXG4tXHRcdHVuc2lnbmVkIGludCBsYmFfb2Zmc2V0ID0gbGJhIC0gKHpvbmUgKiB1em9uZXNpemUpO1xuK1x0XHR1bnNpZ25lZCBpbnQgem9uZTtcbitcdFx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQ7XG4gXHRcdHVuc2lnbmVkIGludCBwYWdlcztcbiBcdFx0dTE2IHBiYTtcbi1cdFx0YWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUodXMsIHpvbmUpO1xuIFxuIFx0XHQvKiBOb3Qgb3ZlcmZsb3dpbmcgY2FwYWNpdHk/ICovXG4gXHRcdGlmIChsYmEgXHUwMDNlPSBtYXhfbGJhKSB7XG5AQCAtOTY0LDYgKzk5NCwxMyBAQCBzdGF0aWMgaW50IGFsYXVkYV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbitcdFx0em9uZSA9IGxiYSAvIHV6b25lc2l6ZTsgLyogaW50ZWdlciBkaXZpc2lvbiAqL1xuK1x0XHRsYmFfb2Zmc2V0ID0gbGJhIC0gKHpvbmUgKiB1em9uZXNpemUpO1xuK1xuK1x0XHRyZXN1bHQgPSBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZSh1cywgem9uZSk7XG4rXHRcdGlmIChyZXN1bHQgIT0gVVNCX1NUT1JfVFJBTlNQT1JUX0dPT0QpXG4rXHRcdFx0YnJlYWs7XG4rXG4gXHRcdC8qIEZpbmQgbnVtYmVyIG9mIHBhZ2VzIHdlIGNhbiByZWFkIGluIHRoaXMgYmxvY2sgKi9cbiBcdFx0cGFnZXMgPSBtaW4oc2VjdG9ycywgYmxvY2tzaXplIC0gcGFnZSk7XG4gXHRcdGxlbiA9IHBhZ2VzIFx1MDAzY1x1MDAzYyBwYWdlc2hpZnQ7XG5AQCAtMTAyMSw2ICsxMDU4LDkgQEAgc3RhdGljIGludCBhbGF1ZGFfd3JpdGVfZGF0YShzdHJ1Y3QgdXNfZGF0YSAqdXMsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiBcdHUxNiBsYmEsIG1heF9sYmE7XG4gXHRpbnQgcmVzdWx0O1xuIFxuK1x0aWYgKCFNRURJQV9JTkZPKHVzKS51em9uZXNpemUpXG4rXHRcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XG4rXG4gXHQvKlxuIFx0ICogU2luY2Ugd2UgZG9uJ3Qgd3JpdGUgdGhlIHVzZXIgZGF0YSBkaXJlY3RseSB0byB0aGUgZGV2aWNlLFxuIFx0ICogd2UgaGF2ZSB0byBjcmVhdGUgYSBib3VuY2UgYnVmZmVyIGFuZCBtb3ZlIHRoZSBkYXRhIGEgcGllY2VcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDIwOjQ5OjE1Ljc5NDIzNjI4OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTc0MzYzMzMxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIFNlc3Npb24gQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHJ1bi4gVGhlIHRhcmdldCBmaWxlIGlzIGBkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCBpdCBpbnZvbHZlcyBzb21lIHJlZmFjdG9yaW5nIGFuZCBidWcgZml4ZXMsIHdoaWNoIGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCBpbnZvbHZlcyBtb3ZpbmcgYG1lZGlhX2luaXRpYWxpemVkYCBpbnRvIGEgcGVyLW1lZGlhIHN0cnVjdCwgd2hpY2ggaXMgZ2VuZXJhbGx5IGEgZ29vZCBwcmFjdGljZSBmb3IgY29ycmVjdCBzdGF0ZSBtYW5hZ2VtZW50LiBCZXlvbmQgdGhhdCwgaXQncyBhZGRyZXNzaW5nIGEgaGFuZGZ1bCBvZiBpc3N1ZXM6IG1lbW9yeSBsZWFrcyAoc3BlY2lmaWNhbGx5IGluIGBhbGF1ZGFfZnJlZV9tYXBzKClgLCB3aGVyZSB0aGUgYXJyYXkgb2YgcG9pbnRlcnMgd2FzIGJlaW5nIGxlYWtlZCwgdGhvdWdoIHRoZSBlbGVtZW50cyB3ZXJlIGZyZWVkKSwgYW5kIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3IgZGl2aXNpb24tYnktemVybyBlcnJvcnMuIFRoZSBmaXhlcyBpbmNsdWRlIHNldHRpbmcgY2FwYWNpdHkgYW5kIHNpemUgdG8gemVybywgZnJlZWluZyBtYXBzIG9uIGZhaWx1cmUsIHVwZGF0aW5nIG1lZGlhIGluaXRpYWxpemVkIHBlciBtZWRpYSwgYW5kIHByb3BlciBlcnJvciBoYW5kbGluZy4gVGhpcyBzZWVtcyBsaWtlIGEgcHJldHR5IHRob3JvdWdoIGNsZWFudXAuIEl0J3MgZ29vZCB0byBzZWUgcm9idXN0IGVycm9yIGNoZWNraW5nIGFkZGVkIGluIHNldmVyYWwgZnVuY3Rpb25zIHN1Y2ggYXMgaW4gYGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKClgLCBgYWxhdWRhX3dyaXRlX2xiYSgpYCwgYGFsYXVkYV9yZWFkX2RhdGEoKWAsIGFuZCBgYWxhdWRhX3dyaXRlX2RhdGEoKWAuXG5cbk5vdywgYmVmb3JlIEkganVtcCB0byBhIGNvbmNsdXNpb24sIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBleGFtaW5lIHRoZSBjb250ZXh0IHdpdGhpbiBgYWxhdWRhLmNgLiBNeSBtYWluIGNvbmNlcm5zIGFyZTogQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmlza3MgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYXJlIHRoZXJlIGluZm9ybWF0aW9uIGxlYWtzLCBvciBhcmUgdGhlcmUgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgYmVpbmcgcmVhZCBvciBjb3BpZWQ/IEknbGwgbmVlZCB0byBsb29rIGF0IGhvdyB0aGVzZSBjaGFuZ2VzIGludGVyYWN0IHdpdGggdGhlIGV4aXN0aW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGlmIGFueSBuZXcgdnVsbmVyYWJpbGl0aWVzIHdlcmUgaW50cm9kdWNlZCwgb3IgaWYgdGhlIHBhdGNoZXMgaW5hZHZlcnRlbnRseSBleHBvc2VkIHNvbWV0aGluZyBwcmV2aW91c2x5IGhpZGRlbi4gVGhhdCdzIHdoZXJlIGEgS01TQU4gc2Vzc2lvbiBtaWdodCBiZSB1c2VmdWwsIHBhcnRpY3VsYXJseSBpZiB0aGVyZSBhcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgb3IgY29udHJvbCBmbG93IGNoYW5nZXMgaW52b2x2ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1OTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0OTozNy41Mzc4NzQ3NTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjY3NDYxMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUVESUFfSU5GT1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTAzPXN0cnVjdCBhbGF1ZGFfaW5mbyB7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExNi0jZGVmaW5lIE1FRElBX1BPUlQodXMpIHVzLVxcdTAwM2VzcmItXFx1MDAzZWRldmljZS1cXHUwMDNlbHVuXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTc6I2RlZmluZSBNRURJQV9JTkZPKHVzKSAoKHN0cnVjdCBhbGF1ZGFfaW5mbyAqKXVzLVxcdTAwM2VleHRyYSktXFx1MDAzZXBvcnRbTUVESUFfUE9SVCh1cyldXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTgtXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTM5MD1zdGF0aWMgaW50IGFsYXVkYV9pbml0X21lZGlhKHN0cnVjdCB1c19kYXRhICp1cylcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDMyLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDMzOlxcdE1FRElBX0lORk8odXMpLmNhcGFjaXR5ID0gMSBcXHUwMDNjXFx1MDAzYyBtZWRpYV9pbmZvLVxcdTAwM2VjaGlwc2hpZnQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MzQtXFx0dXNiX3N0b3JfZGJnKHVzLCBcXFwiRm91bmQgbWVkaWEgd2l0aCBjYXBhY2l0eTogJWxkTUJcXFxcblxcXCIsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0MzU6XFx0XFx0ICAgICBNRURJQV9JTkZPKHVzKS5jYXBhY2l0eSBcXHUwMDNlXFx1MDAzZSAyMCk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00MzYtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0Mzc6XFx0TUVESUFfSU5GTyh1cykucGFnZXNoaWZ0ID0gbWVkaWFfaW5mby1cXHUwMDNlcGFnZXNoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDM4OlxcdE1FRElBX0lORk8odXMpLmJsb2Nrc2hpZnQgPSBtZWRpYV9pbmZvLVxcdTAwM2VibG9ja3NoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDM5OlxcdE1FRElBX0lORk8odXMpLnpvbmVzaGlmdCA9IG1lZGlhX2luZm8tXFx1MDAzZXpvbmVzaGlmdDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ0MC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0MTpcXHRNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZSA9IDEgXFx1MDAzY1xcdTAwM2MgbWVkaWFfaW5mby1cXHUwMDNlcGFnZXNoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDQyOlxcdE1FRElBX0lORk8odXMpLmJsb2Nrc2l6ZSA9IDEgXFx1MDAzY1xcdTAwM2MgbWVkaWFfaW5mby1cXHUwMDNlYmxvY2tzaGlmdDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0MzpcXHRNRURJQV9JTkZPKHVzKS56b25lc2l6ZSA9IDEgXFx1MDAzY1xcdTAwM2MgbWVkaWFfaW5mby1cXHUwMDNlem9uZXNoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDQ0LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDQ1OlxcdE1FRElBX0lORk8odXMpLnV6b25lc2l6ZSA9ICgoMSBcXHUwMDNjXFx1MDAzYyBtZWRpYV9pbmZvLVxcdTAwM2V6b25lc2hpZnQpIC8gMTI4KSAqIDEyNTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0NjpcXHRNRURJQV9JTkZPKHVzKS5ibG9ja21hc2sgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemUgLSAxO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDQ3LVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDQ4OlxcdG51bV96b25lcyA9IE1FRElBX0lORk8odXMpLmNhcGFjaXR5IFxcdTAwM2VcXHUwMDNlIChNRURJQV9JTkZPKHVzKS56b25lc2hpZnRcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ0OTpcXHRcXHQrIE1FRElBX0lORk8odXMpLmJsb2Nrc2hpZnQgKyBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDUwOlxcdE1FRElBX0lORk8odXMpLnBiYV90b19sYmEgPSBrY2FsbG9jKG51bV96b25lcywgc2l6ZW9mKHUxNiopLCBHRlBfTk9JTyk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NTE6XFx0TUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSA9IGtjYWxsb2MobnVtX3pvbmVzLCBzaXplb2YodTE2KiksIEdGUF9OT0lPKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ1MjpcXHRpZiAoTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYSA9PSBOVUxMIHx8IE1FRElBX0lORk8odXMpLmxiYV90b19wYmEgPT0gTlVMTCkge1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NDUzOlxcdFxcdGFsYXVkYV9mcmVlX21hcHMoXFx1MDAyNk1FRElBX0lORk8odXMpKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ1NC1cXHRcXHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NTctXFx0aWYgKGFsYXVkYV9yZXNldF9tZWRpYSh1cykgIT0gVVNCX1NUT1JfWEZFUl9HT09EKSB7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo0NTg6XFx0XFx0YWxhdWRhX2ZyZWVfbWFwcyhcXHUwMDI2TUVESUFfSU5GTyh1cykpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNDU5LVxcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTQ2OT1zdGF0aWMgaW50IGFsYXVkYV9jaGVja19tZWRpYShzdHJ1Y3QgdXNfZGF0YSAqdXMpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTQ3MS1cXHRzdHJ1Y3QgYWxhdWRhX2luZm8gKmluZm8gPSAoc3RydWN0IGFsYXVkYV9pbmZvICopIHVzLVxcdTAwM2VleHRyYTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjQ3MjpcXHRzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8gKm1lZGlhX2luZm8gPSBcXHUwMDI2TUVESUFfSU5GTyh1cyk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy00NzMtXFx0dW5zaWduZWQgY2hhciAqc3RhdHVzID0gdXMtXFx1MDAzZWlvYnVmO1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz01ODM9c3RhdGljIGludCBhbGF1ZGFfcmVhZF9tYXAoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBpbnQgem9uZSlcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNTg3LVxcdGludCBpLCBqO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NTg4OlxcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NTg5OlxcdHVuc2lnbmVkIGludCB1em9uZXNpemUgPSBNRURJQV9JTkZPKHVzKS51em9uZXNpemU7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy01OTAtXFx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQsIGxiYV9yZWFsLCBibG9ja251bTtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjkwLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NjkxOlxcdE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV0gPSBsYmFfdG9fcGJhO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NjkyOlxcdE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV0gPSBwYmFfdG9fbGJhO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNjkzLVxcdHJlc3VsdCA9IDA7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTcwNz1zdGF0aWMgaW50IGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgaW50IHpvbmUpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03MDgte1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzA5OlxcdGlmICghTUVESUFfSU5GTyh1cykubGJhX3RvX3BiYSB8fCAhTUVESUFfSU5GTyh1cykucGJhX3RvX2xiYSlcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTcxMC1cXHRcXHRyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtNzExLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6NzEyOlxcdGlmIChNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdID09IE5VTExcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjcxMzpcXHRcXHR8fCBNRURJQV9JTkZPKHVzKS5wYmFfdG9fbGJhW3pvbmVdID09IE5VTEwpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03MTQtXFx0XFx0cmV0dXJuIGFsYXVkYV9yZWFkX21hcCh1cywgem9uZSk7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTc1MT1zdGF0aWMgaW50IGFsYXVkYV9yZWFkX2Jsb2NrX3JhdyhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc2Ny1cXHRyZXR1cm4gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLVxcdTAwM2VyZWN2X2J1bGtfcGlwZSxcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjc2ODpcXHRcXHRkYXRhLCAoTUVESUFfSU5GTyh1cykucGFnZXNpemUgKyA2NCkgKiBwYWdlcywgTlVMTCk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03NjktfVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYz03Nzc9c3RhdGljIGludCBhbGF1ZGFfcmVhZF9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTc4MC1cXHRpbnQgaSwgcmM7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo3ODE6XFx0dW5zaWduZWQgaW50IHBhZ2VzaXplID0gTUVESUFfSU5GTyh1cykucGFnZXNpemU7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy03ODItXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTgwMj1zdGF0aWMgaW50IGFsYXVkYV93cml0ZV9ibG9jayhzdHJ1Y3QgdXNfZGF0YSAqdXMsIHUxNiBwYmEsIHVuc2lnbmVkIGNoYXIgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTgxOC1cXHRyYyA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCBpbmZvLVxcdTAwM2V3cl9lcCwgZGF0YSxcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgxOTpcXHRcXHQoTUVESUFfSU5GTyh1cykucGFnZXNpemUgKyA2NCkgKiBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemUsXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MjAtXFx0XFx0TlVMTCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTgzMD1zdGF0aWMgaW50IGFsYXVkYV93cml0ZV9sYmEoc3RydWN0IHVzX2RhdGEgKnVzLCB1MTYgbGJhLFxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04MzctXFx0aW50IGksIHJlc3VsdDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjgzODpcXHR1bnNpZ25lZCBpbnQgdXpvbmVzaXplID0gTUVESUFfSU5GTyh1cykudXpvbmVzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODM5OlxcdHVuc2lnbmVkIGludCB6b25lc2l6ZSA9IE1FRElBX0lORk8odXMpLnpvbmVzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODQwOlxcdHVuc2lnbmVkIGludCBwYWdlc2l6ZSA9IE1FRElBX0lORk8odXMpLnBhZ2VzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6ODQxOlxcdHVuc2lnbmVkIGludCBibG9ja3NpemUgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NpemU7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NDItXFx0dW5zaWduZWQgaW50IGxiYV9vZmZzZXQ7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg1NS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjg1NjpcXHRwYmEgPSBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdW2xiYV9vZmZzZXRdO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtODU3LVxcdGlmIChwYmEgPT0gMSkge1xcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy04NjYtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo4Njc6XFx0bmV3X3BiYSA9IGFsYXVkYV9maW5kX3VudXNlZF9wYmEoXFx1MDAyNk1FRElBX0lORk8odXMpLCB6b25lKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTg2OC1cXHRpZiAoIW5ld19wYmEpIHtcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTI1LVxcdG5ld19wYmFfb2Zmc2V0ID0gbmV3X3BiYSAtICh6b25lICogem9uZXNpemUpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTI2OlxcdE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV1bbmV3X3BiYV9vZmZzZXRdID0gbGJhO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTI3OlxcdE1FRElBX0lORk8odXMpLmxiYV90b19wYmFbem9uZV1bbGJhX29mZnNldF0gPSBuZXdfcGJhO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTI4LVxcdHVzYl9zdG9yX2RiZyh1cywgXFxcIlJlbWFwcGVkIExCQSAlZCB0byBQQkEgJWRcXFxcblxcXCIsIGxiYSwgbmV3X3BiYSk7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTkzNC1cXHRcXHRcXHRyZXR1cm4gcmVzdWx0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTM1OlxcdFxcdE1FRElBX0lORk8odXMpLnBiYV90b19sYmFbem9uZV1bcGJhX29mZnNldF0gPSBVTkRFRjtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTkzNi1cXHR9XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jPTk0ND1zdGF0aWMgaW50IGFsYXVkYV9yZWFkX2RhdGEoc3RydWN0IHVzX2RhdGEgKnVzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTk0OS1cXHR1bnNpZ25lZCBpbnQgcGFnZSwgbGVuLCBvZmZzZXQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5NTA6XFx0dW5zaWduZWQgaW50IGJsb2Nrc2hpZnQgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6OTUxOlxcdHVuc2lnbmVkIGludCBwYWdlc2hpZnQgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2hpZnQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5NTI6XFx0dW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IE1FRElBX0lORk8odXMpLmJsb2Nrc2l6ZTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjk1MzpcXHR1bnNpZ25lZCBpbnQgcGFnZXNpemUgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjk1NDpcXHR1bnNpZ25lZCBpbnQgdXpvbmVzaXplID0gTUVESUFfSU5GTyh1cykudXpvbmVzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTU1LVxcdHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTk3NS1cXHRsYmEgPSBhZGRyZXNzIFxcdTAwM2VcXHUwMDNlIGJsb2Nrc2hpZnQ7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzo5NzY6XFx0cGFnZSA9IChhZGRyZXNzIFxcdTAwMjYgTUVESUFfSU5GTyh1cykuYmxvY2ttYXNrKTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjk3NzpcXHRtYXhfbGJhID0gTUVESUFfSU5GTyh1cykuY2FwYWNpdHkgXFx1MDAzZVxcdTAwM2UgKGJsb2Nrc2hpZnQgKyBwYWdlc2hpZnQpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtOTc4LVxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDA4LVxcdFxcdC8qIEZpbmQgd2hlcmUgdGhpcyBsYmEgbGl2ZXMgb24gZGlzayAqL1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTAwOTpcXHRcXHRwYmEgPSBNRURJQV9JTkZPKHVzKS5sYmFfdG9fcGJhW3pvbmVdW2xiYV9vZmZzZXRdO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTAxMC1cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTA0OD1zdGF0aWMgaW50IGFsYXVkYV93cml0ZV9kYXRhKHN0cnVjdCB1c19kYXRhICp1cywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbi0tXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDUyLVxcdHVuc2lnbmVkIGludCBwYWdlLCBsZW4sIG9mZnNldDtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwNTM6XFx0dW5zaWduZWQgaW50IGJsb2Nrc2hpZnQgPSBNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTA1NDpcXHR1bnNpZ25lZCBpbnQgcGFnZXNoaWZ0ID0gTUVESUFfSU5GTyh1cykucGFnZXNoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTA1NTpcXHR1bnNpZ25lZCBpbnQgYmxvY2tzaXplID0gTUVESUFfSU5GTyh1cykuYmxvY2tzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTA1NjpcXHR1bnNpZ25lZCBpbnQgcGFnZXNpemUgPSBNRURJQV9JTkZPKHVzKS5wYWdlc2l6ZTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwNTctXFx0c3RydWN0IHNjYXR0ZXJsaXN0ICpzZztcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTA2MC1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEwNjE6XFx0aWYgKCFNRURJQV9JTkZPKHVzKS51em9uZXNpemUpXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMDYyLVxcdFxcdHJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRVJST1I7XFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEwODYtXFx0bGJhID0gYWRkcmVzcyBcXHUwMDNlXFx1MDAzZSBibG9ja3NoaWZ0O1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTA4NzpcXHRwYWdlID0gKGFkZHJlc3MgXFx1MDAyNiBNRURJQV9JTkZPKHVzKS5ibG9ja21hc2spO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM6MTA4ODpcXHRtYXhfbGJhID0gTUVESUFfSU5GTyh1cykuY2FwYWNpdHkgXFx1MDAzZVxcdTAwM2UgKHBhZ2VzaGlmdCArIGJsb2Nrc2hpZnQpO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTA4OS1cXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTE3MD1zdGF0aWMgaW50IGFsYXVkYV90cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgdXNfZGF0YSAqdXMpXFxuLS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTExOTgtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMTk5OlxcdFxcdG51bV96b25lcyA9IE1FRElBX0lORk8odXMpLmNhcGFjaXR5IFxcdTAwM2VcXHUwMDNlIChNRURJQV9JTkZPKHVzKS56b25lc2hpZnRcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjEyMDA6XFx0XFx0XFx0KyBNRURJQV9JTkZPKHVzKS5ibG9ja3NoaWZ0ICsgTUVESUFfSU5GTyh1cykucGFnZXNoaWZ0KTtcXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jLTEyMDEtXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjAyOlxcdFxcdGNhcGFjaXR5ID0gbnVtX3pvbmVzICogTUVESUFfSU5GTyh1cykudXpvbmVzaXplXFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYzoxMjAzOlxcdFxcdFxcdCogTUVESUFfSU5GTyh1cykuYmxvY2tzaXplO1xcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTIwNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDk6MzkuMTA0NjI2MTU4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMzczNjM2ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBhbGF1ZGFfaW5mb2AgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpc3NlY3QgaG93IHRoZSBgc3RydWN0IGFsYXVkYV9pbmZvYCBpcyBiZWluZyBhbGxvY2F0ZWQgaW4gdGhpcyBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbWVtb3J5IGZvb3RwcmludCwgaG93IGl0J3MgaW5pdGlhbGl6ZWQsIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyByZWxhdGVkIHRvIGl0cyBsaWZldGltZS4gSXMgaXQgc3RhY2stYWxsb2NhdGVkLCBoZWFwLWFsbG9jYXRlZCwgc3RhdGljYWxseSBhbGxvY2F0ZWQ/IEVhY2ggbWV0aG9kIGhhcyBkaWZmZXJlbnQgaW1wbGljYXRpb25zIGZvciBwZXJmb3JtYW5jZSwgcmVzb3VyY2UgdXNhZ2UsIGFuZCBwb3RlbnRpYWwgZm9yIG1lbW9yeSBsZWFrcyBvciBmcmFnbWVudGF0aW9uLiBJIG5lZWQgdG8gbWVudGFsbHkgdHJhY2UgdGhlIGNvZGUgdG8gcGlucG9pbnQgZXhhY3RseSB3aGVyZSB0aGlzIHN0cnVjdHVyZSBpcyBjcmVhdGVkLCBhbmQgaWRlYWxseSwgd2hlcmUgaXQncyBkZXN0cm95ZWQgb3IgcmVsZWFzZWQgaWYgaXQncyBkeW5hbWljYWxseSBhbGxvY2F0ZWQuIFVuZGVyc3RhbmRpbmcgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgaXMgdGhlIGNydWNpYWwgZmlyc3Qgc3RlcCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnQgb2YgdGhlIHN5c3RlbSBiZWhhdmVzIHVuZGVyIGRpZmZlcmVudCBsb2FkIGNvbmRpdGlvbnMuIFRoaXMgd2lsbCBoZWxwIGluZm9ybSB3aGV0aGVyIGl0IGNvdWxkIGJlIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgd2hldGhlciBpdCdzIHN1c2NlcHRpYmxlIHRvIG1lbW9yeSBsZWFrcywgb3IgaWYgaXQgaGFzIGFueSBvdGhlciBwb3RlbnRpYWwgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjEwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDk6NDEuMzQxOTkzNDQ0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTczODQxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jLiphbGF1ZGFfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmM9MTE1MD1zdGF0aWMgaW50IGluaXRfYWxhdWRhKHN0cnVjdCB1c19kYXRhICp1cylcXG4tLVxcbmRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMtMTE1NS1cXG5kcml2ZXJzL3VzYi9zdG9yYWdlL2FsYXVkYS5jOjExNTY6XFx0dXMtXFx1MDAzZWV4dHJhID0ga3phbGxvY19vYmooc3RydWN0IGFsYXVkYV9pbmZvLCBHRlBfTk9JTyk7XFxuZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy0xMTU3LVxcdGlmICghdXMtXFx1MDAzZWV4dHJhKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQyMDo0OTo0MS40MTE3NDAwNzNaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTM5NDAxNzM2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS01TQU4gTmVjZXNzaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIGB1cy1cdTAwM2VleHRyYWAsIHdoaWNoIGlzIGEgYHN0cnVjdCBhbGF1ZGFfaW5mb2AsIGlzIGluaXRpYWxpemVkIHdpdGggYGt6YWxsb2Nfb2JqYCwgd2hpY2ggbWVhbnMgZXZlcnl0aGluZywgaW5jbHVkaW5nIHRoZSBlbWJlZGRlZCBgc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvIHBvcnRbMl1gLCBpcyB6ZXJvZWQgb3V0IHJpZ2h0IGZyb20gdGhlIHN0YXJ0LiBUaGF0J3MgY3J1Y2lhbC4gVGhlIGBtZWRpYV9pbml0aWFsaXplZGAgZmxhZywgd2hpY2ggd2FzIG1vdmVkIGludG8gdGhhdCB6ZXJvLWluaXRpYWxpemVkIGBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm9gLCBpcyBub3cgYWxzbyBndWFyYW50ZWVkIHRvIHN0YXJ0IGF0IHplcm8uXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgYnVnIGZpeGVzIHRoZW1zZWx2ZXMuIFdlJ3JlIGFkZHJlc3NpbmcgYSBtZW1vcnkgbGVhayBpbiBgYWxhdWRhX2ZyZWVfbWFwcygpYCwgd2hlcmUgb3V0ZXIgYXJyYXlzIGBsYmFfdG9fcGJhYCBhbmQgYHBiYV90b19sYmFgIHdlcmVuJ3QgYmVpbmcgZnJlZWQuIFdlJ3JlIGFsc28gemVyb2luZyBvdXQgYGNhcGFjaXR5YCBhbmQgYHV6b25lc2l6ZWAgdXBvbiBmcmVlaW5nIHRob3NlIG1hcHMgYW5kIGNoZWNraW5nIGZvciBOVUxMIG9yIHplcm8gYHV6b25lc2l6ZWAgaW4gdGhlIHJlYWQvd3JpdGUgcGF0aHMgdG8gcHJldmVudCB0aG9zZSBuYXN0eSBkaXZpc2lvbi1ieS16ZXJvIG9yIE5VTEwgcG9pbnRlciBpc3N1ZXMuIEZ1cnRoZXJtb3JlLCB0aGUgZXJyb3IgY2xlYW51cCBpbiBgYWxhdWRhX2luaXRfbWVkaWEoKWAgbm93IGNvcnJlY3RseSBjYWxscyBgYWxhdWRhX2ZyZWVfbWFwcygpYCwgd2hpY2ggaXMgZ29vZC4gQW5kIGZpbmFsbHksIGBhbGF1ZGFfZW5zdXJlX21hcF9mb3Jfem9uZSgpYCBoYXMgYSBjaGVjayBmb3IgYE1FRElBX0lORk8odXMpLmxiYV90b19wYmFgIGJlZm9yZSBpdCBpbmRleGVzIGl0LiBUaGF0J3MgYWxsIGdvb2QsIHNvbGlkIGRlZmVuc2l2ZSBwcm9ncmFtbWluZy5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lczogYXJlIHdlIGluYWR2ZXJ0ZW50bHkgY3JlYXRpbmcsIGFjY2Vzc2luZywgb3IgcGFzc2luZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB0byB1c2VyIHNwYWNlPyBUaGUgYW5zd2VyIGlzIGEgY2xlYXIgXCJuby5cIiBBbGwgYWxsb2NhdGlvbnMgdXNlIGVpdGhlciBga3phbGxvY19vYmpgIG9yIGBrY2FsbG9jYCwgbWVhbmluZyB0aGV5J3JlIHplcm8taW5pdGlhbGl6ZWQuIFRoaXMgaXNuJ3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzOyBpdCdzIGFib3V0IGNsZWFuaW5nIHVwIG1lbW9yeSBsZWFrcywgcHJldmVudGluZyBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzIGFuZCBhcml0aG1ldGljIGVycm9ycywgYW5kIG1vdmluZyBhIGZsYWcgdG8gYWxsb3cgdHJhY2tpbmcgcGVyLXBvcnQgbWVkaWEgaW5pdGlhbGl6YXRpb24gaW5zdGVhZCBvZiBnbG9iYWxseS5cblxuVGhlc2UgYXJlIGNsYXNzaWMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGVycm9yIGhhbmRsaW5nIGlzc3Vlcy4gS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGNhdGNoIHRoZSBvdXQtb2YtYm91bmRzLCB1c2UtYWZ0ZXItZnJlZSwgYW5kIGRvdWJsZS1mcmVlIHByb2JsZW1zLCBhcyB3ZSdyZSBub3QgaW50cm9kdWNpbmcgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UgZG9uJ3QgbmVlZCBLTVNBTiBoZXJlLlxuXG5MZXQncyBkbyBhIGZpbmFsIGNoZWNrIGFnYWluc3QgdGhlIEtNU0FOIGNyaXRlcmlhOlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzIG9yIHBhZGRpbmc/IE5vLiBBbGwncyBpbml0aWFsaXplZC5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vcGUuIEV2ZXJ5dGhpbmcgaXMgemVyby1pbml0aWFsaXplZC5cbjMuICBBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggbGF0ZXIgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOZWdhdGl2ZS4gWmVyby1pbml0aWFsaXplZC5cbjQuICBCb3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgbGVhZCB0byBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBieXRlcz8gQWJzb2x1dGVseSBub3QuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU49ZmFsc2VgLiBUaW1lIHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU4NiwiT3V0cHV0VG9rZW5zIjoyMTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMjA6NDk6NTUuMzUxOTE4NDE3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgbWVtb3J5IGxlYWtzLCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBhbmQgcG90ZW50aWFsIGRpdmlzaW9uLWJ5LXplcm8gZXJyb3JzIGluIGRyaXZlcnMvdXNiL3N0b3JhZ2UvYWxhdWRhLmMuIFNwZWNpZmljYWxseSwgaXQgZnJlZXMgdGhlIG91dGVyIHBvaW50ZXIgYXJyYXlzIGluIGFsYXVkYV9mcmVlX21hcHMoKSwgYWRkcyBlcnJvciBjbGVhbnVwIGluIGFsYXVkYV9pbml0X21lZGlhKCksIGFkZHMgY2hlY2tzIGZvciBOVUxMIHBvaW50ZXJzIGluIGFsYXVkYV9lbnN1cmVfbWFwX2Zvcl96b25lKCksIGFkZHMgY2hlY2tzIGZvciB6ZXJvIHV6b25lc2l6ZSB0byBhdm9pZCBkaXZpc2lvbiBieSB6ZXJvLCBhbmQgbW92ZXMgbWVkaWFfaW5pdGlhbGl6ZWQgdG8gc3RydWN0IGFsYXVkYV9tZWRpYV9pbmZvLlxcblxcblRoZSBzdHJ1Y3QgYWxhdWRhX2luZm8gY29udGFpbmluZyBhbGF1ZGFfbWVkaWFfaW5mbyBpcyBhbGxvY2F0ZWQgdXNpbmcga3phbGxvY19vYmooKSwgZW5zdXJpbmcgYWxsIGZpZWxkcyBhcmUgemVyby1pbml0aWFsaXplZC4gUEJBL0xCQSBtYXBwaW5nIHRhYmxlcyBhcmUgYWxsb2NhdGVkIHZpYSBrY2FsbG9jLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGxlYWtlZCB0byB1c2Vyc3BhY2UuIFNpbmNlIHRoZXNlIGNoYW5nZXMgc3RyaWN0bHkgZml4IG1lbW9yeSBsZWFrcyBhbmQgTlVMTC96ZXJvLWNoZWNrIHNhZmV0eSBpc3N1ZXMsIHRoZXkgZG8gbm90IGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG8gbm90IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBtZW1vcnkgbGVha3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGFuZCBwb3RlbnRpYWwgZGl2aXNpb24tYnktemVybyBlcnJvcnMgaW4gZHJpdmVycy91c2Ivc3RvcmFnZS9hbGF1ZGEuYy4gU3BlY2lmaWNhbGx5LCBpdCBmcmVlcyB0aGUgb3V0ZXIgcG9pbnRlciBhcnJheXMgaW4gYWxhdWRhX2ZyZWVfbWFwcygpLCBhZGRzIGVycm9yIGNsZWFudXAgaW4gYWxhdWRhX2luaXRfbWVkaWEoKSwgYWRkcyBjaGVja3MgZm9yIE5VTEwgcG9pbnRlcnMgaW4gYWxhdWRhX2Vuc3VyZV9tYXBfZm9yX3pvbmUoKSwgYWRkcyBjaGVja3MgZm9yIHplcm8gdXpvbmVzaXplIHRvIGF2b2lkIGRpdmlzaW9uIGJ5IHplcm8sIGFuZCBtb3ZlcyBtZWRpYV9pbml0aWFsaXplZCB0byBzdHJ1Y3QgYWxhdWRhX21lZGlhX2luZm8uXFxuXFxuVGhlIHN0cnVjdCBhbGF1ZGFfaW5mbyBjb250YWluaW5nIGFsYXVkYV9tZWRpYV9pbmZvIGlzIGFsbG9jYXRlZCB1c2luZyBremFsbG9jX29iaigpLCBlbnN1cmluZyBhbGwgZmllbGRzIGFyZSB6ZXJvLWluaXRpYWxpemVkLiBQQkEvTEJBIG1hcHBpbmcgdGFibGVzIGFyZSBhbGxvY2F0ZWQgdmlhIGtjYWxsb2MuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgbGVha2VkIHRvIHVzZXJzcGFjZS4gU2luY2UgdGhlc2UgY2hhbmdlcyBzdHJpY3RseSBmaXggbWVtb3J5IGxlYWtzIGFuZCBOVUxML3plcm8tY2hlY2sgc2FmZXR5IGlzc3VlcywgdGhleSBkbyBub3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkbyBub3QgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowp284f[1] Phase: Succeeded StartedAt: 2026-08-28 20:50:07 +0000 UTC FinishedAt: 2026-08-28 20:50:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-28 20:50:07 +0000 UTC FinishedAt: 2026-08-28 20:50:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[2] Phase: Succeeded StartedAt: 2026-08-28 20:50:07 +0000 UTC FinishedAt: 2026-08-29 00:30:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-28 20:50:07 +0000 UTC FinishedAt: 2026-08-29 00:30:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-28 20:50:07 +0000 UTC FinishedAt: 2026-08-28 20:50:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-28 20:50:07 +0000 UTC FinishedAt: 2026-08-28 20:50:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowp284f/series-workflowp284f-convert-artifact-808824132/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-28 20:50:17 +0000 UTC FinishedAt: 2026-08-28 21:08:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-28 20:50:17 +0000 UTC FinishedAt: 2026-08-28 21:08:00 +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:*09d39f86-cd76-4dad-9dbb-fa9388947add,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-workflowp284f/series-workflowp284f-convert-artifact-808824132/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": "c99079c7-e52b-4863-9b0d-42655bb0bac8", "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-workflowp284f/series-workflowp284f-build-action-462155906/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-28 20:50:17 +0000 UTC FinishedAt: 2026-08-28 21:07:50 +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:*09d39f86-cd76-4dad-9dbb-fa9388947add,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-workflowp284f/series-workflowp284f-convert-artifact-808824132/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": "c99079c7-e52b-4863-9b0d-42655bb0bac8", "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-workflowp284f/series-workflowp284f-build-action-462155906/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-28 21:08:00 +0000 UTC FinishedAt: 2026-08-28 21:08:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-28 21:08:00 +0000 UTC FinishedAt: 2026-08-28 21:08:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-28 21:08:00 +0000 UTC FinishedAt: 2026-08-28 21:08:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-28 21:08:00 +0000 UTC FinishedAt: 2026-08-28 21:08:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowp284f/series-workflowp284f-convert-artifact-920200643/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-28 21:08:10 +0000 UTC FinishedAt: 2026-08-28 21:10:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-28 21:08:10 +0000 UTC FinishedAt: 2026-08-28 21:10:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c99079c7-e52b-4863-9b0d-42655bb0bac8,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-workflowp284f/series-workflowp284f-build-action-462155906/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-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-28 21:10:22 +0000 UTC FinishedAt: 2026-08-28 21:10:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-28 21:10:22 +0000 UTC FinishedAt: 2026-08-28 21:10:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-28 21:10:22 +0000 UTC FinishedAt: 2026-08-28 21:26:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-28 21:10:22 +0000 UTC FinishedAt: 2026-08-28 21:26:41 +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:*09d39f86-cd76-4dad-9dbb-fa9388947add,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-workflowp284f/series-workflowp284f-convert-artifact-920200643/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": "1fb6f051-40cd-40f7-8a0d-783c22345c3c", "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-workflowp284f/series-workflowp284f-build-action-2274922615/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-28 21:10:22 +0000 UTC FinishedAt: 2026-08-28 21:26:31 +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:*09d39f86-cd76-4dad-9dbb-fa9388947add,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-workflowp284f/series-workflowp284f-convert-artifact-920200643/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": "1fb6f051-40cd-40f7-8a0d-783c22345c3c", "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-workflowp284f/series-workflowp284f-build-action-2274922615/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-28 21:26:41 +0000 UTC FinishedAt: 2026-08-28 21:26:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-28 21:26:41 +0000 UTC FinishedAt: 2026-08-28 21:26:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-28 21:26:41 +0000 UTC FinishedAt: 2026-08-28 21:28:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-28 21:26:41 +0000 UTC FinishedAt: 2026-08-28 21:28:42 +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:*1fb6f051-40cd-40f7-8a0d-783c22345c3c,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-workflowp284f/series-workflowp284f-build-action-2274922615/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-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-28 21:28:51 +0000 UTC FinishedAt: 2026-08-29 00:30:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-28 21:28:51 +0000 UTC FinishedAt: 2026-08-29 00:30:12 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"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:*c99079c7-e52b-4863-9b0d-42655bb0bac8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1fb6f051-40cd-40f7-8a0d-783c22345c3c,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-workflowp284f/series-workflowp284f-build-action-462155906/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-workflowp284f/series-workflowp284f-build-action-2274922615/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-28 21:28:51 +0000 UTC FinishedAt: 2026-08-28 21:29:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-28 21:28:51 +0000 UTC FinishedAt: 2026-08-28 21:28:57 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"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-workflowp284f/series-workflowp284f-convert-artifact-688222428/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-28 21:28:51 +0000 UTC FinishedAt: 2026-08-28 21:28:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-28 21:28:51 +0000 UTC FinishedAt: 2026-08-28 21:28:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-28 21:28:52 +0000 UTC FinishedAt: 2026-08-28 21:28:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-28 21:29:02 +0000 UTC FinishedAt: 2026-08-29 00:30:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp284f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alauda_transport","alauda_probe","init_alauda","alauda_check_media","alauda_read_data","alauda_write_data","alauda_write_lba","alauda_free_maps"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8d3ae59288f1e7d58d76558a6ee96d533bc5019f","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_STORAGE_ALAUDA","USB_STORAGE","USB","SCSI"],"series_id":"f0d53c92-bfa9-4bd9-95ec-138de1289886","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-28 21:29:02 +0000 UTC FinishedAt: 2026-08-29 00:30:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*c99079c7-e52b-4863-9b0d-42655bb0bac8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1fb6f051-40cd-40f7-8a0d-783c22345c3c,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-workflowp284f/series-workflowp284f-build-action-462155906/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-workflowp284f/series-workflowp284f-build-action-2274922615/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-workflowp284f/series-workflowp284f-convert-artifact-688222428/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,}