Name: series-workflowvprxf Phase: Succeeded StartedAt: 2026-08-21 12:37:36 +0000 UTC FinishedAt: 2026-08-21 16:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[0] Phase: Succeeded StartedAt: 2026-08-21 12:37:36 +0000 UTC FinishedAt: 2026-08-21 12:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 12:37:36 +0000 UTC FinishedAt: 2026-08-21 12:42:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "e625a9477d12baaff4025c5f9989184a907ea8fc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "e625a9477d12baaff4025c5f9989184a907ea8fc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES" ], "series_id": "be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_tables_newsetelem", "nf_tables_newset", "nf_tables_delset", "nf_tables_commit", "nf_tables_newrule" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX3RhYmxlc19uZXdzZXRlbGVtJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19uZXdzZXQmIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX2RlbHNldCYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfY29tbWl0JiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19uZXdydWxlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgbGlmZWN5Y2xlIGFuZCBjbG9uaW5nIG9mIG5ldGZpbHRlciBzZXQgZXhwcmVzc2lvbnMgKGBuZnRfZXhwcmApIHRvIGZpeCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgKGxpa2VseSBkb3VibGUtZnJlZXMgb3IgdXNlLWFmdGVyLWZyZWVzKS4gSXQgYXZvaWRzIGNyZWF0aW5nIGludGVybWVkaWF0ZSBjbG9uZXMgb2YgZXhwcmVzc2lvbnMgd2hlbiBhZGRpbmcgZWxlbWVudHMgdG8gYSBzZXQgb3IgaW5pdGlhbGl6aW5nIGEgZHluc2V0LCBpbnN0ZWFkIGNvcHlpbmcgcG9pbnRlcnMgYW5kIHVzaW5nIGEgbmV3IGBvdmVycmlkZV9leHByc2AgZmxhZyB0byB0cmFjayBvd25lcnNoaXAgYW5kIGRldGVybWluZSBpZiB0aGUgZXhwcmVzc2lvbnMgc2hvdWxkIGJlIGRlc3Ryb3llZC4gSXQgYWxzbyBzZXRzIGEgYGRlYWRgIGZsYWcgb24gZGVsZXRlZCBzZXRzIGR1cmluZyBjb21taXQgdXBkYXRlcy4gXG5cblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBvYmplY3QgbGlmZWN5Y2xlIGJ1Z3MgKFVBRiwgZG91YmxlLWZyZWUpIHdoaWNoIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIG1lbW9yeSBmb3IgdGhlIHNldCBlbGVtZW50cyB0aGVtc2VsdmVzIGNvbnRpbnVlcyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgKGluIGBuZnRfc2V0X2VsZW1faW5pdGApLCBlbnN1cmluZyBhbGwgZmllbGRzIGFuZCBwYWRkaW5nIGFyZSBmdWxseSB6ZXJvZWQuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmZfdGFibGVzIGxvZ2ljIGZvciBoYW5kbGluZyBzZXQgZWxlbWVudCBleHByZXNzaW9ucyBhbmQgZHluYW1pYyBzZXRzLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgaG93IGV4cHJlc3Npb25zIGFyZSBjbG9uZWQgYW5kIGRlc3Ryb3llZC4gSXQgYWxzbyBtb2RpZmllcyB0aGUgY29tbWl0IHBoYXNlIGZvciBzZXQgZGVsZXRpb24uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0gcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluaywgbWFraW5nIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM4NzdhMjg4MDRiMzY2YzI1YjkyOWYzZGExNWNmN2VkZGEzNjMwY2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMjo0MDo0MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcbmluZGV4IDIzOGY2ZWNiOTBlOTkuLjlkNTk3NDgyMzYzZDkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuQEAgLTg3MCw4ICYjNDM7ODcwLDYgQEAgc3RydWN0IG5mdF9lbGVtX3ByaXYgKm5mdF9zZXRfZWxlbV9pbml0KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXHRcdFx0XHRcdGNvbnN0IHUzMiAqa2V5LCBjb25zdCB1MzIgKmtleV9lbmQsXG4gXHRcdFx0XHRcdGNvbnN0IHUzMiAqZGF0YSxcbiBcdFx0XHRcdFx0dTY0IHRpbWVvdXQsIHU2NCBleHBpcmF0aW9uLCBnZnBfdCBnZnApO1xuLWludCBuZnRfc2V0X2VsZW1fZXhwcl9jbG9uZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLVx0XHRcdCAgICBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHJfYXJyYXlbXSk7XG4gdm9pZCBuZnRfc2V0X2VsZW1fZXhwcl9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfc2V0X2VsZW1fZXhwciAqZWxlbV9leHByKTtcbiB2b2lkIG5mdF9zZXRfZWxlbV9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuaW5kZXggYzExMmVjYzRmY2EzMi4uMzg0NTA1ZjY4MGRlZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuQEAgLTY5MjEsMzkgJiM0Mzs2OTIxLDExIEBAIHN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdG5mX3RhYmxlc19zZXRfZWxlbV9kZXN0cm95KGN0eCwgdGUtXHUwMDNlc2V0LCB0ZS1cdTAwM2VlbGVtc1tpXS5wcml2KTtcbiB9XG4gXG4taW50IG5mdF9zZXRfZWxlbV9leHByX2Nsb25lKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tXHRcdFx0ICAgIHN0cnVjdCBuZnRfZXhwciAqZXhwcl9hcnJheVtdKVxuLXtcbi1cdHN0cnVjdCBuZnRfZXhwciAqZXhwcjtcbi1cdGludCBlcnIsIGksIGs7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzZXQtXHUwMDNlbnVtX2V4cHJzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRleHByID0ga3phbGxvYyhzZXQtXHUwMDNlZXhwcnNbaV0tXHUwMDNlb3BzLVx1MDAzZXNpemUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tXHRcdGlmICghZXhwcilcbi1cdFx0XHRnb3RvIGVycl9leHByO1xuLVxuLVx0XHRlcnIgPSBuZnRfZXhwcl9jbG9uZShleHByLCBzZXQtXHUwMDNlZXhwcnNbaV0sIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbi1cdFx0XHRrZnJlZShleHByKTtcbi1cdFx0XHRnb3RvIGVycl9leHByO1xuLVx0XHR9XG4tXHRcdGV4cHJfYXJyYXlbaV0gPSBleHByO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tXG4tZXJyX2V4cHI6XG4tXHRmb3IgKGsgPSBpIC0gMTsgayBcdTAwM2U9IDA7IGstLSlcbi1cdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlba10pO1xuLVxuLVx0cmV0dXJuIC1FTk9NRU07XG4tfVxuLVxuIHN0YXRpYyBpbnQgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLFxuIFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHJfYXJyYXlbXSxcbi1cdFx0XHRcdCAgIHUzMiBudW1fZXhwcnMpXG4mIzQzO1x0XHRcdFx0ICAgdTMyIG51bV9leHBycywgYm9vbCBvdmVycmlkZV9leHBycylcbiB7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIgKmVsZW1fZXhwciA9IG5mdF9zZXRfZXh0X2V4cHIoZXh0KTtcbiBcdHUzMiBsZW4gPSBzaXplb2Yoc3RydWN0IG5mdF9zZXRfZWxlbV9leHByKTtcbkBAIC02OTc2LDcgJiM0Mzs2OTQ4LDggQEAgc3RhdGljIGludCBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0XHRcdGdvdG8gZXJyX2VsZW1fZXhwcl9zZXR1cDtcbiBcbiBcdFx0ZWxlbV9leHByLVx1MDAzZXNpemUgJiM0Mzs9IGV4cHJfYXJyYXlbaV0tXHUwMDNlb3BzLVx1MDAzZXNpemU7XG4tXHRcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTtcbiYjNDM7XHRcdGlmIChvdmVycmlkZV9leHBycylcbiYjNDM7XHRcdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pO1xuIFx0XHRleHByX2FycmF5W2ldID0gTlVMTDtcbiBcdH1cbiBcbkBAIC02OTg0LDcgJiM0Mzs2OTU3LDkgQEAgc3RhdGljIGludCBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFxuIGVycl9lbGVtX2V4cHJfc2V0dXA6XG4gXHRmb3IgKDsgaSBcdTAwM2MgbnVtX2V4cHJzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XG4mIzQzO1x0XHRpZiAob3ZlcnJpZGVfZXhwcnMpXG4mIzQzO1x0XHRcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTtcbiYjNDM7XG4gXHRcdGV4cHJfYXJyYXlbaV0gPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTcyODAsNiAmIzQzOzcyNTUsNyBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbiBcdHN0cnVjdCBuZnRfc2V0X2JpbmRpbmcgKmJpbmRpbmc7XG4gXHRzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2O1xuIFx0c3RydWN0IG5mdF9vYmplY3QgKm9iaiA9IE5VTEw7XG4mIzQzO1x0Ym9vbCBvdmVycmlkZV9leHBycyA9IGZhbHNlO1xuIFx0c3RydWN0IG5mdF91c2VyZGF0YSAqdWRhdGE7XG4gXHRzdHJ1Y3QgbmZ0X2RhdGFfZGVzYyBkZXNjO1xuIFx0ZW51bSBuZnRfcmVnaXN0ZXJzIGRyZWc7XG5AQCAtNzM4NSw2ICYjNDM7NzM2MSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFxuIFx0XHRleHByX2FycmF5WzBdID0gZXhwcjtcbiBcdFx0bnVtX2V4cHJzID0gMTtcbiYjNDM7XHRcdG92ZXJyaWRlX2V4cHJzID0gdHJ1ZTtcbiBcbiBcdFx0aWYgKHNldC1cdTAwM2VudW1fZXhwcnMgXHUwMDI2XHUwMDI2IHNldC1cdTAwM2VleHByc1swXS1cdTAwM2VvcHMgIT0gZXhwci1cdTAwM2VvcHMpIHtcbiBcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbkBAIC03NDEzLDYgJiM0Mzs3MzkwLDcgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXHRcdFx0fVxuIFx0XHRcdGV4cHJfYXJyYXlbaV0gPSBleHByO1xuIFx0XHRcdG51bV9leHBycyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdG92ZXJyaWRlX2V4cHJzID0gdHJ1ZTtcbiBcbiBcdFx0XHRpZiAoc2V0LVx1MDAzZW51bV9leHBycyBcdTAwMjZcdTAwMjYgZXhwci1cdTAwM2VvcHMgIT0gc2V0LVx1MDAzZWV4cHJzW2ldLVx1MDAzZW9wcykge1xuIFx0XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG5AQCAtNzQyNiw5ICYjNDM7NzQwNCw4IEBAIHN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKHNldC1cdTAwM2VudW1fZXhwcnMgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICEoZmxhZ3MgXHUwMDI2IE5GVF9TRVRfRUxFTV9JTlRFUlZBTF9FTkQpKSB7XG4tXHRcdGVyciA9IG5mdF9zZXRfZWxlbV9leHByX2Nsb25lKGN0eCwgc2V0LCBleHByX2FycmF5KTtcbi1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIGVycl9zZXRfZWxlbV9leHByX2Nsb25lO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2V0LVx1MDAzZW51bV9leHByczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGV4cHJfYXJyYXlbaV0gPSBzZXQtXHUwMDNlZXhwcnNbaV07XG4gXG4gXHRcdG51bV9leHBycyA9IHNldC1cdTAwM2VudW1fZXhwcnM7XG4gXHR9XG5AQCAtNzU2Nyw3ICYjNDM7NzU0NCw4IEBAIHN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFx0XHR1ZGF0YS1cdTAwM2VsZW4gPSB1bGVuIC0gMTtcbiBcdFx0bmxhX21lbWNweShcdTAwMjZ1ZGF0YS1cdTAwM2VkYXRhLCBubGFbTkZUQV9TRVRfRUxFTV9VU0VSREFUQV0sIHVsZW4pO1xuIFx0fVxuLVx0ZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoY3R4LCBcdTAwMjZ0bXBsLCBleHQsIGV4cHJfYXJyYXksIG51bV9leHBycyk7XG4mIzQzO1x0ZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoY3R4LCBcdTAwMjZ0bXBsLCBleHQsIGV4cHJfYXJyYXksIG51bV9leHBycyxcbiYjNDM7XHRcdFx0XHQgICAgICBvdmVycmlkZV9leHBycyk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9lbGVtX2ZyZWU7XG4gXG5AQCAtNzY3NSw5ICYjNDM7NzY1MywxMSBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbiBlcnJfcGFyc2Vfa2V5OlxuIFx0bmZ0X2RhdGFfcmVsZWFzZShcdTAwMjZlbGVtLmtleS52YWwsIE5GVF9EQVRBX1ZBTFVFKTtcbiBlcnJfc2V0X2VsZW1fZXhwcjpcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9leHBycyBcdTAwMjZcdTAwMjYgZXhwcl9hcnJheVtpXTsgaSYjNDM7JiM0MzspXG4tXHRcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTtcbi1lcnJfc2V0X2VsZW1fZXhwcl9jbG9uZTpcbiYjNDM7XHRpZiAob3ZlcnJpZGVfZXhwcnMpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9leHBycyBcdTAwMjZcdTAwMjYgZXhwcl9hcnJheVtpXTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTA4OTQsNiAmIzQzOzEwODc0LDEwIEBAIHN0YXRpYyB2b2lkIG5mdF9zZXRfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0XHRuZnRfY3R4X3VwZGF0ZShjdHgsIHRyYW5zKTtcbiBcbiBcdFx0c3dpdGNoICh0cmFucy1cdTAwM2Vtc2dfdHlwZSkge1xuJiM0MztcdFx0Y2FzZSBORlRfTVNHX0RFTFNFVDpcbiYjNDM7XHRcdGNhc2UgTkZUX01TR19ERVNUUk9ZU0VUOlxuJiM0MztcdFx0XHRuZnRfdHJhbnNfc2V0KHRyYW5zKS1cdTAwM2VkZWFkID0gMTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgTkZUX01TR19ERUxTRVRFTEVNOlxuIFx0XHRcdHRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTtcbiBcdFx0XHRpZiAoIXRlLVx1MDAzZXNldC1cdTAwM2VvcHMtXHUwMDNlY29tbWl0KVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmNcbmluZGV4IGVlOWQzZTdiMWVjZjEuLjgzZTU2YjFhYTg1ODUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmNcbkBAIC0xOSw3ICYjNDM7MTksOCBAQCBzdHJ1Y3QgbmZ0X2R5bnNldCB7XG4gXHR1OFx0XHRcdFx0c3JlZ19rZXk7XG4gXHR1OFx0XHRcdFx0c3JlZ19kYXRhO1xuIFx0Ym9vbFx0XHRcdFx0aW52ZXJ0O1xuLVx0Ym9vbFx0XHRcdFx0ZXhwcjtcbiYjNDM7XHRib29sXHRcdFx0XHRleHByOjEsXG4mIzQzO1x0XHRcdFx0XHRvdmVycmlkZV9leHByczoxO1xuIFx0dThcdFx0XHRcdG51bV9leHBycztcbiBcdHU2NFx0XHRcdFx0dGltZW91dDtcbiBcdHN0cnVjdCBuZnRfZXhwclx0XHRcdCpleHByX2FycmF5W05GVF9TRVRfRVhQUl9NQVhdO1xuQEAgLTI1Nyw2ICYjNDM7MjU4LDcgQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcbiBcdFx0cHJpdi1cdTAwM2VudW1fZXhwcnMmIzQzOyYjNDM7O1xuIFx0XHRwcml2LVx1MDAzZWV4cHJfYXJyYXlbMF0gPSBkeW5zZXRfZXhwcjtcbiYjNDM7XHRcdHByaXYtXHUwMDNlb3ZlcnJpZGVfZXhwcnMgPSB0cnVlO1xuIFxuIFx0XHRpZiAoc2V0LVx1MDAzZW51bV9leHBycyBcdTAwM2UgMSB8fFxuIFx0XHQgICAgKHNldC1cdTAwM2VudW1fZXhwcnMgPT0gMSBcdTAwMjZcdTAwMjZcbkBAIC0yODksNiAmIzQzOzI5MSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2R5bnNldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0fVxuIFx0XHRcdHByaXYtXHUwMDNlZXhwcl9hcnJheVtpXSA9IGR5bnNldF9leHByO1xuIFx0XHRcdHByaXYtXHUwMDNlbnVtX2V4cHJzJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VvdmVycmlkZV9leHBycyA9IHRydWU7XG4gXG4gXHRcdFx0aWYgKHNldC1cdTAwM2VudW1fZXhwcnMpIHtcbiBcdFx0XHRcdGlmIChpIFx1MDAzZT0gc2V0LVx1MDAzZW51bV9leHBycykge1xuQEAgLTMwNyw5ICYjNDM7MzEwLDggQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0XHRnb3RvIGVycl9leHByX2ZyZWU7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoc2V0LVx1MDAzZW51bV9leHBycyBcdTAwM2UgMCkge1xuLVx0XHRlcnIgPSBuZnRfc2V0X2VsZW1fZXhwcl9jbG9uZShjdHgsIHNldCwgcHJpdi1cdTAwM2VleHByX2FycmF5KTtcbi1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2V0LVx1MDAzZW51bV9leHByczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlZXhwcl9hcnJheVtpXSA9IHNldC1cdTAwM2VleHByc1tpXTtcbiBcbiBcdFx0cHJpdi1cdTAwM2VudW1fZXhwcnMgPSBzZXQtXHUwMDNlbnVtX2V4cHJzO1xuIFx0fVxuQEAgLTMzOSw4ICYjNDM7MzQxLDEwIEBAIHN0YXRpYyBpbnQgbmZ0X2R5bnNldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfZXhwcl9mcmVlOlxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJpdi1cdTAwM2VudW1fZXhwcnM7IGkmIzQzOyYjNDM7KVxuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgcHJpdi1cdTAwM2VleHByX2FycmF5W2ldKTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VvdmVycmlkZV9leHBycykge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJpdi1cdTAwM2VudW1fZXhwcnM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgcHJpdi1cdTAwM2VleHByX2FycmF5W2ldKTtcbiYjNDM7XHR9XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0zNjcsOSAmIzQzOzM3MSwxMCBAQCBzdGF0aWMgdm9pZCBuZnRfZHluc2V0X2Rlc3Ryb3koY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdHN0cnVjdCBuZnRfZHluc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJpdi1cdTAwM2VudW1fZXhwcnM7IGkmIzQzOyYjNDM7KVxuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgcHJpdi1cdTAwM2VleHByX2FycmF5W2ldKTtcbi1cbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VvdmVycmlkZV9leHBycykge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJpdi1cdTAwM2VudW1fZXhwcnM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgcHJpdi1cdTAwM2VleHByX2FycmF5W2ldKTtcbiYjNDM7XHR9XG4gXHRuZl90YWJsZXNfZGVzdHJveV9zZXQoY3R4LCBwcml2LVx1MDAzZXNldCk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl90YWJsZXNfbmV3c2V0ZWxlbSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3c2V0JiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19kZWxzZXQmIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX2NvbW1pdCYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3cnVsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5mX3RhYmxlcyBsb2dpYyBmb3IgaGFuZGxpbmcgc2V0IGVsZW1lbnQgZXhwcmVzc2lvbnMgYW5kIGR5bmFtaWMgc2V0cywgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBleHByZXNzaW9ucyBhcmUgY2xvbmVkIGFuZCBkZXN0cm95ZWQuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvbW1pdCBwaGFzZSBmb3Igc2V0IGRlbGV0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmssIG1ha2luZyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzODc3YTI4ODA0YjM2NmMyNWI5MjlmM2RhMTVjZjdlZGRhMzYzMGNmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTI6NDA6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgKaW5kZXggMjM4ZjZlY2I5MGU5OS4uOWQ1OTc0ODIzNjNkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaApAQCAtODcwLDggJiM0Mzs4NzAsNiBAQCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqbmZ0X3NldF9lbGVtX2luaXQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCwKIAkJCQkJY29uc3QgdTMyICprZXksIGNvbnN0IHUzMiAqa2V5X2VuZCwKIAkJCQkJY29uc3QgdTMyICpkYXRhLAogCQkJCQl1NjQgdGltZW91dCwgdTY0IGV4cGlyYXRpb24sIGdmcF90IGdmcCk7Ci1pbnQgbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCwKLQkJCSAgICBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHJfYXJyYXlbXSk7CiB2b2lkIG5mdF9zZXRfZWxlbV9leHByX2Rlc3Ryb3koY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAkJCSAgICAgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIgKmVsZW1fZXhwcik7CiB2b2lkIG5mdF9zZXRfZWxlbV9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCmluZGV4IGMxMTJlY2M0ZmNhMzIuLjM4NDUwNWY2ODBkZWYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCkBAIC02OTIxLDM5ICYjNDM7NjkyMSwxMSBAQCBzdGF0aWMgdm9pZCBuZnRfdHJhbnNfZWxlbXNfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCQluZl90YWJsZXNfc2V0X2VsZW1fZGVzdHJveShjdHgsIHRlLSZndDtzZXQsIHRlLSZndDtlbGVtc1tpXS5wcml2KTsKIH0KIAotaW50IG5mdF9zZXRfZWxlbV9leHByX2Nsb25lKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsCi0JCQkgICAgc3RydWN0IG5mdF9leHByICpleHByX2FycmF5W10pCi17Ci0Jc3RydWN0IG5mdF9leHByICpleHByOwotCWludCBlcnIsIGksIGs7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgc2V0LSZndDtudW1fZXhwcnM7IGkmIzQzOyYjNDM7KSB7Ci0JCWV4cHIgPSBremFsbG9jKHNldC0mZ3Q7ZXhwcnNbaV0tJmd0O29wcy0mZ3Q7c2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKLQkJaWYgKCFleHByKQotCQkJZ290byBlcnJfZXhwcjsKLQotCQllcnIgPSBuZnRfZXhwcl9jbG9uZShleHByLCBzZXQtJmd0O2V4cHJzW2ldLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwotCQlpZiAoZXJyICZsdDsgMCkgewotCQkJa2ZyZWUoZXhwcik7Ci0JCQlnb3RvIGVycl9leHByOwotCQl9Ci0JCWV4cHJfYXJyYXlbaV0gPSBleHByOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfZXhwcjoKLQlmb3IgKGsgPSBpIC0gMTsgayAmZ3Q7PSAwOyBrLS0pCi0JCW5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2tdKTsKLQotCXJldHVybiAtRU5PTUVNOwotfQotCiBzdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJCQkJICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0X3RtcGwgKnRtcGwsCiAJCQkJICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQsCiAJCQkJICAgc3RydWN0IG5mdF9leHByICpleHByX2FycmF5W10sCi0JCQkJICAgdTMyIG51bV9leHBycykKJiM0MzsJCQkJICAgdTMyIG51bV9leHBycywgYm9vbCBvdmVycmlkZV9leHBycykKIHsKIAlzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIgKmVsZW1fZXhwciA9IG5mdF9zZXRfZXh0X2V4cHIoZXh0KTsKIAl1MzIgbGVuID0gc2l6ZW9mKHN0cnVjdCBuZnRfc2V0X2VsZW1fZXhwcik7CkBAIC02OTc2LDcgJiM0Mzs2OTQ4LDggQEAgc3RhdGljIGludCBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCQkJZ290byBlcnJfZWxlbV9leHByX3NldHVwOwogCiAJCWVsZW1fZXhwci0mZ3Q7c2l6ZSAmIzQzOz0gZXhwcl9hcnJheVtpXS0mZ3Q7b3BzLSZndDtzaXplOwotCQluZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7CiYjNDM7CQlpZiAob3ZlcnJpZGVfZXhwcnMpCiYjNDM7CQkJbmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pOwogCQlleHByX2FycmF5W2ldID0gTlVMTDsKIAl9CiAKQEAgLTY5ODQsNyAmIzQzOzY5NTcsOSBAQCBzdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAKIGVycl9lbGVtX2V4cHJfc2V0dXA6CiAJZm9yICg7IGkgJmx0OyBudW1fZXhwcnM7IGkmIzQzOyYjNDM7KSB7Ci0JCW5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTsKJiM0MzsJCWlmIChvdmVycmlkZV9leHBycykKJiM0MzsJCQluZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7CiYjNDM7CiAJCWV4cHJfYXJyYXlbaV0gPSBOVUxMOwogCX0KIApAQCAtNzI4MCw2ICYjNDM7NzI1NSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LAogCXN0cnVjdCBuZnRfc2V0X2JpbmRpbmcgKmJpbmRpbmc7CiAJc3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdjsKIAlzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqID0gTlVMTDsKJiM0MzsJYm9vbCBvdmVycmlkZV9leHBycyA9IGZhbHNlOwogCXN0cnVjdCBuZnRfdXNlcmRhdGEgKnVkYXRhOwogCXN0cnVjdCBuZnRfZGF0YV9kZXNjIGRlc2M7CiAJZW51bSBuZnRfcmVnaXN0ZXJzIGRyZWc7CkBAIC03Mzg1LDYgJiM0Mzs3MzYxLDcgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsCiAKIAkJZXhwcl9hcnJheVswXSA9IGV4cHI7CiAJCW51bV9leHBycyA9IDE7CiYjNDM7CQlvdmVycmlkZV9leHBycyA9IHRydWU7CiAKIAkJaWYgKHNldC0mZ3Q7bnVtX2V4cHJzICZhbXA7JmFtcDsgc2V0LSZndDtleHByc1swXS0mZ3Q7b3BzICE9IGV4cHItJmd0O29wcykgewogCQkJZXJyID0gLUVPUE5PVFNVUFA7CkBAIC03NDEzLDYgJiM0Mzs3MzkwLDcgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsCiAJCQl9CiAJCQlleHByX2FycmF5W2ldID0gZXhwcjsKIAkJCW51bV9leHBycyYjNDM7JiM0Mzs7CiYjNDM7CQkJb3ZlcnJpZGVfZXhwcnMgPSB0cnVlOwogCiAJCQlpZiAoc2V0LSZndDtudW1fZXhwcnMgJmFtcDsmYW1wOyBleHByLSZndDtvcHMgIT0gc2V0LSZndDtleHByc1tpXS0mZ3Q7b3BzKSB7CiAJCQkJZXJyID0gLUVPUE5PVFNVUFA7CkBAIC03NDI2LDkgJiM0Mzs3NDA0LDggQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsCiAJCX0KIAl9IGVsc2UgaWYgKHNldC0mZ3Q7bnVtX2V4cHJzICZndDsgMCAmYW1wOyZhbXA7CiAJCSAgICEoZmxhZ3MgJmFtcDsgTkZUX1NFVF9FTEVNX0lOVEVSVkFMX0VORCkpIHsKLQkJZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY3R4LCBzZXQsIGV4cHJfYXJyYXkpOwotCQlpZiAoZXJyICZsdDsgMCkKLQkJCWdvdG8gZXJyX3NldF9lbGVtX2V4cHJfY2xvbmU7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgc2V0LSZndDtudW1fZXhwcnM7IGkmIzQzOyYjNDM7KQomIzQzOwkJCWV4cHJfYXJyYXlbaV0gPSBzZXQtJmd0O2V4cHJzW2ldOwogCiAJCW51bV9leHBycyA9IHNldC0mZ3Q7bnVtX2V4cHJzOwogCX0KQEAgLTc1NjcsNyAmIzQzOzc1NDQsOCBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCwKIAkJdWRhdGEtJmd0O2xlbiA9IHVsZW4gLSAxOwogCQlubGFfbWVtY3B5KCZhbXA7dWRhdGEtJmd0O2RhdGEsIG5sYVtORlRBX1NFVF9FTEVNX1VTRVJEQVRBXSwgdWxlbik7CiAJfQotCWVyciA9IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKGN0eCwgJmFtcDt0bXBsLCBleHQsIGV4cHJfYXJyYXksIG51bV9leHBycyk7CiYjNDM7CWVyciA9IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKGN0eCwgJmFtcDt0bXBsLCBleHQsIGV4cHJfYXJyYXksIG51bV9leHBycywKJiM0MzsJCQkJICAgICAgb3ZlcnJpZGVfZXhwcnMpOwogCWlmIChlcnIgJmx0OyAwKQogCQlnb3RvIGVycl9lbGVtX2ZyZWU7CiAKQEAgLTc2NzUsOSAmIzQzOzc2NTMsMTEgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsCiBlcnJfcGFyc2Vfa2V5OgogCW5mdF9kYXRhX3JlbGVhc2UoJmFtcDtlbGVtLmtleS52YWwsIE5GVF9EQVRBX1ZBTFVFKTsKIGVycl9zZXRfZWxlbV9leHByOgotCWZvciAoaSA9IDA7IGkgJmx0OyBudW1fZXhwcnMgJmFtcDsmYW1wOyBleHByX2FycmF5W2ldOyBpJiM0MzsmIzQzOykKLQkJbmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pOwotZXJyX3NldF9lbGVtX2V4cHJfY2xvbmU6CiYjNDM7CWlmIChvdmVycmlkZV9leHBycykgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9leHBycyAmYW1wOyZhbXA7IGV4cHJfYXJyYXlbaV07IGkmIzQzOyYjNDM7KQomIzQzOwkJCW5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTsKJiM0MzsJfQomIzQzOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTEwODk0LDYgJiM0MzsxMDg3NCwxMCBAQCBzdGF0aWMgdm9pZCBuZnRfc2V0X2NvbW1pdF91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwKIAkJbmZ0X2N0eF91cGRhdGUoY3R4LCB0cmFucyk7CiAKIAkJc3dpdGNoICh0cmFucy0mZ3Q7bXNnX3R5cGUpIHsKJiM0MzsJCWNhc2UgTkZUX01TR19ERUxTRVQ6CiYjNDM7CQljYXNlIE5GVF9NU0dfREVTVFJPWVNFVDoKJiM0MzsJCQluZnRfdHJhbnNfc2V0KHRyYW5zKS0mZ3Q7ZGVhZCA9IDE7CiYjNDM7CQkJYnJlYWs7CiAJCWNhc2UgTkZUX01TR19ERUxTRVRFTEVNOgogCQkJdGUgPSBuZnRfdHJhbnNfY29udGFpbmVyX2VsZW0odHJhbnMpOwogCQkJaWYgKCF0ZS0mZ3Q7c2V0LSZndDtvcHMtJmd0O2NvbW1pdCkKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMKaW5kZXggZWU5ZDNlN2IxZWNmMS4uODNlNTZiMWFhODU4NSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMKQEAgLTE5LDcgJiM0MzsxOSw4IEBAIHN0cnVjdCBuZnRfZHluc2V0IHsKIAl1OAkJCQlzcmVnX2tleTsKIAl1OAkJCQlzcmVnX2RhdGE7CiAJYm9vbAkJCQlpbnZlcnQ7Ci0JYm9vbAkJCQlleHByOwomIzQzOwlib29sCQkJCWV4cHI6MSwKJiM0MzsJCQkJCW92ZXJyaWRlX2V4cHJzOjE7CiAJdTgJCQkJbnVtX2V4cHJzOwogCXU2NAkJCQl0aW1lb3V0OwogCXN0cnVjdCBuZnRfZXhwcgkJCSpleHByX2FycmF5W05GVF9TRVRfRVhQUl9NQVhdOwpAQCAtMjU3LDYgJiM0MzsyNTgsNyBAQCBzdGF0aWMgaW50IG5mdF9keW5zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCiAJCXByaXYtJmd0O251bV9leHBycyYjNDM7JiM0Mzs7CiAJCXByaXYtJmd0O2V4cHJfYXJyYXlbMF0gPSBkeW5zZXRfZXhwcjsKJiM0MzsJCXByaXYtJmd0O292ZXJyaWRlX2V4cHJzID0gdHJ1ZTsKIAogCQlpZiAoc2V0LSZndDtudW1fZXhwcnMgJmd0OyAxIHx8CiAJCSAgICAoc2V0LSZndDtudW1fZXhwcnMgPT0gMSAmYW1wOyZhbXA7CkBAIC0yODksNiAmIzQzOzI5MSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2R5bnNldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJCQl9CiAJCQlwcml2LSZndDtleHByX2FycmF5W2ldID0gZHluc2V0X2V4cHI7CiAJCQlwcml2LSZndDtudW1fZXhwcnMmIzQzOyYjNDM7OwomIzQzOwkJCXByaXYtJmd0O292ZXJyaWRlX2V4cHJzID0gdHJ1ZTsKIAogCQkJaWYgKHNldC0mZ3Q7bnVtX2V4cHJzKSB7CiAJCQkJaWYgKGkgJmd0Oz0gc2V0LSZndDtudW1fZXhwcnMpIHsKQEAgLTMwNyw5ICYjNDM7MzEwLDggQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAkJCWdvdG8gZXJyX2V4cHJfZnJlZTsKIAkJfQogCX0gZWxzZSBpZiAoc2V0LSZndDtudW1fZXhwcnMgJmd0OyAwKSB7Ci0JCWVyciA9IG5mdF9zZXRfZWxlbV9leHByX2Nsb25lKGN0eCwgc2V0LCBwcml2LSZndDtleHByX2FycmF5KTsKLQkJaWYgKGVyciAmbHQ7IDApCi0JCQlyZXR1cm4gZXJyOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHNldC0mZ3Q7bnVtX2V4cHJzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlwcml2LSZndDtleHByX2FycmF5W2ldID0gc2V0LSZndDtleHByc1tpXTsKIAogCQlwcml2LSZndDtudW1fZXhwcnMgPSBzZXQtJmd0O251bV9leHByczsKIAl9CkBAIC0zMzksOCAmIzQzOzM0MSwxMCBAQCBzdGF0aWMgaW50IG5mdF9keW5zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCXJldHVybiAwOwogCiBlcnJfZXhwcl9mcmVlOgotCWZvciAoaSA9IDA7IGkgJmx0OyBwcml2LSZndDtudW1fZXhwcnM7IGkmIzQzOyYjNDM7KQotCQluZnRfZXhwcl9kZXN0cm95KGN0eCwgcHJpdi0mZ3Q7ZXhwcl9hcnJheVtpXSk7CiYjNDM7CWlmIChwcml2LSZndDtvdmVycmlkZV9leHBycykgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHByaXYtJmd0O251bV9leHByczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJbmZ0X2V4cHJfZGVzdHJveShjdHgsIHByaXYtJmd0O2V4cHJfYXJyYXlbaV0pOwomIzQzOwl9CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzY3LDkgJiM0MzszNzEsMTAgQEAgc3RhdGljIHZvaWQgbmZ0X2R5bnNldF9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJc3RydWN0IG5mdF9keW5zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IHByaXYtJmd0O251bV9leHByczsgaSYjNDM7JiM0MzspCi0JCW5mdF9leHByX2Rlc3Ryb3koY3R4LCBwcml2LSZndDtleHByX2FycmF5W2ldKTsKLQomIzQzOwlpZiAocHJpdi0mZ3Q7b3ZlcnJpZGVfZXhwcnMpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBwcml2LSZndDtudW1fZXhwcnM7IGkmIzQzOyYjNDM7KQomIzQzOwkJCW5mdF9leHByX2Rlc3Ryb3koY3R4LCBwcml2LSZndDtleHByX2FycmF5W2ldKTsKJiM0MzsJfQogCW5mX3RhYmxlc19kZXN0cm95X3NldChjdHgsIHByaXYtJmd0O3NldCk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg4NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE5ldGZpbHRlciBuZl90YWJsZXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0b3VjaGluZyBjb3JlIG5mX3RhYmxlcyBjb2RlOiBgbmZfdGFibGVzX2FwaS5jYCwgYG5mX3RhYmxlcy5oYCwgYW5kIGBuZnRfZHluc2V0LmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBleHByZXNzaW9uIGNsb25pbmcgYW5kIHNldHVwIGluIGBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cGAgYW5kIGBuZnRfZHluc2V0X2luaXRgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGRpdGNoaW5nIGBuZnRfc2V0X2VsZW1fZXhwcl9jbG9uZWAgYW5kIGFyZSBub3cgcmVseWluZyBvbiB0aGlzIGBvdmVycmlkZV9leHByc2AgYm9vbGVhbiBmb3IgZXhwcmVzc2lvbiBkZXN0cnVjdGlvbiwgd2hpY2ggaXMgYW4gaW50ZXJlc3Rpbmcgc2hpZnQgaW4gc3RyYXRlZ3kuIEkgc2VlIHRoZXkgYWxzbyBhZGRlZCBhIGBkZWFkYCBmbGFnIGNoZWNrIGluIGBuZnRfc2V0X2NvbW1pdF91cGRhdGVgLCBzcGVjaWZpY2FsbHkgZm9yIGBORlRfTVNHX0RFTFNFVGAgYW5kIGBORlRfTVNHX0RFU1RST1lTRVRgLgoKVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgcHJldHR5IHNpZ25pZmljYW50IG9uZSBhdCB0aGF0IOKAkyBpbXBhY3RpbmcgaG93IHNldHMgYW5kLCBlc3BlY2lhbGx5LCBkeW5hbWljIHNldHMgbWFuYWdlIGV4cHJlc3Npb25zLiBUaGlzIGlzIGdvb2QgdG8ga25vdyBmcm9tIGEgc2VjdXJpdHkgc3RhbmRwb2ludC4gSXMgaXQgcmVhY2hhYmxlPyBBYnNvbHV0ZWx5LCBuZl90YWJsZXMgaXMgZXhwb3NlZCB0aHJvdWdoIG5ldGxpbmssIHNvIGl0JiMzOTtzIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlLCBhbmQgdGh1cyBvZiBpbnRlcmVzdC4gSXMgaXQgd29ydGggZnV6emluZz8gV2l0aG91dCBhIGRvdWJ0LiBOZl90YWJsZXMgaXMgYSBrbm93biBhdHRhY2sgc3VyZmFjZSwgYW5kIHRoaXMgY2hhbmdlIGNvdWxkIGludHJvZHVjZSBuZXcgdnVsbmVyYWJpbGl0aWVzIG9yIGV4cG9zZSBleGlzdGluZyBvbmVzLgoKU28sIHdoZXJlIGRvIEkgZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzPyBUaGUga2V5IGZ1bmN0aW9ucyBoZXJlIGFyZSBwcmV0dHkgY2xlYXI6IGBuZnRfYWRkX3NldF9lbGVtYCwgYG5mdF9keW5zZXRfaW5pdGAsIGFuZCBgbmZ0X3NldF9jb21taXRfdXBkYXRlYC4gTGV0IG1lIGNoZWNrIGlmIGBuZnRfYWRkX3NldF9lbGVtYCBpcyBzdGF0aWM7IG9rYXksIHllcywgaXQgaXMuIFNpbmNlIGl0JiMzOTtzIHN0YXRpYywgSSBzaG91bGQgY2hlY2sgd2hvIGNhbGxzIGl0IC0gYG5mX3RhYmxlc19uZXdzZXRlbGVtYCBkb2VzLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byBgbmZfdGFibGVzX2FwaS5jYCBhbmQgZmlndXJlIG91dCB3aG8gZWxzZSBpcyBjYWxsaW5nIGBuZnRfYWRkX3NldF9lbGVtYCwganVzdCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhlIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9hZGRfc2V0X2VsZW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MjI0PXN0YXRpYyB1MzIgbmZ0X3NldF9tYXhzaXplKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzI0NC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcyNDU6c3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MjQ2LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLCB1MzIgbmxtc2dfZmxhZ3MpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzY2ND1zdGF0aWMgaW50IG5mX3RhYmxlc19uZXdzZXRlbGVtKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzcwMS1cdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgbmxhW05GVEFfU0VUX0VMRU1fTElTVF9FTEVNRU5UU10sIHJlbSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzcwMjpcdFx0ZXJyID0gbmZ0X2FkZF9zZXRfZWxlbShcdTAwMjZjdHgsIHNldCwgYXR0ciwgaW5mby1cdTAwM2VubGgtXHUwMDNlbmxtc2dfZmxhZ3MpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzcwMy1cdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNDYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIER5bmFtaWNzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBuZl90YWJsZXNgIHNpZGUgb2YgdGhpbmdzLCBzcGVjaWZpY2FsbHkgdGhlIGR5bmFtaWMgc2V0IGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAgYXMgdGhlIGxpa2VseSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgbmV3IHNldCBlbGVtZW50cy4gVGhhdCBmZWVscyByaWdodCwgYnV0Li4ud2FpdCBhIG1pbnV0ZSwgd2hhdCBhYm91dCBgbmZ0X2R5bnNldF9pbml0YD8gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IGJlaW5nIHByZXR0eSBjcml0aWNhbCwgYnV0IGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpY2AsIHNvIGhvdyBpcyBpdCBldmVuIGdldHRpbmcgY2FsbGVkPwoKQWxyaWdodCwgdGltZSB0byBzaGlmdCBnZWFycyBhbmQgZHJpbGwgZG93biBvbiBgbmZ0X2R5bnNldC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBuZnRfZHluc2V0X2luaXRgIGlzIGludm9rZWQsIG9yIGhvdyB0aGUgZHluYW1pYyBzZXQgZnVuY3Rpb25hbGl0eSBpcyByZWdpc3RlcmVkIHdpdGhpbiB0aGUgbGFyZ2VyIG5ldGZpbHRlciBmcmFtZXdvcmsuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxlcnMgb2YgdGhhdCBmdW5jdGlvbiwgb3IgbG9vayBmb3IgY2x1ZXMgYWJvdXQgaG93IGl04oCZcyBiZWluZyBsaW5rZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIE5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bSB0aGlua2luZyBhIHRob3JvdWdoIGV4YW1pbmF0aW9uIG9mIGBuZnRfZHluc2V0LmNgIGlzIHRoZSBrZXkgbmV4dCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZHluYW1pYyBzZXQgaW5pdGlhbGl6YXRpb24gYW5kIG1hbmFnZW1lbnQgaXMgb3JnYW5pemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9keW5zZXRfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jPTE1OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2R5bnNldF9wb2xpY3lbTkZUQV9EWU5TRVRfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jLTE3MS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jOjE3MjpzdGF0aWMgaW50IG5mdF9keW5zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtMTczLVx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYz00Mjk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2R5bnNldF9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtNDMyLVx0LmV2YWxcdFx0PSBuZnRfZHluc2V0X2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYzo0MzM6XHQuaW5pdFx0XHQ9IG5mdF9keW5zZXRfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jLTQzNC1cdC5kZXN0cm95XHQ9IG5mdF9keW5zZXRfZGVzdHJveSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjQxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIHdpdGggdGhlIGJvbGRlZCBoZWFkZXIgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBOZXRmaWx0ZXIgRHluYW1pY3MqKgoKQWxyaWdodCwgc28gdGhlIGNsdWUgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGlzIGluaXRpYWxpemVkIGluIGBuZnRfZHluc2V0X29wcy5pbml0YC4gVGhhdCYjMzk7cyBhIGtleSBzdGFydGluZyBwb2ludC4gRnJvbSB0aGVyZSwgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBleHByZXNzaW9uIGl0c2VsZiwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGR5bmFtaWMgc2V0IG9wZXJhdGlvbnMsIGhhcHBlbnMgdGhyb3VnaCBgbmZ0X2V4cHJfaW5pdGAuIEdvdCBpdC4gTm93LCBnaXZlbiB0aGF0IGNvbnRleHQsIHRoZSBjcml0aWNhbCBmdW5jdGlvbiB0byBleGFtaW5lIG5leHQsIHdoaWNoIHdpbGwgZXhwb3NlIGhvdyB0aGUgZHluYW1pYyBzZXQgdXBkYXRlcyBoYXBwZW4gaXMgYG5mdF9zZXRfY29tbWl0X3VwZGF0ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyAqdGhvc2UqIGdldCBjb21taXR0ZWQuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzLCBJIHN1c3BlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3NldF9jb21taXRfdXBkYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA4NDg9c3RhdGljIHZvaWQgbmZfdGFibGVzX2NvbW1pdF9hdWRpdF9sb2coc3RydWN0IGxpc3RfaGVhZCAqYWRsLCB1MzIgZ2VuZXJhdGlvbilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDg2Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwODYzOnN0YXRpYyB2b2lkIG5mdF9zZXRfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA4NjQtXHRcdFx0XHQgIHN0cnVjdCBuZnRhYmxlc19wZXJuZXQgKm5mdF9uZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA5MTc9c3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDk5Ny1cdC8qIHN0ZXAgMi4gIE1ha2UgcnVsZXNfZ2VuX1ggdmlzaWJsZSB0byBwYWNrZXQgcGF0aCAqL1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA5OTg6XHRuZnRfc2V0X2NvbW1pdF91cGRhdGUoXHUwMDI2Y3R4LCBuZnRfbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwOTk5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBOZXRmaWx0ZXIgVGFibGVzIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBzdGFydGluZyB3aXRoIGBuZl90YWJsZXNfY29tbWl0YCDigJMgdGhhdCYjMzk7cyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIHdoZXJlIGNoYW5nZXMgYXJlIGZpbmFsaXplZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIGFyb3VuZCB0aGF0IHBvaW50LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBjb2RlIHBhdGhzIHRoYXQgbGVhZCB1cCB0byBpdC4KCkkmIzM5O3ZlIGlkZW50aWZpZWQgc29tZSBrZXkgc3ltYm9scyB0byB6ZXJvIGluIG9uOiBgbmZfdGFibGVzX25ld3NldGVsZW1gLCB3aGljaCBwcm9iYWJseSBkZWFscyB3aXRoIGFkZGluZyBlbGVtZW50cyB0byBzZXRzIChhIGNvcmUgbmV0ZmlsdGVyIGNvbmNlcHQpLCBgbmZfdGFibGVzX2NvbW1pdGAgaXRzZWxmICh0byB1bmRlcnN0YW5kIGl0cyBleGFjdCByb2xlIGluIHRoZSBwcm9jZXNzKSwgYW5kIGBuZnRfZXhwcl9pbml0YC4gT3IsIG1vcmUgZGlyZWN0bHksIEkgY291bGQgbG9vayBhdCBgbmZfdGFibGVzX25ld3J1bGVgIHNpbmNlIHRoYXQgY2FsbHMgaXQsIGluZGljYXRpbmcgcnVsZSBjcmVhdGlvbiB3aWxsIGludm9sdmUgc29tZSBleHByZXNzaW9uIGluaXRpYWxpemF0aW9uLiBVbmRlcnN0YW5kaW5nIGhvdyBleHByZXNzaW9ucyB3b3JrIGlzIGNydWNpYWwuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHZlcmlmeSB0aGUgb3B0aW9ucyBmb3IgYG5mX3RhYmxlc2AgYW5kIGBuZnRfZHluc2V0YCBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyB3aWxsIHRlbGwgbWUgd2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgaG93IHRoZXkgaW50ZXJhY3QsIHdoaWNoIGltcGFjdHMgdGhlIHBvdGVudGlhbCBjb2RlIHBhdGhzIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBzdHVkeWluZyB0aGUgY29ycmVjdCBjb2RlLCBhZnRlciBhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9EWU5TRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTU2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktjb25maWcgU2VhcmNoIGZvciBgbmZ0X2R5bnNldGAqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nLCBhbmQgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgdGVybSBgbmZ0X2R5bnNldGAuIEkmIzM5O2xsIGluaXRpYXRlIGEgc2VhcmNoIGZvciB0aGF0IHN0cmluZyB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMsIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgbW9kdWxlIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQuIFRoaXMgaXMgbXkgZ28tdG8gYXBwcm9hY2ggd2hlbiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIGZlYXR1cmUgaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2hvdWxkIHF1aWNrbHkgbGVhZCBtZSB0byB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzeW1ib2wgYW5kIGhvcGVmdWxseSBwcm92aWRlIHNvbWUgY2x1ZXMgYWJvdXQgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgb3B0aW9ucy4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfZHluc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc2NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkh1bnRpbmcgRG93biBUaGF0IE9iamVjdCBGaWxlKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIE15IGdvYWwgaGVyZSBpcyBjbGVhcmx5IHRvIHRyYWNrIGRvd24gd2hlcmUgYG5mdF9keW5zZXQub2AgaXMgYmVpbmcgYnVpbHQgd2l0aGluIHRoaXMgcHJvamVjdC4gS25vd2luZyB0aGF0IG9iamVjdCBmaWxlIG5hbWVzIGFyZSB0eXBpY2FsbHkgZGVmaW5lZCBpbiBhIE1ha2VmaWxlLCB0aGF0JiMzOTtzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBMZXQmIzM5O3MgZ2V0IGNyYWNraW5nIGFuZCBnbyBkaXJlY3RseSB0byB0aGUgTWFrZWZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9keW5zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODc9bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04OS1cdFx0ICBuZnRfYml0d2lzZS5vIG5mdF9ieXRlb3JkZXIubyBuZnRfcGF5bG9hZC5vIG5mdF9sb29rdXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo5MDpcdFx0ICBuZnRfZHluc2V0Lm8gbmZ0X21ldGEubyBuZnRfcnQubyBuZnRfZXh0aGRyLm8gbmZ0X2xhc3QubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05MS1cdFx0ICBuZnRfY291bnRlci5vIG5mdF9vYmpyZWYubyBuZnRfaW5uZXIubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDU2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVsYXRlZCB0byBgbmZfdGFibGVzLW9ianNgLiBUaGF0IHRlbGxzIG1lIHRoZSBjb3JlIGRlcGVuZGVuY3kgaGVyZSBpcyBvbiBgTkZfVEFCTEVTYC4gTm93LCBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgdGhhdCBgTkZfVEFCTEVTYCBpcyBjb3JyZWN0bHkgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgZG91YmxlIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoYXQgc3BlY2lmaWMgb3B0aW9uLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBiYXNlIHJlcXVpcmVtZW50IGlzIHRoZXJlIGJlZm9yZSBJIGRpZyBhbnkgZGVlcGVyLiBObyBwb2ludCBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUgaWYgdGhlIGZvdW5kYXRpb24gaXNuJiMzOTt0IHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX1RBQkxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ1NTpjb25maWcgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzI6Y29uZmlnIE5GX1RBQkxFU19JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVx0ZGVwZW5kcyBvbiBJUFY2XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00ODEtXHRib29sIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NDQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipDaGVja2luZyB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgZm9jdXMgaXMgYE5GX1RBQkxFU2AuIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24uIEFsd2F5cyBnb29kIHRvIHN0YXJ0IHRoZXJlLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCYjMzk7cyB0aGUgKm9ubHkqIHJlbGV2YW50IG9uZSwganVzdCB0byBiZSB0aG9yb3VnaC4gWXVwLCBpdCBsb29rcyBsaWtlIGBORl9UQUJMRVNgIGNvdmVycyBpdC4gTm8gbmVlZCB0byBjaGFzZSBhbnkgb3RoZXIgcmFiYml0IGhvbGVzIG9uIHRoYXQgZnJvbnQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBzeW1ib2xzLiBgbmZfdGFibGVzX25ld3NldGVsZW1gLi4uIHJpZ2h0LCB0aGF0IGhhbmRsZXMgYWRkaW5nIG5ldyBlbGVtZW50cyB0byB0aGUgc2V0LiBBbmQgYG5mX3RhYmxlc19jb21taXRgLCB0aGF0JiMzOTtzIHRoZSBjb21taXQgb3BlcmF0aW9uLi4uIHN0YW5kYXJkIHN0dWZmLiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBgbmZ0X2V4cHJfaW5pdGA/IEkmIzM5O20ganVzdCBxdWlja2x5IGNoZWNraW5nIG15IG1lbW9yeS4uLiBJc24mIzM5O3QgdGhhdCBhIGZ1bmN0aW9uPyBZZXMsIGl0IGlzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfZXhwcl9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzY1ND1zdGF0aWMgdm9pZCBuZl90YWJsZXNfZXhwcl9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzY2My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjM2NjQ6c3RhdGljIHN0cnVjdCBuZnRfZXhwciAqbmZ0X2V4cHJfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzY2NS1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02NzM3PXN0cnVjdCBuZnRfZXhwciAqbmZ0X3NldF9lbGVtX2V4cHJfYWxsb2MoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NzQzLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njc0NDpcdGV4cHIgPSBuZnRfZXhwcl9pbml0KGN0eCwgYXR0cik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NzQ1LVx0aWYgKElTX0VSUihleHByKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAwNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbmZ0X2V4cHJfaW5pdGAgYW5kIGl0cyBDYWxsZXJzKioKCk9rYXksIHNvIGBuZnRfZXhwcl9pbml0YCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBsaWtlbHkgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LCBhbmQgaXRzIHNjb3BlIGlzIGxpbWl0ZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBSaWdodCwgdGhlIGNvZGUgc3VnZ2VzdHMgaXQmIzM5O3MgY2FsbGVkIGJ5IGBuZnRfc2V0X2VsZW1fZXhwcl9hbGxvY2AsIGBuZl90YWJsZXNfbmV3cnVsZWAsIGFuZCBwcm9iYWJseSBvdGhlcnMuIE15IGltbWVkaWF0ZSBmb2N1cywgZ2l2ZW4gdGhlIGNvbnRleHQgSSYjMzk7bSB3b3JraW5nIGluLCBpcyBvbiB0aGUgcnVsZSBhbmQgc2V0IGVsZW1lbnQgY3JlYXRpb24gcGF0aHMuIEkmIzM5O2xsIGRyaWxsIGRvd24gc3BlY2lmaWNhbGx5IGludG8gaG93IGBuZl90YWJsZXNfbmV3cnVsZWAsIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAsIGFuZCB0aGUgY29tbWl0IGZ1bmN0aW9uIChgbmZfdGFibGVzX2NvbW1pdGApIGludGVyYWN0IHdpdGggYG5mdF9leHByX2luaXRgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIG5ldyBydWxlIGFuZCBzZXQgZWxlbWVudCBpbnN0YW50aWF0aW9uIGxpdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl90YWJsZXNfbmV3cnVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTQxMjI9dm9pZCBuZl90YWJsZXNfcnVsZV9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfcnVsZSAqcnVsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MTI3LVx0ICogQ2FyZWZ1bDogc29tZSBleHByZXNzaW9ucyBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQgaW4gY2FzZSB0aGlzXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0MTI4Olx0ICogaXMgY2FsbGVkIG9uIGVycm9yIGZyb20gbmZfdGFibGVzX25ld3J1bGUoKS5cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQxMjktXHQgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MzA5PXN0YXRpYyBzdHJ1Y3QgbmZ0X3J1bGUgKm5mdF9ydWxlX2xvb2t1cF9ieWlkKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MzE0LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDMxNTpzdGF0aWMgaW50IG5mX3RhYmxlc19uZXdydWxlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MzE2LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5sYVtdKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTk5MzU9c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5sX2NhbGxiYWNrIG5mX3RhYmxlc19jYltORlRfTVNHX01BWF0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTk4NC1cdFtORlRfTVNHX05FV1JVTEVdID0ge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTk4NTpcdFx0LmNhbGxcdFx0PSBuZl90YWJsZXNfbmV3cnVsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk5ODYtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9CQVRDSCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcyMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTmV0ZmlsdGVyIFRhYmxlIENyZWF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIE5ldGZpbHRlciBjb2RlLCBhbmQgeWVhaCwgYG5mX3RhYmxlc19uZXdydWxlYCBkZWZpbml0ZWx5IHN0YW5kcyBvdXQgYXMgdGhlIG5ldGxpbmsgY2FsbGJhY2sgZm9yIGNyZWF0aW5nIG5ldyBydWxlcy4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0JiMzOTtzIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHRhYmxlcyB0aGVtc2VsdmVzIGFyZSBidWlsdCBhbmQgcG9wdWxhdGVkLiBNeSBuZXh0IGZvY3VzIHNob3VsZCBiZSBvbiBgbmZfdGFibGVzX25ld3NldGAgYW5kIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZnVuY3Rpb25zIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiBob3cgc2V0cyBhbmQgdGhlaXIgZWxlbWVudHMgYXJlIGRlZmluZWQsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHRhYmxlIHN0cnVjdHVyZSBhbmQgcnVsZSBhcHBsaWNhdGlvbiBwcm9jZXNzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl90YWJsZXNfbmV3c2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NTQyNz1zdGF0aWMgdTMyIG5mdF9zZXRfa2VybmVsX3NpemUoY29uc3Qgc3RydWN0IG5mdF9zZXRfb3BzICpvcHMsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTQzNS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU0MzY6c3RhdGljIGludCBuZl90YWJsZXNfbmV3c2V0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01NDM3LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmxhW10pXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzI0NT1zdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NjYzLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzY2NDpzdGF0aWMgaW50IG5mX3RhYmxlc19uZXdzZXRlbGVtKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NjY1LVx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05OTM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZl90YWJsZXNfY2JbTkZUX01TR19NQVhdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDE0LVx0W05GVF9NU0dfTkVXU0VUXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMDE1Olx0XHQuY2FsbFx0XHQ9IG5mX3RhYmxlc19uZXdzZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDAxNi1cdFx0LnR5cGVcdFx0PSBORk5MX0NCX0JBVENILFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDM4LVx0W05GVF9NU0dfTkVXU0VURUxFTV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDAzOTpcdFx0LmNhbGxcdFx0PSBuZl90YWJsZXNfbmV3c2V0ZWxlbSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDQwLVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfQkFUQ0gsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDc2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE5ldGZpbHRlciBUYWJsZSBVcGRhdGVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHByaW1hcnkgY29uY2VybiBoZXJlIHJldm9sdmVzIGFyb3VuZCB1bmRlcnN0YW5kaW5nIGhvdyBkeW5hbWljIHNldHMgYXJlIGhhbmRsZWQgd2l0aGluIG5ldGZpbHRlciB0YWJsZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGludm9sdmVkIGluIHNldCBtYW5pcHVsYXRpb24gYW5kIHJ1bGUgY3JlYXRpb24uIEJhc2VkIG9uIHRoZSBzeW1ib2xzIGlkZW50aWZpZWQsIG15IGF0dGVudGlvbiBncmF2aXRhdGVzIHRvd2FyZHM6IGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAsIGBuZl90YWJsZXNfbmV3c2V0YCwgYG5mX3RhYmxlc19jb21taXRgLCBhbmQgYG5mX3RhYmxlc19uZXdydWxlYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrcyBmb3Igc2V0LXJlbGF0ZWQgb3BlcmF0aW9ucy4KCk5vdywgYSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIG9yIGhhbmRsaW5nIGZ1bmN0aW9uIGRlZGljYXRlZCB0byBkeW5hbWljIHNldHMuIFVwb24gZnVydGhlciBpbnNwZWN0aW9uLCBJIHNlZSB0aGF0IGBuZnRfZHluc2V0X2luaXRgIGlzIGludm9rZWQgZnJvbSBgbmZ0X2V4cHJfaW5pdGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBuZl90YWJsZXNfbmV3cnVsZWAuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBpbnR1aXRpb24gdGhhdCBgbmZfdGFibGVzX25ld3J1bGVgIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgZHluYW1pYyBzZXQgb3BlcmF0aW9uczsgaXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IHRvIGluaXRpYWxpemUgdGhlIGR5bmFtaWMgc2V0LgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHNldHMgYXJlIGRlbGV0ZWQgb3IgZGVzdHJveWVkLiBMb29raW5nIGF0IHRoZSBtZXNzYWdlIHR5cGVzLCBJIHNlZSBgTkZUX01TR19ERUxTRVRgIGFuZCBgTkZUX01TR19ERVNUUk9ZU0VUYC4gRXhhbWluaW5nIHRoZWlyIG1vZGlmaWNhdGlvbiBwb2ludHMsIEkmIzM5O3ZlIG9ic2VydmVkIHRoYXQgdGhlc2UgYXJlIGhhbmRsZWQgd2l0aGluIGBuZnRfc2V0X2NvbW1pdF91cGRhdGVgLCB3aGljaCBzdWdnZXN0cyB0aGF0IHRoZXkgYXJlIGhhbmRsZWQgYnkgYG5mX3RhYmxlc19kZWxzZXRgLiBUaGlzIGNvbmZpcm1zIHRoYXQgaXQmIzM5O3MgdGhlIGNvcnJlY3QgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX3RhYmxlc19kZWxzZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz01NzYxPXN0YXRpYyB2b2lkIG5mdF9zZXRfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU3NzUtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1Nzc2OnN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbHNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTc3Ny1cdFx0XHQgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5sYVtdKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc5ODc9c3RhdGljIGludCBuZnRfc2V0X2ZsdXNoKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsIHU4IGdlbm1hc2spXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODAwNC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjgwMDU6c3RhdGljIGludCBuZl90YWJsZXNfZGVsc2V0ZWxlbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODAwNi1cdFx0XHRcdGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTkzNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZfdGFibGVzX2NiW05GVF9NU0dfTUFYXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDAyNi1cdFtORlRfTVNHX0RFTFNFVF0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDAyNzpcdFx0LmNhbGxcdFx0PSBuZl90YWJsZXNfZGVsc2V0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwMjgtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9CQVRDSCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDAzMi1cdFtORlRfTVNHX0RFU1RST1lTRVRdID0ge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAwMzM6XHRcdC5jYWxsXHRcdD0gbmZfdGFibGVzX2RlbHNldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDM0LVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfQkFUQ0gsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNTYtXHRbTkZUX01TR19ERUxTRVRFTEVNXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMDU3Olx0XHQuY2FsbFx0XHQ9IG5mX3RhYmxlc19kZWxzZXRlbGVtLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNTgtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9CQVRDSCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA2Mi1cdFtORlRfTVNHX0RFU1RST1lTRVRFTEVNXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMDYzOlx0XHQuY2FsbFx0XHQ9IG5mX3RhYmxlc19kZWxzZXRlbGVtLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNjQtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9CQVRDSCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2ODgKCQkJCQkJCW91dHB1dDogMTQyCgkJCQkJCQl0aG91Z2h0czogMzI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IFJlZmluZW1lbnQ6IEZvY3VzaW5nIG9uIFNldCBEZWxldGlvbioqCgpPa2F5LCBzbyBgbmZfdGFibGVzX2RlbHNldGAgbG9va3MgbGlrZSBhbm90aGVyIHNvbGlkIGZvY3VzIHN5bWJvbCBmb3IgZnV6emluZy4gVGltZSB0byByZXZpZXcgdGhlIG1vZGlmaWNhdGlvbnMuCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpdCYjMzk7cyBzZXR0aW5nIGBkZWFkID0gMWAgb24gdGhlIHNldCBkdXJpbmcgdGhlIGNvbW1pdCBzdGFnZSB3aGVuIGRlYWxpbmcgd2l0aCBlaXRoZXIgYE5GVF9NU0dfREVMU0VUYCBvciBgTkZUX01TR19ERVNUUk9ZU0VUYCBtZXNzYWdlcy4gVGhhdCYjMzk7cyBhIGNydWNpYWwgcG9pbnQsIGFuZCBJIGNhbiBzZWUgaG93IHBvdGVudGlhbCBpc3N1ZXMgYXJvdW5kIHRoZSBoYW5kbGluZyBvZiBhICYjMzQ7ZGVhZCYjMzQ7IHNldCBjb3VsZCBiZSBhIHByaW1lIHRhcmdldCBmb3IgdnVsbmVyYWJpbGl0eSBkaXNjb3ZlcnkuCgpUaGUgY2hhbmdlcyBpbiBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgIGFuZCBgbmZ0X2R5bnNldF9pbml0YCByZWxhdGUgdG8gZXhwcmVzc2lvbiBjbG9uaW5nIGFuZCBkZXN0cnVjdGlvbiwgd2hpY2ggYXJlIGFyZWFzIG9mdGVuIHByb25lIHRvIHN1YnRsZSBtZW1vcnkgbWFuYWdlbWVudCBwcm9ibGVtcy4gVGhlc2UgdXBkYXRlcyB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGggZnV6emluZy4KCk15IHByaW1hcnkgY29uZmlnIGlzIGBORl9UQUJMRVNgLCB3aGljaCBzZWVtcyBzdWZmaWNpZW50LiBJJiMzOTtsbCBzdGljayB3aXRoIHRoZXNlIGZvciBub3csIGFuZCB0aGVzZSBmb2N1cyBzeW1ib2xzOgoKKiAgIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAKKiAgIGBuZl90YWJsZXNfbmV3c2V0YAoqICAgYG5mX3RhYmxlc19kZWxzZXRgICh0aGlzIGlzIHRoZSBuZXcgb25lKQoqICAgYG5mX3RhYmxlc19jb21taXRgCiogICBgbmZfdGFibGVzX25ld3J1bGVgCgpJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIGJ1dCBgTkZfVEFCTEVTYCBpcyB0aGUga2V5LiBUaGVuIEkmIzM5O2xsIHN0YXJ0IHJ1bm5pbmcgc29tZSB0ZXN0cyByZWxhdGVkIHRvIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfdGFibGVzX25ld3NldGVsZW0mIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX25ld3NldCYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsc2V0JiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19jb21taXQmIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX25ld3J1bGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZl90YWJsZXMgbG9naWMgZm9yIGhhbmRsaW5nIHNldCBlbGVtZW50IGV4cHJlc3Npb25zIGFuZCBkeW5hbWljIHNldHMsIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgZXhwcmVzc2lvbnMgYXJlIGNsb25lZCBhbmQgZGVzdHJveWVkLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBjb21taXQgcGhhc2UgZm9yIHNldCBkZWxldGlvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl90YWJsZXNfbmV3c2V0ZWxlbSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3c2V0JiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19kZWxzZXQmIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX2NvbW1pdCYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3cnVsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5mX3RhYmxlcyBsb2dpYyBmb3IgaGFuZGxpbmcgc2V0IGVsZW1lbnQgZXhwcmVzc2lvbnMgYW5kIGR5bmFtaWMgc2V0cywgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBleHByZXNzaW9ucyBhcmUgY2xvbmVkIGFuZCBkZXN0cm95ZWQuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvbW1pdCBwaGFzZSBmb3Igc2V0IGRlbGV0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmssIG1ha2luZyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgbGlmZWN5Y2xlIGFuZCBjbG9uaW5nIG9mIG5ldGZpbHRlciBzZXQgZXhwcmVzc2lvbnMgKGBuZnRfZXhwcmApIHRvIGZpeCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgKGxpa2VseSBkb3VibGUtZnJlZXMgb3IgdXNlLWFmdGVyLWZyZWVzKS4gSXQgYXZvaWRzIGNyZWF0aW5nIGludGVybWVkaWF0ZSBjbG9uZXMgb2YgZXhwcmVzc2lvbnMgd2hlbiBhZGRpbmcgZWxlbWVudHMgdG8gYSBzZXQgb3IgaW5pdGlhbGl6aW5nIGEgZHluc2V0LCBpbnN0ZWFkIGNvcHlpbmcgcG9pbnRlcnMgYW5kIHVzaW5nIGEgbmV3IGBvdmVycmlkZV9leHByc2AgZmxhZyB0byB0cmFjayBvd25lcnNoaXAgYW5kIGRldGVybWluZSBpZiB0aGUgZXhwcmVzc2lvbnMgc2hvdWxkIGJlIGRlc3Ryb3llZC4gSXQgYWxzbyBzZXRzIGEgYGRlYWRgIGZsYWcgb24gZGVsZXRlZCBzZXRzIGR1cmluZyBjb21taXQgdXBkYXRlcy4gXG5cblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBvYmplY3QgbGlmZWN5Y2xlIGJ1Z3MgKFVBRiwgZG91YmxlLWZyZWUpIHdoaWNoIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIG1lbW9yeSBmb3IgdGhlIHNldCBlbGVtZW50cyB0aGVtc2VsdmVzIGNvbnRpbnVlcyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgKGluIGBuZnRfc2V0X2VsZW1faW5pdGApLCBlbnN1cmluZyBhbGwgZmllbGRzIGFuZCBwYWRkaW5nIGFyZSBmdWxseSB6ZXJvZWQuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM4NzdhMjg4MDRiMzY2YzI1YjkyOWYzZGExNWNmN2VkZGEzNjMwY2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAxMjo0MDo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaAppbmRleCAyMzhmNmVjYjkwZTk5Li45ZDU5NzQ4MjM2M2Q5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oCkBAIC04NzAsOCAmIzQzOzg3MCw2IEBAIHN0cnVjdCBuZnRfZWxlbV9wcml2ICpuZnRfc2V0X2VsZW1faW5pdChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LAogCQkJCQljb25zdCB1MzIgKmtleSwgY29uc3QgdTMyICprZXlfZW5kLAogCQkJCQljb25zdCB1MzIgKmRhdGEsCiAJCQkJCXU2NCB0aW1lb3V0LCB1NjQgZXhwaXJhdGlvbiwgZ2ZwX3QgZ2ZwKTsKLWludCBuZnRfc2V0X2VsZW1fZXhwcl9jbG9uZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LAotCQkJICAgIHN0cnVjdCBuZnRfZXhwciAqZXhwcl9hcnJheVtdKTsKIHZvaWQgbmZ0X3NldF9lbGVtX2V4cHJfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCQkJICAgICAgIHN0cnVjdCBuZnRfc2V0X2VsZW1fZXhwciAqZWxlbV9leHByKTsKIHZvaWQgbmZ0X3NldF9lbGVtX2Rlc3Ryb3koY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKaW5kZXggYzExMmVjYzRmY2EzMi4uMzg0NTA1ZjY4MGRlZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKQEAgLTY5MjEsMzkgJiM0Mzs2OTIxLDExIEBAIHN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJCW5mX3RhYmxlc19zZXRfZWxlbV9kZXN0cm95KGN0eCwgdGUtJmd0O3NldCwgdGUtJmd0O2VsZW1zW2ldLnByaXYpOwogfQogCi1pbnQgbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCwKLQkJCSAgICBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHJfYXJyYXlbXSkKLXsKLQlzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHI7Ci0JaW50IGVyciwgaSwgazsKLQotCWZvciAoaSA9IDA7IGkgJmx0OyBzZXQtJmd0O251bV9leHByczsgaSYjNDM7JiM0MzspIHsKLQkJZXhwciA9IGt6YWxsb2Moc2V0LSZndDtleHByc1tpXS0mZ3Q7b3BzLSZndDtzaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwotCQlpZiAoIWV4cHIpCi0JCQlnb3RvIGVycl9leHByOwotCi0JCWVyciA9IG5mdF9leHByX2Nsb25lKGV4cHIsIHNldC0mZ3Q7ZXhwcnNbaV0sIEdGUF9LRVJORUxfQUNDT1VOVCk7Ci0JCWlmIChlcnIgJmx0OyAwKSB7Ci0JCQlrZnJlZShleHByKTsKLQkJCWdvdG8gZXJyX2V4cHI7Ci0JCX0KLQkJZXhwcl9hcnJheVtpXSA9IGV4cHI7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9leHByOgotCWZvciAoayA9IGkgLSAxOyBrICZndDs9IDA7IGstLSkKLQkJbmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlba10pOwotCi0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KIHN0YXRpYyBpbnQgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoc3RydWN0IG5mdF9jdHggKmN0eCwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHRfdG1wbCAqdG1wbCwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCwKIAkJCQkgICBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHJfYXJyYXlbXSwKLQkJCQkgICB1MzIgbnVtX2V4cHJzKQomIzQzOwkJCQkgICB1MzIgbnVtX2V4cHJzLCBib29sIG92ZXJyaWRlX2V4cHJzKQogewogCXN0cnVjdCBuZnRfc2V0X2VsZW1fZXhwciAqZWxlbV9leHByID0gbmZ0X3NldF9leHRfZXhwcihleHQpOwogCXUzMiBsZW4gPSBzaXplb2Yoc3RydWN0IG5mdF9zZXRfZWxlbV9leHByKTsKQEAgLTY5NzYsNyAmIzQzOzY5NDgsOCBAQCBzdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJCQlnb3RvIGVycl9lbGVtX2V4cHJfc2V0dXA7CiAKIAkJZWxlbV9leHByLSZndDtzaXplICYjNDM7PSBleHByX2FycmF5W2ldLSZndDtvcHMtJmd0O3NpemU7Ci0JCW5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTsKJiM0MzsJCWlmIChvdmVycmlkZV9leHBycykKJiM0MzsJCQluZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7CiAJCWV4cHJfYXJyYXlbaV0gPSBOVUxMOwogCX0KIApAQCAtNjk4NCw3ICYjNDM7Njk1Nyw5IEBAIHN0YXRpYyBpbnQgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoc3RydWN0IG5mdF9jdHggKmN0eCwKIAogZXJyX2VsZW1fZXhwcl9zZXR1cDoKIAlmb3IgKDsgaSAmbHQ7IG51bV9leHByczsgaSYjNDM7JiM0MzspIHsKLQkJbmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pOwomIzQzOwkJaWYgKG92ZXJyaWRlX2V4cHJzKQomIzQzOwkJCW5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTsKJiM0MzsKIAkJZXhwcl9hcnJheVtpXSA9IE5VTEw7CiAJfQogCkBAIC03MjgwLDYgJiM0Mzs3MjU1LDcgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsCiAJc3RydWN0IG5mdF9zZXRfYmluZGluZyAqYmluZGluZzsKIAlzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2OwogCXN0cnVjdCBuZnRfb2JqZWN0ICpvYmogPSBOVUxMOwomIzQzOwlib29sIG92ZXJyaWRlX2V4cHJzID0gZmFsc2U7CiAJc3RydWN0IG5mdF91c2VyZGF0YSAqdWRhdGE7CiAJc3RydWN0IG5mdF9kYXRhX2Rlc2MgZGVzYzsKIAllbnVtIG5mdF9yZWdpc3RlcnMgZHJlZzsKQEAgLTczODUsNiAmIzQzOzczNjEsNyBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCwKIAogCQlleHByX2FycmF5WzBdID0gZXhwcjsKIAkJbnVtX2V4cHJzID0gMTsKJiM0MzsJCW92ZXJyaWRlX2V4cHJzID0gdHJ1ZTsKIAogCQlpZiAoc2V0LSZndDtudW1fZXhwcnMgJmFtcDsmYW1wOyBzZXQtJmd0O2V4cHJzWzBdLSZndDtvcHMgIT0gZXhwci0mZ3Q7b3BzKSB7CiAJCQllcnIgPSAtRU9QTk9UU1VQUDsKQEAgLTc0MTMsNiAmIzQzOzczOTAsNyBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCwKIAkJCX0KIAkJCWV4cHJfYXJyYXlbaV0gPSBleHByOwogCQkJbnVtX2V4cHJzJiM0MzsmIzQzOzsKJiM0MzsJCQlvdmVycmlkZV9leHBycyA9IHRydWU7CiAKIAkJCWlmIChzZXQtJmd0O251bV9leHBycyAmYW1wOyZhbXA7IGV4cHItJmd0O29wcyAhPSBzZXQtJmd0O2V4cHJzW2ldLSZndDtvcHMpIHsKIAkJCQllcnIgPSAtRU9QTk9UU1VQUDsKQEAgLTc0MjYsOSAmIzQzOzc0MDQsOCBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCwKIAkJfQogCX0gZWxzZSBpZiAoc2V0LSZndDtudW1fZXhwcnMgJmd0OyAwICZhbXA7JmFtcDsKIAkJICAgIShmbGFncyAmYW1wOyBORlRfU0VUX0VMRU1fSU5URVJWQUxfRU5EKSkgewotCQllcnIgPSBuZnRfc2V0X2VsZW1fZXhwcl9jbG9uZShjdHgsIHNldCwgZXhwcl9hcnJheSk7Ci0JCWlmIChlcnIgJmx0OyAwKQotCQkJZ290byBlcnJfc2V0X2VsZW1fZXhwcl9jbG9uZTsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBzZXQtJmd0O251bV9leHByczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJZXhwcl9hcnJheVtpXSA9IHNldC0mZ3Q7ZXhwcnNbaV07CiAKIAkJbnVtX2V4cHJzID0gc2V0LSZndDtudW1fZXhwcnM7CiAJfQpAQCAtNzU2Nyw3ICYjNDM7NzU0NCw4IEBAIHN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LAogCQl1ZGF0YS0mZ3Q7bGVuID0gdWxlbiAtIDE7CiAJCW5sYV9tZW1jcHkoJmFtcDt1ZGF0YS0mZ3Q7ZGF0YSwgbmxhW05GVEFfU0VUX0VMRU1fVVNFUkRBVEFdLCB1bGVuKTsKIAl9Ci0JZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoY3R4LCAmYW1wO3RtcGwsIGV4dCwgZXhwcl9hcnJheSwgbnVtX2V4cHJzKTsKJiM0MzsJZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoY3R4LCAmYW1wO3RtcGwsIGV4dCwgZXhwcl9hcnJheSwgbnVtX2V4cHJzLAomIzQzOwkJCQkgICAgICBvdmVycmlkZV9leHBycyk7CiAJaWYgKGVyciAmbHQ7IDApCiAJCWdvdG8gZXJyX2VsZW1fZnJlZTsKIApAQCAtNzY3NSw5ICYjNDM7NzY1MywxMSBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCwKIGVycl9wYXJzZV9rZXk6CiAJbmZ0X2RhdGFfcmVsZWFzZSgmYW1wO2VsZW0ua2V5LnZhbCwgTkZUX0RBVEFfVkFMVUUpOwogZXJyX3NldF9lbGVtX2V4cHI6Ci0JZm9yIChpID0gMDsgaSAmbHQ7IG51bV9leHBycyAmYW1wOyZhbXA7IGV4cHJfYXJyYXlbaV07IGkmIzQzOyYjNDM7KQotCQluZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7Ci1lcnJfc2V0X2VsZW1fZXhwcl9jbG9uZToKJiM0MzsJaWYgKG92ZXJyaWRlX2V4cHJzKSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX2V4cHJzICZhbXA7JmFtcDsgZXhwcl9hcnJheVtpXTsgaSYjNDM7JiM0MzspCiYjNDM7CQkJbmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTA4OTQsNiAmIzQzOzEwODc0LDEwIEBAIHN0YXRpYyB2b2lkIG5mdF9zZXRfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCQluZnRfY3R4X3VwZGF0ZShjdHgsIHRyYW5zKTsKIAogCQlzd2l0Y2ggKHRyYW5zLSZndDttc2dfdHlwZSkgewomIzQzOwkJY2FzZSBORlRfTVNHX0RFTFNFVDoKJiM0MzsJCWNhc2UgTkZUX01TR19ERVNUUk9ZU0VUOgomIzQzOwkJCW5mdF90cmFuc19zZXQodHJhbnMpLSZndDtkZWFkID0gMTsKJiM0MzsJCQlicmVhazsKIAkJY2FzZSBORlRfTVNHX0RFTFNFVEVMRU06CiAJCQl0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7CiAJCQlpZiAoIXRlLSZndDtzZXQtJmd0O29wcy0mZ3Q7Y29tbWl0KQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYwppbmRleCBlZTlkM2U3YjFlY2YxLi44M2U1NmIxYWE4NTg1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYwpAQCAtMTksNyAmIzQzOzE5LDggQEAgc3RydWN0IG5mdF9keW5zZXQgewogCXU4CQkJCXNyZWdfa2V5OwogCXU4CQkJCXNyZWdfZGF0YTsKIAlib29sCQkJCWludmVydDsKLQlib29sCQkJCWV4cHI7CiYjNDM7CWJvb2wJCQkJZXhwcjoxLAomIzQzOwkJCQkJb3ZlcnJpZGVfZXhwcnM6MTsKIAl1OAkJCQludW1fZXhwcnM7CiAJdTY0CQkJCXRpbWVvdXQ7CiAJc3RydWN0IG5mdF9leHByCQkJKmV4cHJfYXJyYXlbTkZUX1NFVF9FWFBSX01BWF07CkBAIC0yNTcsNiAmIzQzOzI1OCw3IEBAIHN0YXRpYyBpbnQgbmZ0X2R5bnNldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAKIAkJcHJpdi0mZ3Q7bnVtX2V4cHJzJiM0MzsmIzQzOzsKIAkJcHJpdi0mZ3Q7ZXhwcl9hcnJheVswXSA9IGR5bnNldF9leHByOwomIzQzOwkJcHJpdi0mZ3Q7b3ZlcnJpZGVfZXhwcnMgPSB0cnVlOwogCiAJCWlmIChzZXQtJmd0O251bV9leHBycyAmZ3Q7IDEgfHwKIAkJICAgIChzZXQtJmd0O251bV9leHBycyA9PSAxICZhbXA7JmFtcDsKQEAgLTI4OSw2ICYjNDM7MjkxLDcgQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAkJCX0KIAkJCXByaXYtJmd0O2V4cHJfYXJyYXlbaV0gPSBkeW5zZXRfZXhwcjsKIAkJCXByaXYtJmd0O251bV9leHBycyYjNDM7JiM0Mzs7CiYjNDM7CQkJcHJpdi0mZ3Q7b3ZlcnJpZGVfZXhwcnMgPSB0cnVlOwogCiAJCQlpZiAoc2V0LSZndDtudW1fZXhwcnMpIHsKIAkJCQlpZiAoaSAmZ3Q7PSBzZXQtJmd0O251bV9leHBycykgewpAQCAtMzA3LDkgJiM0MzszMTAsOCBAQCBzdGF0aWMgaW50IG5mdF9keW5zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCQkJZ290byBlcnJfZXhwcl9mcmVlOwogCQl9CiAJfSBlbHNlIGlmIChzZXQtJmd0O251bV9leHBycyAmZ3Q7IDApIHsKLQkJZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY3R4LCBzZXQsIHByaXYtJmd0O2V4cHJfYXJyYXkpOwotCQlpZiAoZXJyICZsdDsgMCkKLQkJCXJldHVybiBlcnI7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgc2V0LSZndDtudW1fZXhwcnM7IGkmIzQzOyYjNDM7KQomIzQzOwkJCXByaXYtJmd0O2V4cHJfYXJyYXlbaV0gPSBzZXQtJmd0O2V4cHJzW2ldOwogCiAJCXByaXYtJmd0O251bV9leHBycyA9IHNldC0mZ3Q7bnVtX2V4cHJzOwogCX0KQEAgLTMzOSw4ICYjNDM7MzQxLDEwIEBAIHN0YXRpYyBpbnQgbmZ0X2R5bnNldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJcmV0dXJuIDA7CiAKIGVycl9leHByX2ZyZWU6Ci0JZm9yIChpID0gMDsgaSAmbHQ7IHByaXYtJmd0O251bV9leHByczsgaSYjNDM7JiM0MzspCi0JCW5mdF9leHByX2Rlc3Ryb3koY3R4LCBwcml2LSZndDtleHByX2FycmF5W2ldKTsKJiM0MzsJaWYgKHByaXYtJmd0O292ZXJyaWRlX2V4cHJzKSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgcHJpdi0mZ3Q7bnVtX2V4cHJzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQluZnRfZXhwcl9kZXN0cm95KGN0eCwgcHJpdi0mZ3Q7ZXhwcl9hcnJheVtpXSk7CiYjNDM7CX0KIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zNjcsOSAmIzQzOzM3MSwxMCBAQCBzdGF0aWMgdm9pZCBuZnRfZHluc2V0X2Rlc3Ryb3koY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAlzdHJ1Y3QgbmZ0X2R5bnNldCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgcHJpdi0mZ3Q7bnVtX2V4cHJzOyBpJiM0MzsmIzQzOykKLQkJbmZ0X2V4cHJfZGVzdHJveShjdHgsIHByaXYtJmd0O2V4cHJfYXJyYXlbaV0pOwotCiYjNDM7CWlmIChwcml2LSZndDtvdmVycmlkZV9leHBycykgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHByaXYtJmd0O251bV9leHByczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJbmZ0X2V4cHJfZGVzdHJveShjdHgsIHByaXYtJmd0O2V4cHJfYXJyYXlbaV0pOwomIzQzOwl9CiAJbmZfdGFibGVzX2Rlc3Ryb3lfc2V0KGN0eCwgcHJpdi0mZ3Q7c2V0KTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg4NAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDMxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0ZmlsdGVyJiMzOTtzIEV4cHJlc3Npb24gSGFuZGxpbmcgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmZfdGFibGVzX2FwaS5jYCBhbmQgYG5mdF9keW5zZXQuY2AuIEl0JiMzOTtzIGFsbCBhYm91dCBzdHJlYW1saW5pbmcgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoIGhvdyBuZXRmaWx0ZXIgZGVhbHMgd2l0aCBleHByZXNzaW9ucyB3aXRoaW4gc2V0cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gYXZvaWQgdW5uZWNlc3NhcnkgY2xvbmluZywgd2hpY2ggdXN1YWxseSB0cmFuc2xhdGVzIHRvIGEgcGVyZm9ybWFuY2UgYm9vc3QuJiMzNDsgU21hcnQuCgpUaGUgY29yZSBpZGVhIHNlZW1zIHRvIGJlIHRoaXMgYG92ZXJyaWRlX2V4cHJzYCBib29sZWFuIGZsYWcuIElmIHNldCwgaXQgbWVhbnMgdGhlIGV4cHJlc3Npb25zIHdlcmUsIGVzc2VudGlhbGx5LCAmIzM0O3Rha2VuIG92ZXImIzM0OyBvciBvdmVycmlkZGVuLiBJZiBgb3ZlcnJpZGVfZXhwcnNgIGlzIGB0cnVlYCwgdGhlIG9sZCBleHByZXNzaW9uIGlzIGRlc3Ryb3llZC4gSWYgbm90LCBpdCBqdXN0IGNvcGllcyB0aGUgcG9pbnRlcnMgdG8gdGhlIGV4cHJlc3Npb25zLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBjaGFuZ2UgaW4gb2JqZWN0IGxpZmVjeWNsZSBhbmQgcmVmZXJlbmNlIG1hbmFnZW1lbnQuIFdlIGFyZSBtb3ZpbmcgYXdheSBmcm9tIGBuZnRfc2V0X2VsZW1fZXhwcl9jbG9uZWAgaW4gZmF2b3Igb2YgZGlyZWN0IHBvaW50ZXIgbWFuaXB1bGF0aW9uLiBUaGF0JiMzOTtzIGdvb2QsIGxlc3Mgb3ZlcmhlYWQgaWYgd2UgY2FuIGF2b2lkIHRoYXQgY2xvbmUuIEl0IHNlZW1zIHRvIHBhc3MgdGhhdCBgb3ZlcnJpZGVfZXhwcnNgIGZsYWcgdG8gYG5mdF9zZXRfZWxlbV9leHByX3NldHVwYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGNyZWF0aW5nIGV4cHJlc3Npb25zLCBidXQgbGV0IG1lIHRoaW5rLi4uCgpPa2F5LCBzbyBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgIGlzIHdoZXJlIHRoaW5ncyBhcmUgZ2V0dGluZyBhIGxpdHRsZSBjb25mdXNpbmcuIEl0JiMzOTtzIGRvaW5nIHNvbWV0aGluZyBsaWtlIHRoaXM6CgpgYGBjCgkJZWxlbV9leHByLSZndDtzaXplICYjNDM7PSBleHByX2FycmF5W2ldLSZndDtvcHMtJmd0O3NpemU7CgkJaWYgKG92ZXJyaWRlX2V4cHJzKQoJCQluZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7CgkJZXhwcl9hcnJheVtpXSA9IE5VTEw7CmBgYAoKSG1tLi4uIGlmIGBvdmVycmlkZV9leHByc2AgaXMgYGZhbHNlYCwgaXQgKmRvZXNuJiMzOTt0KiBkZXN0cm95IHRoZSBleHByZXNzaW9uLiBUaGlzIHNlZW1zIG9mZi4gYG5mdF9zZXRfZWxlbV9leHByX3NldHVwYCBpcyBzdXBwb3NlZCB0byAqc2V0dXAqIHRoZSBleHByZXNzaW9ucyBpbiB0aGUgZWxlbWVudCwgcmlnaHQ/IFNvIGlmIGl0JiMzOTtzIHNldHRpbmcgdGhlbSB1cCwgaXQgKm11c3QqIGJlIGNsb25pbmcgdGhlbSBvciBjcmVhdGluZyB0aGVtIGZyb20gc2NyYXRjaC4gSSBndWVzcyB0aGV5IGFyZSB1c2luZyBhIGh5YnJpZCBhcHByb2FjaCwgY2xvbmluZyBvbmx5IHdoZW4gbmVjZXNzYXJ5LiBCdXQgaXQgc2hvdWxkIHRoZW4gYmUgKmRlc3Ryb3lpbmcqIHRoZW0gd2hlbiBpdCYjMzk7cyBkb25lLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgY2xvbmVzIHRoZSBleHByZXNzaW9ucy4gTGV0IG1lIGdvIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBmb3IgYG5mdF9zZXRfZWxlbV9leHByX3NldHVwYCBhbmQgc2VlIHdoYXQgaXQmIzM5O3MgcmVhbGx5IGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02OTE1PXN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjkyMy1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY5MjQ6c3RhdGljIGludCBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjkyNS1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcyNDU9c3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzU0Ni1cdH1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc1NDc6XHRlcnIgPSBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChjdHgsIFx1MDAyNnRtcGwsIGV4dCwgZXhwcl9hcnJheSwgbnVtX2V4cHJzLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzU0OC1cdFx0XHRcdCAgICAgIG92ZXJyaWRlX2V4cHJzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk3OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBleHByZXNzaW9uIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50IHdpdGhpbiBhbiBORlRhYmxlcyBzZXQuIEl0JiMzOTtzIGxpa2VseSBhIGNydWNpYWwgcGFydCBvZiB0aGUgc2V0IG1hbmFnZW1lbnQgaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBoYW5kbGluZyBvZiBkYXRhIHR5cGVzLCBwb3RlbnRpYWwga2V5L3BheWxvYWQgcGFyc2luZywgYW5kIHBlcmhhcHMgc29tZSBvcHRpbWl6YXRpb24gY29uc2lkZXJhdGlvbnMgZm9yIGRpZmZlcmVudCBlbGVtZW50IGZvcm1hdHMuCgpJJiMzOTttIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGRlYWxzIHdpdGggdGhlIHZhcmlvdXMgZGF0YSB0eXBlcyB0aGF0IE5GVGFibGVzIHN1cHBvcnRzIGZvciBzZXQgZWxlbWVudHMg4oCTIElQdjQgYWRkcmVzc2VzLCBJUHY2IGFkZHJlc3NlcywgcG9ydHMsIGludGVnZXJzLCBzdHJpbmdzLCBldGMuIEhvdyBkb2VzIGl0IHZhbGlkYXRlIHRoZSBpbnB1dCBhbmQgZW5zdXJlIHR5cGUgY29tcGF0aWJpbGl0eT8gRG9lcyBpdCBoYXZlIGEgc3dpdGNoIHN0YXRlbWVudCBvciBhIG1vcmUgc29waGlzdGljYXRlZCBkaXNwYXRjaCBtZWNoYW5pc20/IEkmIzM5O20gYmV0dGluZyBvbiBhIHdlbGwtZGVzaWduZWQgc3RydWN0dXJlIHRvIGhhbmRsZSB0aGUgdHlwZS1zcGVjaWZpYyBsb2dpYyBjbGVhbmx5LgoKRnVydGhlcm1vcmUsIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBrZXJuZWwgZm9yIHRoZSBzZXQgaXRzZWxmLiBJcyBpdCBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgdGhlIGVsZW1lbnQgZXhwcmVzc2lvbj8gSG93IGRvZXMgaXQgaW50ZWdyYXRlIHdpdGggdGhlIGhhc2ggdGFibGUgb3IgcmFkaXggdHJlZSB1c2VkIHRvIHN0b3JlIHRoZSBzZXQgZWxlbWVudHM/IElzIHRoZXJlIGFueSBjYWNoaW5nIG9yIHByZS1jYWxjdWxhdGlvbiBiZWluZyBkb25lIHRvIGltcHJvdmUgcGVyZm9ybWFuY2U/IEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IG1lbW9yeSBtYW5hZ2VtZW50IGRldGFpbHMgYW5kIHBvdGVudGlhbCBsb2NraW5nIGNvbnNpZGVyYXRpb25zLCBhcyBzZXQgb3BlcmF0aW9ucyBuZWVkIHRvIGJlIHRocmVhZC1zYWZlLgoKSSYjMzk7bSBhbHNvIGFudGljaXBhdGluZyBzb21lIGZvcm0gb2YgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGUgZWxlbWVudCBleHByZXNzaW9uIGlzIGludmFsaWQsIG9yIGlmIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSBhbGxvY2F0aW5nIG1lbW9yeT8gQXJlIHNwZWNpZmljIGVycm9yIGNvZGVzIGJlaW5nIHJldHVybmVkPyBIb3cgZ3JhbnVsYXIgaXMgdGhlIGVycm9yIHJlcG9ydGluZz8gVGhlIHF1YWxpdHkgb2YgdGhlIGVycm9yIGhhbmRsaW5nIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaW5kaWNhdGlvbiBvZiB0aGUgb3ZlcmFsbCByb2J1c3RuZXNzIG9mIHRoaXMgY29tcG9uZW50LgoKRmluYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9mIG9wdGltaXphdGlvbiB0ZWNobmlxdWVzLiBEb2VzIGl0IGF0dGVtcHQgdG8gY29tcGFjdCBkYXRhLCBvciB1c2Ugc3BlY2lhbGl6ZWQgaW5zdHJ1Y3Rpb25zIHdoZXJlIHBvc3NpYmxlPyBIb3cgZG9lcyBpdCBoYW5kbGUgbGFyZ2Ugc2V0cywgYW5kIGFyZSB0aGVyZSBhbnkgc2NhbGFiaWxpdHkgY29uc2lkZXJhdGlvbnM/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTI0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY5MjQ6XHRzdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG42OTI1Olx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHRfdG1wbCAqdG1wbCxcbjY5MjY6XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0LFxuNjkyNzpcdFx0XHRcdFx0ICAgc3RydWN0IG5mdF9leHByICpleHByX2FycmF5W10sXG42OTI4Olx0XHRcdFx0XHQgICB1MzIgbnVtX2V4cHJzLCBib29sIG92ZXJyaWRlX2V4cHJzKVxuNjkyOTpcdHtcbjY5MzA6XHRcdHN0cnVjdCBuZnRfc2V0X2VsZW1fZXhwciAqZWxlbV9leHByID0gbmZ0X3NldF9leHRfZXhwcihleHQpO1xuNjkzMTpcdFx0dTMyIGxlbiA9IHNpemVvZihzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIpO1xuNjkzMjpcdFx0c3RydWN0IG5mdF9leHByICpleHByO1xuNjkzMzpcdFx0aW50IGksIGVycjtcbjY5MzQ6XHRcbjY5MzU6XHRcdGlmIChudW1fZXhwcnMgPT0gMClcbjY5MzY6XHRcdFx0cmV0dXJuIDA7XG42OTM3Olx0XG42OTM4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fZXhwcnM7IGkmIzQzOyYjNDM7KVxuNjkzOTpcdFx0XHRsZW4gJiM0Mzs9IGV4cHJfYXJyYXlbaV0tXHUwMDNlb3BzLVx1MDAzZXNpemU7XG42OTQwOlx0XG42OTQxOlx0XHRpZiAobmZ0X3NldF9leHRfY2hlY2sodG1wbCwgTkZUX1NFVF9FWFRfRVhQUkVTU0lPTlMsIGxlbikgXHUwMDNjIDApXG42OTQyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNjk0MzpcdFxuNjk0NDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2V4cHJzOyBpJiM0MzsmIzQzOykge1xuNjk0NTpcdFx0XHRleHByID0gbmZ0X3NldGVsZW1fZXhwcl9hdChlbGVtX2V4cHIsIGVsZW1fZXhwci1cdTAwM2VzaXplKTtcbjY5NDY6XHRcdFx0ZXJyID0gbmZ0X2V4cHJfY2xvbmUoZXhwciwgZXhwcl9hcnJheVtpXSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbjY5NDc6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjY5NDg6XHRcdFx0XHRnb3RvIGVycl9lbGVtX2V4cHJfc2V0dXA7XG42OTQ5Olx0XG42OTUwOlx0XHRcdGVsZW1fZXhwci1cdTAwM2VzaXplICYjNDM7PSBleHByX2FycmF5W2ldLVx1MDAzZW9wcy1cdTAwM2VzaXplO1xuNjk1MTpcdFx0XHRpZiAob3ZlcnJpZGVfZXhwcnMpXG42OTUyOlx0XHRcdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pO1xuNjk1MzpcdFx0XHRleHByX2FycmF5W2ldID0gTlVMTDtcbjY5NTQ6XHRcdH1cbjY5NTU6XHRcbjY5NTY6XHRcdHJldHVybiAwO1xuNjk1NzpcdFxuNjk1ODpcdGVycl9lbGVtX2V4cHJfc2V0dXA6XG42OTU5Olx0XHRmb3IgKDsgaSBcdTAwM2MgbnVtX2V4cHJzOyBpJiM0MzsmIzQzOykge1xuNjk2MDpcdFx0XHRpZiAob3ZlcnJpZGVfZXhwcnMpXG42OTYxOlx0XHRcdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pO1xuNjk2MjpcdFxuNjk2MzpcdFx0XHRleHByX2FycmF5W2ldID0gTlVMTDtcbjY5NjQ6XHRcdH1cbjY5NjU6XHRcbjY5NjY6XHRcdHJldHVybiAtRU5PTUVNO1xuNjk2NzpcdH1cbjY5Njg6XHRcbjY5Njk6XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKm5mdF9zZXRfY2F0Y2hhbGxfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbjY5NzA6XHRcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpXG42OTcxOlx0e1xuNjk3MjpcdFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG42OTczOlx0XHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfY3VyKG5ldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNDUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgT2JzZXJ2YXRpb25zIG9uIEV4cHJlc3Npb24gQ2xvbmluZyBpbiBOZXRmaWx0ZXIgU2V0cyoqCgpSaWdodCwgc28gYG5mdF9zZXRfZWxlbV9leHByX3NldHVwYCBpcyBub3cgaGFuZGxpbmcgdGhlIGNsb25pbmcgb2YgZXhwcmVzc2lvbnMgZGlyZWN0bHkgaW50byB0aGUgc2V0IGVsZW1lbnQuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UuIFByZXZpb3VzbHksIEkgcmVjYWxsIGBuZnRfYWRkX3NldF9lbGVtYCB3b3VsZCBjbG9uZSB0aG9zZSBleHByZXNzaW9ucyBpbnRvIGFuIGBleHByX2FycmF5YCBmaXJzdCwgdXNpbmcgYG5mdF9zZXRfZWxlbV9leHByX2Nsb25lYC4gVGhlbiwgaXQgc2VlbXMsIGBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cGAgd291bGQgKnRoZW4qIGNsb25lIHRoZW0gYWdhaW4/IFRoYXQgc291bmRzIGluZWZmaWNpZW50LCBhbmQgZnJhbmtseSwgYSBiaXQgcmVkdW5kYW50LiAKCkkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgbWVudGFsIG1vZGVsIGhlcmUuIFRoZSBvbGQgY29kZSBmb3IgYG5mdF9zZXRfZWxlbV9leHByX2Nsb25lYCBzaG91bGQgcHJvdmlkZSBzb21lIGNsYXJpdHkgb24gd2h5IHdlIGhhZCB0aGlzIGV4dHJhLCBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSwgbGF5ZXIgb2YgY2xvbmluZy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgbG9va3MgbGlrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjkxMDpcdFx0XHRuZnRfc2V0X2VsZW1fZXhwcl9kZXN0cm95KGN0eCwgbmZ0X3NldF9leHRfZXhwcihleHQpKTtcbjY5MTE6XHRcbjY5MTI6XHRcdGtmcmVlKGVsZW1fcHJpdik7XG42OTEzOlx0fVxuNjkxNDpcdFxuNjkxNTpcdHN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG42OTE2Olx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mdF90cmFuc19lbGVtICp0ZSlcbjY5MTc6XHR7XG42OTE4Olx0XHRpbnQgaTtcbjY5MTk6XHRcbjY5MjA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlLVx1MDAzZW5lbGVtczsgaSYjNDM7JiM0MzspXG42OTIxOlx0XHRcdG5mX3RhYmxlc19zZXRfZWxlbV9kZXN0cm95KGN0eCwgdGUtXHUwMDNlc2V0LCB0ZS1cdTAwM2VlbGVtc1tpXS5wcml2KTtcbjY5MjI6XHR9XG42OTIzOlx0XG42OTI0Olx0c3RhdGljIGludCBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuNjkyNTpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0X3RtcGwgKnRtcGwsXG42OTI2Olx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCxcbjY5Mjc6XHRcdFx0XHRcdCAgIHN0cnVjdCBuZnRfZXhwciAqZXhwcl9hcnJheVtdLFxuNjkyODpcdFx0XHRcdFx0ICAgdTMyIG51bV9leHBycywgYm9vbCBvdmVycmlkZV9leHBycylcbjY5Mjk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4ODYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA4ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFeHByZXNzaW9uIENsb25pbmcgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnbyBvdmVyIHRoaXMgYG5mdF9zZXRfZWxlbV9leHByX2Nsb25lYCBmdW5jdGlvbiBmcm9tIHRoZSBkaWZmLiBJbml0aWFsbHksIGl0IHNlZW1zIHRoZXkgYXJlIGNsb25pbmcgdGhlIGV4cHJlc3Npb25zIGZyb20gdGhlIHNldCBhbmQgc3RvcmluZyB0aGVtIGluIGBleHByX2FycmF5YC4gU3BlY2lmaWNhbGx5LCBga3phbGxvY2AgaXMgYmVpbmcgdXNlZCB0byBhbGxvY2F0ZSBtZW1vcnkgYW5kIHRoZSBgbmZ0X2V4cHJfY2xvbmVgIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIHRoZSBjb3B5aW5nLgoKVGhlbiwgSSYjMzk7bSByZW1pbmRlZCBvZiBob3cgYG5mdF9zZXRfZWxlbV9leHByX3NldHVwYCB3YXMgdXRpbGl6aW5nIGBleHByX2FycmF5YC4gSXQgbG9va3MgbGlrZSBpdCB3YXMgY2xvbmluZyB0aGVzZSAqY2xvbmVzKiBhZ2FpbiBpbnRvIHRoZSBlbGVtZW50IGFuZCBkZXN0cm95aW5nIHRoZSBvcmlnaW5hbCBjbG9uZSBhZnRlcndhcmQuIFRoYXQmIzM5O3MgYSB0ZXh0Ym9vayBkb3VibGUtY2xvbmUgc2NlbmFyaW8hIFdlIGhhZCBhIHRlbXBvcmFyeSBjb3B5IHRoYXQgd2FzIHVsdGltYXRlbHkgZGlzY2FyZGVkLiBUaGUgcGF0Y2ggY2xlYW5zIHRoaXMgdXAgc2lnbmlmaWNhbnRseS4KClRoZSBwYXRjaCYjMzk7cyBvcHRpbWl6YXRpb24gc3RyYXRlZ3kgaXMgdG8gcGFzcyB0aGUgb3JpZ2luYWwgZXhwcmVzc2lvbnMgZGlyZWN0bHkgaW4gYGV4cHJfYXJyYXlgIHdoZW4gcG9zc2libGUuIElmIHRoZSBzZXQmIzM5O3MgZXhwcmVzc2lvbnMgYXJlICpub3QqIGJlaW5nIG92ZXJyaWRkZW4gYnkgYSB1c2VyLXByb3ZpZGVkIGV4cHJlc3Npb24sIGBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cGAgY2xvbmVzIHRoZXNlIGRpcmVjdGx5IGludG8gdGhlIGVsZW1lbnQuIElmIHRoZXJlJiMzOTtzIGFuIG92ZXJyaWRlLCB0aGF0IG5ldyBvYmplY3QgZnJvbSBwYXJzaW5nIGlzIGFscmVhZHkgdGhlcmUgYW5kIGNvcGllZCwgYW5kIHRoZSB0ZW1wIGFsbG9jYXRpb24gaXMgZGVzdHJveWVkLiBUaGlzIGRpcmVjdGx5IGFkZHJlc3NlcyB0aGUgZG91YmxlLWNsb25lIHByb2JsZW0sIHJlZHVjaW5nIHRoZSBtZW1vcnkgZm9vdHByaW50IGFuZCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UuCgpJJiMzOTttIG1ha2luZyBzdXJlIHRvIGtlZXAgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHN0cmFpZ2h0IGhlcmUuIFRoZSBgb3ZlcnJpZGVfZXhwcnNgIGZsYWcgaXMga2V5LiBJZiB0cnVlLCB0aGUgYGV4cHJfYXJyYXlgIGNvbnRhaW5zIG5ld2x5IGFsbG9jYXRlZCBvYmplY3RzLCBmcmVzaGx5IHBhcnNlZC4gYG5mdF9zZXRfZWxlbV9leHByX3NldHVwYCBjbG9uZXMgdGhlbSBhbmQgdGhlbiBmcmVlcyB0aGUgbWVtb3J5LiBJZiBmYWxzZSwgaXQmIzM5O3MgcG9pbnRlcnMgdG8gdGhlICpzZXQmIzM5O3MqIGRlZmF1bHQgZXhwcmVzc2lvbnMuIFRoZXNlIGFyZSAqY2xvbmVkKiBpbnRvIHRoZSBlbGVtZW50IGJ1dCB0aGUgb3JpZ2luYWxzIGluIGBleHByX2FycmF5YCByZW1haW4sIGJlY2F1c2UgdGhvc2UgZXhwcmVzc2lvbnMgYXJlIHBhcnQgb2YgdGhlIHNldCwgYW5kIHNob3VsZG4mIzM5O3QgYmUgdG91Y2hlZCBieSBzZXR1cC4KClNvLCB0aGlzIGlzIGEgY2xlYW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG9iamVjdCBsaWZlY3ljbGUgb3B0aW1pemF0aW9uLiBDcml0aWNhbGx5LCBpdCAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gYG5mdF9leHByX2Nsb25lYCBpcyBzdGlsbCByZXNwb25zaWJsZSBmb3IgY29ycmVjdGx5IGluaXRpYWxpemluZyB0aGUgY29waWVkIGRhdGEgd2l0aGluIHRoZSBlbGVtZW50IGl0c2VsZi4KCk5vdywgbGV0IG1lIG1ha2Ugc3VyZS4uLiBgbmZ0X3NldGVsZW1fZXhwcl9hdGAgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGVsZW1lbnQmIzM5O3MgZXh0ZW5zaW9uIGFyZWEuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBhcmVhIGlzIGNvcnJlY3RseSB6ZXJvZWQgYmVmb3JlIHRoZSBjb3B5IHRha2VzIHBsYWNlLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBlbGVtX2V4cHJgIHRvIGBuZnRfc2V0X2V4dF9leHByKGV4dClgLiBgZXh0YCBpcyBmcm9tIGBuZnRfc2V0X2VsZW1faW5pdGAgb3Igc2ltaWxhci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBhcmVhIGlzIGluaXRpYWxpemVkIHByb3Blcmx5LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBUaGF0JiMzOTtzIHRoZSBvbmUgdGhpbmcgdGhhdCB3aWxsIGNhdXNlIGEgcHJvYmxlbSBoZXJlISBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGlzIHVwIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyB2YWxpZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3NldF9lbGVtX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTg2ND1zdHJ1Y3QgbmZ0X2V4cHIgKm5mdF9zZXRfZWxlbV9leHByX2FsbG9jKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTg2Ny1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaDo4Njg6c3RydWN0IG5mdF9lbGVtX3ByaXYgKm5mdF9zZXRfZWxlbV9pbml0KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODY5LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHRfdG1wbCAqdG1wbCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02Nzc0PXN0YXRpYyBpbnQgbmZ0X3NldF9leHRfbWVtY3B5KGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLCB1OCBpZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02Nzg0LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njc4NTpzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqbmZ0X3NldF9lbGVtX2luaXQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY3ODYtXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcyNDU9c3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzUyMi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc1MjM6XHRlbGVtLnByaXYgPSBuZnRfc2V0X2VsZW1faW5pdChzZXQsIFx1MDAyNnRtcGwsIGVsZW0ua2V5LnZhbC5kYXRhLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzUyNC1cdFx0XHRcdCAgICAgIGVsZW0ua2V5X2VuZC52YWwuZGF0YSwgZWxlbS5kYXRhLnZhbC5kYXRhLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc4MjU9c3RhdGljIGludCBuZnRfZGVsX3NldGVsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03ODgxLVx0ZXJyID0gLUVOT01FTTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc4ODI6XHRlbGVtLnByaXYgPSBuZnRfc2V0X2VsZW1faW5pdChzZXQsIFx1MDAyNnRtcGwsIGVsZW0ua2V5LnZhbC5kYXRhLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzg4My1cdFx0XHRcdCAgICAgIGVsZW0ua2V5X2VuZC52YWwuZGF0YSwgTlVMTCwgMCwgMCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYz01Nj1zdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqbmZ0X2R5bnNldF9uZXcoc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYy02OC1cdHRpbWVvdXQgPSBwcml2LVx1MDAzZXRpbWVvdXQgPyA6IFJFQURfT05DRShzZXQtXHUwMDNldGltZW91dCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYzo2OTpcdGVsZW1fcHJpdiA9IG5mdF9zZXRfZWxlbV9pbml0KHNldCwgXHUwMDI2cHJpdi1cdTAwM2V0bXBsLFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtNzAtXHRcdFx0XHQgICAgICBcdTAwMjZyZWdzLVx1MDAzZWRhdGFbcHJpdi1cdTAwM2VzcmVnX2tleV0sIE5VTEwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDk3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbmZ0X3NldF9lbGVtX2luaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGltZSB0byB0YWtlIGEgbG9vayBhdCBgbmZ0X3NldF9lbGVtX2luaXRgLiBHaXZlbiB0aGUgY29udGV4dCwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGluaXRpYWxpemF0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluIGFuIE5GVGFibGVzIHNldC4gSXQmIzM5O3MgdGhlIGJ1aWxkaW5nIGJsb2NrLCB0aGUgZ3JvdW5kIGZsb29yIGZvciBkZWZpbmluZyBob3cgZGF0YSBnZXRzIHN0b3JlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIHJ1bGUgc3RydWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGRlZmluZWQsIG1lbW9yeSBpcyBhbGxvY2F0ZWQgKG9yIHJlLXVzZWQgaWYgcG9zc2libGUpLCBhbmQgd2hhdCBjaGVja3MgYXJlIHBlcmZvcm1lZCB0byBlbnN1cmUgY29uc2lzdGVuY3kgYW5kIHByZXZlbnQgZXJyb3JzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgZWxlbWVudCB0eXBlcyDigJMgd2hldGhlciBpdOKAmXMgaW50ZWdlciwgSVAgYWRkcmVzc2VzLCBzdHJpbmdzLCBvciBtb3JlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiBXaGF0JiMzOTtzIHRoZSBzdHJhdGVneSBmb3IgZGVhbGluZyB3aXRoIHBvdGVudGlhbCBjb2xsaXNpb25zIG9yIG92ZXJsYXBzLCBpZiBhbnk/IEFuZCBvZiBjb3Vyc2UsIHBlcmZvcm1hbmNlIGlzIGtleSDigJMgaG93IGVmZmljaWVudCBpcyB0aGlzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2Ugc2V0cyBhbmQgZnJlcXVlbnQgYWRkaXRpb25zL2RlbGV0aW9ucz8gR290dGEga2VlcCBhbiBleWUgb24gdGhvc2Ugbml0dHktZ3JpdHR5IGRldGFpbHMgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdGlnaHQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2Nzg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY3ODU6XHRzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqbmZ0X3NldF9lbGVtX2luaXQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbjY3ODY6XHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0X3RtcGwgKnRtcGwsXG42Nzg3Olx0XHRcdFx0XHRcdGNvbnN0IHUzMiAqa2V5LCBjb25zdCB1MzIgKmtleV9lbmQsXG42Nzg4Olx0XHRcdFx0XHRcdGNvbnN0IHUzMiAqZGF0YSxcbjY3ODk6XHRcdFx0XHRcdFx0dTY0IHRpbWVvdXQsIHU2NCBleHBpcmF0aW9uLCBnZnBfdCBnZnApXG42NzkwOlx0e1xuNjc5MTpcdFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XG42NzkyOlx0XHR2b2lkICplbGVtO1xuNjc5MzpcdFxuNjc5NDpcdFx0ZWxlbSA9IGt6YWxsb2Moc2V0LVx1MDAzZW9wcy1cdTAwM2VlbGVtc2l6ZSAmIzQzOyB0bXBsLVx1MDAzZWxlbiwgZ2ZwKTtcbjY3OTU6XHRcdGlmIChlbGVtID09IE5VTEwpXG42Nzk2Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuNjc5NzpcdFxuNjc5ODpcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGVsZW0pO1xuNjc5OTpcdFx0bmZ0X3NldF9leHRfaW5pdChleHQsIHRtcGwpO1xuNjgwMDpcdFxuNjgwMTpcdFx0aWYgKG5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX0tFWSkgXHUwMDI2XHUwMDI2XG42ODAyOlx0XHQgICAgbmZ0X3NldF9leHRfbWVtY3B5KHRtcGwsIE5GVF9TRVRfRVhUX0tFWSxcbjY4MDM6XHRcdFx0XHQgICAgICAgbmZ0X3NldF9leHRfa2V5KGV4dCksIGtleSwgc2V0LVx1MDAzZWtsZW4pIFx1MDAzYyAwKVxuNjgwNDpcdFx0XHRnb3RvIGVycl9leHRfY2hlY2s7XG42ODA1Olx0XG42ODA2Olx0XHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfS0VZX0VORCkgXHUwMDI2XHUwMDI2XG42ODA3Olx0XHQgICAgbmZ0X3NldF9leHRfbWVtY3B5KHRtcGwsIE5GVF9TRVRfRVhUX0tFWV9FTkQsXG42ODA4Olx0XHRcdFx0ICAgICAgIG5mdF9zZXRfZXh0X2tleV9lbmQoZXh0KSwga2V5X2VuZCwgc2V0LVx1MDAzZWtsZW4pIFx1MDAzYyAwKVxuNjgwOTpcdFx0XHRnb3RvIGVycl9leHRfY2hlY2s7XG42ODEwOlx0XG42ODExOlx0XHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfREFUQSkgXHUwMDI2XHUwMDI2XG42ODEyOlx0XHQgICAgbmZ0X3NldF9leHRfbWVtY3B5KHRtcGwsIE5GVF9TRVRfRVhUX0RBVEEsXG42ODEzOlx0XHRcdFx0ICAgICAgIG5mdF9zZXRfZXh0X2RhdGEoZXh0KSwgZGF0YSwgc2V0LVx1MDAzZWRsZW4pIFx1MDAzYyAwKVxuNjgxNDpcdFx0XHRnb3RvIGVycl9leHRfY2hlY2s7XG42ODE1Olx0XG42ODE2Olx0XHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfVElNRU9VVCkpIHtcbjY4MTc6XHRcdFx0bmZ0X3NldF9leHRfdGltZW91dChleHQpLVx1MDAzZXRpbWVvdXQgPSB0aW1lb3V0O1xuNjgxODpcdFxuNjgxOTpcdFx0XHRpZiAoZXhwaXJhdGlvbiA9PSAwKVxuNjgyMDpcdFx0XHRcdGV4cGlyYXRpb24gPSB0aW1lb3V0O1xuNjgyMTpcdFxuNjgyMjpcdFx0XHRuZnRfc2V0X2V4dF90aW1lb3V0KGV4dCktXHUwMDNlZXhwaXJhdGlvbiA9IGdldF9qaWZmaWVzXzY0KCkgJiM0MzsgZXhwaXJhdGlvbjtcbjY4MjM6XHRcdH1cbjY4MjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMTkKCQkJCQkJCW91dHB1dDogMjE5CgkJCQkJCQl0aG91Z2h0czogMTA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogTWVtb3J5IE1hbmFnZW1lbnQgRml4ZXMgaW4gTmV0ZmlsdGVyIFNldHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBhYm91dCB0aGUgcmVtb3ZhbCBvZiB0aGF0IGBremFsbG9jYCBpbiBgbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmVgLiBCdXQgdGhhdCB3YXMganVzdCBmb3IgYSB0ZW1wb3JhcnkgY2xvbmUgdGhhdCYjMzk7cyBieXBhc3NlZCBub3cuIFRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgdGhlICphY3R1YWwqIGVsZW1lbnQgbWVtb3J5IGlzIHN0aWxsIHplcm9lZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gdmlhIGBremFsbG9jYC4gU28sIG5vIGltbWVkaWF0ZSByaXNrIHRoZXJlLiBJIGRpZCBhIHF1aWNrIGNoZWNrIG9uIGBuZnRfZXhwcl9jbG9uZWAganVzdCBpbiBjYXNlLCBidXQgdGhhdCBjb3BpZXMgZnJvbSBhbiAqaW5pdGlhbGl6ZWQqIG9yaWdpbmFsIGV4cHJlc3Npb24uCgpUaGVuIEkgbW92ZWQgb24gdG8gdGhlIGNoYW5nZXMgaW4gYG5mdF9zZXRfY29tbWl0X3VwZGF0ZWAuIFNldHRpbmcgYGRlYWQgPSAxYCBvbiBkZWxldGVkIHNldHMuLi4gc291bmRzIGxpa2UgYSB1c2UtYWZ0ZXItZnJlZSBwcm90ZWN0aW9uLiBNYWtlcyBzZW5zZS4KCkRpZ2dpbmcgZnVydGhlciwgSSBsb29rZWQgYXQgYG5mdF9keW5zZXRfaW5pdGAgYW5kIGBuZnRfZHluc2V0X2Rlc3Ryb3lgLiBJdCYjMzk7cyBub3cgc3RvcmluZyBkaXJlY3QgcG9pbnRlcnMgdG8gc2V0IGV4cHJlc3Npb25zLCBpbnN0ZWFkIG9mIGNsb25pbmcgdGhlbSwgd2l0aCB0aGlzIGBvdmVycmlkZV9leHByc2AgZmxhZyB0byBzaWduYWwgd2hldGhlciB0aGUgc2V0IGV4cHJlc3Npb24mIzM5O3MgZXhwcmVzc2lvbnMgc2hvdWxkIGJlIGRlc3Ryb3llZCBvciBub3QuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgYSBkb3VibGUtZnJlZSBvciBVQUYgYnVnIGZpeDogd2UmIzM5O3JlIHByZXZlbnRpbmcgdGhlIGR5bnNldCBleHByZXNzaW9uIGZyb20gZGVzdHJveWluZyB0aGUgc2V0IGV4cHJlc3Npb25zIHdoZW4gdGhleSYjMzk7cmUgbm90IG93bmVkIGJ5IHRoZSBkeW5zZXQgZXhwcmVzc2lvbi4KClNvLCBpbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIGlzIGZpeGluZzoKMS4gIEV4cHJlc3Npb24gY2xvbmluZyBpbiBgbmZ0X2FkZF9zZXRfZWxlbWAuCjIuICBEb3VibGUtZnJlZS9VQUYgaW4gYG5mdF9keW5zZXRfZGVzdHJveWAuCjMuICBTZXR0aW5nIHRoZSBgZGVhZGAgZmxhZyBvbiBkZWxldGVkIHNldHMuCgpJJiMzOTttIGNvbmZpZGVudCB0aGF0IG5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgKm9yKiBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVzZSBhcmUgbWVtb3J5IG1hbmFnZW1lbnQgZml4ZXMsIHB1cmUgYW5kIHNpbXBsZS4gS0FTQU4gaXMgdGhlIHRvb2wgZm9yIHRoZXNlIGtpbmRzIG9mIGJ1Z3MuIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4KCk5vdywgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBhbnkgcG9zc2libGUgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgdG8gdXNlcnNwYWNlLiBUaGUgZXhwcmVzc2lvbnMgdGhlbXNlbHZlcyBjYW4gZ2V0IGR1bXBlZCB0byB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsuIFRoZSBlbGVtZW50IG1lbW9yeSBnZXRzIGBremFsbG9jYCYjMzk7ZWQgaW4gYG5mdF9zZXRfZWxlbV9pbml0YCwgbWVhbmluZyBpdCYjMzk7cyBhbGwgemVyb2VkLiBUaGUgZXhwcmVzc2lvbnMgYXJlIGNsb25lZCBpbnRvIHRoYXQgemVyb2VkIG1lbW9yeSB3aXRoIGBuZnRfZXhwcl9jbG9uZWAsIHdoaWNoIG1lYW5zLCBiZWNhdXNlIHRoZSBleHByZXNzaW9uIHdhcyBhbHJlYWR5IGluaXRpYWxpemVkIGFuZCBsaWtlbHkgemVyby1wYWRkZWQsIHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbHNvLCB0aGlzIHBhdGNoICpkb2VzbiYjMzk7dCogY2hhbmdlIHdoYXQgZ2V0cyBzdG9yZWQgaW4gdGhlIGVsZW1lbnQsIG9ubHkgKmhvdyogaXQgZ2V0cyB0aGVyZS4KClRoZXJlZm9yZSwgbm8sIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucyBoZXJlLgoKKipJJiMzOTttIHNldHRpbmcgTmVlZHNLTVNBTj1mYWxzZS4qKiBUaGlzIGlzIGFsbCBhYm91dCBmaXhpbmcgb2JqZWN0IGxpZmVjeWNsZSBwcm9ibGVtcyBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIHdlbGwgaGFuZGxlZCBieSBLQVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgbGlmZWN5Y2xlIGFuZCBjbG9uaW5nIG9mIG5ldGZpbHRlciBzZXQgZXhwcmVzc2lvbnMgKGBuZnRfZXhwcmApIHRvIGZpeCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgKGxpa2VseSBkb3VibGUtZnJlZXMgb3IgdXNlLWFmdGVyLWZyZWVzKS4gSXQgYXZvaWRzIGNyZWF0aW5nIGludGVybWVkaWF0ZSBjbG9uZXMgb2YgZXhwcmVzc2lvbnMgd2hlbiBhZGRpbmcgZWxlbWVudHMgdG8gYSBzZXQgb3IgaW5pdGlhbGl6aW5nIGEgZHluc2V0LCBpbnN0ZWFkIGNvcHlpbmcgcG9pbnRlcnMgYW5kIHVzaW5nIGEgbmV3IGBvdmVycmlkZV9leHByc2AgZmxhZyB0byB0cmFjayBvd25lcnNoaXAgYW5kIGRldGVybWluZSBpZiB0aGUgZXhwcmVzc2lvbnMgc2hvdWxkIGJlIGRlc3Ryb3llZC4gSXQgYWxzbyBzZXRzIGEgYGRlYWRgIGZsYWcgb24gZGVsZXRlZCBzZXRzIGR1cmluZyBjb21taXQgdXBkYXRlcy4gXG5cblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBvYmplY3QgbGlmZWN5Y2xlIGJ1Z3MgKFVBRiwgZG91YmxlLWZyZWUpIHdoaWNoIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIG1lbW9yeSBmb3IgdGhlIHNldCBlbGVtZW50cyB0aGVtc2VsdmVzIGNvbnRpbnVlcyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgKGluIGBuZnRfc2V0X2VsZW1faW5pdGApLCBlbnN1cmluZyBhbGwgZmllbGRzIGFuZCBwYWRkaW5nIGFyZSBmdWxseSB6ZXJvZWQuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBsaWZlY3ljbGUgYW5kIGNsb25pbmcgb2YgbmV0ZmlsdGVyIHNldCBleHByZXNzaW9ucyAoYG5mdF9leHByYCkgdG8gZml4IG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyAobGlrZWx5IGRvdWJsZS1mcmVlcyBvciB1c2UtYWZ0ZXItZnJlZXMpLiBJdCBhdm9pZHMgY3JlYXRpbmcgaW50ZXJtZWRpYXRlIGNsb25lcyBvZiBleHByZXNzaW9ucyB3aGVuIGFkZGluZyBlbGVtZW50cyB0byBhIHNldCBvciBpbml0aWFsaXppbmcgYSBkeW5zZXQsIGluc3RlYWQgY29weWluZyBwb2ludGVycyBhbmQgdXNpbmcgYSBuZXcgYG92ZXJyaWRlX2V4cHJzYCBmbGFnIHRvIHRyYWNrIG93bmVyc2hpcCBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBleHByZXNzaW9ucyBzaG91bGQgYmUgZGVzdHJveWVkLiBJdCBhbHNvIHNldHMgYSBgZGVhZGAgZmxhZyBvbiBkZWxldGVkIHNldHMgZHVyaW5nIGNvbW1pdCB1cGRhdGVzLiBcblxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG9iamVjdCBsaWZlY3ljbGUgYnVncyAoVUFGLCBkb3VibGUtZnJlZSkgd2hpY2ggYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgbWVtb3J5IGZvciB0aGUgc2V0IGVsZW1lbnRzIHRoZW1zZWx2ZXMgY29udGludWVzIHRvIGJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCAoaW4gYG5mdF9zZXRfZWxlbV9pbml0YCksIGVuc3VyaW5nIGFsbCBmaWVsZHMgYW5kIHBhZGRpbmcgYXJlIGZ1bGx5IHplcm9lZC4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDA6NDUuNjIwNDU1OTI5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3OTk1NTg1NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX3RhYmxlc19uZXdzZXRlbGVtXCIsXG4gICAgXCJuZl90YWJsZXNfbmV3c2V0XCIsXG4gICAgXCJuZl90YWJsZXNfZGVsc2V0XCIsXG4gICAgXCJuZl90YWJsZXNfY29tbWl0XCIsXG4gICAgXCJuZl90YWJsZXNfbmV3cnVsZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgbGlmZWN5Y2xlIGFuZCBjbG9uaW5nIG9mIG5ldGZpbHRlciBzZXQgZXhwcmVzc2lvbnMgKGBuZnRfZXhwcmApIHRvIGZpeCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgKGxpa2VseSBkb3VibGUtZnJlZXMgb3IgdXNlLWFmdGVyLWZyZWVzKS4gSXQgYXZvaWRzIGNyZWF0aW5nIGludGVybWVkaWF0ZSBjbG9uZXMgb2YgZXhwcmVzc2lvbnMgd2hlbiBhZGRpbmcgZWxlbWVudHMgdG8gYSBzZXQgb3IgaW5pdGlhbGl6aW5nIGEgZHluc2V0LCBpbnN0ZWFkIGNvcHlpbmcgcG9pbnRlcnMgYW5kIHVzaW5nIGEgbmV3IGBvdmVycmlkZV9leHByc2AgZmxhZyB0byB0cmFjayBvd25lcnNoaXAgYW5kIGRldGVybWluZSBpZiB0aGUgZXhwcmVzc2lvbnMgc2hvdWxkIGJlIGRlc3Ryb3llZC4gSXQgYWxzbyBzZXRzIGEgYGRlYWRgIGZsYWcgb24gZGVsZXRlZCBzZXRzIGR1cmluZyBjb21taXQgdXBkYXRlcy4gXFxuXFxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG9iamVjdCBsaWZlY3ljbGUgYnVncyAoVUFGLCBkb3VibGUtZnJlZSkgd2hpY2ggYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgbWVtb3J5IGZvciB0aGUgc2V0IGVsZW1lbnRzIHRoZW1zZWx2ZXMgY29udGludWVzIHRvIGJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCAoaW4gYG5mdF9zZXRfZWxlbV9pbml0YCksIGVuc3VyaW5nIGFsbCBmaWVsZHMgYW5kIHBhZGRpbmcgYXJlIGZ1bGx5IHplcm9lZC4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5mX3RhYmxlcyBsb2dpYyBmb3IgaGFuZGxpbmcgc2V0IGVsZW1lbnQgZXhwcmVzc2lvbnMgYW5kIGR5bmFtaWMgc2V0cywgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBleHByZXNzaW9ucyBhcmUgY2xvbmVkIGFuZCBkZXN0cm95ZWQuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvbW1pdCBwaGFzZSBmb3Igc2V0IGRlbGV0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmssIG1ha2luZyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQwOjQ1LjYyMDQ2MDMwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MjExODI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM4NzdhMjg4MDRiMzY2YzI1YjkyOWYzZGExNWNmN2VkZGEzNjMwY2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTI6NDA6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXFxuaW5kZXggMjM4ZjZlY2I5MGU5OS4uOWQ1OTc0ODIzNjNkOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcXG5AQCAtODcwLDggKzg3MCw2IEBAIHN0cnVjdCBuZnRfZWxlbV9wcml2ICpuZnRfc2V0X2VsZW1faW5pdChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbiBcXHRcXHRcXHRcXHRcXHRjb25zdCB1MzIgKmtleSwgY29uc3QgdTMyICprZXlfZW5kLFxcbiBcXHRcXHRcXHRcXHRcXHRjb25zdCB1MzIgKmRhdGEsXFxuIFxcdFxcdFxcdFxcdFxcdHU2NCB0aW1lb3V0LCB1NjQgZXhwaXJhdGlvbiwgZ2ZwX3QgZ2ZwKTtcXG4taW50IG5mdF9zZXRfZWxlbV9leHByX2Nsb25lKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHJfYXJyYXlbXSk7XFxuIHZvaWQgbmZ0X3NldF9lbGVtX2V4cHJfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9zZXRfZWxlbV9leHByICplbGVtX2V4cHIpO1xcbiB2b2lkIG5mdF9zZXRfZWxlbV9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcXG5pbmRleCBjMTEyZWNjNGZjYTMyLi4zODQ1MDVmNjgwZGVmIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcXG5AQCAtNjkyMSwzOSArNjkyMSwxMSBAQCBzdGF0aWMgdm9pZCBuZnRfdHJhbnNfZWxlbXNfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXHRcXHRuZl90YWJsZXNfc2V0X2VsZW1fZGVzdHJveShjdHgsIHRlLVxcdTAwM2VzZXQsIHRlLVxcdTAwM2VlbGVtc1tpXS5wcml2KTtcXG4gfVxcbiBcXG4taW50IG5mdF9zZXRfZWxlbV9leHByX2Nsb25lKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHJfYXJyYXlbXSlcXG4te1xcbi1cXHRzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHI7XFxuLVxcdGludCBlcnIsIGksIGs7XFxuLVxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2V0LVxcdTAwM2VudW1fZXhwcnM7IGkrKykge1xcbi1cXHRcXHRleHByID0ga3phbGxvYyhzZXQtXFx1MDAzZWV4cHJzW2ldLVxcdTAwM2VvcHMtXFx1MDAzZXNpemUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLVxcdFxcdGlmICghZXhwcilcXG4tXFx0XFx0XFx0Z290byBlcnJfZXhwcjtcXG4tXFxuLVxcdFxcdGVyciA9IG5mdF9leHByX2Nsb25lKGV4cHIsIHNldC1cXHUwMDNlZXhwcnNbaV0sIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdFxcdGtmcmVlKGV4cHIpO1xcbi1cXHRcXHRcXHRnb3RvIGVycl9leHByO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGV4cHJfYXJyYXlbaV0gPSBleHByO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tXFxuLWVycl9leHByOlxcbi1cXHRmb3IgKGsgPSBpIC0gMTsgayBcXHUwMDNlPSAwOyBrLS0pXFxuLVxcdFxcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2tdKTtcXG4tXFxuLVxcdHJldHVybiAtRU5PTUVNO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuIFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLFxcbiBcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9leHByICpleHByX2FycmF5W10sXFxuLVxcdFxcdFxcdFxcdCAgIHUzMiBudW1fZXhwcnMpXFxuK1xcdFxcdFxcdFxcdCAgIHUzMiBudW1fZXhwcnMsIGJvb2wgb3ZlcnJpZGVfZXhwcnMpXFxuIHtcXG4gXFx0c3RydWN0IG5mdF9zZXRfZWxlbV9leHByICplbGVtX2V4cHIgPSBuZnRfc2V0X2V4dF9leHByKGV4dCk7XFxuIFxcdHUzMiBsZW4gPSBzaXplb2Yoc3RydWN0IG5mdF9zZXRfZWxlbV9leHByKTtcXG5AQCAtNjk3Niw3ICs2OTQ4LDggQEAgc3RhdGljIGludCBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXHRcXHRcXHRnb3RvIGVycl9lbGVtX2V4cHJfc2V0dXA7XFxuIFxcbiBcXHRcXHRlbGVtX2V4cHItXFx1MDAzZXNpemUgKz0gZXhwcl9hcnJheVtpXS1cXHUwMDNlb3BzLVxcdTAwM2VzaXplO1xcbi1cXHRcXHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XFxuK1xcdFxcdGlmIChvdmVycmlkZV9leHBycylcXG4rXFx0XFx0XFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pO1xcbiBcXHRcXHRleHByX2FycmF5W2ldID0gTlVMTDtcXG4gXFx0fVxcbiBcXG5AQCAtNjk4NCw3ICs2OTU3LDkgQEAgc3RhdGljIGludCBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXG4gZXJyX2VsZW1fZXhwcl9zZXR1cDpcXG4gXFx0Zm9yICg7IGkgXFx1MDAzYyBudW1fZXhwcnM7IGkrKykge1xcbi1cXHRcXHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XFxuK1xcdFxcdGlmIChvdmVycmlkZV9leHBycylcXG4rXFx0XFx0XFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pO1xcbitcXG4gXFx0XFx0ZXhwcl9hcnJheVtpXSA9IE5VTEw7XFxuIFxcdH1cXG4gXFxuQEAgLTcyODAsNiArNzI1NSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbiBcXHRzdHJ1Y3QgbmZ0X3NldF9iaW5kaW5nICpiaW5kaW5nO1xcbiBcXHRzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2O1xcbiBcXHRzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqID0gTlVMTDtcXG4rXFx0Ym9vbCBvdmVycmlkZV9leHBycyA9IGZhbHNlO1xcbiBcXHRzdHJ1Y3QgbmZ0X3VzZXJkYXRhICp1ZGF0YTtcXG4gXFx0c3RydWN0IG5mdF9kYXRhX2Rlc2MgZGVzYztcXG4gXFx0ZW51bSBuZnRfcmVnaXN0ZXJzIGRyZWc7XFxuQEAgLTczODUsNiArNzM2MSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbiBcXG4gXFx0XFx0ZXhwcl9hcnJheVswXSA9IGV4cHI7XFxuIFxcdFxcdG51bV9leHBycyA9IDE7XFxuK1xcdFxcdG92ZXJyaWRlX2V4cHJzID0gdHJ1ZTtcXG4gXFxuIFxcdFxcdGlmIChzZXQtXFx1MDAzZW51bV9leHBycyBcXHUwMDI2XFx1MDAyNiBzZXQtXFx1MDAzZWV4cHJzWzBdLVxcdTAwM2VvcHMgIT0gZXhwci1cXHUwMDNlb3BzKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbkBAIC03NDEzLDYgKzczOTAsNyBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRleHByX2FycmF5W2ldID0gZXhwcjtcXG4gXFx0XFx0XFx0bnVtX2V4cHJzKys7XFxuK1xcdFxcdFxcdG92ZXJyaWRlX2V4cHJzID0gdHJ1ZTtcXG4gXFxuIFxcdFxcdFxcdGlmIChzZXQtXFx1MDAzZW51bV9leHBycyBcXHUwMDI2XFx1MDAyNiBleHByLVxcdTAwM2VvcHMgIT0gc2V0LVxcdTAwM2VleHByc1tpXS1cXHUwMDNlb3BzKSB7XFxuIFxcdFxcdFxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbkBAIC03NDI2LDkgKzc0MDQsOCBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKHNldC1cXHUwMDNlbnVtX2V4cHJzIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAhKGZsYWdzIFxcdTAwMjYgTkZUX1NFVF9FTEVNX0lOVEVSVkFMX0VORCkpIHtcXG4tXFx0XFx0ZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY3R4LCBzZXQsIGV4cHJfYXJyYXkpO1xcbi1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0Z290byBlcnJfc2V0X2VsZW1fZXhwcl9jbG9uZTtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNldC1cXHUwMDNlbnVtX2V4cHJzOyBpKyspXFxuK1xcdFxcdFxcdGV4cHJfYXJyYXlbaV0gPSBzZXQtXFx1MDAzZWV4cHJzW2ldO1xcbiBcXG4gXFx0XFx0bnVtX2V4cHJzID0gc2V0LVxcdTAwM2VudW1fZXhwcnM7XFxuIFxcdH1cXG5AQCAtNzU2Nyw3ICs3NTQ0LDggQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuIFxcdFxcdHVkYXRhLVxcdTAwM2VsZW4gPSB1bGVuIC0gMTtcXG4gXFx0XFx0bmxhX21lbWNweShcXHUwMDI2dWRhdGEtXFx1MDAzZWRhdGEsIG5sYVtORlRBX1NFVF9FTEVNX1VTRVJEQVRBXSwgdWxlbik7XFxuIFxcdH1cXG4tXFx0ZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoY3R4LCBcXHUwMDI2dG1wbCwgZXh0LCBleHByX2FycmF5LCBudW1fZXhwcnMpO1xcbitcXHRlcnIgPSBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChjdHgsIFxcdTAwMjZ0bXBsLCBleHQsIGV4cHJfYXJyYXksIG51bV9leHBycyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgb3ZlcnJpZGVfZXhwcnMpO1xcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnJfZWxlbV9mcmVlO1xcbiBcXG5AQCAtNzY3NSw5ICs3NjUzLDExIEBAIHN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbiBlcnJfcGFyc2Vfa2V5OlxcbiBcXHRuZnRfZGF0YV9yZWxlYXNlKFxcdTAwMjZlbGVtLmtleS52YWwsIE5GVF9EQVRBX1ZBTFVFKTtcXG4gZXJyX3NldF9lbGVtX2V4cHI6XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fZXhwcnMgXFx1MDAyNlxcdTAwMjYgZXhwcl9hcnJheVtpXTsgaSsrKVxcbi1cXHRcXHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XFxuLWVycl9zZXRfZWxlbV9leHByX2Nsb25lOlxcbitcXHRpZiAob3ZlcnJpZGVfZXhwcnMpIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9leHBycyBcXHUwMDI2XFx1MDAyNiBleHByX2FycmF5W2ldOyBpKyspXFxuK1xcdFxcdFxcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTtcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtMTA4OTQsNiArMTA4NzQsMTAgQEAgc3RhdGljIHZvaWQgbmZ0X3NldF9jb21taXRfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuIFxcdFxcdG5mdF9jdHhfdXBkYXRlKGN0eCwgdHJhbnMpO1xcbiBcXG4gXFx0XFx0c3dpdGNoICh0cmFucy1cXHUwMDNlbXNnX3R5cGUpIHtcXG4rXFx0XFx0Y2FzZSBORlRfTVNHX0RFTFNFVDpcXG4rXFx0XFx0Y2FzZSBORlRfTVNHX0RFU1RST1lTRVQ6XFxuK1xcdFxcdFxcdG5mdF90cmFuc19zZXQodHJhbnMpLVxcdTAwM2VkZWFkID0gMTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgTkZUX01TR19ERUxTRVRFTEVNOlxcbiBcXHRcXHRcXHR0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7XFxuIFxcdFxcdFxcdGlmICghdGUtXFx1MDAzZXNldC1cXHUwMDNlb3BzLVxcdTAwM2Vjb21taXQpXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmNcXG5pbmRleCBlZTlkM2U3YjFlY2YxLi44M2U1NmIxYWE4NTg1IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmNcXG5AQCAtMTksNyArMTksOCBAQCBzdHJ1Y3QgbmZ0X2R5bnNldCB7XFxuIFxcdHU4XFx0XFx0XFx0XFx0c3JlZ19rZXk7XFxuIFxcdHU4XFx0XFx0XFx0XFx0c3JlZ19kYXRhO1xcbiBcXHRib29sXFx0XFx0XFx0XFx0aW52ZXJ0O1xcbi1cXHRib29sXFx0XFx0XFx0XFx0ZXhwcjtcXG4rXFx0Ym9vbFxcdFxcdFxcdFxcdGV4cHI6MSxcXG4rXFx0XFx0XFx0XFx0XFx0b3ZlcnJpZGVfZXhwcnM6MTtcXG4gXFx0dThcXHRcXHRcXHRcXHRudW1fZXhwcnM7XFxuIFxcdHU2NFxcdFxcdFxcdFxcdHRpbWVvdXQ7XFxuIFxcdHN0cnVjdCBuZnRfZXhwclxcdFxcdFxcdCpleHByX2FycmF5W05GVF9TRVRfRVhQUl9NQVhdO1xcbkBAIC0yNTcsNiArMjU4LDcgQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gXFxuIFxcdFxcdHByaXYtXFx1MDAzZW51bV9leHBycysrO1xcbiBcXHRcXHRwcml2LVxcdTAwM2VleHByX2FycmF5WzBdID0gZHluc2V0X2V4cHI7XFxuK1xcdFxcdHByaXYtXFx1MDAzZW92ZXJyaWRlX2V4cHJzID0gdHJ1ZTtcXG4gXFxuIFxcdFxcdGlmIChzZXQtXFx1MDAzZW51bV9leHBycyBcXHUwMDNlIDEgfHxcXG4gXFx0XFx0ICAgIChzZXQtXFx1MDAzZW51bV9leHBycyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTI4OSw2ICsyOTEsNyBAQCBzdGF0aWMgaW50IG5mdF9keW5zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdHByaXYtXFx1MDAzZWV4cHJfYXJyYXlbaV0gPSBkeW5zZXRfZXhwcjtcXG4gXFx0XFx0XFx0cHJpdi1cXHUwMDNlbnVtX2V4cHJzKys7XFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZW92ZXJyaWRlX2V4cHJzID0gdHJ1ZTtcXG4gXFxuIFxcdFxcdFxcdGlmIChzZXQtXFx1MDAzZW51bV9leHBycykge1xcbiBcXHRcXHRcXHRcXHRpZiAoaSBcXHUwMDNlPSBzZXQtXFx1MDAzZW51bV9leHBycykge1xcbkBAIC0zMDcsOSArMzEwLDggQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gXFx0XFx0XFx0Z290byBlcnJfZXhwcl9mcmVlO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSBpZiAoc2V0LVxcdTAwM2VudW1fZXhwcnMgXFx1MDAzZSAwKSB7XFxuLVxcdFxcdGVyciA9IG5mdF9zZXRfZWxlbV9leHByX2Nsb25lKGN0eCwgc2V0LCBwcml2LVxcdTAwM2VleHByX2FycmF5KTtcXG4tXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzZXQtXFx1MDAzZW51bV9leHByczsgaSsrKVxcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VleHByX2FycmF5W2ldID0gc2V0LVxcdTAwM2VleHByc1tpXTtcXG4gXFxuIFxcdFxcdHByaXYtXFx1MDAzZW51bV9leHBycyA9IHNldC1cXHUwMDNlbnVtX2V4cHJzO1xcbiBcXHR9XFxuQEAgLTMzOSw4ICszNDEsMTAgQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBlcnJfZXhwcl9mcmVlOlxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJpdi1cXHUwMDNlbnVtX2V4cHJzOyBpKyspXFxuLVxcdFxcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBwcml2LVxcdTAwM2VleHByX2FycmF5W2ldKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZW92ZXJyaWRlX2V4cHJzKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwcml2LVxcdTAwM2VudW1fZXhwcnM7IGkrKylcXG4rXFx0XFx0XFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIHByaXYtXFx1MDAzZWV4cHJfYXJyYXlbaV0pO1xcbitcXHR9XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTM2Nyw5ICszNzEsMTAgQEAgc3RhdGljIHZvaWQgbmZ0X2R5bnNldF9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuIFxcdHN0cnVjdCBuZnRfZHluc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJpdi1cXHUwMDNlbnVtX2V4cHJzOyBpKyspXFxuLVxcdFxcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBwcml2LVxcdTAwM2VleHByX2FycmF5W2ldKTtcXG4tXFxuK1xcdGlmIChwcml2LVxcdTAwM2VvdmVycmlkZV9leHBycykge1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJpdi1cXHUwMDNlbnVtX2V4cHJzOyBpKyspXFxuK1xcdFxcdFxcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBwcml2LVxcdTAwM2VleHByX2FycmF5W2ldKTtcXG4rXFx0fVxcbiBcXHRuZl90YWJsZXNfZGVzdHJveV9zZXQoY3R4LCBwcml2LVxcdTAwM2VzZXQpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MDo0Ny4wNzMzMzI3NDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1MzUzMTMxNzg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl90YWJsZXNfbmV3c2V0ZWxlbVwiLFxuICAgIFwibmZfdGFibGVzX25ld3NldFwiLFxuICAgIFwibmZfdGFibGVzX2RlbHNldFwiLFxuICAgIFwibmZfdGFibGVzX2NvbW1pdFwiLFxuICAgIFwibmZfdGFibGVzX25ld3J1bGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5mX3RhYmxlcyBsb2dpYyBmb3IgaGFuZGxpbmcgc2V0IGVsZW1lbnQgZXhwcmVzc2lvbnMgYW5kIGR5bmFtaWMgc2V0cywgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBleHByZXNzaW9ucyBhcmUgY2xvbmVkIGFuZCBkZXN0cm95ZWQuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvbW1pdCBwaGFzZSBmb3Igc2V0IGRlbGV0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmssIG1ha2luZyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM4NzdhMjg4MDRiMzY2YzI1YjkyOWYzZGExNWNmN2VkZGEzNjMwY2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMjo0MDo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuaW5kZXggMjM4ZjZlY2I5MGU5OS4uOWQ1OTc0ODIzNjNkOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXG5AQCAtODcwLDggKzg3MCw2IEBAIHN0cnVjdCBuZnRfZWxlbV9wcml2ICpuZnRfc2V0X2VsZW1faW5pdChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFx0XHRcdFx0XHRjb25zdCB1MzIgKmtleSwgY29uc3QgdTMyICprZXlfZW5kLFxuIFx0XHRcdFx0XHRjb25zdCB1MzIgKmRhdGEsXG4gXHRcdFx0XHRcdHU2NCB0aW1lb3V0LCB1NjQgZXhwaXJhdGlvbiwgZ2ZwX3QgZ2ZwKTtcbi1pbnQgbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbi1cdFx0XHQgICAgc3RydWN0IG5mdF9leHByICpleHByX2FycmF5W10pO1xuIHZvaWQgbmZ0X3NldF9lbGVtX2V4cHJfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIgKmVsZW1fZXhwcik7XG4gdm9pZCBuZnRfc2V0X2VsZW1fZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbmluZGV4IGMxMTJlY2M0ZmNhMzIuLjM4NDUwNWY2ODBkZWYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbkBAIC02OTIxLDM5ICs2OTIxLDExIEBAIHN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdG5mX3RhYmxlc19zZXRfZWxlbV9kZXN0cm95KGN0eCwgdGUtXHUwMDNlc2V0LCB0ZS1cdTAwM2VlbGVtc1tpXS5wcml2KTtcbiB9XG4gXG4taW50IG5mdF9zZXRfZWxlbV9leHByX2Nsb25lKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tXHRcdFx0ICAgIHN0cnVjdCBuZnRfZXhwciAqZXhwcl9hcnJheVtdKVxuLXtcbi1cdHN0cnVjdCBuZnRfZXhwciAqZXhwcjtcbi1cdGludCBlcnIsIGksIGs7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzZXQtXHUwMDNlbnVtX2V4cHJzOyBpKyspIHtcbi1cdFx0ZXhwciA9IGt6YWxsb2Moc2V0LVx1MDAzZWV4cHJzW2ldLVx1MDAzZW9wcy1cdTAwM2VzaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0XHRpZiAoIWV4cHIpXG4tXHRcdFx0Z290byBlcnJfZXhwcjtcbi1cbi1cdFx0ZXJyID0gbmZ0X2V4cHJfY2xvbmUoZXhwciwgc2V0LVx1MDAzZWV4cHJzW2ldLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4tXHRcdFx0a2ZyZWUoZXhwcik7XG4tXHRcdFx0Z290byBlcnJfZXhwcjtcbi1cdFx0fVxuLVx0XHRleHByX2FycmF5W2ldID0gZXhwcjtcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLVxuLWVycl9leHByOlxuLVx0Zm9yIChrID0gaSAtIDE7IGsgXHUwMDNlPSAwOyBrLS0pXG4tXHRcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2tdKTtcbi1cbi1cdHJldHVybiAtRU5PTUVNO1xuLX1cbi1cbiBzdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHRfdG1wbCAqdG1wbCxcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0LFxuIFx0XHRcdFx0ICAgc3RydWN0IG5mdF9leHByICpleHByX2FycmF5W10sXG4tXHRcdFx0XHQgICB1MzIgbnVtX2V4cHJzKVxuK1x0XHRcdFx0ICAgdTMyIG51bV9leHBycywgYm9vbCBvdmVycmlkZV9leHBycylcbiB7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIgKmVsZW1fZXhwciA9IG5mdF9zZXRfZXh0X2V4cHIoZXh0KTtcbiBcdHUzMiBsZW4gPSBzaXplb2Yoc3RydWN0IG5mdF9zZXRfZWxlbV9leHByKTtcbkBAIC02OTc2LDcgKzY5NDgsOCBAQCBzdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0Z290byBlcnJfZWxlbV9leHByX3NldHVwO1xuIFxuIFx0XHRlbGVtX2V4cHItXHUwMDNlc2l6ZSArPSBleHByX2FycmF5W2ldLVx1MDAzZW9wcy1cdTAwM2VzaXplO1xuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XG4rXHRcdGlmIChvdmVycmlkZV9leHBycylcbitcdFx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XG4gXHRcdGV4cHJfYXJyYXlbaV0gPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTY5ODQsNyArNjk1Nyw5IEBAIHN0YXRpYyBpbnQgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcbiBlcnJfZWxlbV9leHByX3NldHVwOlxuIFx0Zm9yICg7IGkgXHUwMDNjIG51bV9leHByczsgaSsrKSB7XG4tXHRcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTtcbitcdFx0aWYgKG92ZXJyaWRlX2V4cHJzKVxuK1x0XHRcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTtcbitcbiBcdFx0ZXhwcl9hcnJheVtpXSA9IE5VTEw7XG4gXHR9XG4gXG5AQCAtNzI4MCw2ICs3MjU1LDcgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXHRzdHJ1Y3QgbmZ0X3NldF9iaW5kaW5nICpiaW5kaW5nO1xuIFx0c3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdjtcbiBcdHN0cnVjdCBuZnRfb2JqZWN0ICpvYmogPSBOVUxMO1xuK1x0Ym9vbCBvdmVycmlkZV9leHBycyA9IGZhbHNlO1xuIFx0c3RydWN0IG5mdF91c2VyZGF0YSAqdWRhdGE7XG4gXHRzdHJ1Y3QgbmZ0X2RhdGFfZGVzYyBkZXNjO1xuIFx0ZW51bSBuZnRfcmVnaXN0ZXJzIGRyZWc7XG5AQCAtNzM4NSw2ICs3MzYxLDcgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXG4gXHRcdGV4cHJfYXJyYXlbMF0gPSBleHByO1xuIFx0XHRudW1fZXhwcnMgPSAxO1xuK1x0XHRvdmVycmlkZV9leHBycyA9IHRydWU7XG4gXG4gXHRcdGlmIChzZXQtXHUwMDNlbnVtX2V4cHJzIFx1MDAyNlx1MDAyNiBzZXQtXHUwMDNlZXhwcnNbMF0tXHUwMDNlb3BzICE9IGV4cHItXHUwMDNlb3BzKSB7XG4gXHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG5AQCAtNzQxMyw2ICs3MzkwLDcgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXHRcdFx0fVxuIFx0XHRcdGV4cHJfYXJyYXlbaV0gPSBleHByO1xuIFx0XHRcdG51bV9leHBycysrO1xuK1x0XHRcdG92ZXJyaWRlX2V4cHJzID0gdHJ1ZTtcbiBcbiBcdFx0XHRpZiAoc2V0LVx1MDAzZW51bV9leHBycyBcdTAwMjZcdTAwMjYgZXhwci1cdTAwM2VvcHMgIT0gc2V0LVx1MDAzZWV4cHJzW2ldLVx1MDAzZW9wcykge1xuIFx0XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG5AQCAtNzQyNiw5ICs3NDA0LDggQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoc2V0LVx1MDAzZW51bV9leHBycyBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIShmbGFncyBcdTAwMjYgTkZUX1NFVF9FTEVNX0lOVEVSVkFMX0VORCkpIHtcbi1cdFx0ZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY3R4LCBzZXQsIGV4cHJfYXJyYXkpO1xuLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRcdGdvdG8gZXJyX3NldF9lbGVtX2V4cHJfY2xvbmU7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNldC1cdTAwM2VudW1fZXhwcnM7IGkrKylcbitcdFx0XHRleHByX2FycmF5W2ldID0gc2V0LVx1MDAzZWV4cHJzW2ldO1xuIFxuIFx0XHRudW1fZXhwcnMgPSBzZXQtXHUwMDNlbnVtX2V4cHJzO1xuIFx0fVxuQEAgLTc1NjcsNyArNzU0NCw4IEBAIHN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFx0XHR1ZGF0YS1cdTAwM2VsZW4gPSB1bGVuIC0gMTtcbiBcdFx0bmxhX21lbWNweShcdTAwMjZ1ZGF0YS1cdTAwM2VkYXRhLCBubGFbTkZUQV9TRVRfRUxFTV9VU0VSREFUQV0sIHVsZW4pO1xuIFx0fVxuLVx0ZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoY3R4LCBcdTAwMjZ0bXBsLCBleHQsIGV4cHJfYXJyYXksIG51bV9leHBycyk7XG4rXHRlcnIgPSBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChjdHgsIFx1MDAyNnRtcGwsIGV4dCwgZXhwcl9hcnJheSwgbnVtX2V4cHJzLFxuK1x0XHRcdFx0ICAgICAgb3ZlcnJpZGVfZXhwcnMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfZWxlbV9mcmVlO1xuIFxuQEAgLTc2NzUsOSArNzY1MywxMSBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbiBlcnJfcGFyc2Vfa2V5OlxuIFx0bmZ0X2RhdGFfcmVsZWFzZShcdTAwMjZlbGVtLmtleS52YWwsIE5GVF9EQVRBX1ZBTFVFKTtcbiBlcnJfc2V0X2VsZW1fZXhwcjpcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9leHBycyBcdTAwMjZcdTAwMjYgZXhwcl9hcnJheVtpXTsgaSsrKVxuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XG4tZXJyX3NldF9lbGVtX2V4cHJfY2xvbmU6XG4rXHRpZiAob3ZlcnJpZGVfZXhwcnMpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2V4cHJzIFx1MDAyNlx1MDAyNiBleHByX2FycmF5W2ldOyBpKyspXG4rXHRcdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pO1xuK1x0fVxuK1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTA4OTQsNiArMTA4NzQsMTAgQEAgc3RhdGljIHZvaWQgbmZ0X3NldF9jb21taXRfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdG5mdF9jdHhfdXBkYXRlKGN0eCwgdHJhbnMpO1xuIFxuIFx0XHRzd2l0Y2ggKHRyYW5zLVx1MDAzZW1zZ190eXBlKSB7XG4rXHRcdGNhc2UgTkZUX01TR19ERUxTRVQ6XG4rXHRcdGNhc2UgTkZUX01TR19ERVNUUk9ZU0VUOlxuK1x0XHRcdG5mdF90cmFuc19zZXQodHJhbnMpLVx1MDAzZWRlYWQgPSAxO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIE5GVF9NU0dfREVMU0VURUxFTTpcbiBcdFx0XHR0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7XG4gXHRcdFx0aWYgKCF0ZS1cdTAwM2VzZXQtXHUwMDNlb3BzLVx1MDAzZWNvbW1pdClcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jXG5pbmRleCBlZTlkM2U3YjFlY2YxLi44M2U1NmIxYWE4NTg1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jXG5AQCAtMTksNyArMTksOCBAQCBzdHJ1Y3QgbmZ0X2R5bnNldCB7XG4gXHR1OFx0XHRcdFx0c3JlZ19rZXk7XG4gXHR1OFx0XHRcdFx0c3JlZ19kYXRhO1xuIFx0Ym9vbFx0XHRcdFx0aW52ZXJ0O1xuLVx0Ym9vbFx0XHRcdFx0ZXhwcjtcbitcdGJvb2xcdFx0XHRcdGV4cHI6MSxcbitcdFx0XHRcdFx0b3ZlcnJpZGVfZXhwcnM6MTtcbiBcdHU4XHRcdFx0XHRudW1fZXhwcnM7XG4gXHR1NjRcdFx0XHRcdHRpbWVvdXQ7XG4gXHRzdHJ1Y3QgbmZ0X2V4cHJcdFx0XHQqZXhwcl9hcnJheVtORlRfU0VUX0VYUFJfTUFYXTtcbkBAIC0yNTcsNiArMjU4LDcgQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcbiBcdFx0cHJpdi1cdTAwM2VudW1fZXhwcnMrKztcbiBcdFx0cHJpdi1cdTAwM2VleHByX2FycmF5WzBdID0gZHluc2V0X2V4cHI7XG4rXHRcdHByaXYtXHUwMDNlb3ZlcnJpZGVfZXhwcnMgPSB0cnVlO1xuIFxuIFx0XHRpZiAoc2V0LVx1MDAzZW51bV9leHBycyBcdTAwM2UgMSB8fFxuIFx0XHQgICAgKHNldC1cdTAwM2VudW1fZXhwcnMgPT0gMSBcdTAwMjZcdTAwMjZcbkBAIC0yODksNiArMjkxLDcgQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0XHR9XG4gXHRcdFx0cHJpdi1cdTAwM2VleHByX2FycmF5W2ldID0gZHluc2V0X2V4cHI7XG4gXHRcdFx0cHJpdi1cdTAwM2VudW1fZXhwcnMrKztcbitcdFx0XHRwcml2LVx1MDAzZW92ZXJyaWRlX2V4cHJzID0gdHJ1ZTtcbiBcbiBcdFx0XHRpZiAoc2V0LVx1MDAzZW51bV9leHBycykge1xuIFx0XHRcdFx0aWYgKGkgXHUwMDNlPSBzZXQtXHUwMDNlbnVtX2V4cHJzKSB7XG5AQCAtMzA3LDkgKzMxMCw4IEBAIHN0YXRpYyBpbnQgbmZ0X2R5bnNldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0Z290byBlcnJfZXhwcl9mcmVlO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKHNldC1cdTAwM2VudW1fZXhwcnMgXHUwMDNlIDApIHtcbi1cdFx0ZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY3R4LCBzZXQsIHByaXYtXHUwMDNlZXhwcl9hcnJheSk7XG4tXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2V0LVx1MDAzZW51bV9leHByczsgaSsrKVxuK1x0XHRcdHByaXYtXHUwMDNlZXhwcl9hcnJheVtpXSA9IHNldC1cdTAwM2VleHByc1tpXTtcbiBcbiBcdFx0cHJpdi1cdTAwM2VudW1fZXhwcnMgPSBzZXQtXHUwMDNlbnVtX2V4cHJzO1xuIFx0fVxuQEAgLTMzOSw4ICszNDEsMTAgQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdHJldHVybiAwO1xuIFxuIGVycl9leHByX2ZyZWU6XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcml2LVx1MDAzZW51bV9leHByczsgaSsrKVxuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgcHJpdi1cdTAwM2VleHByX2FycmF5W2ldKTtcbitcdGlmIChwcml2LVx1MDAzZW92ZXJyaWRlX2V4cHJzKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByaXYtXHUwMDNlbnVtX2V4cHJzOyBpKyspXG4rXHRcdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIHByaXYtXHUwMDNlZXhwcl9hcnJheVtpXSk7XG4rXHR9XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0zNjcsOSArMzcxLDEwIEBAIHN0YXRpYyB2b2lkIG5mdF9keW5zZXRfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0c3RydWN0IG5mdF9keW5zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xuIFx0aW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcml2LVx1MDAzZW51bV9leHByczsgaSsrKVxuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgcHJpdi1cdTAwM2VleHByX2FycmF5W2ldKTtcbi1cbitcdGlmIChwcml2LVx1MDAzZW92ZXJyaWRlX2V4cHJzKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByaXYtXHUwMDNlbnVtX2V4cHJzOyBpKyspXG4rXHRcdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIHByaXYtXHUwMDNlZXhwcl9hcnJheVtpXSk7XG4rXHR9XG4gXHRuZl90YWJsZXNfZGVzdHJveV9zZXQoY3R4LCBwcml2LVx1MDAzZXNldCk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDA6NDcuMDczMzM0MDIzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM3NjY1MDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE5ldGZpbHRlciBuZl90YWJsZXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdG91Y2hpbmcgY29yZSBuZl90YWJsZXMgY29kZTogYG5mX3RhYmxlc19hcGkuY2AsIGBuZl90YWJsZXMuaGAsIGFuZCBgbmZ0X2R5bnNldC5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgZXhwcmVzc2lvbiBjbG9uaW5nIGFuZCBzZXR1cCBpbiBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgIGFuZCBgbmZ0X2R5bnNldF9pbml0YC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGRpdGNoaW5nIGBuZnRfc2V0X2VsZW1fZXhwcl9jbG9uZWAgYW5kIGFyZSBub3cgcmVseWluZyBvbiB0aGlzIGBvdmVycmlkZV9leHByc2AgYm9vbGVhbiBmb3IgZXhwcmVzc2lvbiBkZXN0cnVjdGlvbiwgd2hpY2ggaXMgYW4gaW50ZXJlc3Rpbmcgc2hpZnQgaW4gc3RyYXRlZ3kuIEkgc2VlIHRoZXkgYWxzbyBhZGRlZCBhIGBkZWFkYCBmbGFnIGNoZWNrIGluIGBuZnRfc2V0X2NvbW1pdF91cGRhdGVgLCBzcGVjaWZpY2FsbHkgZm9yIGBORlRfTVNHX0RFTFNFVGAgYW5kIGBORlRfTVNHX0RFU1RST1lTRVRgLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgb25lIGF0IHRoYXQg4oCTIGltcGFjdGluZyBob3cgc2V0cyBhbmQsIGVzcGVjaWFsbHksIGR5bmFtaWMgc2V0cyBtYW5hZ2UgZXhwcmVzc2lvbnMuIFRoaXMgaXMgZ29vZCB0byBrbm93IGZyb20gYSBzZWN1cml0eSBzdGFuZHBvaW50LiBJcyBpdCByZWFjaGFibGU/IEFic29sdXRlbHksIG5mX3RhYmxlcyBpcyBleHBvc2VkIHRocm91Z2ggbmV0bGluaywgc28gaXQncyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSwgYW5kIHRodXMgb2YgaW50ZXJlc3QuIElzIGl0IHdvcnRoIGZ1enppbmc/IFdpdGhvdXQgYSBkb3VidC4gTmZfdGFibGVzIGlzIGEga25vd24gYXR0YWNrIHN1cmZhY2UsIGFuZCB0aGlzIGNoYW5nZSBjb3VsZCBpbnRyb2R1Y2UgbmV3IHZ1bG5lcmFiaWxpdGllcyBvciBleHBvc2UgZXhpc3Rpbmcgb25lcy5cblxuU28sIHdoZXJlIGRvIEkgZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzPyBUaGUga2V5IGZ1bmN0aW9ucyBoZXJlIGFyZSBwcmV0dHkgY2xlYXI6IGBuZnRfYWRkX3NldF9lbGVtYCwgYG5mdF9keW5zZXRfaW5pdGAsIGFuZCBgbmZ0X3NldF9jb21taXRfdXBkYXRlYC4gTGV0IG1lIGNoZWNrIGlmIGBuZnRfYWRkX3NldF9lbGVtYCBpcyBzdGF0aWM7IG9rYXksIHllcywgaXQgaXMuIFNpbmNlIGl0J3Mgc3RhdGljLCBJIHNob3VsZCBjaGVjayB3aG8gY2FsbHMgaXQgLSBgbmZfdGFibGVzX25ld3NldGVsZW1gIGRvZXMuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIGBuZl90YWJsZXNfYXBpLmNgIGFuZCBmaWd1cmUgb3V0IHdobyBlbHNlIGlzIGNhbGxpbmcgYG5mdF9hZGRfc2V0X2VsZW1gLCBqdXN0IHRvIGdldCBhIGJyb2FkZXIgdmlldyBvZiB0aGUgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4ODcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MDo1NC40NDk5ODYzODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwMTIzNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2FkZF9zZXRfZWxlbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MjI0PXN0YXRpYyB1MzIgbmZ0X3NldF9tYXhzaXplKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MjQ0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcyNDU6c3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzI0Ni1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgdTMyIG5sbXNnX2ZsYWdzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzY2ND1zdGF0aWMgaW50IG5mX3RhYmxlc19uZXdzZXRlbGVtKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NzAxLVxcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgbmxhW05GVEFfU0VUX0VMRU1fTElTVF9FTEVNRU5UU10sIHJlbSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc3MDI6XFx0XFx0ZXJyID0gbmZ0X2FkZF9zZXRfZWxlbShcXHUwMDI2Y3R4LCBzZXQsIGF0dHIsIGluZm8tXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc3MDMtXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDA6NTQuNDk0MDAxNDU3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0NTA3ODgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlciBEeW5hbWljcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYG5mX3RhYmxlc2Agc2lkZSBvZiB0aGluZ3MsIHNwZWNpZmljYWxseSB0aGUgZHluYW1pYyBzZXQgZnVuY3Rpb25hbGl0eS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG5mX3RhYmxlc19uZXdzZXRlbGVtYCBhcyB0aGUgbGlrZWx5IGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBuZXcgc2V0IGVsZW1lbnRzLiBUaGF0IGZlZWxzIHJpZ2h0LCBidXQuLi53YWl0IGEgbWludXRlLCB3aGF0IGFib3V0IGBuZnRfZHluc2V0X2luaXRgPyBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgYmVpbmcgcHJldHR5IGNyaXRpY2FsLCBidXQgaXQncyBkZWZpbmVkIGFzIGBzdGF0aWNgLCBzbyBob3cgaXMgaXQgZXZlbiBnZXR0aW5nIGNhbGxlZD9cblxuQWxyaWdodCwgdGltZSB0byBzaGlmdCBnZWFycyBhbmQgZHJpbGwgZG93biBvbiBgbmZ0X2R5bnNldC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBuZnRfZHluc2V0X2luaXRgIGlzIGludm9rZWQsIG9yIGhvdyB0aGUgZHluYW1pYyBzZXQgZnVuY3Rpb25hbGl0eSBpcyByZWdpc3RlcmVkIHdpdGhpbiB0aGUgbGFyZ2VyIG5ldGZpbHRlciBmcmFtZXdvcmsuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGVycyBvZiB0aGF0IGZ1bmN0aW9uLCBvciBsb29rIGZvciBjbHVlcyBhYm91dCBob3cgaXTigJlzIGJlaW5nIGxpbmtlZCB0byB0aGUgcmVzdCBvZiB0aGUgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLiBJJ20gdGhpbmtpbmcgYSB0aG9yb3VnaCBleGFtaW5hdGlvbiBvZiBgbmZ0X2R5bnNldC5jYCBpcyB0aGUga2V5IG5leHQgc3RlcCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGR5bmFtaWMgc2V0IGluaXRpYWxpemF0aW9uIGFuZCBtYW5hZ2VtZW50IGlzIG9yZ2FuaXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA0NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQwOjU4LjkzOTA4MzAxN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM4MTA5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfZHluc2V0X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmM9MTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfZHluc2V0X3BvbGljeVtORlRBX0RZTlNFVF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jLTE3MS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYzoxNzI6c3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYy0xNzMtXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmM9NDI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9keW5zZXRfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtNDMyLVxcdC5ldmFsXFx0XFx0PSBuZnRfZHluc2V0X2V2YWwsXFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmM6NDMzOlxcdC5pbml0XFx0XFx0PSBuZnRfZHluc2V0X2luaXQsXFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtNDM0LVxcdC5kZXN0cm95XFx0PSBuZnRfZHluc2V0X2Rlc3Ryb3ksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQwOjU4Ljk4NTQ2OTkzMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTU0Mzc2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzcywgd2l0aCB0aGUgYm9sZGVkIGhlYWRlciBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIER5bmFtaWNzKipcblxuQWxyaWdodCwgc28gdGhlIGNsdWUgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHkgSSdtIGludGVyZXN0ZWQgaW4gaXMgaW5pdGlhbGl6ZWQgaW4gYG5mdF9keW5zZXRfb3BzLmluaXRgLiBUaGF0J3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIEZyb20gdGhlcmUsIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZXhwcmVzc2lvbiBpdHNlbGYsIGxpa2VseSByZWxhdGVkIHRvIHRoZSBkeW5hbWljIHNldCBvcGVyYXRpb25zLCBoYXBwZW5zIHRocm91Z2ggYG5mdF9leHByX2luaXRgLiBHb3QgaXQuIE5vdywgZ2l2ZW4gdGhhdCBjb250ZXh0LCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gdG8gZXhhbWluZSBuZXh0LCB3aGljaCB3aWxsIGV4cG9zZSBob3cgdGhlIGR5bmFtaWMgc2V0IHVwZGF0ZXMgaGFwcGVuIGlzIGBuZnRfc2V0X2NvbW1pdF91cGRhdGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKnRob3NlKiBnZXQgY29tbWl0dGVkLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzLCBJIHN1c3BlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NDEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MTowMi42NDA5MTAxNDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0MTM4ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3NldF9jb21taXRfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTEwODQ4PXN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfYXVkaXRfbG9nKHN0cnVjdCBsaXN0X2hlYWQgKmFkbCwgdTMyIGdlbmVyYXRpb24pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDg2Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDg2MzpzdGF0aWMgdm9pZCBuZnRfc2V0X2NvbW1pdF91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDg2NC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRhYmxlc19wZXJuZXQgKm5mdF9uZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDkxNz1zdGF0aWMgaW50IG5mX3RhYmxlc19jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5OTctXFx0Lyogc3RlcCAyLiAgTWFrZSBydWxlc19nZW5fWCB2aXNpYmxlIHRvIHBhY2tldCBwYXRoICovXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA5OTg6XFx0bmZ0X3NldF9jb21taXRfdXBkYXRlKFxcdTAwMjZjdHgsIG5mdF9uZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwOTk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MTowMi42OTAzMjgxMDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzI1OTQ1MTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBOZXRmaWx0ZXIgVGFibGVzIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gc3RhcnRpbmcgd2l0aCBgbmZfdGFibGVzX2NvbW1pdGAg4oCTIHRoYXQncyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIHdoZXJlIGNoYW5nZXMgYXJlIGZpbmFsaXplZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIGFyb3VuZCB0aGF0IHBvaW50LiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGNvZGUgcGF0aHMgdGhhdCBsZWFkIHVwIHRvIGl0LlxuXG5JJ3ZlIGlkZW50aWZpZWQgc29tZSBrZXkgc3ltYm9scyB0byB6ZXJvIGluIG9uOiBgbmZfdGFibGVzX25ld3NldGVsZW1gLCB3aGljaCBwcm9iYWJseSBkZWFscyB3aXRoIGFkZGluZyBlbGVtZW50cyB0byBzZXRzIChhIGNvcmUgbmV0ZmlsdGVyIGNvbmNlcHQpLCBgbmZfdGFibGVzX2NvbW1pdGAgaXRzZWxmICh0byB1bmRlcnN0YW5kIGl0cyBleGFjdCByb2xlIGluIHRoZSBwcm9jZXNzKSwgYW5kIGBuZnRfZXhwcl9pbml0YC4gT3IsIG1vcmUgZGlyZWN0bHksIEkgY291bGQgbG9vayBhdCBgbmZfdGFibGVzX25ld3J1bGVgIHNpbmNlIHRoYXQgY2FsbHMgaXQsIGluZGljYXRpbmcgcnVsZSBjcmVhdGlvbiB3aWxsIGludm9sdmUgc29tZSBleHByZXNzaW9uIGluaXRpYWxpemF0aW9uLiBVbmRlcnN0YW5kaW5nIGhvdyBleHByZXNzaW9ucyB3b3JrIGlzIGNydWNpYWwuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byB2ZXJpZnkgdGhlIG9wdGlvbnMgZm9yIGBuZl90YWJsZXNgIGFuZCBgbmZ0X2R5bnNldGAgaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0LCB3aGljaCBpbXBhY3RzIHRoZSBwb3RlbnRpYWwgY29kZSBwYXRocyBJJ2xsIGJlIGxvb2tpbmcgYXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBzdHVkeWluZyB0aGUgY29ycmVjdCBjb2RlLCBhZnRlciBhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNjYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MTowNy40MTYyNzUzMjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MzgwNTA1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX0RZTlNFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQxOjA3LjQ3NTY2OTY3NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTE2Nzk4MTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBTZWFyY2ggZm9yIGBuZnRfZHluc2V0YCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHNvbWV0aGluZywgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgdGVybSBgbmZ0X2R5bnNldGAuIEknbGwgaW5pdGlhdGUgYSBzZWFyY2ggZm9yIHRoYXQgc3RyaW5nIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcywgc2luY2UgdGhhdCdzIHdoZXJlIG1vZHVsZSBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBUaGlzIGlzIG15IGdvLXRvIGFwcHJvYWNoIHdoZW4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIGZlYXR1cmUgaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIEknbSBleHBlY3RpbmcgdGhpcyBzaG91bGQgcXVpY2tseSBsZWFkIG1lIHRvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHN5bWJvbCBhbmQgaG9wZWZ1bGx5IHByb3ZpZGUgc29tZSBjbHVlcyBhYm91dCBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBvcHRpb25zLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NTYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MToxMC45OTI0NzAyMzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTI2Njg0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfZHluc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDE6MTEuMDM4MDA0NDEyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTQ2MDA2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkh1bnRpbmcgRG93biBUaGF0IE9iamVjdCBGaWxlKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gd29yay4gTXkgZ29hbCBoZXJlIGlzIGNsZWFybHkgdG8gdHJhY2sgZG93biB3aGVyZSBgbmZ0X2R5bnNldC5vYCBpcyBiZWluZyBidWlsdCB3aXRoaW4gdGhpcyBwcm9qZWN0LiBLbm93aW5nIHRoYXQgb2JqZWN0IGZpbGUgbmFtZXMgYXJlIHR5cGljYWxseSBkZWZpbmVkIGluIGEgTWFrZWZpbGUsIHRoYXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4gTGV0J3MgZ2V0IGNyYWNraW5nIGFuZCBnbyBkaXJlY3RseSB0byB0aGUgTWFrZWZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MToxNC4yOTI2MDcyOTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTA2MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9keW5zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg3PW5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxcXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg5LVxcdFxcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6OTA6XFx0XFx0ICBuZnRfZHluc2V0Lm8gbmZ0X21ldGEubyBuZnRfcnQubyBuZnRfZXh0aGRyLm8gbmZ0X2xhc3QubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05MS1cXHRcXHQgIG5mdF9jb3VudGVyLm8gbmZ0X29ianJlZi5vIG5mdF9pbm5lci5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDE6MTQuMzM4NzE3MDM3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjEyNzczMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGFuZCBpdCdzIGRlZmluaXRlbHkgcmVsYXRlZCB0byBgbmZfdGFibGVzLW9ianNgLiBUaGF0IHRlbGxzIG1lIHRoZSBjb3JlIGRlcGVuZGVuY3kgaGVyZSBpcyBvbiBgTkZfVEFCTEVTYC4gTm93LCBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgdGhhdCBgTkZfVEFCTEVTYCBpcyBjb3JyZWN0bHkgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgZG91YmxlIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoYXQgc3BlY2lmaWMgb3B0aW9uLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBiYXNlIHJlcXVpcmVtZW50IGlzIHRoZXJlIGJlZm9yZSBJIGRpZyBhbnkgZGVlcGVyLiBObyBwb2ludCBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUgaWYgdGhlIGZvdW5kYXRpb24gaXNuJ3Qgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDU2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDE6MTcuNjk5OTk2NDU3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ1MjI1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXFx0ZGVwZW5kcyBvbiBJUFY2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MToxNy43NDU0NTQ4MjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwNzE2OTgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQ2hlY2tpbmcgdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgZm9jdXMgaXMgYE5GX1RBQkxFU2AuIFRoYXQncyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbi4gQWx3YXlzIGdvb2QgdG8gc3RhcnQgdGhlcmUuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0J3MgdGhlICpvbmx5KiByZWxldmFudCBvbmUsIGp1c3QgdG8gYmUgdGhvcm91Z2guIFl1cCwgaXQgbG9va3MgbGlrZSBgTkZfVEFCTEVTYCBjb3ZlcnMgaXQuIE5vIG5lZWQgdG8gY2hhc2UgYW55IG90aGVyIHJhYmJpdCBob2xlcyBvbiB0aGF0IGZyb250LlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHN5bWJvbHMuIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAuLi4gcmlnaHQsIHRoYXQgaGFuZGxlcyBhZGRpbmcgbmV3IGVsZW1lbnRzIHRvIHRoZSBzZXQuIEFuZCBgbmZfdGFibGVzX2NvbW1pdGAsIHRoYXQncyB0aGUgY29tbWl0IG9wZXJhdGlvbi4uLiBzdGFuZGFyZCBzdHVmZi4gQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gYG5mdF9leHByX2luaXRgPyBJJ20ganVzdCBxdWlja2x5IGNoZWNraW5nIG15IG1lbW9yeS4uLiBJc24ndCB0aGF0IGEgZnVuY3Rpb24/IFllcywgaXQgaXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NDQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MToyMi4wNTI2Mjc5NDhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODc1MDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9leHByX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzY1ND1zdGF0aWMgdm9pZCBuZl90YWJsZXNfZXhwcl9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNjYzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjM2NjQ6c3RhdGljIHN0cnVjdCBuZnRfZXhwciAqbmZ0X2V4cHJfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTM2NjUtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NjczNz1zdHJ1Y3QgbmZ0X2V4cHIgKm5mdF9zZXRfZWxlbV9leHByX2FsbG9jKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NzQzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY3NDQ6XFx0ZXhwciA9IG5mdF9leHByX2luaXQoY3R4LCBhdHRyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NzQ1LVxcdGlmIChJU19FUlIoZXhwcikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQxOjIyLjA5ODUwOTQ0MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQzODc5NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYG5mdF9leHByX2luaXRgIGFuZCBpdHMgQ2FsbGVycyoqXG5cbk9rYXksIHNvIGBuZnRfZXhwcl9pbml0YCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBtZWFucyBpdCdzIGxpa2VseSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQsIGFuZCBpdHMgc2NvcGUgaXMgbGltaXRlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0J3MgYmVpbmcgdXNlZC4gUmlnaHQsIHRoZSBjb2RlIHN1Z2dlc3RzIGl0J3MgY2FsbGVkIGJ5IGBuZnRfc2V0X2VsZW1fZXhwcl9hbGxvY2AsIGBuZl90YWJsZXNfbmV3cnVsZWAsIGFuZCBwcm9iYWJseSBvdGhlcnMuIE15IGltbWVkaWF0ZSBmb2N1cywgZ2l2ZW4gdGhlIGNvbnRleHQgSSdtIHdvcmtpbmcgaW4sIGlzIG9uIHRoZSBydWxlIGFuZCBzZXQgZWxlbWVudCBjcmVhdGlvbiBwYXRocy4gSSdsbCBkcmlsbCBkb3duIHNwZWNpZmljYWxseSBpbnRvIGhvdyBgbmZfdGFibGVzX25ld3J1bGVgLCBgbmZfdGFibGVzX25ld3NldGVsZW1gLCBhbmQgdGhlIGNvbW1pdCBmdW5jdGlvbiAoYG5mX3RhYmxlc19jb21taXRgKSBpbnRlcmFjdCB3aXRoIGBuZnRfZXhwcl9pbml0YC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiBuZXcgcnVsZSBhbmQgc2V0IGVsZW1lbnQgaW5zdGFudGlhdGlvbiBsaXZlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAwNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQxOjI1Ljg0MjM5MjcwN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5NTMyODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfdGFibGVzX25ld3J1bGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NDEyMj12b2lkIG5mX3RhYmxlc19ydWxlX2Rlc3Ryb3koY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9ydWxlICpydWxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDEyNy1cXHQgKiBDYXJlZnVsOiBzb21lIGV4cHJlc3Npb25zIG1pZ2h0IG5vdCBiZSBpbml0aWFsaXplZCBpbiBjYXNlIHRoaXNcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0MTI4OlxcdCAqIGlzIGNhbGxlZCBvbiBlcnJvciBmcm9tIG5mX3RhYmxlc19uZXdydWxlKCkuXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDEyOS1cXHQgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTQzMDk9c3RhdGljIHN0cnVjdCBuZnRfcnVsZSAqbmZ0X3J1bGVfbG9va3VwX2J5aWQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDMxNC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0MzE1OnN0YXRpYyBpbnQgbmZfdGFibGVzX25ld3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MzE2LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5sYVtdKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTkzNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZfdGFibGVzX2NiW05GVF9NU0dfTUFYXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk5ODQtXFx0W05GVF9NU0dfTkVXUlVMRV0gPSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTk4NTpcXHRcXHQuY2FsbFxcdFxcdD0gbmZfdGFibGVzX25ld3J1bGUsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTk4Ni1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9CQVRDSCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDE6MjUuODg3MzUwNjMxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTUxMDY2MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTmV0ZmlsdGVyIFRhYmxlIENyZWF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBOZXRmaWx0ZXIgY29kZSwgYW5kIHllYWgsIGBuZl90YWJsZXNfbmV3cnVsZWAgZGVmaW5pdGVseSBzdGFuZHMgb3V0IGFzIHRoZSBuZXRsaW5rIGNhbGxiYWNrIGZvciBjcmVhdGluZyBuZXcgcnVsZXMuIE1ha2VzIHNlbnNlLiBOb3csIGxldCdzIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHRhYmxlcyB0aGVtc2VsdmVzIGFyZSBidWlsdCBhbmQgcG9wdWxhdGVkLiBNeSBuZXh0IGZvY3VzIHNob3VsZCBiZSBvbiBgbmZfdGFibGVzX25ld3NldGAgYW5kIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZnVuY3Rpb25zIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiBob3cgc2V0cyBhbmQgdGhlaXIgZWxlbWVudHMgYXJlIGRlZmluZWQsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHRhYmxlIHN0cnVjdHVyZSBhbmQgcnVsZSBhcHBsaWNhdGlvbiBwcm9jZXNzLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcyMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQxOjI5LjMwMjQ1OTc4NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyODY3OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfdGFibGVzX25ld3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz01NDI3PXN0YXRpYyB1MzIgbmZ0X3NldF9rZXJuZWxfc2l6ZShjb25zdCBzdHJ1Y3QgbmZ0X3NldF9vcHMgKm9wcyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU0MzUtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTQzNjpzdGF0aWMgaW50IG5mX3RhYmxlc19uZXdzZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01NDM3LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmxhW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MjQ1PXN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzY2My1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3NjY0OnN0YXRpYyBpbnQgbmZfdGFibGVzX25ld3NldGVsZW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NjY1LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05OTM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZl90YWJsZXNfY2JbTkZUX01TR19NQVhdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwMTQtXFx0W05GVF9NU0dfTkVXU0VUXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDAxNTpcXHRcXHQuY2FsbFxcdFxcdD0gbmZfdGFibGVzX25ld3NldCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDAxNi1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9CQVRDSCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDM4LVxcdFtORlRfTVNHX05FV1NFVEVMRU1dID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMDM5OlxcdFxcdC5jYWxsXFx0XFx0PSBuZl90YWJsZXNfbmV3c2V0ZWxlbSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA0MC1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9CQVRDSCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDE6MjkuMzQ3NzQ5NDJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxNzk5OTczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBOZXRmaWx0ZXIgVGFibGUgVXBkYXRlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgcmV2b2x2ZXMgYXJvdW5kIHVuZGVyc3RhbmRpbmcgaG93IGR5bmFtaWMgc2V0cyBhcmUgaGFuZGxlZCB3aXRoaW4gbmV0ZmlsdGVyIHRhYmxlcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gc2V0IG1hbmlwdWxhdGlvbiBhbmQgcnVsZSBjcmVhdGlvbi4gQmFzZWQgb24gdGhlIHN5bWJvbHMgaWRlbnRpZmllZCwgbXkgYXR0ZW50aW9uIGdyYXZpdGF0ZXMgdG93YXJkczogYG5mX3RhYmxlc19uZXdzZXRlbGVtYCwgYG5mX3RhYmxlc19uZXdzZXRgLCBgbmZfdGFibGVzX2NvbW1pdGAsIGFuZCBgbmZfdGFibGVzX25ld3J1bGVgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGZvciBzZXQtcmVsYXRlZCBvcGVyYXRpb25zLlxuXG5Ob3csIGEga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlcmUncyBhIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIG9yIGhhbmRsaW5nIGZ1bmN0aW9uIGRlZGljYXRlZCB0byBkeW5hbWljIHNldHMuIFVwb24gZnVydGhlciBpbnNwZWN0aW9uLCBJIHNlZSB0aGF0IGBuZnRfZHluc2V0X2luaXRgIGlzIGludm9rZWQgZnJvbSBgbmZ0X2V4cHJfaW5pdGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBuZl90YWJsZXNfbmV3cnVsZWAuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBpbnR1aXRpb24gdGhhdCBgbmZfdGFibGVzX25ld3J1bGVgIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgZHluYW1pYyBzZXQgb3BlcmF0aW9uczsgaXQncyB0aGUgZW50cnkgcG9pbnQgdG8gaW5pdGlhbGl6ZSB0aGUgZHluYW1pYyBzZXQuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBzZXRzIGFyZSBkZWxldGVkIG9yIGRlc3Ryb3llZC4gTG9va2luZyBhdCB0aGUgbWVzc2FnZSB0eXBlcywgSSBzZWUgYE5GVF9NU0dfREVMU0VUYCBhbmQgYE5GVF9NU0dfREVTVFJPWVNFVGAuIEV4YW1pbmluZyB0aGVpciBtb2RpZmljYXRpb24gcG9pbnRzLCBJJ3ZlIG9ic2VydmVkIHRoYXQgdGhlc2UgYXJlIGhhbmRsZWQgd2l0aGluIGBuZnRfc2V0X2NvbW1pdF91cGRhdGVgLCB3aGljaCBzdWdnZXN0cyB0aGF0IHRoZXkgYXJlIGhhbmRsZWQgYnkgYG5mX3RhYmxlc19kZWxzZXRgLiBUaGlzIGNvbmZpcm1zIHRoYXQgaXQncyB0aGUgY29ycmVjdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NzYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDE6MzMuOTY1NzUxMTk2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDI4MTM4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl90YWJsZXNfZGVsc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTU3NjE9c3RhdGljIHZvaWQgbmZ0X3NldF9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01Nzc1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU3NzY6c3RhdGljIGludCBuZl90YWJsZXNfZGVsc2V0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTc3Ny1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5sYVtdKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Nzk4Nz1zdGF0aWMgaW50IG5mdF9zZXRfZmx1c2goc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCwgdTggZ2VubWFzaylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTgwMDQtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODAwNTpzdGF0aWMgaW50IG5mX3RhYmxlc19kZWxzZXRlbGVtKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODAwNi1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTkzNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZfdGFibGVzX2NiW05GVF9NU0dfTUFYXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDI2LVxcdFtORlRfTVNHX0RFTFNFVF0gPSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAwMjc6XFx0XFx0LmNhbGxcXHRcXHQ9IG5mX3RhYmxlc19kZWxzZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwMjgtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfQkFUQ0gsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDAzMi1cXHRbTkZUX01TR19ERVNUUk9ZU0VUXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDAzMzpcXHRcXHQuY2FsbFxcdFxcdD0gbmZfdGFibGVzX2RlbHNldCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDAzNC1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9CQVRDSCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDU2LVxcdFtORlRfTVNHX0RFTFNFVEVMRU1dID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMDU3OlxcdFxcdC5jYWxsXFx0XFx0PSBuZl90YWJsZXNfZGVsc2V0ZWxlbSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA1OC1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9CQVRDSCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDYyLVxcdFtORlRfTVNHX0RFU1RST1lTRVRFTEVNXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDA2MzpcXHRcXHQuY2FsbFxcdFxcdD0gbmZfdGFibGVzX2RlbHNldGVsZW0sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNjQtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfQkFUQ0gsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQxOjM0LjAxMDAzNzcyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MTY0MzQ4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgUmVmaW5lbWVudDogRm9jdXNpbmcgb24gU2V0IERlbGV0aW9uKipcblxuT2theSwgc28gYG5mX3RhYmxlc19kZWxzZXRgIGxvb2tzIGxpa2UgYW5vdGhlciBzb2xpZCBmb2N1cyBzeW1ib2wgZm9yIGZ1enppbmcuIFRpbWUgdG8gcmV2aWV3IHRoZSBtb2RpZmljYXRpb25zLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCdzIHNldHRpbmcgYGRlYWQgPSAxYCBvbiB0aGUgc2V0IGR1cmluZyB0aGUgY29tbWl0IHN0YWdlIHdoZW4gZGVhbGluZyB3aXRoIGVpdGhlciBgTkZUX01TR19ERUxTRVRgIG9yIGBORlRfTVNHX0RFU1RST1lTRVRgIG1lc3NhZ2VzLiBUaGF0J3MgYSBjcnVjaWFsIHBvaW50LCBhbmQgSSBjYW4gc2VlIGhvdyBwb3RlbnRpYWwgaXNzdWVzIGFyb3VuZCB0aGUgaGFuZGxpbmcgb2YgYSBcImRlYWRcIiBzZXQgY291bGQgYmUgYSBwcmltZSB0YXJnZXQgZm9yIHZ1bG5lcmFiaWxpdHkgZGlzY292ZXJ5LlxuXG5UaGUgY2hhbmdlcyBpbiBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgIGFuZCBgbmZ0X2R5bnNldF9pbml0YCByZWxhdGUgdG8gZXhwcmVzc2lvbiBjbG9uaW5nIGFuZCBkZXN0cnVjdGlvbiwgd2hpY2ggYXJlIGFyZWFzIG9mdGVuIHByb25lIHRvIHN1YnRsZSBtZW1vcnkgbWFuYWdlbWVudCBwcm9ibGVtcy4gVGhlc2UgdXBkYXRlcyB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGggZnV6emluZy5cblxuTXkgcHJpbWFyeSBjb25maWcgaXMgYE5GX1RBQkxFU2AsIHdoaWNoIHNlZW1zIHN1ZmZpY2llbnQuIEknbGwgc3RpY2sgd2l0aCB0aGVzZSBmb3Igbm93LCBhbmQgdGhlc2UgZm9jdXMgc3ltYm9sczpcblxuKiAgIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWBcbiogICBgbmZfdGFibGVzX25ld3NldGBcbiogICBgbmZfdGFibGVzX2RlbHNldGAgKHRoaXMgaXMgdGhlIG5ldyBvbmUpXG4qICAgYG5mX3RhYmxlc19jb21taXRgXG4qICAgYG5mX3RhYmxlc19uZXdydWxlYFxuXG5JJ2xsIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucywgYnV0IGBORl9UQUJMRVNgIGlzIHRoZSBrZXkuIFRoZW4gSSdsbCBzdGFydCBydW5uaW5nIHNvbWUgdGVzdHMgcmVsYXRlZCB0byBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODgsIk91dHB1dFRva2VucyI6MTQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQxOjQwLjUyNjQ3NTAzMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MTcyNzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl90YWJsZXNfbmV3c2V0ZWxlbVwiLFxuICAgIFwibmZfdGFibGVzX25ld3NldFwiLFxuICAgIFwibmZfdGFibGVzX2RlbHNldFwiLFxuICAgIFwibmZfdGFibGVzX2NvbW1pdFwiLFxuICAgIFwibmZfdGFibGVzX25ld3J1bGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5mX3RhYmxlcyBsb2dpYyBmb3IgaGFuZGxpbmcgc2V0IGVsZW1lbnQgZXhwcmVzc2lvbnMgYW5kIGR5bmFtaWMgc2V0cywgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBleHByZXNzaW9ucyBhcmUgY2xvbmVkIGFuZCBkZXN0cm95ZWQuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvbW1pdCBwaGFzZSBmb3Igc2V0IGRlbGV0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmssIG1ha2luZyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfdGFibGVzX25ld3NldGVsZW1cIixcbiAgICBcIm5mX3RhYmxlc19uZXdzZXRcIixcbiAgICBcIm5mX3RhYmxlc19kZWxzZXRcIixcbiAgICBcIm5mX3RhYmxlc19jb21taXRcIixcbiAgICBcIm5mX3RhYmxlc19uZXdydWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZl90YWJsZXMgbG9naWMgZm9yIGhhbmRsaW5nIHNldCBlbGVtZW50IGV4cHJlc3Npb25zIGFuZCBkeW5hbWljIHNldHMsIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgZXhwcmVzc2lvbnMgYXJlIGNsb25lZCBhbmQgZGVzdHJveWVkLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBjb21taXQgcGhhc2UgZm9yIHNldCBkZWxldGlvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MTo0MC42MDQ2NTQxOThaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDExMzc3MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDE6NDAuNjA1MTA2OTY4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUzMDEwOTIxMjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBsaWZlY3ljbGUgYW5kIGNsb25pbmcgb2YgbmV0ZmlsdGVyIHNldCBleHByZXNzaW9ucyAoYG5mdF9leHByYCkgdG8gZml4IG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyAobGlrZWx5IGRvdWJsZS1mcmVlcyBvciB1c2UtYWZ0ZXItZnJlZXMpLiBJdCBhdm9pZHMgY3JlYXRpbmcgaW50ZXJtZWRpYXRlIGNsb25lcyBvZiBleHByZXNzaW9ucyB3aGVuIGFkZGluZyBlbGVtZW50cyB0byBhIHNldCBvciBpbml0aWFsaXppbmcgYSBkeW5zZXQsIGluc3RlYWQgY29weWluZyBwb2ludGVycyBhbmQgdXNpbmcgYSBuZXcgYG92ZXJyaWRlX2V4cHJzYCBmbGFnIHRvIHRyYWNrIG93bmVyc2hpcCBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBleHByZXNzaW9ucyBzaG91bGQgYmUgZGVzdHJveWVkLiBJdCBhbHNvIHNldHMgYSBgZGVhZGAgZmxhZyBvbiBkZWxldGVkIHNldHMgZHVyaW5nIGNvbW1pdCB1cGRhdGVzLiBcXG5cXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3Mgb2JqZWN0IGxpZmVjeWNsZSBidWdzIChVQUYsIGRvdWJsZS1mcmVlKSB3aGljaCBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBtZW1vcnkgZm9yIHRoZSBzZXQgZWxlbWVudHMgdGhlbXNlbHZlcyBjb250aW51ZXMgdG8gYmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgIChpbiBgbmZ0X3NldF9lbGVtX2luaXRgKSwgZW5zdXJpbmcgYWxsIGZpZWxkcyBhbmQgcGFkZGluZyBhcmUgZnVsbHkgemVyb2VkLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM4NzdhMjg4MDRiMzY2YzI1YjkyOWYzZGExNWNmN2VkZGEzNjMwY2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMjo0MDo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuaW5kZXggMjM4ZjZlY2I5MGU5OS4uOWQ1OTc0ODIzNjNkOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXG5AQCAtODcwLDggKzg3MCw2IEBAIHN0cnVjdCBuZnRfZWxlbV9wcml2ICpuZnRfc2V0X2VsZW1faW5pdChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFx0XHRcdFx0XHRjb25zdCB1MzIgKmtleSwgY29uc3QgdTMyICprZXlfZW5kLFxuIFx0XHRcdFx0XHRjb25zdCB1MzIgKmRhdGEsXG4gXHRcdFx0XHRcdHU2NCB0aW1lb3V0LCB1NjQgZXhwaXJhdGlvbiwgZ2ZwX3QgZ2ZwKTtcbi1pbnQgbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbi1cdFx0XHQgICAgc3RydWN0IG5mdF9leHByICpleHByX2FycmF5W10pO1xuIHZvaWQgbmZ0X3NldF9lbGVtX2V4cHJfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIgKmVsZW1fZXhwcik7XG4gdm9pZCBuZnRfc2V0X2VsZW1fZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbmluZGV4IGMxMTJlY2M0ZmNhMzIuLjM4NDUwNWY2ODBkZWYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbkBAIC02OTIxLDM5ICs2OTIxLDExIEBAIHN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdG5mX3RhYmxlc19zZXRfZWxlbV9kZXN0cm95KGN0eCwgdGUtXHUwMDNlc2V0LCB0ZS1cdTAwM2VlbGVtc1tpXS5wcml2KTtcbiB9XG4gXG4taW50IG5mdF9zZXRfZWxlbV9leHByX2Nsb25lKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tXHRcdFx0ICAgIHN0cnVjdCBuZnRfZXhwciAqZXhwcl9hcnJheVtdKVxuLXtcbi1cdHN0cnVjdCBuZnRfZXhwciAqZXhwcjtcbi1cdGludCBlcnIsIGksIGs7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzZXQtXHUwMDNlbnVtX2V4cHJzOyBpKyspIHtcbi1cdFx0ZXhwciA9IGt6YWxsb2Moc2V0LVx1MDAzZWV4cHJzW2ldLVx1MDAzZW9wcy1cdTAwM2VzaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0XHRpZiAoIWV4cHIpXG4tXHRcdFx0Z290byBlcnJfZXhwcjtcbi1cbi1cdFx0ZXJyID0gbmZ0X2V4cHJfY2xvbmUoZXhwciwgc2V0LVx1MDAzZWV4cHJzW2ldLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4tXHRcdFx0a2ZyZWUoZXhwcik7XG4tXHRcdFx0Z290byBlcnJfZXhwcjtcbi1cdFx0fVxuLVx0XHRleHByX2FycmF5W2ldID0gZXhwcjtcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLVxuLWVycl9leHByOlxuLVx0Zm9yIChrID0gaSAtIDE7IGsgXHUwMDNlPSAwOyBrLS0pXG4tXHRcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2tdKTtcbi1cbi1cdHJldHVybiAtRU5PTUVNO1xuLX1cbi1cbiBzdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHRfdG1wbCAqdG1wbCxcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0LFxuIFx0XHRcdFx0ICAgc3RydWN0IG5mdF9leHByICpleHByX2FycmF5W10sXG4tXHRcdFx0XHQgICB1MzIgbnVtX2V4cHJzKVxuK1x0XHRcdFx0ICAgdTMyIG51bV9leHBycywgYm9vbCBvdmVycmlkZV9leHBycylcbiB7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIgKmVsZW1fZXhwciA9IG5mdF9zZXRfZXh0X2V4cHIoZXh0KTtcbiBcdHUzMiBsZW4gPSBzaXplb2Yoc3RydWN0IG5mdF9zZXRfZWxlbV9leHByKTtcbkBAIC02OTc2LDcgKzY5NDgsOCBAQCBzdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0Z290byBlcnJfZWxlbV9leHByX3NldHVwO1xuIFxuIFx0XHRlbGVtX2V4cHItXHUwMDNlc2l6ZSArPSBleHByX2FycmF5W2ldLVx1MDAzZW9wcy1cdTAwM2VzaXplO1xuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XG4rXHRcdGlmIChvdmVycmlkZV9leHBycylcbitcdFx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XG4gXHRcdGV4cHJfYXJyYXlbaV0gPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTY5ODQsNyArNjk1Nyw5IEBAIHN0YXRpYyBpbnQgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcbiBlcnJfZWxlbV9leHByX3NldHVwOlxuIFx0Zm9yICg7IGkgXHUwMDNjIG51bV9leHByczsgaSsrKSB7XG4tXHRcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTtcbitcdFx0aWYgKG92ZXJyaWRlX2V4cHJzKVxuK1x0XHRcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTtcbitcbiBcdFx0ZXhwcl9hcnJheVtpXSA9IE5VTEw7XG4gXHR9XG4gXG5AQCAtNzI4MCw2ICs3MjU1LDcgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXHRzdHJ1Y3QgbmZ0X3NldF9iaW5kaW5nICpiaW5kaW5nO1xuIFx0c3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdjtcbiBcdHN0cnVjdCBuZnRfb2JqZWN0ICpvYmogPSBOVUxMO1xuK1x0Ym9vbCBvdmVycmlkZV9leHBycyA9IGZhbHNlO1xuIFx0c3RydWN0IG5mdF91c2VyZGF0YSAqdWRhdGE7XG4gXHRzdHJ1Y3QgbmZ0X2RhdGFfZGVzYyBkZXNjO1xuIFx0ZW51bSBuZnRfcmVnaXN0ZXJzIGRyZWc7XG5AQCAtNzM4NSw2ICs3MzYxLDcgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXG4gXHRcdGV4cHJfYXJyYXlbMF0gPSBleHByO1xuIFx0XHRudW1fZXhwcnMgPSAxO1xuK1x0XHRvdmVycmlkZV9leHBycyA9IHRydWU7XG4gXG4gXHRcdGlmIChzZXQtXHUwMDNlbnVtX2V4cHJzIFx1MDAyNlx1MDAyNiBzZXQtXHUwMDNlZXhwcnNbMF0tXHUwMDNlb3BzICE9IGV4cHItXHUwMDNlb3BzKSB7XG4gXHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG5AQCAtNzQxMyw2ICs3MzkwLDcgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXHRcdFx0fVxuIFx0XHRcdGV4cHJfYXJyYXlbaV0gPSBleHByO1xuIFx0XHRcdG51bV9leHBycysrO1xuK1x0XHRcdG92ZXJyaWRlX2V4cHJzID0gdHJ1ZTtcbiBcbiBcdFx0XHRpZiAoc2V0LVx1MDAzZW51bV9leHBycyBcdTAwMjZcdTAwMjYgZXhwci1cdTAwM2VvcHMgIT0gc2V0LVx1MDAzZWV4cHJzW2ldLVx1MDAzZW9wcykge1xuIFx0XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG5AQCAtNzQyNiw5ICs3NDA0LDggQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoc2V0LVx1MDAzZW51bV9leHBycyBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIShmbGFncyBcdTAwMjYgTkZUX1NFVF9FTEVNX0lOVEVSVkFMX0VORCkpIHtcbi1cdFx0ZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY3R4LCBzZXQsIGV4cHJfYXJyYXkpO1xuLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRcdGdvdG8gZXJyX3NldF9lbGVtX2V4cHJfY2xvbmU7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNldC1cdTAwM2VudW1fZXhwcnM7IGkrKylcbitcdFx0XHRleHByX2FycmF5W2ldID0gc2V0LVx1MDAzZWV4cHJzW2ldO1xuIFxuIFx0XHRudW1fZXhwcnMgPSBzZXQtXHUwMDNlbnVtX2V4cHJzO1xuIFx0fVxuQEAgLTc1NjcsNyArNzU0NCw4IEBAIHN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFx0XHR1ZGF0YS1cdTAwM2VsZW4gPSB1bGVuIC0gMTtcbiBcdFx0bmxhX21lbWNweShcdTAwMjZ1ZGF0YS1cdTAwM2VkYXRhLCBubGFbTkZUQV9TRVRfRUxFTV9VU0VSREFUQV0sIHVsZW4pO1xuIFx0fVxuLVx0ZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoY3R4LCBcdTAwMjZ0bXBsLCBleHQsIGV4cHJfYXJyYXksIG51bV9leHBycyk7XG4rXHRlcnIgPSBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChjdHgsIFx1MDAyNnRtcGwsIGV4dCwgZXhwcl9hcnJheSwgbnVtX2V4cHJzLFxuK1x0XHRcdFx0ICAgICAgb3ZlcnJpZGVfZXhwcnMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfZWxlbV9mcmVlO1xuIFxuQEAgLTc2NzUsOSArNzY1MywxMSBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbiBlcnJfcGFyc2Vfa2V5OlxuIFx0bmZ0X2RhdGFfcmVsZWFzZShcdTAwMjZlbGVtLmtleS52YWwsIE5GVF9EQVRBX1ZBTFVFKTtcbiBlcnJfc2V0X2VsZW1fZXhwcjpcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9leHBycyBcdTAwMjZcdTAwMjYgZXhwcl9hcnJheVtpXTsgaSsrKVxuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XG4tZXJyX3NldF9lbGVtX2V4cHJfY2xvbmU6XG4rXHRpZiAob3ZlcnJpZGVfZXhwcnMpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2V4cHJzIFx1MDAyNlx1MDAyNiBleHByX2FycmF5W2ldOyBpKyspXG4rXHRcdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pO1xuK1x0fVxuK1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTA4OTQsNiArMTA4NzQsMTAgQEAgc3RhdGljIHZvaWQgbmZ0X3NldF9jb21taXRfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdG5mdF9jdHhfdXBkYXRlKGN0eCwgdHJhbnMpO1xuIFxuIFx0XHRzd2l0Y2ggKHRyYW5zLVx1MDAzZW1zZ190eXBlKSB7XG4rXHRcdGNhc2UgTkZUX01TR19ERUxTRVQ6XG4rXHRcdGNhc2UgTkZUX01TR19ERVNUUk9ZU0VUOlxuK1x0XHRcdG5mdF90cmFuc19zZXQodHJhbnMpLVx1MDAzZWRlYWQgPSAxO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIE5GVF9NU0dfREVMU0VURUxFTTpcbiBcdFx0XHR0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7XG4gXHRcdFx0aWYgKCF0ZS1cdTAwM2VzZXQtXHUwMDNlb3BzLVx1MDAzZWNvbW1pdClcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jXG5pbmRleCBlZTlkM2U3YjFlY2YxLi44M2U1NmIxYWE4NTg1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jXG5AQCAtMTksNyArMTksOCBAQCBzdHJ1Y3QgbmZ0X2R5bnNldCB7XG4gXHR1OFx0XHRcdFx0c3JlZ19rZXk7XG4gXHR1OFx0XHRcdFx0c3JlZ19kYXRhO1xuIFx0Ym9vbFx0XHRcdFx0aW52ZXJ0O1xuLVx0Ym9vbFx0XHRcdFx0ZXhwcjtcbitcdGJvb2xcdFx0XHRcdGV4cHI6MSxcbitcdFx0XHRcdFx0b3ZlcnJpZGVfZXhwcnM6MTtcbiBcdHU4XHRcdFx0XHRudW1fZXhwcnM7XG4gXHR1NjRcdFx0XHRcdHRpbWVvdXQ7XG4gXHRzdHJ1Y3QgbmZ0X2V4cHJcdFx0XHQqZXhwcl9hcnJheVtORlRfU0VUX0VYUFJfTUFYXTtcbkBAIC0yNTcsNiArMjU4LDcgQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcbiBcdFx0cHJpdi1cdTAwM2VudW1fZXhwcnMrKztcbiBcdFx0cHJpdi1cdTAwM2VleHByX2FycmF5WzBdID0gZHluc2V0X2V4cHI7XG4rXHRcdHByaXYtXHUwMDNlb3ZlcnJpZGVfZXhwcnMgPSB0cnVlO1xuIFxuIFx0XHRpZiAoc2V0LVx1MDAzZW51bV9leHBycyBcdTAwM2UgMSB8fFxuIFx0XHQgICAgKHNldC1cdTAwM2VudW1fZXhwcnMgPT0gMSBcdTAwMjZcdTAwMjZcbkBAIC0yODksNiArMjkxLDcgQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0XHR9XG4gXHRcdFx0cHJpdi1cdTAwM2VleHByX2FycmF5W2ldID0gZHluc2V0X2V4cHI7XG4gXHRcdFx0cHJpdi1cdTAwM2VudW1fZXhwcnMrKztcbitcdFx0XHRwcml2LVx1MDAzZW92ZXJyaWRlX2V4cHJzID0gdHJ1ZTtcbiBcbiBcdFx0XHRpZiAoc2V0LVx1MDAzZW51bV9leHBycykge1xuIFx0XHRcdFx0aWYgKGkgXHUwMDNlPSBzZXQtXHUwMDNlbnVtX2V4cHJzKSB7XG5AQCAtMzA3LDkgKzMxMCw4IEBAIHN0YXRpYyBpbnQgbmZ0X2R5bnNldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0Z290byBlcnJfZXhwcl9mcmVlO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKHNldC1cdTAwM2VudW1fZXhwcnMgXHUwMDNlIDApIHtcbi1cdFx0ZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY3R4LCBzZXQsIHByaXYtXHUwMDNlZXhwcl9hcnJheSk7XG4tXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2V0LVx1MDAzZW51bV9leHByczsgaSsrKVxuK1x0XHRcdHByaXYtXHUwMDNlZXhwcl9hcnJheVtpXSA9IHNldC1cdTAwM2VleHByc1tpXTtcbiBcbiBcdFx0cHJpdi1cdTAwM2VudW1fZXhwcnMgPSBzZXQtXHUwMDNlbnVtX2V4cHJzO1xuIFx0fVxuQEAgLTMzOSw4ICszNDEsMTAgQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdHJldHVybiAwO1xuIFxuIGVycl9leHByX2ZyZWU6XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcml2LVx1MDAzZW51bV9leHByczsgaSsrKVxuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgcHJpdi1cdTAwM2VleHByX2FycmF5W2ldKTtcbitcdGlmIChwcml2LVx1MDAzZW92ZXJyaWRlX2V4cHJzKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByaXYtXHUwMDNlbnVtX2V4cHJzOyBpKyspXG4rXHRcdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIHByaXYtXHUwMDNlZXhwcl9hcnJheVtpXSk7XG4rXHR9XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0zNjcsOSArMzcxLDEwIEBAIHN0YXRpYyB2b2lkIG5mdF9keW5zZXRfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0c3RydWN0IG5mdF9keW5zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xuIFx0aW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcml2LVx1MDAzZW51bV9leHByczsgaSsrKVxuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgcHJpdi1cdTAwM2VleHByX2FycmF5W2ldKTtcbi1cbitcdGlmIChwcml2LVx1MDAzZW92ZXJyaWRlX2V4cHJzKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByaXYtXHUwMDNlbnVtX2V4cHJzOyBpKyspXG4rXHRcdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIHByaXYtXHUwMDNlZXhwcl9hcnJheVtpXSk7XG4rXHR9XG4gXHRuZl90YWJsZXNfZGVzdHJveV9zZXQoY3R4LCBwcml2LVx1MDAzZXNldCk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDE6NDAuNjA1MTA5NzE4WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2OTk0NjQ1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldGZpbHRlcidzIEV4cHJlc3Npb24gSGFuZGxpbmcgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5mX3RhYmxlc19hcGkuY2AgYW5kIGBuZnRfZHluc2V0LmNgLiBJdCdzIGFsbCBhYm91dCBzdHJlYW1saW5pbmcgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoIGhvdyBuZXRmaWx0ZXIgZGVhbHMgd2l0aCBleHByZXNzaW9ucyB3aXRoaW4gc2V0cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCB0aGV5J3JlIHRyeWluZyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjbG9uaW5nLCB3aGljaCB1c3VhbGx5IHRyYW5zbGF0ZXMgdG8gYSBwZXJmb3JtYW5jZSBib29zdC5cIiBTbWFydC5cblxuVGhlIGNvcmUgaWRlYSBzZWVtcyB0byBiZSB0aGlzIGBvdmVycmlkZV9leHByc2AgYm9vbGVhbiBmbGFnLiBJZiBzZXQsIGl0IG1lYW5zIHRoZSBleHByZXNzaW9ucyB3ZXJlLCBlc3NlbnRpYWxseSwgXCJ0YWtlbiBvdmVyXCIgb3Igb3ZlcnJpZGRlbi4gSWYgYG92ZXJyaWRlX2V4cHJzYCBpcyBgdHJ1ZWAsIHRoZSBvbGQgZXhwcmVzc2lvbiBpcyBkZXN0cm95ZWQuIElmIG5vdCwgaXQganVzdCBjb3BpZXMgdGhlIHBvaW50ZXJzIHRvIHRoZSBleHByZXNzaW9ucy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY2hhbmdlIGluIG9iamVjdCBsaWZlY3ljbGUgYW5kIHJlZmVyZW5jZSBtYW5hZ2VtZW50LiBXZSBhcmUgbW92aW5nIGF3YXkgZnJvbSBgbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmVgIGluIGZhdm9yIG9mIGRpcmVjdCBwb2ludGVyIG1hbmlwdWxhdGlvbi4gVGhhdCdzIGdvb2QsIGxlc3Mgb3ZlcmhlYWQgaWYgd2UgY2FuIGF2b2lkIHRoYXQgY2xvbmUuIEl0IHNlZW1zIHRvIHBhc3MgdGhhdCBgb3ZlcnJpZGVfZXhwcnNgIGZsYWcgdG8gYG5mdF9zZXRfZWxlbV9leHByX3NldHVwYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGNyZWF0aW5nIGV4cHJlc3Npb25zLCBidXQgbGV0IG1lIHRoaW5rLi4uXG5cbk9rYXksIHNvIGBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cGAgaXMgd2hlcmUgdGhpbmdzIGFyZSBnZXR0aW5nIGEgbGl0dGxlIGNvbmZ1c2luZy4gSXQncyBkb2luZyBzb21ldGhpbmcgbGlrZSB0aGlzOlxuXG5gYGBjXG5cdFx0ZWxlbV9leHByLVx1MDAzZXNpemUgKz0gZXhwcl9hcnJheVtpXS1cdTAwM2VvcHMtXHUwMDNlc2l6ZTtcblx0XHRpZiAob3ZlcnJpZGVfZXhwcnMpXG5cdFx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XG5cdFx0ZXhwcl9hcnJheVtpXSA9IE5VTEw7XG5gYGBcblxuSG1tLi4uIGlmIGBvdmVycmlkZV9leHByc2AgaXMgYGZhbHNlYCwgaXQgKmRvZXNuJ3QqIGRlc3Ryb3kgdGhlIGV4cHJlc3Npb24uIFRoaXMgc2VlbXMgb2ZmLiBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgIGlzIHN1cHBvc2VkIHRvICpzZXR1cCogdGhlIGV4cHJlc3Npb25zIGluIHRoZSBlbGVtZW50LCByaWdodD8gU28gaWYgaXQncyBzZXR0aW5nIHRoZW0gdXAsIGl0ICptdXN0KiBiZSBjbG9uaW5nIHRoZW0gb3IgY3JlYXRpbmcgdGhlbSBmcm9tIHNjcmF0Y2guIEkgZ3Vlc3MgdGhleSBhcmUgdXNpbmcgYSBoeWJyaWQgYXBwcm9hY2gsIGNsb25pbmcgb25seSB3aGVuIG5lY2Vzc2FyeS4gQnV0IGl0IHNob3VsZCB0aGVuIGJlICpkZXN0cm95aW5nKiB0aGVtIHdoZW4gaXQncyBkb25lLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBpdCBjbG9uZXMgdGhlIGV4cHJlc3Npb25zLiBMZXQgbWUgZ28gY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGZvciBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgIGFuZCBzZWUgd2hhdCBpdCdzIHJlYWxseSBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg4NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQxOjQ4LjMwNDU3NjQ2OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyNzg3Mjg1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02OTE1PXN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTIzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY5MjQ6c3RhdGljIGludCBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5MjUtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0X3RtcGwgKnRtcGwsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MjQ1PXN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzU0Ni1cXHR9XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzU0NzpcXHRlcnIgPSBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChjdHgsIFxcdTAwMjZ0bXBsLCBleHQsIGV4cHJfYXJyYXksIG51bV9leHBycyxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NTQ4LVxcdFxcdFxcdFxcdCAgICAgIG92ZXJyaWRlX2V4cHJzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDE6NTAuMzMyNDU1NzM1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjYxNzAyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYG5mdF9zZXRfZWxlbV9leHByX3NldHVwYC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgZXhwcmVzc2lvbiBhc3NvY2lhdGVkIHdpdGggYW4gZWxlbWVudCB3aXRoaW4gYW4gTkZUYWJsZXMgc2V0LiBJdCdzIGxpa2VseSBhIGNydWNpYWwgcGFydCBvZiB0aGUgc2V0IG1hbmFnZW1lbnQgaW5mcmFzdHJ1Y3R1cmUuIEknbSBleHBlY3RpbmcgdG8gc2VlIGhhbmRsaW5nIG9mIGRhdGEgdHlwZXMsIHBvdGVudGlhbCBrZXkvcGF5bG9hZCBwYXJzaW5nLCBhbmQgcGVyaGFwcyBzb21lIG9wdGltaXphdGlvbiBjb25zaWRlcmF0aW9ucyBmb3IgZGlmZmVyZW50IGVsZW1lbnQgZm9ybWF0cy5cblxuSSdtIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGRlYWxzIHdpdGggdGhlIHZhcmlvdXMgZGF0YSB0eXBlcyB0aGF0IE5GVGFibGVzIHN1cHBvcnRzIGZvciBzZXQgZWxlbWVudHMg4oCTIElQdjQgYWRkcmVzc2VzLCBJUHY2IGFkZHJlc3NlcywgcG9ydHMsIGludGVnZXJzLCBzdHJpbmdzLCBldGMuIEhvdyBkb2VzIGl0IHZhbGlkYXRlIHRoZSBpbnB1dCBhbmQgZW5zdXJlIHR5cGUgY29tcGF0aWJpbGl0eT8gRG9lcyBpdCBoYXZlIGEgc3dpdGNoIHN0YXRlbWVudCBvciBhIG1vcmUgc29waGlzdGljYXRlZCBkaXNwYXRjaCBtZWNoYW5pc20/IEknbSBiZXR0aW5nIG9uIGEgd2VsbC1kZXNpZ25lZCBzdHJ1Y3R1cmUgdG8gaGFuZGxlIHRoZSB0eXBlLXNwZWNpZmljIGxvZ2ljIGNsZWFubHkuXG5cbkZ1cnRoZXJtb3JlLCBJJ20gY3VyaW91cyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBrZXJuZWwgZm9yIHRoZSBzZXQgaXRzZWxmLiBJcyBpdCBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgdGhlIGVsZW1lbnQgZXhwcmVzc2lvbj8gSG93IGRvZXMgaXQgaW50ZWdyYXRlIHdpdGggdGhlIGhhc2ggdGFibGUgb3IgcmFkaXggdHJlZSB1c2VkIHRvIHN0b3JlIHRoZSBzZXQgZWxlbWVudHM/IElzIHRoZXJlIGFueSBjYWNoaW5nIG9yIHByZS1jYWxjdWxhdGlvbiBiZWluZyBkb25lIHRvIGltcHJvdmUgcGVyZm9ybWFuY2U/IEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgZGV0YWlscyBhbmQgcG90ZW50aWFsIGxvY2tpbmcgY29uc2lkZXJhdGlvbnMsIGFzIHNldCBvcGVyYXRpb25zIG5lZWQgdG8gYmUgdGhyZWFkLXNhZmUuXG5cbkknbSBhbHNvIGFudGljaXBhdGluZyBzb21lIGZvcm0gb2YgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGUgZWxlbWVudCBleHByZXNzaW9uIGlzIGludmFsaWQsIG9yIGlmIHRoZXJlJ3MgYSBwcm9ibGVtIGFsbG9jYXRpbmcgbWVtb3J5PyBBcmUgc3BlY2lmaWMgZXJyb3IgY29kZXMgYmVpbmcgcmV0dXJuZWQ/IEhvdyBncmFudWxhciBpcyB0aGUgZXJyb3IgcmVwb3J0aW5nPyBUaGUgcXVhbGl0eSBvZiB0aGUgZXJyb3IgaGFuZGxpbmcgd2lsbCBnaXZlIG1lIGEgZ29vZCBpbmRpY2F0aW9uIG9mIHRoZSBvdmVyYWxsIHJvYnVzdG5lc3Mgb2YgdGhpcyBjb21wb25lbnQuXG5cbkZpbmFsbHksIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9mIG9wdGltaXphdGlvbiB0ZWNobmlxdWVzLiBEb2VzIGl0IGF0dGVtcHQgdG8gY29tcGFjdCBkYXRhLCBvciB1c2Ugc3BlY2lhbGl6ZWQgaW5zdHJ1Y3Rpb25zIHdoZXJlIHBvc3NpYmxlPyBIb3cgZG9lcyBpdCBoYW5kbGUgbGFyZ2Ugc2V0cywgYW5kIGFyZSB0aGVyZSBhbnkgc2NhbGFiaWxpdHkgY29uc2lkZXJhdGlvbnM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NzksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MTo1NC43NTg2Mjk2NTNaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5MjQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY5MjQ6XFx0c3RhdGljIGludCBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbjY5MjU6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0X3RtcGwgKnRtcGwsXFxuNjkyNjpcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCxcXG42OTI3OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfZXhwciAqZXhwcl9hcnJheVtdLFxcbjY5Mjg6XFx0XFx0XFx0XFx0XFx0ICAgdTMyIG51bV9leHBycywgYm9vbCBvdmVycmlkZV9leHBycylcXG42OTI5OlxcdHtcXG42OTMwOlxcdFxcdHN0cnVjdCBuZnRfc2V0X2VsZW1fZXhwciAqZWxlbV9leHByID0gbmZ0X3NldF9leHRfZXhwcihleHQpO1xcbjY5MzE6XFx0XFx0dTMyIGxlbiA9IHNpemVvZihzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIpO1xcbjY5MzI6XFx0XFx0c3RydWN0IG5mdF9leHByICpleHByO1xcbjY5MzM6XFx0XFx0aW50IGksIGVycjtcXG42OTM0OlxcdFxcbjY5MzU6XFx0XFx0aWYgKG51bV9leHBycyA9PSAwKVxcbjY5MzY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNjkzNzpcXHRcXG42OTM4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fZXhwcnM7IGkrKylcXG42OTM5OlxcdFxcdFxcdGxlbiArPSBleHByX2FycmF5W2ldLVxcdTAwM2VvcHMtXFx1MDAzZXNpemU7XFxuNjk0MDpcXHRcXG42OTQxOlxcdFxcdGlmIChuZnRfc2V0X2V4dF9jaGVjayh0bXBsLCBORlRfU0VUX0VYVF9FWFBSRVNTSU9OUywgbGVuKSBcXHUwMDNjIDApXFxuNjk0MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42OTQzOlxcdFxcbjY5NDQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9leHByczsgaSsrKSB7XFxuNjk0NTpcXHRcXHRcXHRleHByID0gbmZ0X3NldGVsZW1fZXhwcl9hdChlbGVtX2V4cHIsIGVsZW1fZXhwci1cXHUwMDNlc2l6ZSk7XFxuNjk0NjpcXHRcXHRcXHRlcnIgPSBuZnRfZXhwcl9jbG9uZShleHByLCBleHByX2FycmF5W2ldLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjY5NDc6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuNjk0ODpcXHRcXHRcXHRcXHRnb3RvIGVycl9lbGVtX2V4cHJfc2V0dXA7XFxuNjk0OTpcXHRcXG42OTUwOlxcdFxcdFxcdGVsZW1fZXhwci1cXHUwMDNlc2l6ZSArPSBleHByX2FycmF5W2ldLVxcdTAwM2VvcHMtXFx1MDAzZXNpemU7XFxuNjk1MTpcXHRcXHRcXHRpZiAob3ZlcnJpZGVfZXhwcnMpXFxuNjk1MjpcXHRcXHRcXHRcXHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XFxuNjk1MzpcXHRcXHRcXHRleHByX2FycmF5W2ldID0gTlVMTDtcXG42OTU0OlxcdFxcdH1cXG42OTU1OlxcdFxcbjY5NTY6XFx0XFx0cmV0dXJuIDA7XFxuNjk1NzpcXHRcXG42OTU4OlxcdGVycl9lbGVtX2V4cHJfc2V0dXA6XFxuNjk1OTpcXHRcXHRmb3IgKDsgaSBcXHUwMDNjIG51bV9leHByczsgaSsrKSB7XFxuNjk2MDpcXHRcXHRcXHRpZiAob3ZlcnJpZGVfZXhwcnMpXFxuNjk2MTpcXHRcXHRcXHRcXHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XFxuNjk2MjpcXHRcXG42OTYzOlxcdFxcdFxcdGV4cHJfYXJyYXlbaV0gPSBOVUxMO1xcbjY5NjQ6XFx0XFx0fVxcbjY5NjU6XFx0XFxuNjk2NjpcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG42OTY3OlxcdH1cXG42OTY4OlxcdFxcbjY5Njk6XFx0c3RydWN0IG5mdF9zZXRfZXh0ICpuZnRfc2V0X2NhdGNoYWxsX2xvb2t1cChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuNjk3MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldClcXG42OTcxOlxcdHtcXG42OTcyOlxcdFxcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xcbjY5NzM6XFx0XFx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX2N1cihuZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MTo1NC43NTkxMjEzMjNaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2MDQxMTExMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBPYnNlcnZhdGlvbnMgb24gRXhwcmVzc2lvbiBDbG9uaW5nIGluIE5ldGZpbHRlciBTZXRzKipcblxuUmlnaHQsIHNvIGBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cGAgaXMgbm93IGhhbmRsaW5nIHRoZSBjbG9uaW5nIG9mIGV4cHJlc3Npb25zIGRpcmVjdGx5IGludG8gdGhlIHNldCBlbGVtZW50LiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLiBQcmV2aW91c2x5LCBJIHJlY2FsbCBgbmZ0X2FkZF9zZXRfZWxlbWAgd291bGQgY2xvbmUgdGhvc2UgZXhwcmVzc2lvbnMgaW50byBhbiBgZXhwcl9hcnJheWAgZmlyc3QsIHVzaW5nIGBuZnRfc2V0X2VsZW1fZXhwcl9jbG9uZWAuIFRoZW4sIGl0IHNlZW1zLCBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgIHdvdWxkICp0aGVuKiBjbG9uZSB0aGVtIGFnYWluPyBUaGF0IHNvdW5kcyBpbmVmZmljaWVudCwgYW5kIGZyYW5rbHksIGEgYml0IHJlZHVuZGFudC4gXG5cbkkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgbWVudGFsIG1vZGVsIGhlcmUuIFRoZSBvbGQgY29kZSBmb3IgYG5mdF9zZXRfZWxlbV9leHByX2Nsb25lYCBzaG91bGQgcHJvdmlkZSBzb21lIGNsYXJpdHkgb24gd2h5IHdlIGhhZCB0aGlzIGV4dHJhLCBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSwgbGF5ZXIgb2YgY2xvbmluZy4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBsb29rcyBsaWtlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjQ1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDE6NTkuMDE5NTM0NDU2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MjYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2OTEwOlxcdFxcdFxcdG5mdF9zZXRfZWxlbV9leHByX2Rlc3Ryb3koY3R4LCBuZnRfc2V0X2V4dF9leHByKGV4dCkpO1xcbjY5MTE6XFx0XFxuNjkxMjpcXHRcXHRrZnJlZShlbGVtX3ByaXYpO1xcbjY5MTM6XFx0fVxcbjY5MTQ6XFx0XFxuNjkxNTpcXHRzdGF0aWMgdm9pZCBuZnRfdHJhbnNfZWxlbXNfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbjY5MTY6XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfdHJhbnNfZWxlbSAqdGUpXFxuNjkxNzpcXHR7XFxuNjkxODpcXHRcXHRpbnQgaTtcXG42OTE5OlxcdFxcbjY5MjA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlLVxcdTAwM2VuZWxlbXM7IGkrKylcXG42OTIxOlxcdFxcdFxcdG5mX3RhYmxlc19zZXRfZWxlbV9kZXN0cm95KGN0eCwgdGUtXFx1MDAzZXNldCwgdGUtXFx1MDAzZWVsZW1zW2ldLnByaXYpO1xcbjY5MjI6XFx0fVxcbjY5MjM6XFx0XFxuNjkyNDpcXHRzdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuNjkyNTpcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHRfdG1wbCAqdG1wbCxcXG42OTI2OlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0LFxcbjY5Mjc6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9leHByICpleHByX2FycmF5W10sXFxuNjkyODpcXHRcXHRcXHRcXHRcXHQgICB1MzIgbnVtX2V4cHJzLCBib29sIG92ZXJyaWRlX2V4cHJzKVxcbjY5Mjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MTo1OS4wMjAxMDgzNTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzMDY3MDAyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHByZXNzaW9uIENsb25pbmcgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdvIG92ZXIgdGhpcyBgbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmVgIGZ1bmN0aW9uIGZyb20gdGhlIGRpZmYuIEluaXRpYWxseSwgaXQgc2VlbXMgdGhleSBhcmUgY2xvbmluZyB0aGUgZXhwcmVzc2lvbnMgZnJvbSB0aGUgc2V0IGFuZCBzdG9yaW5nIHRoZW0gaW4gYGV4cHJfYXJyYXlgLiBTcGVjaWZpY2FsbHksIGBremFsbG9jYCBpcyBiZWluZyB1c2VkIHRvIGFsbG9jYXRlIG1lbW9yeSBhbmQgdGhlIGBuZnRfZXhwcl9jbG9uZWAgZnVuY3Rpb24gaXMgdXNlZCBmb3IgdGhlIGNvcHlpbmcuXG5cblRoZW4sIEknbSByZW1pbmRlZCBvZiBob3cgYG5mdF9zZXRfZWxlbV9leHByX3NldHVwYCB3YXMgdXRpbGl6aW5nIGBleHByX2FycmF5YC4gSXQgbG9va3MgbGlrZSBpdCB3YXMgY2xvbmluZyB0aGVzZSAqY2xvbmVzKiBhZ2FpbiBpbnRvIHRoZSBlbGVtZW50IGFuZCBkZXN0cm95aW5nIHRoZSBvcmlnaW5hbCBjbG9uZSBhZnRlcndhcmQuIFRoYXQncyBhIHRleHRib29rIGRvdWJsZS1jbG9uZSBzY2VuYXJpbyEgV2UgaGFkIGEgdGVtcG9yYXJ5IGNvcHkgdGhhdCB3YXMgdWx0aW1hdGVseSBkaXNjYXJkZWQuIFRoZSBwYXRjaCBjbGVhbnMgdGhpcyB1cCBzaWduaWZpY2FudGx5LlxuXG5UaGUgcGF0Y2gncyBvcHRpbWl6YXRpb24gc3RyYXRlZ3kgaXMgdG8gcGFzcyB0aGUgb3JpZ2luYWwgZXhwcmVzc2lvbnMgZGlyZWN0bHkgaW4gYGV4cHJfYXJyYXlgIHdoZW4gcG9zc2libGUuIElmIHRoZSBzZXQncyBleHByZXNzaW9ucyBhcmUgKm5vdCogYmVpbmcgb3ZlcnJpZGRlbiBieSBhIHVzZXItcHJvdmlkZWQgZXhwcmVzc2lvbiwgYG5mdF9zZXRfZWxlbV9leHByX3NldHVwYCBjbG9uZXMgdGhlc2UgZGlyZWN0bHkgaW50byB0aGUgZWxlbWVudC4gSWYgdGhlcmUncyBhbiBvdmVycmlkZSwgdGhhdCBuZXcgb2JqZWN0IGZyb20gcGFyc2luZyBpcyBhbHJlYWR5IHRoZXJlIGFuZCBjb3BpZWQsIGFuZCB0aGUgdGVtcCBhbGxvY2F0aW9uIGlzIGRlc3Ryb3llZC4gVGhpcyBkaXJlY3RseSBhZGRyZXNzZXMgdGhlIGRvdWJsZS1jbG9uZSBwcm9ibGVtLCByZWR1Y2luZyB0aGUgbWVtb3J5IGZvb3RwcmludCBhbmQgaW1wcm92aW5nIHBlcmZvcm1hbmNlLlxuXG5JJ20gbWFraW5nIHN1cmUgdG8ga2VlcCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgc3RyYWlnaHQgaGVyZS4gVGhlIGBvdmVycmlkZV9leHByc2AgZmxhZyBpcyBrZXkuIElmIHRydWUsIHRoZSBgZXhwcl9hcnJheWAgY29udGFpbnMgbmV3bHkgYWxsb2NhdGVkIG9iamVjdHMsIGZyZXNobHkgcGFyc2VkLiBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgIGNsb25lcyB0aGVtIGFuZCB0aGVuIGZyZWVzIHRoZSBtZW1vcnkuIElmIGZhbHNlLCBpdCdzIHBvaW50ZXJzIHRvIHRoZSAqc2V0J3MqIGRlZmF1bHQgZXhwcmVzc2lvbnMuIFRoZXNlIGFyZSAqY2xvbmVkKiBpbnRvIHRoZSBlbGVtZW50IGJ1dCB0aGUgb3JpZ2luYWxzIGluIGBleHByX2FycmF5YCByZW1haW4sIGJlY2F1c2UgdGhvc2UgZXhwcmVzc2lvbnMgYXJlIHBhcnQgb2YgdGhlIHNldCwgYW5kIHNob3VsZG4ndCBiZSB0b3VjaGVkIGJ5IHNldHVwLlxuXG5TbywgdGhpcyBpcyBhIGNsZWFuIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBvYmplY3QgbGlmZWN5Y2xlIG9wdGltaXphdGlvbi4gQ3JpdGljYWxseSwgaXQgKmRvZXNuJ3QqIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gYG5mdF9leHByX2Nsb25lYCBpcyBzdGlsbCByZXNwb25zaWJsZSBmb3IgY29ycmVjdGx5IGluaXRpYWxpemluZyB0aGUgY29waWVkIGRhdGEgd2l0aGluIHRoZSBlbGVtZW50IGl0c2VsZi5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlLi4uIGBuZnRfc2V0ZWxlbV9leHByX2F0YCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZWxlbWVudCdzIGV4dGVuc2lvbiBhcmVhLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgYXJlYSBpcyBjb3JyZWN0bHkgemVyb2VkIGJlZm9yZSB0aGUgY29weSB0YWtlcyBwbGFjZS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgZWxlbV9leHByYCB0byBgbmZ0X3NldF9leHRfZXhwcihleHQpYC4gYGV4dGAgaXMgZnJvbSBgbmZ0X3NldF9lbGVtX2luaXRgIG9yIHNpbWlsYXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYXJlYSBpcyBpbml0aWFsaXplZCBwcm9wZXJseS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBUaGF0J3MgdGhlIG9uZSB0aGluZyB0aGF0IHdpbGwgY2F1c2UgYSBwcm9ibGVtIGhlcmUhIEknbSBnb2luZyB0byBmb2xsb3cgdGhpcyB1cCB0byBtYWtlIHN1cmUgaXQncyB2YWxpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg4NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQyOjExLjMyNjgxMTE1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA1MTEyNDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9zZXRfZWxlbV9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaD04NjQ9c3RydWN0IG5mdF9leHByICpuZnRfc2V0X2VsZW1fZXhwcl9hbGxvYyhjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTg2Ny1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg6ODY4OnN0cnVjdCBuZnRfZWxlbV9wcml2ICpuZnRfc2V0X2VsZW1faW5pdChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaC04NjktXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0X3RtcGwgKnRtcGwsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02Nzc0PXN0YXRpYyBpbnQgbmZ0X3NldF9leHRfbWVtY3B5KGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLCB1OCBpZCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY3ODQtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njc4NTpzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqbmZ0X3NldF9lbGVtX2luaXQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02Nzg2LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzI0NT1zdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc1MjItXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzUyMzpcXHRlbGVtLnByaXYgPSBuZnRfc2V0X2VsZW1faW5pdChzZXQsIFxcdTAwMjZ0bXBsLCBlbGVtLmtleS52YWwuZGF0YSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NTI0LVxcdFxcdFxcdFxcdCAgICAgIGVsZW0ua2V5X2VuZC52YWwuZGF0YSwgZWxlbS5kYXRhLnZhbC5kYXRhLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzgyNT1zdGF0aWMgaW50IG5mdF9kZWxfc2V0ZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzg4MS1cXHRlcnIgPSAtRU5PTUVNO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc4ODI6XFx0ZWxlbS5wcml2ID0gbmZ0X3NldF9lbGVtX2luaXQoc2V0LCBcXHUwMDI2dG1wbCwgZWxlbS5rZXkudmFsLmRhdGEsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzg4My1cXHRcXHRcXHRcXHQgICAgICBlbGVtLmtleV9lbmQudmFsLmRhdGEsIE5VTEwsIDAsIDAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYz01Nj1zdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqbmZ0X2R5bnNldF9uZXcoc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jLTY4LVxcdHRpbWVvdXQgPSBwcml2LVxcdTAwM2V0aW1lb3V0ID8gOiBSRUFEX09OQ0Uoc2V0LVxcdTAwM2V0aW1lb3V0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYzo2OTpcXHRlbGVtX3ByaXYgPSBuZnRfc2V0X2VsZW1faW5pdChzZXQsIFxcdTAwMjZwcml2LVxcdTAwM2V0bXBsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jLTcwLVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZyZWdzLVxcdTAwM2VkYXRhW3ByaXYtXFx1MDAzZXNyZWdfa2V5XSwgTlVMTCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDI6MTMuMDMxOTI4OTc4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODMxOTk5OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG5mdF9zZXRfZWxlbV9pbml0YCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaW1lIHRvIHRha2UgYSBsb29rIGF0IGBuZnRfc2V0X2VsZW1faW5pdGAuIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbiBhbiBORlRhYmxlcyBzZXQuIEl0J3MgdGhlIGJ1aWxkaW5nIGJsb2NrLCB0aGUgZ3JvdW5kIGZsb29yIGZvciBkZWZpbmluZyBob3cgZGF0YSBnZXRzIHN0b3JlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIHJ1bGUgc3RydWN0dXJlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgZGVmaW5lZCwgbWVtb3J5IGlzIGFsbG9jYXRlZCAob3IgcmUtdXNlZCBpZiBwb3NzaWJsZSksIGFuZCB3aGF0IGNoZWNrcyBhcmUgcGVyZm9ybWVkIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhbmQgcHJldmVudCBlcnJvcnMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGVsZW1lbnQgdHlwZXMg4oCTIHdoZXRoZXIgaXTigJlzIGludGVnZXIsIElQIGFkZHJlc3Nlcywgc3RyaW5ncywgb3IgbW9yZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcy4gV2hhdCdzIHRoZSBzdHJhdGVneSBmb3IgZGVhbGluZyB3aXRoIHBvdGVudGlhbCBjb2xsaXNpb25zIG9yIG92ZXJsYXBzLCBpZiBhbnk/IEFuZCBvZiBjb3Vyc2UsIHBlcmZvcm1hbmNlIGlzIGtleSDigJMgaG93IGVmZmljaWVudCBpcyB0aGlzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2Ugc2V0cyBhbmQgZnJlcXVlbnQgYWRkaXRpb25zL2RlbGV0aW9ucz8gR290dGEga2VlcCBhbiBleWUgb24gdGhvc2Ugbml0dHktZ3JpdHR5IGRldGFpbHMgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdGlnaHQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDI6MTYuOTE1MTMxODI1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MjY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2Nzg1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2Nzg1OlxcdHN0cnVjdCBuZnRfZWxlbV9wcml2ICpuZnRfc2V0X2VsZW1faW5pdChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjY3ODY6XFx0XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0X3RtcGwgKnRtcGwsXFxuNjc4NzpcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCB1MzIgKmtleSwgY29uc3QgdTMyICprZXlfZW5kLFxcbjY3ODg6XFx0XFx0XFx0XFx0XFx0XFx0Y29uc3QgdTMyICpkYXRhLFxcbjY3ODk6XFx0XFx0XFx0XFx0XFx0XFx0dTY0IHRpbWVvdXQsIHU2NCBleHBpcmF0aW9uLCBnZnBfdCBnZnApXFxuNjc5MDpcXHR7XFxuNjc5MTpcXHRcXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcXG42NzkyOlxcdFxcdHZvaWQgKmVsZW07XFxuNjc5MzpcXHRcXG42Nzk0OlxcdFxcdGVsZW0gPSBremFsbG9jKHNldC1cXHUwMDNlb3BzLVxcdTAwM2VlbGVtc2l6ZSArIHRtcGwtXFx1MDAzZWxlbiwgZ2ZwKTtcXG42Nzk1OlxcdFxcdGlmIChlbGVtID09IE5VTEwpXFxuNjc5NjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG42Nzk3OlxcdFxcbjY3OTg6XFx0XFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGVsZW0pO1xcbjY3OTk6XFx0XFx0bmZ0X3NldF9leHRfaW5pdChleHQsIHRtcGwpO1xcbjY4MDA6XFx0XFxuNjgwMTpcXHRcXHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfS0VZKSBcXHUwMDI2XFx1MDAyNlxcbjY4MDI6XFx0XFx0ICAgIG5mdF9zZXRfZXh0X21lbWNweSh0bXBsLCBORlRfU0VUX0VYVF9LRVksXFxuNjgwMzpcXHRcXHRcXHRcXHQgICAgICAgbmZ0X3NldF9leHRfa2V5KGV4dCksIGtleSwgc2V0LVxcdTAwM2VrbGVuKSBcXHUwMDNjIDApXFxuNjgwNDpcXHRcXHRcXHRnb3RvIGVycl9leHRfY2hlY2s7XFxuNjgwNTpcXHRcXG42ODA2OlxcdFxcdGlmIChuZnRfc2V0X2V4dF9leGlzdHMoZXh0LCBORlRfU0VUX0VYVF9LRVlfRU5EKSBcXHUwMDI2XFx1MDAyNlxcbjY4MDc6XFx0XFx0ICAgIG5mdF9zZXRfZXh0X21lbWNweSh0bXBsLCBORlRfU0VUX0VYVF9LRVlfRU5ELFxcbjY4MDg6XFx0XFx0XFx0XFx0ICAgICAgIG5mdF9zZXRfZXh0X2tleV9lbmQoZXh0KSwga2V5X2VuZCwgc2V0LVxcdTAwM2VrbGVuKSBcXHUwMDNjIDApXFxuNjgwOTpcXHRcXHRcXHRnb3RvIGVycl9leHRfY2hlY2s7XFxuNjgxMDpcXHRcXG42ODExOlxcdFxcdGlmIChuZnRfc2V0X2V4dF9leGlzdHMoZXh0LCBORlRfU0VUX0VYVF9EQVRBKSBcXHUwMDI2XFx1MDAyNlxcbjY4MTI6XFx0XFx0ICAgIG5mdF9zZXRfZXh0X21lbWNweSh0bXBsLCBORlRfU0VUX0VYVF9EQVRBLFxcbjY4MTM6XFx0XFx0XFx0XFx0ICAgICAgIG5mdF9zZXRfZXh0X2RhdGEoZXh0KSwgZGF0YSwgc2V0LVxcdTAwM2VkbGVuKSBcXHUwMDNjIDApXFxuNjgxNDpcXHRcXHRcXHRnb3RvIGVycl9leHRfY2hlY2s7XFxuNjgxNTpcXHRcXG42ODE2OlxcdFxcdGlmIChuZnRfc2V0X2V4dF9leGlzdHMoZXh0LCBORlRfU0VUX0VYVF9USU1FT1VUKSkge1xcbjY4MTc6XFx0XFx0XFx0bmZ0X3NldF9leHRfdGltZW91dChleHQpLVxcdTAwM2V0aW1lb3V0ID0gdGltZW91dDtcXG42ODE4OlxcdFxcbjY4MTk6XFx0XFx0XFx0aWYgKGV4cGlyYXRpb24gPT0gMClcXG42ODIwOlxcdFxcdFxcdFxcdGV4cGlyYXRpb24gPSB0aW1lb3V0O1xcbjY4MjE6XFx0XFxuNjgyMjpcXHRcXHRcXHRuZnRfc2V0X2V4dF90aW1lb3V0KGV4dCktXFx1MDAzZWV4cGlyYXRpb24gPSBnZXRfamlmZmllc182NCgpICsgZXhwaXJhdGlvbjtcXG42ODIzOlxcdFxcdH1cXG42ODI0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MjoxNi45MTU3MjYzMjZaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY3MDAyNzc1NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IE1lbW9yeSBNYW5hZ2VtZW50IEZpeGVzIGluIE5ldGZpbHRlciBTZXRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGFib3V0IHRoZSByZW1vdmFsIG9mIHRoYXQgYGt6YWxsb2NgIGluIGBuZnRfc2V0X2VsZW1fZXhwcl9jbG9uZWAuIEJ1dCB0aGF0IHdhcyBqdXN0IGZvciBhIHRlbXBvcmFyeSBjbG9uZSB0aGF0J3MgYnlwYXNzZWQgbm93LiBUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoZSAqYWN0dWFsKiBlbGVtZW50IG1lbW9yeSBpcyBzdGlsbCB6ZXJvZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIHZpYSBga3phbGxvY2AuIFNvLCBubyBpbW1lZGlhdGUgcmlzayB0aGVyZS4gSSBkaWQgYSBxdWljayBjaGVjayBvbiBgbmZ0X2V4cHJfY2xvbmVgIGp1c3QgaW4gY2FzZSwgYnV0IHRoYXQgY29waWVzIGZyb20gYW4gKmluaXRpYWxpemVkKiBvcmlnaW5hbCBleHByZXNzaW9uLlxuXG5UaGVuIEkgbW92ZWQgb24gdG8gdGhlIGNoYW5nZXMgaW4gYG5mdF9zZXRfY29tbWl0X3VwZGF0ZWAuIFNldHRpbmcgYGRlYWQgPSAxYCBvbiBkZWxldGVkIHNldHMuLi4gc291bmRzIGxpa2UgYSB1c2UtYWZ0ZXItZnJlZSBwcm90ZWN0aW9uLiBNYWtlcyBzZW5zZS5cblxuRGlnZ2luZyBmdXJ0aGVyLCBJIGxvb2tlZCBhdCBgbmZ0X2R5bnNldF9pbml0YCBhbmQgYG5mdF9keW5zZXRfZGVzdHJveWAuIEl0J3Mgbm93IHN0b3JpbmcgZGlyZWN0IHBvaW50ZXJzIHRvIHNldCBleHByZXNzaW9ucywgaW5zdGVhZCBvZiBjbG9uaW5nIHRoZW0sIHdpdGggdGhpcyBgb3ZlcnJpZGVfZXhwcnNgIGZsYWcgdG8gc2lnbmFsIHdoZXRoZXIgdGhlIHNldCBleHByZXNzaW9uJ3MgZXhwcmVzc2lvbnMgc2hvdWxkIGJlIGRlc3Ryb3llZCBvciBub3QuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgYSBkb3VibGUtZnJlZSBvciBVQUYgYnVnIGZpeDogd2UncmUgcHJldmVudGluZyB0aGUgZHluc2V0IGV4cHJlc3Npb24gZnJvbSBkZXN0cm95aW5nIHRoZSBzZXQgZXhwcmVzc2lvbnMgd2hlbiB0aGV5J3JlIG5vdCBvd25lZCBieSB0aGUgZHluc2V0IGV4cHJlc3Npb24uXG5cblNvLCBpbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIGlzIGZpeGluZzpcbjEuICBFeHByZXNzaW9uIGNsb25pbmcgaW4gYG5mdF9hZGRfc2V0X2VsZW1gLlxuMi4gIERvdWJsZS1mcmVlL1VBRiBpbiBgbmZ0X2R5bnNldF9kZXN0cm95YC5cbjMuICBTZXR0aW5nIHRoZSBgZGVhZGAgZmxhZyBvbiBkZWxldGVkIHNldHMuXG5cbkknbSBjb25maWRlbnQgdGhhdCBub25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlICpvciogZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlc2UgYXJlIG1lbW9yeSBtYW5hZ2VtZW50IGZpeGVzLCBwdXJlIGFuZCBzaW1wbGUuIEtBU0FOIGlzIHRoZSB0b29sIGZvciB0aGVzZSBraW5kcyBvZiBidWdzLiBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgYW55IHBvc3NpYmxlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIHRvIHVzZXJzcGFjZS4gVGhlIGV4cHJlc3Npb25zIHRoZW1zZWx2ZXMgY2FuIGdldCBkdW1wZWQgdG8gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLiBUaGUgZWxlbWVudCBtZW1vcnkgZ2V0cyBga3phbGxvY2AnZWQgaW4gYG5mdF9zZXRfZWxlbV9pbml0YCwgbWVhbmluZyBpdCdzIGFsbCB6ZXJvZWQuIFRoZSBleHByZXNzaW9ucyBhcmUgY2xvbmVkIGludG8gdGhhdCB6ZXJvZWQgbWVtb3J5IHdpdGggYG5mdF9leHByX2Nsb25lYCwgd2hpY2ggbWVhbnMsIGJlY2F1c2UgdGhlIGV4cHJlc3Npb24gd2FzIGFscmVhZHkgaW5pdGlhbGl6ZWQgYW5kIGxpa2VseSB6ZXJvLXBhZGRlZCwgd2UncmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeS4gQWxzbywgdGhpcyBwYXRjaCAqZG9lc24ndCogY2hhbmdlIHdoYXQgZ2V0cyBzdG9yZWQgaW4gdGhlIGVsZW1lbnQsIG9ubHkgKmhvdyogaXQgZ2V0cyB0aGVyZS5cblxuVGhlcmVmb3JlLCBubywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zIGhlcmUuXG5cbioqSSdtIHNldHRpbmcgTmVlZHNLTVNBTj1mYWxzZS4qKiBUaGlzIGlzIGFsbCBhYm91dCBmaXhpbmcgb2JqZWN0IGxpZmVjeWNsZSBwcm9ibGVtcyBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIHdlbGwgaGFuZGxlZCBieSBLQVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMTksIk91dHB1dFRva2VucyI6MjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQyOjMzLjYxNjAwNjE4NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgbGlmZWN5Y2xlIGFuZCBjbG9uaW5nIG9mIG5ldGZpbHRlciBzZXQgZXhwcmVzc2lvbnMgKGBuZnRfZXhwcmApIHRvIGZpeCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgKGxpa2VseSBkb3VibGUtZnJlZXMgb3IgdXNlLWFmdGVyLWZyZWVzKS4gSXQgYXZvaWRzIGNyZWF0aW5nIGludGVybWVkaWF0ZSBjbG9uZXMgb2YgZXhwcmVzc2lvbnMgd2hlbiBhZGRpbmcgZWxlbWVudHMgdG8gYSBzZXQgb3IgaW5pdGlhbGl6aW5nIGEgZHluc2V0LCBpbnN0ZWFkIGNvcHlpbmcgcG9pbnRlcnMgYW5kIHVzaW5nIGEgbmV3IGBvdmVycmlkZV9leHByc2AgZmxhZyB0byB0cmFjayBvd25lcnNoaXAgYW5kIGRldGVybWluZSBpZiB0aGUgZXhwcmVzc2lvbnMgc2hvdWxkIGJlIGRlc3Ryb3llZC4gSXQgYWxzbyBzZXRzIGEgYGRlYWRgIGZsYWcgb24gZGVsZXRlZCBzZXRzIGR1cmluZyBjb21taXQgdXBkYXRlcy4gXFxuXFxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG9iamVjdCBsaWZlY3ljbGUgYnVncyAoVUFGLCBkb3VibGUtZnJlZSkgd2hpY2ggYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgbWVtb3J5IGZvciB0aGUgc2V0IGVsZW1lbnRzIHRoZW1zZWx2ZXMgY29udGludWVzIHRvIGJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCAoaW4gYG5mdF9zZXRfZWxlbV9pbml0YCksIGVuc3VyaW5nIGFsbCBmaWVsZHMgYW5kIHBhZGRpbmcgYXJlIGZ1bGx5IHplcm9lZC4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBsaWZlY3ljbGUgYW5kIGNsb25pbmcgb2YgbmV0ZmlsdGVyIHNldCBleHByZXNzaW9ucyAoYG5mdF9leHByYCkgdG8gZml4IG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyAobGlrZWx5IGRvdWJsZS1mcmVlcyBvciB1c2UtYWZ0ZXItZnJlZXMpLiBJdCBhdm9pZHMgY3JlYXRpbmcgaW50ZXJtZWRpYXRlIGNsb25lcyBvZiBleHByZXNzaW9ucyB3aGVuIGFkZGluZyBlbGVtZW50cyB0byBhIHNldCBvciBpbml0aWFsaXppbmcgYSBkeW5zZXQsIGluc3RlYWQgY29weWluZyBwb2ludGVycyBhbmQgdXNpbmcgYSBuZXcgYG92ZXJyaWRlX2V4cHJzYCBmbGFnIHRvIHRyYWNrIG93bmVyc2hpcCBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBleHByZXNzaW9ucyBzaG91bGQgYmUgZGVzdHJveWVkLiBJdCBhbHNvIHNldHMgYSBgZGVhZGAgZmxhZyBvbiBkZWxldGVkIHNldHMgZHVyaW5nIGNvbW1pdCB1cGRhdGVzLiBcXG5cXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3Mgb2JqZWN0IGxpZmVjeWNsZSBidWdzIChVQUYsIGRvdWJsZS1mcmVlKSB3aGljaCBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBtZW1vcnkgZm9yIHRoZSBzZXQgZWxlbWVudHMgdGhlbXNlbHZlcyBjb250aW51ZXMgdG8gYmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgIChpbiBgbmZ0X3NldF9lbGVtX2luaXRgKSwgZW5zdXJpbmcgYWxsIGZpZWxkcyBhbmQgcGFkZGluZyBhcmUgZnVsbHkgemVyb2VkLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvprxf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 12:37:36 +0000 UTC FinishedAt: 2026-08-21 12:42:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "e625a9477d12baaff4025c5f9989184a907ea8fc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "e625a9477d12baaff4025c5f9989184a907ea8fc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES" ], "series_id": "be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nf_tables_newsetelem", "nf_tables_newset", "nf_tables_delset", "nf_tables_commit", "nf_tables_newrule" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25mX3RhYmxlc19uZXdzZXRlbGVtJiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19uZXdzZXQmIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX2RlbHNldCYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfY29tbWl0JiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19uZXdydWxlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgbGlmZWN5Y2xlIGFuZCBjbG9uaW5nIG9mIG5ldGZpbHRlciBzZXQgZXhwcmVzc2lvbnMgKGBuZnRfZXhwcmApIHRvIGZpeCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgKGxpa2VseSBkb3VibGUtZnJlZXMgb3IgdXNlLWFmdGVyLWZyZWVzKS4gSXQgYXZvaWRzIGNyZWF0aW5nIGludGVybWVkaWF0ZSBjbG9uZXMgb2YgZXhwcmVzc2lvbnMgd2hlbiBhZGRpbmcgZWxlbWVudHMgdG8gYSBzZXQgb3IgaW5pdGlhbGl6aW5nIGEgZHluc2V0LCBpbnN0ZWFkIGNvcHlpbmcgcG9pbnRlcnMgYW5kIHVzaW5nIGEgbmV3IGBvdmVycmlkZV9leHByc2AgZmxhZyB0byB0cmFjayBvd25lcnNoaXAgYW5kIGRldGVybWluZSBpZiB0aGUgZXhwcmVzc2lvbnMgc2hvdWxkIGJlIGRlc3Ryb3llZC4gSXQgYWxzbyBzZXRzIGEgYGRlYWRgIGZsYWcgb24gZGVsZXRlZCBzZXRzIGR1cmluZyBjb21taXQgdXBkYXRlcy4gXG5cblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBvYmplY3QgbGlmZWN5Y2xlIGJ1Z3MgKFVBRiwgZG91YmxlLWZyZWUpIHdoaWNoIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIG1lbW9yeSBmb3IgdGhlIHNldCBlbGVtZW50cyB0aGVtc2VsdmVzIGNvbnRpbnVlcyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgKGluIGBuZnRfc2V0X2VsZW1faW5pdGApLCBlbnN1cmluZyBhbGwgZmllbGRzIGFuZCBwYWRkaW5nIGFyZSBmdWxseSB6ZXJvZWQuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbmZfdGFibGVzIGxvZ2ljIGZvciBoYW5kbGluZyBzZXQgZWxlbWVudCBleHByZXNzaW9ucyBhbmQgZHluYW1pYyBzZXRzLCBzcGVjaWZpY2FsbHkgY2hhbmdpbmcgaG93IGV4cHJlc3Npb25zIGFyZSBjbG9uZWQgYW5kIGRlc3Ryb3llZC4gSXQgYWxzbyBtb2RpZmllcyB0aGUgY29tbWl0IHBoYXNlIGZvciBzZXQgZGVsZXRpb24uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0gcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluaywgbWFraW5nIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM4NzdhMjg4MDRiMzY2YzI1YjkyOWYzZGExNWNmN2VkZGEzNjMwY2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMjo0MDo0MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcbmluZGV4IDIzOGY2ZWNiOTBlOTkuLjlkNTk3NDgyMzYzZDkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuQEAgLTg3MCw4ICYjNDM7ODcwLDYgQEAgc3RydWN0IG5mdF9lbGVtX3ByaXYgKm5mdF9zZXRfZWxlbV9pbml0KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXHRcdFx0XHRcdGNvbnN0IHUzMiAqa2V5LCBjb25zdCB1MzIgKmtleV9lbmQsXG4gXHRcdFx0XHRcdGNvbnN0IHUzMiAqZGF0YSxcbiBcdFx0XHRcdFx0dTY0IHRpbWVvdXQsIHU2NCBleHBpcmF0aW9uLCBnZnBfdCBnZnApO1xuLWludCBuZnRfc2V0X2VsZW1fZXhwcl9jbG9uZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuLVx0XHRcdCAgICBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHJfYXJyYXlbXSk7XG4gdm9pZCBuZnRfc2V0X2VsZW1fZXhwcl9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfc2V0X2VsZW1fZXhwciAqZWxlbV9leHByKTtcbiB2b2lkIG5mdF9zZXRfZWxlbV9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuaW5kZXggYzExMmVjYzRmY2EzMi4uMzg0NTA1ZjY4MGRlZiAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuQEAgLTY5MjEsMzkgJiM0Mzs2OTIxLDExIEBAIHN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdG5mX3RhYmxlc19zZXRfZWxlbV9kZXN0cm95KGN0eCwgdGUtXHUwMDNlc2V0LCB0ZS1cdTAwM2VlbGVtc1tpXS5wcml2KTtcbiB9XG4gXG4taW50IG5mdF9zZXRfZWxlbV9leHByX2Nsb25lKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tXHRcdFx0ICAgIHN0cnVjdCBuZnRfZXhwciAqZXhwcl9hcnJheVtdKVxuLXtcbi1cdHN0cnVjdCBuZnRfZXhwciAqZXhwcjtcbi1cdGludCBlcnIsIGksIGs7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzZXQtXHUwMDNlbnVtX2V4cHJzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRleHByID0ga3phbGxvYyhzZXQtXHUwMDNlZXhwcnNbaV0tXHUwMDNlb3BzLVx1MDAzZXNpemUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tXHRcdGlmICghZXhwcilcbi1cdFx0XHRnb3RvIGVycl9leHByO1xuLVxuLVx0XHRlcnIgPSBuZnRfZXhwcl9jbG9uZShleHByLCBzZXQtXHUwMDNlZXhwcnNbaV0sIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4tXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbi1cdFx0XHRrZnJlZShleHByKTtcbi1cdFx0XHRnb3RvIGVycl9leHByO1xuLVx0XHR9XG4tXHRcdGV4cHJfYXJyYXlbaV0gPSBleHByO1xuLVx0fVxuLVxuLVx0cmV0dXJuIDA7XG4tXG4tZXJyX2V4cHI6XG4tXHRmb3IgKGsgPSBpIC0gMTsgayBcdTAwM2U9IDA7IGstLSlcbi1cdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlba10pO1xuLVxuLVx0cmV0dXJuIC1FTk9NRU07XG4tfVxuLVxuIHN0YXRpYyBpbnQgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLFxuIFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHJfYXJyYXlbXSxcbi1cdFx0XHRcdCAgIHUzMiBudW1fZXhwcnMpXG4mIzQzO1x0XHRcdFx0ICAgdTMyIG51bV9leHBycywgYm9vbCBvdmVycmlkZV9leHBycylcbiB7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIgKmVsZW1fZXhwciA9IG5mdF9zZXRfZXh0X2V4cHIoZXh0KTtcbiBcdHUzMiBsZW4gPSBzaXplb2Yoc3RydWN0IG5mdF9zZXRfZWxlbV9leHByKTtcbkBAIC02OTc2LDcgJiM0Mzs2OTQ4LDggQEAgc3RhdGljIGludCBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0XHRcdGdvdG8gZXJyX2VsZW1fZXhwcl9zZXR1cDtcbiBcbiBcdFx0ZWxlbV9leHByLVx1MDAzZXNpemUgJiM0Mzs9IGV4cHJfYXJyYXlbaV0tXHUwMDNlb3BzLVx1MDAzZXNpemU7XG4tXHRcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTtcbiYjNDM7XHRcdGlmIChvdmVycmlkZV9leHBycylcbiYjNDM7XHRcdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pO1xuIFx0XHRleHByX2FycmF5W2ldID0gTlVMTDtcbiBcdH1cbiBcbkBAIC02OTg0LDcgJiM0Mzs2OTU3LDkgQEAgc3RhdGljIGludCBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFxuIGVycl9lbGVtX2V4cHJfc2V0dXA6XG4gXHRmb3IgKDsgaSBcdTAwM2MgbnVtX2V4cHJzOyBpJiM0MzsmIzQzOykge1xuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XG4mIzQzO1x0XHRpZiAob3ZlcnJpZGVfZXhwcnMpXG4mIzQzO1x0XHRcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTtcbiYjNDM7XG4gXHRcdGV4cHJfYXJyYXlbaV0gPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTcyODAsNiAmIzQzOzcyNTUsNyBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbiBcdHN0cnVjdCBuZnRfc2V0X2JpbmRpbmcgKmJpbmRpbmc7XG4gXHRzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2O1xuIFx0c3RydWN0IG5mdF9vYmplY3QgKm9iaiA9IE5VTEw7XG4mIzQzO1x0Ym9vbCBvdmVycmlkZV9leHBycyA9IGZhbHNlO1xuIFx0c3RydWN0IG5mdF91c2VyZGF0YSAqdWRhdGE7XG4gXHRzdHJ1Y3QgbmZ0X2RhdGFfZGVzYyBkZXNjO1xuIFx0ZW51bSBuZnRfcmVnaXN0ZXJzIGRyZWc7XG5AQCAtNzM4NSw2ICYjNDM7NzM2MSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFxuIFx0XHRleHByX2FycmF5WzBdID0gZXhwcjtcbiBcdFx0bnVtX2V4cHJzID0gMTtcbiYjNDM7XHRcdG92ZXJyaWRlX2V4cHJzID0gdHJ1ZTtcbiBcbiBcdFx0aWYgKHNldC1cdTAwM2VudW1fZXhwcnMgXHUwMDI2XHUwMDI2IHNldC1cdTAwM2VleHByc1swXS1cdTAwM2VvcHMgIT0gZXhwci1cdTAwM2VvcHMpIHtcbiBcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbkBAIC03NDEzLDYgJiM0Mzs3MzkwLDcgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXHRcdFx0fVxuIFx0XHRcdGV4cHJfYXJyYXlbaV0gPSBleHByO1xuIFx0XHRcdG51bV9leHBycyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRcdG92ZXJyaWRlX2V4cHJzID0gdHJ1ZTtcbiBcbiBcdFx0XHRpZiAoc2V0LVx1MDAzZW51bV9leHBycyBcdTAwMjZcdTAwMjYgZXhwci1cdTAwM2VvcHMgIT0gc2V0LVx1MDAzZWV4cHJzW2ldLVx1MDAzZW9wcykge1xuIFx0XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG5AQCAtNzQyNiw5ICYjNDM7NzQwNCw4IEBAIHN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKHNldC1cdTAwM2VudW1fZXhwcnMgXHUwMDNlIDAgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICEoZmxhZ3MgXHUwMDI2IE5GVF9TRVRfRUxFTV9JTlRFUlZBTF9FTkQpKSB7XG4tXHRcdGVyciA9IG5mdF9zZXRfZWxlbV9leHByX2Nsb25lKGN0eCwgc2V0LCBleHByX2FycmF5KTtcbi1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIGVycl9zZXRfZWxlbV9leHByX2Nsb25lO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2V0LVx1MDAzZW51bV9leHByczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdGV4cHJfYXJyYXlbaV0gPSBzZXQtXHUwMDNlZXhwcnNbaV07XG4gXG4gXHRcdG51bV9leHBycyA9IHNldC1cdTAwM2VudW1fZXhwcnM7XG4gXHR9XG5AQCAtNzU2Nyw3ICYjNDM7NzU0NCw4IEBAIHN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFx0XHR1ZGF0YS1cdTAwM2VsZW4gPSB1bGVuIC0gMTtcbiBcdFx0bmxhX21lbWNweShcdTAwMjZ1ZGF0YS1cdTAwM2VkYXRhLCBubGFbTkZUQV9TRVRfRUxFTV9VU0VSREFUQV0sIHVsZW4pO1xuIFx0fVxuLVx0ZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoY3R4LCBcdTAwMjZ0bXBsLCBleHQsIGV4cHJfYXJyYXksIG51bV9leHBycyk7XG4mIzQzO1x0ZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoY3R4LCBcdTAwMjZ0bXBsLCBleHQsIGV4cHJfYXJyYXksIG51bV9leHBycyxcbiYjNDM7XHRcdFx0XHQgICAgICBvdmVycmlkZV9leHBycyk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9lbGVtX2ZyZWU7XG4gXG5AQCAtNzY3NSw5ICYjNDM7NzY1MywxMSBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbiBlcnJfcGFyc2Vfa2V5OlxuIFx0bmZ0X2RhdGFfcmVsZWFzZShcdTAwMjZlbGVtLmtleS52YWwsIE5GVF9EQVRBX1ZBTFVFKTtcbiBlcnJfc2V0X2VsZW1fZXhwcjpcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9leHBycyBcdTAwMjZcdTAwMjYgZXhwcl9hcnJheVtpXTsgaSYjNDM7JiM0MzspXG4tXHRcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTtcbi1lcnJfc2V0X2VsZW1fZXhwcl9jbG9uZTpcbiYjNDM7XHRpZiAob3ZlcnJpZGVfZXhwcnMpIHtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9leHBycyBcdTAwMjZcdTAwMjYgZXhwcl9hcnJheVtpXTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTA4OTQsNiAmIzQzOzEwODc0LDEwIEBAIHN0YXRpYyB2b2lkIG5mdF9zZXRfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0XHRuZnRfY3R4X3VwZGF0ZShjdHgsIHRyYW5zKTtcbiBcbiBcdFx0c3dpdGNoICh0cmFucy1cdTAwM2Vtc2dfdHlwZSkge1xuJiM0MztcdFx0Y2FzZSBORlRfTVNHX0RFTFNFVDpcbiYjNDM7XHRcdGNhc2UgTkZUX01TR19ERVNUUk9ZU0VUOlxuJiM0MztcdFx0XHRuZnRfdHJhbnNfc2V0KHRyYW5zKS1cdTAwM2VkZWFkID0gMTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGNhc2UgTkZUX01TR19ERUxTRVRFTEVNOlxuIFx0XHRcdHRlID0gbmZ0X3RyYW5zX2NvbnRhaW5lcl9lbGVtKHRyYW5zKTtcbiBcdFx0XHRpZiAoIXRlLVx1MDAzZXNldC1cdTAwM2VvcHMtXHUwMDNlY29tbWl0KVxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmNcbmluZGV4IGVlOWQzZTdiMWVjZjEuLjgzZTU2YjFhYTg1ODUgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmNcbkBAIC0xOSw3ICYjNDM7MTksOCBAQCBzdHJ1Y3QgbmZ0X2R5bnNldCB7XG4gXHR1OFx0XHRcdFx0c3JlZ19rZXk7XG4gXHR1OFx0XHRcdFx0c3JlZ19kYXRhO1xuIFx0Ym9vbFx0XHRcdFx0aW52ZXJ0O1xuLVx0Ym9vbFx0XHRcdFx0ZXhwcjtcbiYjNDM7XHRib29sXHRcdFx0XHRleHByOjEsXG4mIzQzO1x0XHRcdFx0XHRvdmVycmlkZV9leHByczoxO1xuIFx0dThcdFx0XHRcdG51bV9leHBycztcbiBcdHU2NFx0XHRcdFx0dGltZW91dDtcbiBcdHN0cnVjdCBuZnRfZXhwclx0XHRcdCpleHByX2FycmF5W05GVF9TRVRfRVhQUl9NQVhdO1xuQEAgLTI1Nyw2ICYjNDM7MjU4LDcgQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcbiBcdFx0cHJpdi1cdTAwM2VudW1fZXhwcnMmIzQzOyYjNDM7O1xuIFx0XHRwcml2LVx1MDAzZWV4cHJfYXJyYXlbMF0gPSBkeW5zZXRfZXhwcjtcbiYjNDM7XHRcdHByaXYtXHUwMDNlb3ZlcnJpZGVfZXhwcnMgPSB0cnVlO1xuIFxuIFx0XHRpZiAoc2V0LVx1MDAzZW51bV9leHBycyBcdTAwM2UgMSB8fFxuIFx0XHQgICAgKHNldC1cdTAwM2VudW1fZXhwcnMgPT0gMSBcdTAwMjZcdTAwMjZcbkBAIC0yODksNiAmIzQzOzI5MSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2R5bnNldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0fVxuIFx0XHRcdHByaXYtXHUwMDNlZXhwcl9hcnJheVtpXSA9IGR5bnNldF9leHByO1xuIFx0XHRcdHByaXYtXHUwMDNlbnVtX2V4cHJzJiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VvdmVycmlkZV9leHBycyA9IHRydWU7XG4gXG4gXHRcdFx0aWYgKHNldC1cdTAwM2VudW1fZXhwcnMpIHtcbiBcdFx0XHRcdGlmIChpIFx1MDAzZT0gc2V0LVx1MDAzZW51bV9leHBycykge1xuQEAgLTMwNyw5ICYjNDM7MzEwLDggQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0XHRnb3RvIGVycl9leHByX2ZyZWU7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoc2V0LVx1MDAzZW51bV9leHBycyBcdTAwM2UgMCkge1xuLVx0XHRlcnIgPSBuZnRfc2V0X2VsZW1fZXhwcl9jbG9uZShjdHgsIHNldCwgcHJpdi1cdTAwM2VleHByX2FycmF5KTtcbi1cdFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2V0LVx1MDAzZW51bV9leHByczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlZXhwcl9hcnJheVtpXSA9IHNldC1cdTAwM2VleHByc1tpXTtcbiBcbiBcdFx0cHJpdi1cdTAwM2VudW1fZXhwcnMgPSBzZXQtXHUwMDNlbnVtX2V4cHJzO1xuIFx0fVxuQEAgLTMzOSw4ICYjNDM7MzQxLDEwIEBAIHN0YXRpYyBpbnQgbmZ0X2R5bnNldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRyZXR1cm4gMDtcbiBcbiBlcnJfZXhwcl9mcmVlOlxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJpdi1cdTAwM2VudW1fZXhwcnM7IGkmIzQzOyYjNDM7KVxuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgcHJpdi1cdTAwM2VleHByX2FycmF5W2ldKTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VvdmVycmlkZV9leHBycykge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJpdi1cdTAwM2VudW1fZXhwcnM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgcHJpdi1cdTAwM2VleHByX2FycmF5W2ldKTtcbiYjNDM7XHR9XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0zNjcsOSAmIzQzOzM3MSwxMCBAQCBzdGF0aWMgdm9pZCBuZnRfZHluc2V0X2Rlc3Ryb3koY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdHN0cnVjdCBuZnRfZHluc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJpdi1cdTAwM2VudW1fZXhwcnM7IGkmIzQzOyYjNDM7KVxuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgcHJpdi1cdTAwM2VleHByX2FycmF5W2ldKTtcbi1cbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VvdmVycmlkZV9leHBycykge1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJpdi1cdTAwM2VudW1fZXhwcnM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgcHJpdi1cdTAwM2VleHByX2FycmF5W2ldKTtcbiYjNDM7XHR9XG4gXHRuZl90YWJsZXNfZGVzdHJveV9zZXQoY3R4LCBwcml2LVx1MDAzZXNldCk7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl90YWJsZXNfbmV3c2V0ZWxlbSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3c2V0JiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19kZWxzZXQmIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX2NvbW1pdCYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3cnVsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5mX3RhYmxlcyBsb2dpYyBmb3IgaGFuZGxpbmcgc2V0IGVsZW1lbnQgZXhwcmVzc2lvbnMgYW5kIGR5bmFtaWMgc2V0cywgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBleHByZXNzaW9ucyBhcmUgY2xvbmVkIGFuZCBkZXN0cm95ZWQuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvbW1pdCBwaGFzZSBmb3Igc2V0IGRlbGV0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmssIG1ha2luZyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzODc3YTI4ODA0YjM2NmMyNWI5MjlmM2RhMTVjZjdlZGRhMzYzMGNmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMTI6NDA6NDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgKaW5kZXggMjM4ZjZlY2I5MGU5OS4uOWQ1OTc0ODIzNjNkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaApAQCAtODcwLDggJiM0Mzs4NzAsNiBAQCBzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqbmZ0X3NldF9lbGVtX2luaXQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCwKIAkJCQkJY29uc3QgdTMyICprZXksIGNvbnN0IHUzMiAqa2V5X2VuZCwKIAkJCQkJY29uc3QgdTMyICpkYXRhLAogCQkJCQl1NjQgdGltZW91dCwgdTY0IGV4cGlyYXRpb24sIGdmcF90IGdmcCk7Ci1pbnQgbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCwKLQkJCSAgICBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHJfYXJyYXlbXSk7CiB2b2lkIG5mdF9zZXRfZWxlbV9leHByX2Rlc3Ryb3koY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAkJCSAgICAgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIgKmVsZW1fZXhwcik7CiB2b2lkIG5mdF9zZXRfZWxlbV9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCmluZGV4IGMxMTJlY2M0ZmNhMzIuLjM4NDUwNWY2ODBkZWYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCkBAIC02OTIxLDM5ICYjNDM7NjkyMSwxMSBAQCBzdGF0aWMgdm9pZCBuZnRfdHJhbnNfZWxlbXNfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCQluZl90YWJsZXNfc2V0X2VsZW1fZGVzdHJveShjdHgsIHRlLSZndDtzZXQsIHRlLSZndDtlbGVtc1tpXS5wcml2KTsKIH0KIAotaW50IG5mdF9zZXRfZWxlbV9leHByX2Nsb25lKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsCi0JCQkgICAgc3RydWN0IG5mdF9leHByICpleHByX2FycmF5W10pCi17Ci0Jc3RydWN0IG5mdF9leHByICpleHByOwotCWludCBlcnIsIGksIGs7Ci0KLQlmb3IgKGkgPSAwOyBpICZsdDsgc2V0LSZndDtudW1fZXhwcnM7IGkmIzQzOyYjNDM7KSB7Ci0JCWV4cHIgPSBremFsbG9jKHNldC0mZ3Q7ZXhwcnNbaV0tJmd0O29wcy0mZ3Q7c2l6ZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTsKLQkJaWYgKCFleHByKQotCQkJZ290byBlcnJfZXhwcjsKLQotCQllcnIgPSBuZnRfZXhwcl9jbG9uZShleHByLCBzZXQtJmd0O2V4cHJzW2ldLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwotCQlpZiAoZXJyICZsdDsgMCkgewotCQkJa2ZyZWUoZXhwcik7Ci0JCQlnb3RvIGVycl9leHByOwotCQl9Ci0JCWV4cHJfYXJyYXlbaV0gPSBleHByOwotCX0KLQotCXJldHVybiAwOwotCi1lcnJfZXhwcjoKLQlmb3IgKGsgPSBpIC0gMTsgayAmZ3Q7PSAwOyBrLS0pCi0JCW5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2tdKTsKLQotCXJldHVybiAtRU5PTUVNOwotfQotCiBzdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJCQkJICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0X3RtcGwgKnRtcGwsCiAJCQkJICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0ICpleHQsCiAJCQkJICAgc3RydWN0IG5mdF9leHByICpleHByX2FycmF5W10sCi0JCQkJICAgdTMyIG51bV9leHBycykKJiM0MzsJCQkJICAgdTMyIG51bV9leHBycywgYm9vbCBvdmVycmlkZV9leHBycykKIHsKIAlzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIgKmVsZW1fZXhwciA9IG5mdF9zZXRfZXh0X2V4cHIoZXh0KTsKIAl1MzIgbGVuID0gc2l6ZW9mKHN0cnVjdCBuZnRfc2V0X2VsZW1fZXhwcik7CkBAIC02OTc2LDcgJiM0Mzs2OTQ4LDggQEAgc3RhdGljIGludCBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCQkJZ290byBlcnJfZWxlbV9leHByX3NldHVwOwogCiAJCWVsZW1fZXhwci0mZ3Q7c2l6ZSAmIzQzOz0gZXhwcl9hcnJheVtpXS0mZ3Q7b3BzLSZndDtzaXplOwotCQluZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7CiYjNDM7CQlpZiAob3ZlcnJpZGVfZXhwcnMpCiYjNDM7CQkJbmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pOwogCQlleHByX2FycmF5W2ldID0gTlVMTDsKIAl9CiAKQEAgLTY5ODQsNyAmIzQzOzY5NTcsOSBAQCBzdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAKIGVycl9lbGVtX2V4cHJfc2V0dXA6CiAJZm9yICg7IGkgJmx0OyBudW1fZXhwcnM7IGkmIzQzOyYjNDM7KSB7Ci0JCW5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTsKJiM0MzsJCWlmIChvdmVycmlkZV9leHBycykKJiM0MzsJCQluZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7CiYjNDM7CiAJCWV4cHJfYXJyYXlbaV0gPSBOVUxMOwogCX0KIApAQCAtNzI4MCw2ICYjNDM7NzI1NSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LAogCXN0cnVjdCBuZnRfc2V0X2JpbmRpbmcgKmJpbmRpbmc7CiAJc3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdjsKIAlzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqID0gTlVMTDsKJiM0MzsJYm9vbCBvdmVycmlkZV9leHBycyA9IGZhbHNlOwogCXN0cnVjdCBuZnRfdXNlcmRhdGEgKnVkYXRhOwogCXN0cnVjdCBuZnRfZGF0YV9kZXNjIGRlc2M7CiAJZW51bSBuZnRfcmVnaXN0ZXJzIGRyZWc7CkBAIC03Mzg1LDYgJiM0Mzs3MzYxLDcgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsCiAKIAkJZXhwcl9hcnJheVswXSA9IGV4cHI7CiAJCW51bV9leHBycyA9IDE7CiYjNDM7CQlvdmVycmlkZV9leHBycyA9IHRydWU7CiAKIAkJaWYgKHNldC0mZ3Q7bnVtX2V4cHJzICZhbXA7JmFtcDsgc2V0LSZndDtleHByc1swXS0mZ3Q7b3BzICE9IGV4cHItJmd0O29wcykgewogCQkJZXJyID0gLUVPUE5PVFNVUFA7CkBAIC03NDEzLDYgJiM0Mzs3MzkwLDcgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsCiAJCQl9CiAJCQlleHByX2FycmF5W2ldID0gZXhwcjsKIAkJCW51bV9leHBycyYjNDM7JiM0Mzs7CiYjNDM7CQkJb3ZlcnJpZGVfZXhwcnMgPSB0cnVlOwogCiAJCQlpZiAoc2V0LSZndDtudW1fZXhwcnMgJmFtcDsmYW1wOyBleHByLSZndDtvcHMgIT0gc2V0LSZndDtleHByc1tpXS0mZ3Q7b3BzKSB7CiAJCQkJZXJyID0gLUVPUE5PVFNVUFA7CkBAIC03NDI2LDkgJiM0Mzs3NDA0LDggQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsCiAJCX0KIAl9IGVsc2UgaWYgKHNldC0mZ3Q7bnVtX2V4cHJzICZndDsgMCAmYW1wOyZhbXA7CiAJCSAgICEoZmxhZ3MgJmFtcDsgTkZUX1NFVF9FTEVNX0lOVEVSVkFMX0VORCkpIHsKLQkJZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY3R4LCBzZXQsIGV4cHJfYXJyYXkpOwotCQlpZiAoZXJyICZsdDsgMCkKLQkJCWdvdG8gZXJyX3NldF9lbGVtX2V4cHJfY2xvbmU7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgc2V0LSZndDtudW1fZXhwcnM7IGkmIzQzOyYjNDM7KQomIzQzOwkJCWV4cHJfYXJyYXlbaV0gPSBzZXQtJmd0O2V4cHJzW2ldOwogCiAJCW51bV9leHBycyA9IHNldC0mZ3Q7bnVtX2V4cHJzOwogCX0KQEAgLTc1NjcsNyAmIzQzOzc1NDQsOCBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCwKIAkJdWRhdGEtJmd0O2xlbiA9IHVsZW4gLSAxOwogCQlubGFfbWVtY3B5KCZhbXA7dWRhdGEtJmd0O2RhdGEsIG5sYVtORlRBX1NFVF9FTEVNX1VTRVJEQVRBXSwgdWxlbik7CiAJfQotCWVyciA9IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKGN0eCwgJmFtcDt0bXBsLCBleHQsIGV4cHJfYXJyYXksIG51bV9leHBycyk7CiYjNDM7CWVyciA9IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKGN0eCwgJmFtcDt0bXBsLCBleHQsIGV4cHJfYXJyYXksIG51bV9leHBycywKJiM0MzsJCQkJICAgICAgb3ZlcnJpZGVfZXhwcnMpOwogCWlmIChlcnIgJmx0OyAwKQogCQlnb3RvIGVycl9lbGVtX2ZyZWU7CiAKQEAgLTc2NzUsOSAmIzQzOzc2NTMsMTEgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsCiBlcnJfcGFyc2Vfa2V5OgogCW5mdF9kYXRhX3JlbGVhc2UoJmFtcDtlbGVtLmtleS52YWwsIE5GVF9EQVRBX1ZBTFVFKTsKIGVycl9zZXRfZWxlbV9leHByOgotCWZvciAoaSA9IDA7IGkgJmx0OyBudW1fZXhwcnMgJmFtcDsmYW1wOyBleHByX2FycmF5W2ldOyBpJiM0MzsmIzQzOykKLQkJbmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pOwotZXJyX3NldF9lbGVtX2V4cHJfY2xvbmU6CiYjNDM7CWlmIChvdmVycmlkZV9leHBycykgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9leHBycyAmYW1wOyZhbXA7IGV4cHJfYXJyYXlbaV07IGkmIzQzOyYjNDM7KQomIzQzOwkJCW5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTsKJiM0MzsJfQomIzQzOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTEwODk0LDYgJiM0MzsxMDg3NCwxMCBAQCBzdGF0aWMgdm9pZCBuZnRfc2V0X2NvbW1pdF91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwKIAkJbmZ0X2N0eF91cGRhdGUoY3R4LCB0cmFucyk7CiAKIAkJc3dpdGNoICh0cmFucy0mZ3Q7bXNnX3R5cGUpIHsKJiM0MzsJCWNhc2UgTkZUX01TR19ERUxTRVQ6CiYjNDM7CQljYXNlIE5GVF9NU0dfREVTVFJPWVNFVDoKJiM0MzsJCQluZnRfdHJhbnNfc2V0KHRyYW5zKS0mZ3Q7ZGVhZCA9IDE7CiYjNDM7CQkJYnJlYWs7CiAJCWNhc2UgTkZUX01TR19ERUxTRVRFTEVNOgogCQkJdGUgPSBuZnRfdHJhbnNfY29udGFpbmVyX2VsZW0odHJhbnMpOwogCQkJaWYgKCF0ZS0mZ3Q7c2V0LSZndDtvcHMtJmd0O2NvbW1pdCkKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMKaW5kZXggZWU5ZDNlN2IxZWNmMS4uODNlNTZiMWFhODU4NSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMKQEAgLTE5LDcgJiM0MzsxOSw4IEBAIHN0cnVjdCBuZnRfZHluc2V0IHsKIAl1OAkJCQlzcmVnX2tleTsKIAl1OAkJCQlzcmVnX2RhdGE7CiAJYm9vbAkJCQlpbnZlcnQ7Ci0JYm9vbAkJCQlleHByOwomIzQzOwlib29sCQkJCWV4cHI6MSwKJiM0MzsJCQkJCW92ZXJyaWRlX2V4cHJzOjE7CiAJdTgJCQkJbnVtX2V4cHJzOwogCXU2NAkJCQl0aW1lb3V0OwogCXN0cnVjdCBuZnRfZXhwcgkJCSpleHByX2FycmF5W05GVF9TRVRfRVhQUl9NQVhdOwpAQCAtMjU3LDYgJiM0MzsyNTgsNyBAQCBzdGF0aWMgaW50IG5mdF9keW5zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCiAJCXByaXYtJmd0O251bV9leHBycyYjNDM7JiM0Mzs7CiAJCXByaXYtJmd0O2V4cHJfYXJyYXlbMF0gPSBkeW5zZXRfZXhwcjsKJiM0MzsJCXByaXYtJmd0O292ZXJyaWRlX2V4cHJzID0gdHJ1ZTsKIAogCQlpZiAoc2V0LSZndDtudW1fZXhwcnMgJmd0OyAxIHx8CiAJCSAgICAoc2V0LSZndDtudW1fZXhwcnMgPT0gMSAmYW1wOyZhbXA7CkBAIC0yODksNiAmIzQzOzI5MSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2R5bnNldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJCQl9CiAJCQlwcml2LSZndDtleHByX2FycmF5W2ldID0gZHluc2V0X2V4cHI7CiAJCQlwcml2LSZndDtudW1fZXhwcnMmIzQzOyYjNDM7OwomIzQzOwkJCXByaXYtJmd0O292ZXJyaWRlX2V4cHJzID0gdHJ1ZTsKIAogCQkJaWYgKHNldC0mZ3Q7bnVtX2V4cHJzKSB7CiAJCQkJaWYgKGkgJmd0Oz0gc2V0LSZndDtudW1fZXhwcnMpIHsKQEAgLTMwNyw5ICYjNDM7MzEwLDggQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAkJCWdvdG8gZXJyX2V4cHJfZnJlZTsKIAkJfQogCX0gZWxzZSBpZiAoc2V0LSZndDtudW1fZXhwcnMgJmd0OyAwKSB7Ci0JCWVyciA9IG5mdF9zZXRfZWxlbV9leHByX2Nsb25lKGN0eCwgc2V0LCBwcml2LSZndDtleHByX2FycmF5KTsKLQkJaWYgKGVyciAmbHQ7IDApCi0JCQlyZXR1cm4gZXJyOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHNldC0mZ3Q7bnVtX2V4cHJzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQlwcml2LSZndDtleHByX2FycmF5W2ldID0gc2V0LSZndDtleHByc1tpXTsKIAogCQlwcml2LSZndDtudW1fZXhwcnMgPSBzZXQtJmd0O251bV9leHByczsKIAl9CkBAIC0zMzksOCAmIzQzOzM0MSwxMCBAQCBzdGF0aWMgaW50IG5mdF9keW5zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCXJldHVybiAwOwogCiBlcnJfZXhwcl9mcmVlOgotCWZvciAoaSA9IDA7IGkgJmx0OyBwcml2LSZndDtudW1fZXhwcnM7IGkmIzQzOyYjNDM7KQotCQluZnRfZXhwcl9kZXN0cm95KGN0eCwgcHJpdi0mZ3Q7ZXhwcl9hcnJheVtpXSk7CiYjNDM7CWlmIChwcml2LSZndDtvdmVycmlkZV9leHBycykgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHByaXYtJmd0O251bV9leHByczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJbmZ0X2V4cHJfZGVzdHJveShjdHgsIHByaXYtJmd0O2V4cHJfYXJyYXlbaV0pOwomIzQzOwl9CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMzY3LDkgJiM0MzszNzEsMTAgQEAgc3RhdGljIHZvaWQgbmZ0X2R5bnNldF9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJc3RydWN0IG5mdF9keW5zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IHByaXYtJmd0O251bV9leHByczsgaSYjNDM7JiM0MzspCi0JCW5mdF9leHByX2Rlc3Ryb3koY3R4LCBwcml2LSZndDtleHByX2FycmF5W2ldKTsKLQomIzQzOwlpZiAocHJpdi0mZ3Q7b3ZlcnJpZGVfZXhwcnMpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBwcml2LSZndDtudW1fZXhwcnM7IGkmIzQzOyYjNDM7KQomIzQzOwkJCW5mdF9leHByX2Rlc3Ryb3koY3R4LCBwcml2LSZndDtleHByX2FycmF5W2ldKTsKJiM0MzsJfQogCW5mX3RhYmxlc19kZXN0cm95X3NldChjdHgsIHByaXYtJmd0O3NldCk7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg4NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE5ldGZpbHRlciBuZl90YWJsZXMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0b3VjaGluZyBjb3JlIG5mX3RhYmxlcyBjb2RlOiBgbmZfdGFibGVzX2FwaS5jYCwgYG5mX3RhYmxlcy5oYCwgYW5kIGBuZnRfZHluc2V0LmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBleHByZXNzaW9uIGNsb25pbmcgYW5kIHNldHVwIGluIGBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cGAgYW5kIGBuZnRfZHluc2V0X2luaXRgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGRpdGNoaW5nIGBuZnRfc2V0X2VsZW1fZXhwcl9jbG9uZWAgYW5kIGFyZSBub3cgcmVseWluZyBvbiB0aGlzIGBvdmVycmlkZV9leHByc2AgYm9vbGVhbiBmb3IgZXhwcmVzc2lvbiBkZXN0cnVjdGlvbiwgd2hpY2ggaXMgYW4gaW50ZXJlc3Rpbmcgc2hpZnQgaW4gc3RyYXRlZ3kuIEkgc2VlIHRoZXkgYWxzbyBhZGRlZCBhIGBkZWFkYCBmbGFnIGNoZWNrIGluIGBuZnRfc2V0X2NvbW1pdF91cGRhdGVgLCBzcGVjaWZpY2FsbHkgZm9yIGBORlRfTVNHX0RFTFNFVGAgYW5kIGBORlRfTVNHX0RFU1RST1lTRVRgLgoKVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2Ug4oCTIGEgcHJldHR5IHNpZ25pZmljYW50IG9uZSBhdCB0aGF0IOKAkyBpbXBhY3RpbmcgaG93IHNldHMgYW5kLCBlc3BlY2lhbGx5LCBkeW5hbWljIHNldHMgbWFuYWdlIGV4cHJlc3Npb25zLiBUaGlzIGlzIGdvb2QgdG8ga25vdyBmcm9tIGEgc2VjdXJpdHkgc3RhbmRwb2ludC4gSXMgaXQgcmVhY2hhYmxlPyBBYnNvbHV0ZWx5LCBuZl90YWJsZXMgaXMgZXhwb3NlZCB0aHJvdWdoIG5ldGxpbmssIHNvIGl0JiMzOTtzIGRpcmVjdGx5IGFjY2Vzc2libGUgZnJvbSB1c2VyIHNwYWNlLCBhbmQgdGh1cyBvZiBpbnRlcmVzdC4gSXMgaXQgd29ydGggZnV6emluZz8gV2l0aG91dCBhIGRvdWJ0LiBOZl90YWJsZXMgaXMgYSBrbm93biBhdHRhY2sgc3VyZmFjZSwgYW5kIHRoaXMgY2hhbmdlIGNvdWxkIGludHJvZHVjZSBuZXcgdnVsbmVyYWJpbGl0aWVzIG9yIGV4cG9zZSBleGlzdGluZyBvbmVzLgoKU28sIHdoZXJlIGRvIEkgZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzPyBUaGUga2V5IGZ1bmN0aW9ucyBoZXJlIGFyZSBwcmV0dHkgY2xlYXI6IGBuZnRfYWRkX3NldF9lbGVtYCwgYG5mdF9keW5zZXRfaW5pdGAsIGFuZCBgbmZ0X3NldF9jb21taXRfdXBkYXRlYC4gTGV0IG1lIGNoZWNrIGlmIGBuZnRfYWRkX3NldF9lbGVtYCBpcyBzdGF0aWM7IG9rYXksIHllcywgaXQgaXMuIFNpbmNlIGl0JiMzOTtzIHN0YXRpYywgSSBzaG91bGQgY2hlY2sgd2hvIGNhbGxzIGl0IC0gYG5mX3RhYmxlc19uZXdzZXRlbGVtYCBkb2VzLiBJIHNob3VsZCBwcm9iYWJseSBkaWcgaW50byBgbmZfdGFibGVzX2FwaS5jYCBhbmQgZmlndXJlIG91dCB3aG8gZWxzZSBpcyBjYWxsaW5nIGBuZnRfYWRkX3NldF9lbGVtYCwganVzdCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhlIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9hZGRfc2V0X2VsZW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MjI0PXN0YXRpYyB1MzIgbmZ0X3NldF9tYXhzaXplKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzI0NC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcyNDU6c3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MjQ2LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLCB1MzIgbmxtc2dfZmxhZ3MpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzY2ND1zdGF0aWMgaW50IG5mX3RhYmxlc19uZXdzZXRlbGVtKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzcwMS1cdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgbmxhW05GVEFfU0VUX0VMRU1fTElTVF9FTEVNRU5UU10sIHJlbSkge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzcwMjpcdFx0ZXJyID0gbmZ0X2FkZF9zZXRfZWxlbShcdTAwMjZjdHgsIHNldCwgYXR0ciwgaW5mby1cdTAwM2VubGgtXHUwMDNlbmxtc2dfZmxhZ3MpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzcwMy1cdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNDYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIER5bmFtaWNzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGBuZl90YWJsZXNgIHNpZGUgb2YgdGhpbmdzLCBzcGVjaWZpY2FsbHkgdGhlIGR5bmFtaWMgc2V0IGZ1bmN0aW9uYWxpdHkuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAgYXMgdGhlIGxpa2VseSBlbnRyeSBwb2ludCBmb3IgaGFuZGxpbmcgbmV3IHNldCBlbGVtZW50cy4gVGhhdCBmZWVscyByaWdodCwgYnV0Li4ud2FpdCBhIG1pbnV0ZSwgd2hhdCBhYm91dCBgbmZ0X2R5bnNldF9pbml0YD8gSSBzZWVtIHRvIHJlY2FsbCB0aGF0IGJlaW5nIHByZXR0eSBjcml0aWNhbCwgYnV0IGl0JiMzOTtzIGRlZmluZWQgYXMgYHN0YXRpY2AsIHNvIGhvdyBpcyBpdCBldmVuIGdldHRpbmcgY2FsbGVkPwoKQWxyaWdodCwgdGltZSB0byBzaGlmdCBnZWFycyBhbmQgZHJpbGwgZG93biBvbiBgbmZ0X2R5bnNldC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBuZnRfZHluc2V0X2luaXRgIGlzIGludm9rZWQsIG9yIGhvdyB0aGUgZHluYW1pYyBzZXQgZnVuY3Rpb25hbGl0eSBpcyByZWdpc3RlcmVkIHdpdGhpbiB0aGUgbGFyZ2VyIG5ldGZpbHRlciBmcmFtZXdvcmsuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxlcnMgb2YgdGhhdCBmdW5jdGlvbiwgb3IgbG9vayBmb3IgY2x1ZXMgYWJvdXQgaG93IGl04oCZcyBiZWluZyBsaW5rZWQgdG8gdGhlIHJlc3Qgb2YgdGhlIE5ldGZpbHRlciBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bSB0aGlua2luZyBhIHRob3JvdWdoIGV4YW1pbmF0aW9uIG9mIGBuZnRfZHluc2V0LmNgIGlzIHRoZSBrZXkgbmV4dCBzdGVwIHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZHluYW1pYyBzZXQgaW5pdGlhbGl6YXRpb24gYW5kIG1hbmFnZW1lbnQgaXMgb3JnYW5pemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9keW5zZXRfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jPTE1OD1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmZ0X2R5bnNldF9wb2xpY3lbTkZUQV9EWU5TRVRfTUFYICYjNDM7IDFdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jLTE3MS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jOjE3MjpzdGF0aWMgaW50IG5mdF9keW5zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtMTczLVx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYz00Mjk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2R5bnNldF9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtNDMyLVx0LmV2YWxcdFx0PSBuZnRfZHluc2V0X2V2YWwsXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYzo0MzM6XHQuaW5pdFx0XHQ9IG5mdF9keW5zZXRfaW5pdCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jLTQzNC1cdC5kZXN0cm95XHQ9IG5mdF9keW5zZXRfZGVzdHJveSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjQxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIHdpdGggdGhlIGJvbGRlZCBoZWFkZXIgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBOZXRmaWx0ZXIgRHluYW1pY3MqKgoKQWxyaWdodCwgc28gdGhlIGNsdWUgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSBpbnRlcmVzdGVkIGluIGlzIGluaXRpYWxpemVkIGluIGBuZnRfZHluc2V0X29wcy5pbml0YC4gVGhhdCYjMzk7cyBhIGtleSBzdGFydGluZyBwb2ludC4gRnJvbSB0aGVyZSwgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBleHByZXNzaW9uIGl0c2VsZiwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIGR5bmFtaWMgc2V0IG9wZXJhdGlvbnMsIGhhcHBlbnMgdGhyb3VnaCBgbmZ0X2V4cHJfaW5pdGAuIEdvdCBpdC4gTm93LCBnaXZlbiB0aGF0IGNvbnRleHQsIHRoZSBjcml0aWNhbCBmdW5jdGlvbiB0byBleGFtaW5lIG5leHQsIHdoaWNoIHdpbGwgZXhwb3NlIGhvdyB0aGUgZHluYW1pYyBzZXQgdXBkYXRlcyBoYXBwZW4gaXMgYG5mdF9zZXRfY29tbWl0X3VwZGF0ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyAqdGhvc2UqIGdldCBjb21taXR0ZWQuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzLCBJIHN1c3BlY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3NldF9jb21taXRfdXBkYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA4NDg9c3RhdGljIHZvaWQgbmZfdGFibGVzX2NvbW1pdF9hdWRpdF9sb2coc3RydWN0IGxpc3RfaGVhZCAqYWRsLCB1MzIgZ2VuZXJhdGlvbilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDg2Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwODYzOnN0YXRpYyB2b2lkIG5mdF9zZXRfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA4NjQtXHRcdFx0XHQgIHN0cnVjdCBuZnRhYmxlc19wZXJuZXQgKm5mdF9uZXQpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA5MTc9c3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDk5Ny1cdC8qIHN0ZXAgMi4gIE1ha2UgcnVsZXNfZ2VuX1ggdmlzaWJsZSB0byBwYWNrZXQgcGF0aCAqL1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA5OTg6XHRuZnRfc2V0X2NvbW1pdF91cGRhdGUoXHUwMDI2Y3R4LCBuZnRfbmV0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwOTk5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBOZXRmaWx0ZXIgVGFibGVzIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBzdGFydGluZyB3aXRoIGBuZl90YWJsZXNfY29tbWl0YCDigJMgdGhhdCYjMzk7cyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIHdoZXJlIGNoYW5nZXMgYXJlIGZpbmFsaXplZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIGFyb3VuZCB0aGF0IHBvaW50LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZm9sbG93IHRoZSBjb2RlIHBhdGhzIHRoYXQgbGVhZCB1cCB0byBpdC4KCkkmIzM5O3ZlIGlkZW50aWZpZWQgc29tZSBrZXkgc3ltYm9scyB0byB6ZXJvIGluIG9uOiBgbmZfdGFibGVzX25ld3NldGVsZW1gLCB3aGljaCBwcm9iYWJseSBkZWFscyB3aXRoIGFkZGluZyBlbGVtZW50cyB0byBzZXRzIChhIGNvcmUgbmV0ZmlsdGVyIGNvbmNlcHQpLCBgbmZfdGFibGVzX2NvbW1pdGAgaXRzZWxmICh0byB1bmRlcnN0YW5kIGl0cyBleGFjdCByb2xlIGluIHRoZSBwcm9jZXNzKSwgYW5kIGBuZnRfZXhwcl9pbml0YC4gT3IsIG1vcmUgZGlyZWN0bHksIEkgY291bGQgbG9vayBhdCBgbmZfdGFibGVzX25ld3J1bGVgIHNpbmNlIHRoYXQgY2FsbHMgaXQsIGluZGljYXRpbmcgcnVsZSBjcmVhdGlvbiB3aWxsIGludm9sdmUgc29tZSBleHByZXNzaW9uIGluaXRpYWxpemF0aW9uLiBVbmRlcnN0YW5kaW5nIGhvdyBleHByZXNzaW9ucyB3b3JrIGlzIGNydWNpYWwuCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHZlcmlmeSB0aGUgb3B0aW9ucyBmb3IgYG5mX3RhYmxlc2AgYW5kIGBuZnRfZHluc2V0YCBpbiB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyB3aWxsIHRlbGwgbWUgd2hhdCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBhbmQgaG93IHRoZXkgaW50ZXJhY3QsIHdoaWNoIGltcGFjdHMgdGhlIHBvdGVudGlhbCBjb2RlIHBhdGhzIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBzdHVkeWluZyB0aGUgY29ycmVjdCBjb2RlLCBhZnRlciBhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GVF9EWU5TRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NTU2CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKktjb25maWcgU2VhcmNoIGZvciBgbmZ0X2R5bnNldGAqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nLCBhbmQgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgaXMgdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgdGVybSBgbmZ0X2R5bnNldGAuIEkmIzM5O2xsIGluaXRpYXRlIGEgc2VhcmNoIGZvciB0aGF0IHN0cmluZyB3aXRoaW4gdGhlIEtjb25maWcgZmlsZXMsIHNpbmNlIHRoYXQmIzM5O3Mgd2hlcmUgbW9kdWxlIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQuIFRoaXMgaXMgbXkgZ28tdG8gYXBwcm9hY2ggd2hlbiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIGZlYXR1cmUgaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgc2hvdWxkIHF1aWNrbHkgbGVhZCBtZSB0byB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBzeW1ib2wgYW5kIGhvcGVmdWxseSBwcm92aWRlIHNvbWUgY2x1ZXMgYWJvdXQgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgb3B0aW9ucy4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfZHluc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzc2NQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkh1bnRpbmcgRG93biBUaGF0IE9iamVjdCBGaWxlKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIE15IGdvYWwgaGVyZSBpcyBjbGVhcmx5IHRvIHRyYWNrIGRvd24gd2hlcmUgYG5mdF9keW5zZXQub2AgaXMgYmVpbmcgYnVpbHQgd2l0aGluIHRoaXMgcHJvamVjdC4gS25vd2luZyB0aGF0IG9iamVjdCBmaWxlIG5hbWVzIGFyZSB0eXBpY2FsbHkgZGVmaW5lZCBpbiBhIE1ha2VmaWxlLCB0aGF0JiMzOTtzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBMZXQmIzM5O3MgZ2V0IGNyYWNraW5nIGFuZCBnbyBkaXJlY3RseSB0byB0aGUgTWFrZWZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9keW5zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODc9bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXG4tLVxubmV0L25ldGZpbHRlci9NYWtlZmlsZS04OS1cdFx0ICBuZnRfYml0d2lzZS5vIG5mdF9ieXRlb3JkZXIubyBuZnRfcGF5bG9hZC5vIG5mdF9sb29rdXAubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZTo5MDpcdFx0ICBuZnRfZHluc2V0Lm8gbmZ0X21ldGEubyBuZnRfcnQubyBuZnRfZXh0aGRyLm8gbmZ0X2xhc3QubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05MS1cdFx0ICBuZnRfY291bnRlci5vIG5mdF9vYmpyZWYubyBuZnRfaW5uZXIubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo0MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDU2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYW5kIGl0JiMzOTtzIGRlZmluaXRlbHkgcmVsYXRlZCB0byBgbmZfdGFibGVzLW9ianNgLiBUaGF0IHRlbGxzIG1lIHRoZSBjb3JlIGRlcGVuZGVuY3kgaGVyZSBpcyBvbiBgTkZfVEFCTEVTYC4gTm93LCBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgdGhhdCBgTkZfVEFCTEVTYCBpcyBjb3JyZWN0bHkgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgZG91YmxlIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoYXQgc3BlY2lmaWMgb3B0aW9uLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBiYXNlIHJlcXVpcmVtZW50IGlzIHRoZXJlIGJlZm9yZSBJIGRpZyBhbnkgZGVlcGVyLiBObyBwb2ludCBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUgaWYgdGhlIGZvdW5kYXRpb24gaXNuJiMzOTt0IHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX1RBQkxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ1NTpjb25maWcgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzI6Y29uZmlnIE5GX1RBQkxFU19JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVx0ZGVwZW5kcyBvbiBJUFY2XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00ODEtXHRib29sIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NDQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipDaGVja2luZyB0aGUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgZm9jdXMgaXMgYE5GX1RBQkxFU2AuIFRoYXQmIzM5O3MgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24uIEFsd2F5cyBnb29kIHRvIHN0YXJ0IHRoZXJlLiBMZXQgbWUganVzdCBxdWlja2x5IGNvbmZpcm0gdGhhdCYjMzk7cyB0aGUgKm9ubHkqIHJlbGV2YW50IG9uZSwganVzdCB0byBiZSB0aG9yb3VnaC4gWXVwLCBpdCBsb29rcyBsaWtlIGBORl9UQUJMRVNgIGNvdmVycyBpdC4gTm8gbmVlZCB0byBjaGFzZSBhbnkgb3RoZXIgcmFiYml0IGhvbGVzIG9uIHRoYXQgZnJvbnQuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBzeW1ib2xzLiBgbmZfdGFibGVzX25ld3NldGVsZW1gLi4uIHJpZ2h0LCB0aGF0IGhhbmRsZXMgYWRkaW5nIG5ldyBlbGVtZW50cyB0byB0aGUgc2V0LiBBbmQgYG5mX3RhYmxlc19jb21taXRgLCB0aGF0JiMzOTtzIHRoZSBjb21taXQgb3BlcmF0aW9uLi4uIHN0YW5kYXJkIHN0dWZmLiBCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBgbmZ0X2V4cHJfaW5pdGA/IEkmIzM5O20ganVzdCBxdWlja2x5IGNoZWNraW5nIG15IG1lbW9yeS4uLiBJc24mIzM5O3QgdGhhdCBhIGZ1bmN0aW9uPyBZZXMsIGl0IGlzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfZXhwcl9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzY1ND1zdGF0aWMgdm9pZCBuZl90YWJsZXNfZXhwcl9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzY2My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjM2NjQ6c3RhdGljIHN0cnVjdCBuZnRfZXhwciAqbmZ0X2V4cHJfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzY2NS1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02NzM3PXN0cnVjdCBuZnRfZXhwciAqbmZ0X3NldF9lbGVtX2V4cHJfYWxsb2MoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NzQzLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njc0NDpcdGV4cHIgPSBuZnRfZXhwcl9pbml0KGN0eCwgYXR0cik7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NzQ1LVx0aWYgKElTX0VSUihleHByKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAwNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbmZ0X2V4cHJfaW5pdGAgYW5kIGl0cyBDYWxsZXJzKioKCk9rYXksIHNvIGBuZnRfZXhwcl9pbml0YCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBtZWFucyBpdCYjMzk7cyBsaWtlbHkgaW50ZXJuYWwgdG8gYSBzcGVjaWZpYyBjb21waWxhdGlvbiB1bml0LCBhbmQgaXRzIHNjb3BlIGlzIGxpbWl0ZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBSaWdodCwgdGhlIGNvZGUgc3VnZ2VzdHMgaXQmIzM5O3MgY2FsbGVkIGJ5IGBuZnRfc2V0X2VsZW1fZXhwcl9hbGxvY2AsIGBuZl90YWJsZXNfbmV3cnVsZWAsIGFuZCBwcm9iYWJseSBvdGhlcnMuIE15IGltbWVkaWF0ZSBmb2N1cywgZ2l2ZW4gdGhlIGNvbnRleHQgSSYjMzk7bSB3b3JraW5nIGluLCBpcyBvbiB0aGUgcnVsZSBhbmQgc2V0IGVsZW1lbnQgY3JlYXRpb24gcGF0aHMuIEkmIzM5O2xsIGRyaWxsIGRvd24gc3BlY2lmaWNhbGx5IGludG8gaG93IGBuZl90YWJsZXNfbmV3cnVsZWAsIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAsIGFuZCB0aGUgY29tbWl0IGZ1bmN0aW9uIChgbmZfdGFibGVzX2NvbW1pdGApIGludGVyYWN0IHdpdGggYG5mdF9leHByX2luaXRgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIG5ldyBydWxlIGFuZCBzZXQgZWxlbWVudCBpbnN0YW50aWF0aW9uIGxpdmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl90YWJsZXNfbmV3cnVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTQxMjI9dm9pZCBuZl90YWJsZXNfcnVsZV9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfcnVsZSAqcnVsZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MTI3LVx0ICogQ2FyZWZ1bDogc29tZSBleHByZXNzaW9ucyBtaWdodCBub3QgYmUgaW5pdGlhbGl6ZWQgaW4gY2FzZSB0aGlzXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0MTI4Olx0ICogaXMgY2FsbGVkIG9uIGVycm9yIGZyb20gbmZfdGFibGVzX25ld3J1bGUoKS5cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQxMjktXHQgKi9cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MzA5PXN0YXRpYyBzdHJ1Y3QgbmZ0X3J1bGUgKm5mdF9ydWxlX2xvb2t1cF9ieWlkKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MzE0LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDMxNTpzdGF0aWMgaW50IG5mX3RhYmxlc19uZXdydWxlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MzE2LVx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5sYVtdKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTk5MzU9c3RhdGljIGNvbnN0IHN0cnVjdCBuZm5sX2NhbGxiYWNrIG5mX3RhYmxlc19jYltORlRfTVNHX01BWF0gPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTk4NC1cdFtORlRfTVNHX05FV1JVTEVdID0ge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTk4NTpcdFx0LmNhbGxcdFx0PSBuZl90YWJsZXNfbmV3cnVsZSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk5ODYtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9CQVRDSCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcyMgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTmV0ZmlsdGVyIFRhYmxlIENyZWF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIE5ldGZpbHRlciBjb2RlLCBhbmQgeWVhaCwgYG5mX3RhYmxlc19uZXdydWxlYCBkZWZpbml0ZWx5IHN0YW5kcyBvdXQgYXMgdGhlIG5ldGxpbmsgY2FsbGJhY2sgZm9yIGNyZWF0aW5nIG5ldyBydWxlcy4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0JiMzOTtzIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHRhYmxlcyB0aGVtc2VsdmVzIGFyZSBidWlsdCBhbmQgcG9wdWxhdGVkLiBNeSBuZXh0IGZvY3VzIHNob3VsZCBiZSBvbiBgbmZfdGFibGVzX25ld3NldGAgYW5kIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZnVuY3Rpb25zIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiBob3cgc2V0cyBhbmQgdGhlaXIgZWxlbWVudHMgYXJlIGRlZmluZWQsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHRhYmxlIHN0cnVjdHVyZSBhbmQgcnVsZSBhcHBsaWNhdGlvbiBwcm9jZXNzLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl90YWJsZXNfbmV3c2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NTQyNz1zdGF0aWMgdTMyIG5mdF9zZXRfa2VybmVsX3NpemUoY29uc3Qgc3RydWN0IG5mdF9zZXRfb3BzICpvcHMsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTQzNS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU0MzY6c3RhdGljIGludCBuZl90YWJsZXNfbmV3c2V0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01NDM3LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmxhW10pXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzI0NT1zdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NjYzLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzY2NDpzdGF0aWMgaW50IG5mX3RhYmxlc19uZXdzZXRlbGVtKHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NjY1LVx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05OTM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZl90YWJsZXNfY2JbTkZUX01TR19NQVhdID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDE0LVx0W05GVF9NU0dfTkVXU0VUXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMDE1Olx0XHQuY2FsbFx0XHQ9IG5mX3RhYmxlc19uZXdzZXQsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDAxNi1cdFx0LnR5cGVcdFx0PSBORk5MX0NCX0JBVENILFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDM4LVx0W05GVF9NU0dfTkVXU0VURUxFTV0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDAzOTpcdFx0LmNhbGxcdFx0PSBuZl90YWJsZXNfbmV3c2V0ZWxlbSxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDQwLVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfQkFUQ0gsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDc2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE5ldGZpbHRlciBUYWJsZSBVcGRhdGVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHByaW1hcnkgY29uY2VybiBoZXJlIHJldm9sdmVzIGFyb3VuZCB1bmRlcnN0YW5kaW5nIGhvdyBkeW5hbWljIHNldHMgYXJlIGhhbmRsZWQgd2l0aGluIG5ldGZpbHRlciB0YWJsZXMsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGludm9sdmVkIGluIHNldCBtYW5pcHVsYXRpb24gYW5kIHJ1bGUgY3JlYXRpb24uIEJhc2VkIG9uIHRoZSBzeW1ib2xzIGlkZW50aWZpZWQsIG15IGF0dGVudGlvbiBncmF2aXRhdGVzIHRvd2FyZHM6IGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAsIGBuZl90YWJsZXNfbmV3c2V0YCwgYG5mX3RhYmxlc19jb21taXRgLCBhbmQgYG5mX3RhYmxlc19uZXdydWxlYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrcyBmb3Igc2V0LXJlbGF0ZWQgb3BlcmF0aW9ucy4KCk5vdywgYSBrZXkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIG9yIGhhbmRsaW5nIGZ1bmN0aW9uIGRlZGljYXRlZCB0byBkeW5hbWljIHNldHMuIFVwb24gZnVydGhlciBpbnNwZWN0aW9uLCBJIHNlZSB0aGF0IGBuZnRfZHluc2V0X2luaXRgIGlzIGludm9rZWQgZnJvbSBgbmZ0X2V4cHJfaW5pdGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBuZl90YWJsZXNfbmV3cnVsZWAuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBpbnR1aXRpb24gdGhhdCBgbmZfdGFibGVzX25ld3J1bGVgIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgZHluYW1pYyBzZXQgb3BlcmF0aW9uczsgaXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IHRvIGluaXRpYWxpemUgdGhlIGR5bmFtaWMgc2V0LgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHNldHMgYXJlIGRlbGV0ZWQgb3IgZGVzdHJveWVkLiBMb29raW5nIGF0IHRoZSBtZXNzYWdlIHR5cGVzLCBJIHNlZSBgTkZUX01TR19ERUxTRVRgIGFuZCBgTkZUX01TR19ERVNUUk9ZU0VUYC4gRXhhbWluaW5nIHRoZWlyIG1vZGlmaWNhdGlvbiBwb2ludHMsIEkmIzM5O3ZlIG9ic2VydmVkIHRoYXQgdGhlc2UgYXJlIGhhbmRsZWQgd2l0aGluIGBuZnRfc2V0X2NvbW1pdF91cGRhdGVgLCB3aGljaCBzdWdnZXN0cyB0aGF0IHRoZXkgYXJlIGhhbmRsZWQgYnkgYG5mX3RhYmxlc19kZWxzZXRgLiBUaGlzIGNvbmZpcm1zIHRoYXQgaXQmIzM5O3MgdGhlIGNvcnJlY3QgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX3RhYmxlc19kZWxzZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz01NzYxPXN0YXRpYyB2b2lkIG5mdF9zZXRfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU3NzUtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo1Nzc2OnN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbHNldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTc3Ny1cdFx0XHQgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5sYVtdKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc5ODc9c3RhdGljIGludCBuZnRfc2V0X2ZsdXNoKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsIHU4IGdlbm1hc2spXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODAwNC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjgwMDU6c3RhdGljIGludCBuZl90YWJsZXNfZGVsc2V0ZWxlbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODAwNi1cdFx0XHRcdGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTkzNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZfdGFibGVzX2NiW05GVF9NU0dfTUFYXSA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDAyNi1cdFtORlRfTVNHX0RFTFNFVF0gPSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDAyNzpcdFx0LmNhbGxcdFx0PSBuZl90YWJsZXNfZGVsc2V0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwMjgtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9CQVRDSCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDAzMi1cdFtORlRfTVNHX0RFU1RST1lTRVRdID0ge1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAwMzM6XHRcdC5jYWxsXHRcdD0gbmZfdGFibGVzX2RlbHNldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDM0LVx0XHQudHlwZVx0XHQ9IE5GTkxfQ0JfQkFUQ0gsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNTYtXHRbTkZUX01TR19ERUxTRVRFTEVNXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMDU3Olx0XHQuY2FsbFx0XHQ9IG5mX3RhYmxlc19kZWxzZXRlbGVtLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNTgtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9CQVRDSCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA2Mi1cdFtORlRfTVNHX0RFU1RST1lTRVRFTEVNXSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMDYzOlx0XHQuY2FsbFx0XHQ9IG5mX3RhYmxlc19kZWxzZXRlbGVtLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNjQtXHRcdC50eXBlXHRcdD0gTkZOTF9DQl9CQVRDSCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2ODgKCQkJCQkJCW91dHB1dDogMTQyCgkJCQkJCQl0aG91Z2h0czogMzI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IFJlZmluZW1lbnQ6IEZvY3VzaW5nIG9uIFNldCBEZWxldGlvbioqCgpPa2F5LCBzbyBgbmZfdGFibGVzX2RlbHNldGAgbG9va3MgbGlrZSBhbm90aGVyIHNvbGlkIGZvY3VzIHN5bWJvbCBmb3IgZnV6emluZy4gVGltZSB0byByZXZpZXcgdGhlIG1vZGlmaWNhdGlvbnMuCgpMb29raW5nIGF0IHRoZSBjb2RlLCBpdCYjMzk7cyBzZXR0aW5nIGBkZWFkID0gMWAgb24gdGhlIHNldCBkdXJpbmcgdGhlIGNvbW1pdCBzdGFnZSB3aGVuIGRlYWxpbmcgd2l0aCBlaXRoZXIgYE5GVF9NU0dfREVMU0VUYCBvciBgTkZUX01TR19ERVNUUk9ZU0VUYCBtZXNzYWdlcy4gVGhhdCYjMzk7cyBhIGNydWNpYWwgcG9pbnQsIGFuZCBJIGNhbiBzZWUgaG93IHBvdGVudGlhbCBpc3N1ZXMgYXJvdW5kIHRoZSBoYW5kbGluZyBvZiBhICYjMzQ7ZGVhZCYjMzQ7IHNldCBjb3VsZCBiZSBhIHByaW1lIHRhcmdldCBmb3IgdnVsbmVyYWJpbGl0eSBkaXNjb3ZlcnkuCgpUaGUgY2hhbmdlcyBpbiBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgIGFuZCBgbmZ0X2R5bnNldF9pbml0YCByZWxhdGUgdG8gZXhwcmVzc2lvbiBjbG9uaW5nIGFuZCBkZXN0cnVjdGlvbiwgd2hpY2ggYXJlIGFyZWFzIG9mdGVuIHByb25lIHRvIHN1YnRsZSBtZW1vcnkgbWFuYWdlbWVudCBwcm9ibGVtcy4gVGhlc2UgdXBkYXRlcyB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGggZnV6emluZy4KCk15IHByaW1hcnkgY29uZmlnIGlzIGBORl9UQUJMRVNgLCB3aGljaCBzZWVtcyBzdWZmaWNpZW50LiBJJiMzOTtsbCBzdGljayB3aXRoIHRoZXNlIGZvciBub3csIGFuZCB0aGVzZSBmb2N1cyBzeW1ib2xzOgoKKiAgIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAKKiAgIGBuZl90YWJsZXNfbmV3c2V0YAoqICAgYG5mX3RhYmxlc19kZWxzZXRgICh0aGlzIGlzIHRoZSBuZXcgb25lKQoqICAgYG5mX3RhYmxlc19jb21taXRgCiogICBgbmZfdGFibGVzX25ld3J1bGVgCgpJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGZvciBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMsIGJ1dCBgTkZfVEFCTEVTYCBpcyB0aGUga2V5LiBUaGVuIEkmIzM5O2xsIHN0YXJ0IHJ1bm5pbmcgc29tZSB0ZXN0cyByZWxhdGVkIHRvIHNldC1yZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZfdGFibGVzX25ld3NldGVsZW0mIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX25ld3NldCYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfZGVsc2V0JiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19jb21taXQmIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX25ld3J1bGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZl90YWJsZXMgbG9naWMgZm9yIGhhbmRsaW5nIHNldCBlbGVtZW50IGV4cHJlc3Npb25zIGFuZCBkeW5hbWljIHNldHMsIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgZXhwcmVzc2lvbnMgYXJlIGNsb25lZCBhbmQgZGVzdHJveWVkLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBjb21taXQgcGhhc2UgZm9yIHNldCBkZWxldGlvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZl90YWJsZXNfbmV3c2V0ZWxlbSYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3c2V0JiMzNDssCiAgICAmIzM0O25mX3RhYmxlc19kZWxzZXQmIzM0OywKICAgICYjMzQ7bmZfdGFibGVzX2NvbW1pdCYjMzQ7LAogICAgJiMzNDtuZl90YWJsZXNfbmV3cnVsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5mX3RhYmxlcyBsb2dpYyBmb3IgaGFuZGxpbmcgc2V0IGVsZW1lbnQgZXhwcmVzc2lvbnMgYW5kIGR5bmFtaWMgc2V0cywgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBleHByZXNzaW9ucyBhcmUgY2xvbmVkIGFuZCBkZXN0cm95ZWQuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvbW1pdCBwaGFzZSBmb3Igc2V0IGRlbGV0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmssIG1ha2luZyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgbGlmZWN5Y2xlIGFuZCBjbG9uaW5nIG9mIG5ldGZpbHRlciBzZXQgZXhwcmVzc2lvbnMgKGBuZnRfZXhwcmApIHRvIGZpeCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgKGxpa2VseSBkb3VibGUtZnJlZXMgb3IgdXNlLWFmdGVyLWZyZWVzKS4gSXQgYXZvaWRzIGNyZWF0aW5nIGludGVybWVkaWF0ZSBjbG9uZXMgb2YgZXhwcmVzc2lvbnMgd2hlbiBhZGRpbmcgZWxlbWVudHMgdG8gYSBzZXQgb3IgaW5pdGlhbGl6aW5nIGEgZHluc2V0LCBpbnN0ZWFkIGNvcHlpbmcgcG9pbnRlcnMgYW5kIHVzaW5nIGEgbmV3IGBvdmVycmlkZV9leHByc2AgZmxhZyB0byB0cmFjayBvd25lcnNoaXAgYW5kIGRldGVybWluZSBpZiB0aGUgZXhwcmVzc2lvbnMgc2hvdWxkIGJlIGRlc3Ryb3llZC4gSXQgYWxzbyBzZXRzIGEgYGRlYWRgIGZsYWcgb24gZGVsZXRlZCBzZXRzIGR1cmluZyBjb21taXQgdXBkYXRlcy4gXG5cblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBvYmplY3QgbGlmZWN5Y2xlIGJ1Z3MgKFVBRiwgZG91YmxlLWZyZWUpIHdoaWNoIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIG1lbW9yeSBmb3IgdGhlIHNldCBlbGVtZW50cyB0aGVtc2VsdmVzIGNvbnRpbnVlcyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgKGluIGBuZnRfc2V0X2VsZW1faW5pdGApLCBlbnN1cmluZyBhbGwgZmllbGRzIGFuZCBwYWRkaW5nIGFyZSBmdWxseSB6ZXJvZWQuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM4NzdhMjg4MDRiMzY2YzI1YjkyOWYzZGExNWNmN2VkZGEzNjMwY2YKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAxMjo0MDo0MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaAppbmRleCAyMzhmNmVjYjkwZTk5Li45ZDU5NzQ4MjM2M2Q5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oCkBAIC04NzAsOCAmIzQzOzg3MCw2IEBAIHN0cnVjdCBuZnRfZWxlbV9wcml2ICpuZnRfc2V0X2VsZW1faW5pdChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LAogCQkJCQljb25zdCB1MzIgKmtleSwgY29uc3QgdTMyICprZXlfZW5kLAogCQkJCQljb25zdCB1MzIgKmRhdGEsCiAJCQkJCXU2NCB0aW1lb3V0LCB1NjQgZXhwaXJhdGlvbiwgZ2ZwX3QgZ2ZwKTsKLWludCBuZnRfc2V0X2VsZW1fZXhwcl9jbG9uZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LAotCQkJICAgIHN0cnVjdCBuZnRfZXhwciAqZXhwcl9hcnJheVtdKTsKIHZvaWQgbmZ0X3NldF9lbGVtX2V4cHJfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCQkJICAgICAgIHN0cnVjdCBuZnRfc2V0X2VsZW1fZXhwciAqZWxlbV9leHByKTsKIHZvaWQgbmZ0X3NldF9lbGVtX2Rlc3Ryb3koY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKaW5kZXggYzExMmVjYzRmY2EzMi4uMzg0NTA1ZjY4MGRlZiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMKQEAgLTY5MjEsMzkgJiM0Mzs2OTIxLDExIEBAIHN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJCW5mX3RhYmxlc19zZXRfZWxlbV9kZXN0cm95KGN0eCwgdGUtJmd0O3NldCwgdGUtJmd0O2VsZW1zW2ldLnByaXYpOwogfQogCi1pbnQgbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCwKLQkJCSAgICBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHJfYXJyYXlbXSkKLXsKLQlzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHI7Ci0JaW50IGVyciwgaSwgazsKLQotCWZvciAoaSA9IDA7IGkgJmx0OyBzZXQtJmd0O251bV9leHByczsgaSYjNDM7JiM0MzspIHsKLQkJZXhwciA9IGt6YWxsb2Moc2V0LSZndDtleHByc1tpXS0mZ3Q7b3BzLSZndDtzaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpOwotCQlpZiAoIWV4cHIpCi0JCQlnb3RvIGVycl9leHByOwotCi0JCWVyciA9IG5mdF9leHByX2Nsb25lKGV4cHIsIHNldC0mZ3Q7ZXhwcnNbaV0sIEdGUF9LRVJORUxfQUNDT1VOVCk7Ci0JCWlmIChlcnIgJmx0OyAwKSB7Ci0JCQlrZnJlZShleHByKTsKLQkJCWdvdG8gZXJyX2V4cHI7Ci0JCX0KLQkJZXhwcl9hcnJheVtpXSA9IGV4cHI7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9leHByOgotCWZvciAoayA9IGkgLSAxOyBrICZndDs9IDA7IGstLSkKLQkJbmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlba10pOwotCi0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KIHN0YXRpYyBpbnQgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoc3RydWN0IG5mdF9jdHggKmN0eCwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHRfdG1wbCAqdG1wbCwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCwKIAkJCQkgICBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHJfYXJyYXlbXSwKLQkJCQkgICB1MzIgbnVtX2V4cHJzKQomIzQzOwkJCQkgICB1MzIgbnVtX2V4cHJzLCBib29sIG92ZXJyaWRlX2V4cHJzKQogewogCXN0cnVjdCBuZnRfc2V0X2VsZW1fZXhwciAqZWxlbV9leHByID0gbmZ0X3NldF9leHRfZXhwcihleHQpOwogCXUzMiBsZW4gPSBzaXplb2Yoc3RydWN0IG5mdF9zZXRfZWxlbV9leHByKTsKQEAgLTY5NzYsNyAmIzQzOzY5NDgsOCBAQCBzdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJCQlnb3RvIGVycl9lbGVtX2V4cHJfc2V0dXA7CiAKIAkJZWxlbV9leHByLSZndDtzaXplICYjNDM7PSBleHByX2FycmF5W2ldLSZndDtvcHMtJmd0O3NpemU7Ci0JCW5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTsKJiM0MzsJCWlmIChvdmVycmlkZV9leHBycykKJiM0MzsJCQluZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7CiAJCWV4cHJfYXJyYXlbaV0gPSBOVUxMOwogCX0KIApAQCAtNjk4NCw3ICYjNDM7Njk1Nyw5IEBAIHN0YXRpYyBpbnQgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoc3RydWN0IG5mdF9jdHggKmN0eCwKIAogZXJyX2VsZW1fZXhwcl9zZXR1cDoKIAlmb3IgKDsgaSAmbHQ7IG51bV9leHByczsgaSYjNDM7JiM0MzspIHsKLQkJbmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pOwomIzQzOwkJaWYgKG92ZXJyaWRlX2V4cHJzKQomIzQzOwkJCW5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTsKJiM0MzsKIAkJZXhwcl9hcnJheVtpXSA9IE5VTEw7CiAJfQogCkBAIC03MjgwLDYgJiM0Mzs3MjU1LDcgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsCiAJc3RydWN0IG5mdF9zZXRfYmluZGluZyAqYmluZGluZzsKIAlzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2OwogCXN0cnVjdCBuZnRfb2JqZWN0ICpvYmogPSBOVUxMOwomIzQzOwlib29sIG92ZXJyaWRlX2V4cHJzID0gZmFsc2U7CiAJc3RydWN0IG5mdF91c2VyZGF0YSAqdWRhdGE7CiAJc3RydWN0IG5mdF9kYXRhX2Rlc2MgZGVzYzsKIAllbnVtIG5mdF9yZWdpc3RlcnMgZHJlZzsKQEAgLTczODUsNiAmIzQzOzczNjEsNyBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCwKIAogCQlleHByX2FycmF5WzBdID0gZXhwcjsKIAkJbnVtX2V4cHJzID0gMTsKJiM0MzsJCW92ZXJyaWRlX2V4cHJzID0gdHJ1ZTsKIAogCQlpZiAoc2V0LSZndDtudW1fZXhwcnMgJmFtcDsmYW1wOyBzZXQtJmd0O2V4cHJzWzBdLSZndDtvcHMgIT0gZXhwci0mZ3Q7b3BzKSB7CiAJCQllcnIgPSAtRU9QTk9UU1VQUDsKQEAgLTc0MTMsNiAmIzQzOzczOTAsNyBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCwKIAkJCX0KIAkJCWV4cHJfYXJyYXlbaV0gPSBleHByOwogCQkJbnVtX2V4cHJzJiM0MzsmIzQzOzsKJiM0MzsJCQlvdmVycmlkZV9leHBycyA9IHRydWU7CiAKIAkJCWlmIChzZXQtJmd0O251bV9leHBycyAmYW1wOyZhbXA7IGV4cHItJmd0O29wcyAhPSBzZXQtJmd0O2V4cHJzW2ldLSZndDtvcHMpIHsKIAkJCQllcnIgPSAtRU9QTk9UU1VQUDsKQEAgLTc0MjYsOSAmIzQzOzc0MDQsOCBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCwKIAkJfQogCX0gZWxzZSBpZiAoc2V0LSZndDtudW1fZXhwcnMgJmd0OyAwICZhbXA7JmFtcDsKIAkJICAgIShmbGFncyAmYW1wOyBORlRfU0VUX0VMRU1fSU5URVJWQUxfRU5EKSkgewotCQllcnIgPSBuZnRfc2V0X2VsZW1fZXhwcl9jbG9uZShjdHgsIHNldCwgZXhwcl9hcnJheSk7Ci0JCWlmIChlcnIgJmx0OyAwKQotCQkJZ290byBlcnJfc2V0X2VsZW1fZXhwcl9jbG9uZTsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBzZXQtJmd0O251bV9leHByczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJZXhwcl9hcnJheVtpXSA9IHNldC0mZ3Q7ZXhwcnNbaV07CiAKIAkJbnVtX2V4cHJzID0gc2V0LSZndDtudW1fZXhwcnM7CiAJfQpAQCAtNzU2Nyw3ICYjNDM7NzU0NCw4IEBAIHN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LAogCQl1ZGF0YS0mZ3Q7bGVuID0gdWxlbiAtIDE7CiAJCW5sYV9tZW1jcHkoJmFtcDt1ZGF0YS0mZ3Q7ZGF0YSwgbmxhW05GVEFfU0VUX0VMRU1fVVNFUkRBVEFdLCB1bGVuKTsKIAl9Ci0JZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoY3R4LCAmYW1wO3RtcGwsIGV4dCwgZXhwcl9hcnJheSwgbnVtX2V4cHJzKTsKJiM0MzsJZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoY3R4LCAmYW1wO3RtcGwsIGV4dCwgZXhwcl9hcnJheSwgbnVtX2V4cHJzLAomIzQzOwkJCQkgICAgICBvdmVycmlkZV9leHBycyk7CiAJaWYgKGVyciAmbHQ7IDApCiAJCWdvdG8gZXJyX2VsZW1fZnJlZTsKIApAQCAtNzY3NSw5ICYjNDM7NzY1MywxMSBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCwKIGVycl9wYXJzZV9rZXk6CiAJbmZ0X2RhdGFfcmVsZWFzZSgmYW1wO2VsZW0ua2V5LnZhbCwgTkZUX0RBVEFfVkFMVUUpOwogZXJyX3NldF9lbGVtX2V4cHI6Ci0JZm9yIChpID0gMDsgaSAmbHQ7IG51bV9leHBycyAmYW1wOyZhbXA7IGV4cHJfYXJyYXlbaV07IGkmIzQzOyYjNDM7KQotCQluZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7Ci1lcnJfc2V0X2VsZW1fZXhwcl9jbG9uZToKJiM0MzsJaWYgKG92ZXJyaWRlX2V4cHJzKSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgbnVtX2V4cHJzICZhbXA7JmFtcDsgZXhwcl9hcnJheVtpXTsgaSYjNDM7JiM0MzspCiYjNDM7CQkJbmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTA4OTQsNiAmIzQzOzEwODc0LDEwIEBAIHN0YXRpYyB2b2lkIG5mdF9zZXRfY29tbWl0X3VwZGF0ZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCQluZnRfY3R4X3VwZGF0ZShjdHgsIHRyYW5zKTsKIAogCQlzd2l0Y2ggKHRyYW5zLSZndDttc2dfdHlwZSkgewomIzQzOwkJY2FzZSBORlRfTVNHX0RFTFNFVDoKJiM0MzsJCWNhc2UgTkZUX01TR19ERVNUUk9ZU0VUOgomIzQzOwkJCW5mdF90cmFuc19zZXQodHJhbnMpLSZndDtkZWFkID0gMTsKJiM0MzsJCQlicmVhazsKIAkJY2FzZSBORlRfTVNHX0RFTFNFVEVMRU06CiAJCQl0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7CiAJCQlpZiAoIXRlLSZndDtzZXQtJmd0O29wcy0mZ3Q7Y29tbWl0KQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYwppbmRleCBlZTlkM2U3YjFlY2YxLi44M2U1NmIxYWE4NTg1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYwpAQCAtMTksNyAmIzQzOzE5LDggQEAgc3RydWN0IG5mdF9keW5zZXQgewogCXU4CQkJCXNyZWdfa2V5OwogCXU4CQkJCXNyZWdfZGF0YTsKIAlib29sCQkJCWludmVydDsKLQlib29sCQkJCWV4cHI7CiYjNDM7CWJvb2wJCQkJZXhwcjoxLAomIzQzOwkJCQkJb3ZlcnJpZGVfZXhwcnM6MTsKIAl1OAkJCQludW1fZXhwcnM7CiAJdTY0CQkJCXRpbWVvdXQ7CiAJc3RydWN0IG5mdF9leHByCQkJKmV4cHJfYXJyYXlbTkZUX1NFVF9FWFBSX01BWF07CkBAIC0yNTcsNiAmIzQzOzI1OCw3IEBAIHN0YXRpYyBpbnQgbmZ0X2R5bnNldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAKIAkJcHJpdi0mZ3Q7bnVtX2V4cHJzJiM0MzsmIzQzOzsKIAkJcHJpdi0mZ3Q7ZXhwcl9hcnJheVswXSA9IGR5bnNldF9leHByOwomIzQzOwkJcHJpdi0mZ3Q7b3ZlcnJpZGVfZXhwcnMgPSB0cnVlOwogCiAJCWlmIChzZXQtJmd0O251bV9leHBycyAmZ3Q7IDEgfHwKIAkJICAgIChzZXQtJmd0O251bV9leHBycyA9PSAxICZhbXA7JmFtcDsKQEAgLTI4OSw2ICYjNDM7MjkxLDcgQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAkJCX0KIAkJCXByaXYtJmd0O2V4cHJfYXJyYXlbaV0gPSBkeW5zZXRfZXhwcjsKIAkJCXByaXYtJmd0O251bV9leHBycyYjNDM7JiM0Mzs7CiYjNDM7CQkJcHJpdi0mZ3Q7b3ZlcnJpZGVfZXhwcnMgPSB0cnVlOwogCiAJCQlpZiAoc2V0LSZndDtudW1fZXhwcnMpIHsKIAkJCQlpZiAoaSAmZ3Q7PSBzZXQtJmd0O251bV9leHBycykgewpAQCAtMzA3LDkgJiM0MzszMTAsOCBAQCBzdGF0aWMgaW50IG5mdF9keW5zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCQkJZ290byBlcnJfZXhwcl9mcmVlOwogCQl9CiAJfSBlbHNlIGlmIChzZXQtJmd0O251bV9leHBycyAmZ3Q7IDApIHsKLQkJZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY3R4LCBzZXQsIHByaXYtJmd0O2V4cHJfYXJyYXkpOwotCQlpZiAoZXJyICZsdDsgMCkKLQkJCXJldHVybiBlcnI7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgc2V0LSZndDtudW1fZXhwcnM7IGkmIzQzOyYjNDM7KQomIzQzOwkJCXByaXYtJmd0O2V4cHJfYXJyYXlbaV0gPSBzZXQtJmd0O2V4cHJzW2ldOwogCiAJCXByaXYtJmd0O251bV9leHBycyA9IHNldC0mZ3Q7bnVtX2V4cHJzOwogCX0KQEAgLTMzOSw4ICYjNDM7MzQxLDEwIEBAIHN0YXRpYyBpbnQgbmZ0X2R5bnNldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJcmV0dXJuIDA7CiAKIGVycl9leHByX2ZyZWU6Ci0JZm9yIChpID0gMDsgaSAmbHQ7IHByaXYtJmd0O251bV9leHByczsgaSYjNDM7JiM0MzspCi0JCW5mdF9leHByX2Rlc3Ryb3koY3R4LCBwcml2LSZndDtleHByX2FycmF5W2ldKTsKJiM0MzsJaWYgKHByaXYtJmd0O292ZXJyaWRlX2V4cHJzKSB7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgcHJpdi0mZ3Q7bnVtX2V4cHJzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQluZnRfZXhwcl9kZXN0cm95KGN0eCwgcHJpdi0mZ3Q7ZXhwcl9hcnJheVtpXSk7CiYjNDM7CX0KIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zNjcsOSAmIzQzOzM3MSwxMCBAQCBzdGF0aWMgdm9pZCBuZnRfZHluc2V0X2Rlc3Ryb3koY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKIAlzdHJ1Y3QgbmZ0X2R5bnNldCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgcHJpdi0mZ3Q7bnVtX2V4cHJzOyBpJiM0MzsmIzQzOykKLQkJbmZ0X2V4cHJfZGVzdHJveShjdHgsIHByaXYtJmd0O2V4cHJfYXJyYXlbaV0pOwotCiYjNDM7CWlmIChwcml2LSZndDtvdmVycmlkZV9leHBycykgewomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHByaXYtJmd0O251bV9leHByczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJbmZ0X2V4cHJfZGVzdHJveShjdHgsIHByaXYtJmd0O2V4cHJfYXJyYXlbaV0pOwomIzQzOwl9CiAJbmZfdGFibGVzX2Rlc3Ryb3lfc2V0KGN0eCwgcHJpdi0mZ3Q7c2V0KTsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg4NAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDMxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0ZmlsdGVyJiMzOTtzIEV4cHJlc3Npb24gSGFuZGxpbmcgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbmZfdGFibGVzX2FwaS5jYCBhbmQgYG5mdF9keW5zZXQuY2AuIEl0JiMzOTtzIGFsbCBhYm91dCBzdHJlYW1saW5pbmcgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoIGhvdyBuZXRmaWx0ZXIgZGVhbHMgd2l0aCBleHByZXNzaW9ucyB3aXRoaW4gc2V0cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O0FoLCB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gYXZvaWQgdW5uZWNlc3NhcnkgY2xvbmluZywgd2hpY2ggdXN1YWxseSB0cmFuc2xhdGVzIHRvIGEgcGVyZm9ybWFuY2UgYm9vc3QuJiMzNDsgU21hcnQuCgpUaGUgY29yZSBpZGVhIHNlZW1zIHRvIGJlIHRoaXMgYG92ZXJyaWRlX2V4cHJzYCBib29sZWFuIGZsYWcuIElmIHNldCwgaXQgbWVhbnMgdGhlIGV4cHJlc3Npb25zIHdlcmUsIGVzc2VudGlhbGx5LCAmIzM0O3Rha2VuIG92ZXImIzM0OyBvciBvdmVycmlkZGVuLiBJZiBgb3ZlcnJpZGVfZXhwcnNgIGlzIGB0cnVlYCwgdGhlIG9sZCBleHByZXNzaW9uIGlzIGRlc3Ryb3llZC4gSWYgbm90LCBpdCBqdXN0IGNvcGllcyB0aGUgcG9pbnRlcnMgdG8gdGhlIGV4cHJlc3Npb25zLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBjaGFuZ2UgaW4gb2JqZWN0IGxpZmVjeWNsZSBhbmQgcmVmZXJlbmNlIG1hbmFnZW1lbnQuIFdlIGFyZSBtb3ZpbmcgYXdheSBmcm9tIGBuZnRfc2V0X2VsZW1fZXhwcl9jbG9uZWAgaW4gZmF2b3Igb2YgZGlyZWN0IHBvaW50ZXIgbWFuaXB1bGF0aW9uLiBUaGF0JiMzOTtzIGdvb2QsIGxlc3Mgb3ZlcmhlYWQgaWYgd2UgY2FuIGF2b2lkIHRoYXQgY2xvbmUuIEl0IHNlZW1zIHRvIHBhc3MgdGhhdCBgb3ZlcnJpZGVfZXhwcnNgIGZsYWcgdG8gYG5mdF9zZXRfZWxlbV9leHByX3NldHVwYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGNyZWF0aW5nIGV4cHJlc3Npb25zLCBidXQgbGV0IG1lIHRoaW5rLi4uCgpPa2F5LCBzbyBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgIGlzIHdoZXJlIHRoaW5ncyBhcmUgZ2V0dGluZyBhIGxpdHRsZSBjb25mdXNpbmcuIEl0JiMzOTtzIGRvaW5nIHNvbWV0aGluZyBsaWtlIHRoaXM6CgpgYGBjCgkJZWxlbV9leHByLSZndDtzaXplICYjNDM7PSBleHByX2FycmF5W2ldLSZndDtvcHMtJmd0O3NpemU7CgkJaWYgKG92ZXJyaWRlX2V4cHJzKQoJCQluZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7CgkJZXhwcl9hcnJheVtpXSA9IE5VTEw7CmBgYAoKSG1tLi4uIGlmIGBvdmVycmlkZV9leHByc2AgaXMgYGZhbHNlYCwgaXQgKmRvZXNuJiMzOTt0KiBkZXN0cm95IHRoZSBleHByZXNzaW9uLiBUaGlzIHNlZW1zIG9mZi4gYG5mdF9zZXRfZWxlbV9leHByX3NldHVwYCBpcyBzdXBwb3NlZCB0byAqc2V0dXAqIHRoZSBleHByZXNzaW9ucyBpbiB0aGUgZWxlbWVudCwgcmlnaHQ/IFNvIGlmIGl0JiMzOTtzIHNldHRpbmcgdGhlbSB1cCwgaXQgKm11c3QqIGJlIGNsb25pbmcgdGhlbSBvciBjcmVhdGluZyB0aGVtIGZyb20gc2NyYXRjaC4gSSBndWVzcyB0aGV5IGFyZSB1c2luZyBhIGh5YnJpZCBhcHByb2FjaCwgY2xvbmluZyBvbmx5IHdoZW4gbmVjZXNzYXJ5LiBCdXQgaXQgc2hvdWxkIHRoZW4gYmUgKmRlc3Ryb3lpbmcqIHRoZW0gd2hlbiBpdCYjMzk7cyBkb25lLgoKSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgY2xvbmVzIHRoZSBleHByZXNzaW9ucy4gTGV0IG1lIGdvIGNoZWNrIHRoZSBzb3VyY2UgY29kZSBmb3IgYG5mdF9zZXRfZWxlbV9leHByX3NldHVwYCBhbmQgc2VlIHdoYXQgaXQmIzM5O3MgcmVhbGx5IGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAxMjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02OTE1PXN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjkyMy1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY5MjQ6c3RhdGljIGludCBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNjkyNS1cdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcyNDU9c3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzU0Ni1cdH1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc1NDc6XHRlcnIgPSBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChjdHgsIFx1MDAyNnRtcGwsIGV4dCwgZXhwcl9hcnJheSwgbnVtX2V4cHJzLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzU0OC1cdFx0XHRcdCAgICAgIG92ZXJyaWRlX2V4cHJzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk3OQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoaXMgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHVwIHRoZSBleHByZXNzaW9uIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50IHdpdGhpbiBhbiBORlRhYmxlcyBzZXQuIEl0JiMzOTtzIGxpa2VseSBhIGNydWNpYWwgcGFydCBvZiB0aGUgc2V0IG1hbmFnZW1lbnQgaW5mcmFzdHJ1Y3R1cmUuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBoYW5kbGluZyBvZiBkYXRhIHR5cGVzLCBwb3RlbnRpYWwga2V5L3BheWxvYWQgcGFyc2luZywgYW5kIHBlcmhhcHMgc29tZSBvcHRpbWl6YXRpb24gY29uc2lkZXJhdGlvbnMgZm9yIGRpZmZlcmVudCBlbGVtZW50IGZvcm1hdHMuCgpJJiMzOTttIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGRlYWxzIHdpdGggdGhlIHZhcmlvdXMgZGF0YSB0eXBlcyB0aGF0IE5GVGFibGVzIHN1cHBvcnRzIGZvciBzZXQgZWxlbWVudHMg4oCTIElQdjQgYWRkcmVzc2VzLCBJUHY2IGFkZHJlc3NlcywgcG9ydHMsIGludGVnZXJzLCBzdHJpbmdzLCBldGMuIEhvdyBkb2VzIGl0IHZhbGlkYXRlIHRoZSBpbnB1dCBhbmQgZW5zdXJlIHR5cGUgY29tcGF0aWJpbGl0eT8gRG9lcyBpdCBoYXZlIGEgc3dpdGNoIHN0YXRlbWVudCBvciBhIG1vcmUgc29waGlzdGljYXRlZCBkaXNwYXRjaCBtZWNoYW5pc20/IEkmIzM5O20gYmV0dGluZyBvbiBhIHdlbGwtZGVzaWduZWQgc3RydWN0dXJlIHRvIGhhbmRsZSB0aGUgdHlwZS1zcGVjaWZpYyBsb2dpYyBjbGVhbmx5LgoKRnVydGhlcm1vcmUsIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBrZXJuZWwgZm9yIHRoZSBzZXQgaXRzZWxmLiBJcyBpdCBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgdGhlIGVsZW1lbnQgZXhwcmVzc2lvbj8gSG93IGRvZXMgaXQgaW50ZWdyYXRlIHdpdGggdGhlIGhhc2ggdGFibGUgb3IgcmFkaXggdHJlZSB1c2VkIHRvIHN0b3JlIHRoZSBzZXQgZWxlbWVudHM/IElzIHRoZXJlIGFueSBjYWNoaW5nIG9yIHByZS1jYWxjdWxhdGlvbiBiZWluZyBkb25lIHRvIGltcHJvdmUgcGVyZm9ybWFuY2U/IEkmIzM5O2xsIGJlIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IG1lbW9yeSBtYW5hZ2VtZW50IGRldGFpbHMgYW5kIHBvdGVudGlhbCBsb2NraW5nIGNvbnNpZGVyYXRpb25zLCBhcyBzZXQgb3BlcmF0aW9ucyBuZWVkIHRvIGJlIHRocmVhZC1zYWZlLgoKSSYjMzk7bSBhbHNvIGFudGljaXBhdGluZyBzb21lIGZvcm0gb2YgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGUgZWxlbWVudCBleHByZXNzaW9uIGlzIGludmFsaWQsIG9yIGlmIHRoZXJlJiMzOTtzIGEgcHJvYmxlbSBhbGxvY2F0aW5nIG1lbW9yeT8gQXJlIHNwZWNpZmljIGVycm9yIGNvZGVzIGJlaW5nIHJldHVybmVkPyBIb3cgZ3JhbnVsYXIgaXMgdGhlIGVycm9yIHJlcG9ydGluZz8gVGhlIHF1YWxpdHkgb2YgdGhlIGVycm9yIGhhbmRsaW5nIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgaW5kaWNhdGlvbiBvZiB0aGUgb3ZlcmFsbCByb2J1c3RuZXNzIG9mIHRoaXMgY29tcG9uZW50LgoKRmluYWxseSwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9mIG9wdGltaXphdGlvbiB0ZWNobmlxdWVzLiBEb2VzIGl0IGF0dGVtcHQgdG8gY29tcGFjdCBkYXRhLCBvciB1c2Ugc3BlY2lhbGl6ZWQgaW5zdHJ1Y3Rpb25zIHdoZXJlIHBvc3NpYmxlPyBIb3cgZG9lcyBpdCBoYW5kbGUgbGFyZ2Ugc2V0cywgYW5kIGFyZSB0aGVyZSBhbnkgc2NhbGFiaWxpdHkgY29uc2lkZXJhdGlvbnM/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2OTI0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY5MjQ6XHRzdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG42OTI1Olx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHRfdG1wbCAqdG1wbCxcbjY5MjY6XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0LFxuNjkyNzpcdFx0XHRcdFx0ICAgc3RydWN0IG5mdF9leHByICpleHByX2FycmF5W10sXG42OTI4Olx0XHRcdFx0XHQgICB1MzIgbnVtX2V4cHJzLCBib29sIG92ZXJyaWRlX2V4cHJzKVxuNjkyOTpcdHtcbjY5MzA6XHRcdHN0cnVjdCBuZnRfc2V0X2VsZW1fZXhwciAqZWxlbV9leHByID0gbmZ0X3NldF9leHRfZXhwcihleHQpO1xuNjkzMTpcdFx0dTMyIGxlbiA9IHNpemVvZihzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIpO1xuNjkzMjpcdFx0c3RydWN0IG5mdF9leHByICpleHByO1xuNjkzMzpcdFx0aW50IGksIGVycjtcbjY5MzQ6XHRcbjY5MzU6XHRcdGlmIChudW1fZXhwcnMgPT0gMClcbjY5MzY6XHRcdFx0cmV0dXJuIDA7XG42OTM3Olx0XG42OTM4Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fZXhwcnM7IGkmIzQzOyYjNDM7KVxuNjkzOTpcdFx0XHRsZW4gJiM0Mzs9IGV4cHJfYXJyYXlbaV0tXHUwMDNlb3BzLVx1MDAzZXNpemU7XG42OTQwOlx0XG42OTQxOlx0XHRpZiAobmZ0X3NldF9leHRfY2hlY2sodG1wbCwgTkZUX1NFVF9FWFRfRVhQUkVTU0lPTlMsIGxlbikgXHUwMDNjIDApXG42OTQyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuNjk0MzpcdFxuNjk0NDpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2V4cHJzOyBpJiM0MzsmIzQzOykge1xuNjk0NTpcdFx0XHRleHByID0gbmZ0X3NldGVsZW1fZXhwcl9hdChlbGVtX2V4cHIsIGVsZW1fZXhwci1cdTAwM2VzaXplKTtcbjY5NDY6XHRcdFx0ZXJyID0gbmZ0X2V4cHJfY2xvbmUoZXhwciwgZXhwcl9hcnJheVtpXSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbjY5NDc6XHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbjY5NDg6XHRcdFx0XHRnb3RvIGVycl9lbGVtX2V4cHJfc2V0dXA7XG42OTQ5Olx0XG42OTUwOlx0XHRcdGVsZW1fZXhwci1cdTAwM2VzaXplICYjNDM7PSBleHByX2FycmF5W2ldLVx1MDAzZW9wcy1cdTAwM2VzaXplO1xuNjk1MTpcdFx0XHRpZiAob3ZlcnJpZGVfZXhwcnMpXG42OTUyOlx0XHRcdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pO1xuNjk1MzpcdFx0XHRleHByX2FycmF5W2ldID0gTlVMTDtcbjY5NTQ6XHRcdH1cbjY5NTU6XHRcbjY5NTY6XHRcdHJldHVybiAwO1xuNjk1NzpcdFxuNjk1ODpcdGVycl9lbGVtX2V4cHJfc2V0dXA6XG42OTU5Olx0XHRmb3IgKDsgaSBcdTAwM2MgbnVtX2V4cHJzOyBpJiM0MzsmIzQzOykge1xuNjk2MDpcdFx0XHRpZiAob3ZlcnJpZGVfZXhwcnMpXG42OTYxOlx0XHRcdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pO1xuNjk2MjpcdFxuNjk2MzpcdFx0XHRleHByX2FycmF5W2ldID0gTlVMTDtcbjY5NjQ6XHRcdH1cbjY5NjU6XHRcbjY5NjY6XHRcdHJldHVybiAtRU5PTUVNO1xuNjk2NzpcdH1cbjY5Njg6XHRcbjY5Njk6XHRzdHJ1Y3QgbmZ0X3NldF9leHQgKm5mdF9zZXRfY2F0Y2hhbGxfbG9va3VwKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCxcbjY5NzA6XHRcdFx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpXG42OTcxOlx0e1xuNjk3MjpcdFx0c3RydWN0IG5mdF9zZXRfZWxlbV9jYXRjaGFsbCAqY2F0Y2hhbGw7XG42OTczOlx0XHR1OCBnZW5tYXNrID0gbmZ0X2dlbm1hc2tfY3VyKG5ldCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyNDUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgT2JzZXJ2YXRpb25zIG9uIEV4cHJlc3Npb24gQ2xvbmluZyBpbiBOZXRmaWx0ZXIgU2V0cyoqCgpSaWdodCwgc28gYG5mdF9zZXRfZWxlbV9leHByX3NldHVwYCBpcyBub3cgaGFuZGxpbmcgdGhlIGNsb25pbmcgb2YgZXhwcmVzc2lvbnMgZGlyZWN0bHkgaW50byB0aGUgc2V0IGVsZW1lbnQuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UuIFByZXZpb3VzbHksIEkgcmVjYWxsIGBuZnRfYWRkX3NldF9lbGVtYCB3b3VsZCBjbG9uZSB0aG9zZSBleHByZXNzaW9ucyBpbnRvIGFuIGBleHByX2FycmF5YCBmaXJzdCwgdXNpbmcgYG5mdF9zZXRfZWxlbV9leHByX2Nsb25lYC4gVGhlbiwgaXQgc2VlbXMsIGBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cGAgd291bGQgKnRoZW4qIGNsb25lIHRoZW0gYWdhaW4/IFRoYXQgc291bmRzIGluZWZmaWNpZW50LCBhbmQgZnJhbmtseSwgYSBiaXQgcmVkdW5kYW50LiAKCkkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgbWVudGFsIG1vZGVsIGhlcmUuIFRoZSBvbGQgY29kZSBmb3IgYG5mdF9zZXRfZWxlbV9leHByX2Nsb25lYCBzaG91bGQgcHJvdmlkZSBzb21lIGNsYXJpdHkgb24gd2h5IHdlIGhhZCB0aGlzIGV4dHJhLCBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSwgbGF5ZXIgb2YgY2xvbmluZy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoYXQgbG9va3MgbGlrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5MTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjkxMDpcdFx0XHRuZnRfc2V0X2VsZW1fZXhwcl9kZXN0cm95KGN0eCwgbmZ0X3NldF9leHRfZXhwcihleHQpKTtcbjY5MTE6XHRcbjY5MTI6XHRcdGtmcmVlKGVsZW1fcHJpdik7XG42OTEzOlx0fVxuNjkxNDpcdFxuNjkxNTpcdHN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG42OTE2Olx0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IG5mdF90cmFuc19lbGVtICp0ZSlcbjY5MTc6XHR7XG42OTE4Olx0XHRpbnQgaTtcbjY5MTk6XHRcbjY5MjA6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRlLVx1MDAzZW5lbGVtczsgaSYjNDM7JiM0MzspXG42OTIxOlx0XHRcdG5mX3RhYmxlc19zZXRfZWxlbV9kZXN0cm95KGN0eCwgdGUtXHUwMDNlc2V0LCB0ZS1cdTAwM2VlbGVtc1tpXS5wcml2KTtcbjY5MjI6XHR9XG42OTIzOlx0XG42OTI0Olx0c3RhdGljIGludCBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuNjkyNTpcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0X3RtcGwgKnRtcGwsXG42OTI2Olx0XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCxcbjY5Mjc6XHRcdFx0XHRcdCAgIHN0cnVjdCBuZnRfZXhwciAqZXhwcl9hcnJheVtdLFxuNjkyODpcdFx0XHRcdFx0ICAgdTMyIG51bV9leHBycywgYm9vbCBvdmVycmlkZV9leHBycylcbjY5Mjk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4ODYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA4ODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBFeHByZXNzaW9uIENsb25pbmcgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnbyBvdmVyIHRoaXMgYG5mdF9zZXRfZWxlbV9leHByX2Nsb25lYCBmdW5jdGlvbiBmcm9tIHRoZSBkaWZmLiBJbml0aWFsbHksIGl0IHNlZW1zIHRoZXkgYXJlIGNsb25pbmcgdGhlIGV4cHJlc3Npb25zIGZyb20gdGhlIHNldCBhbmQgc3RvcmluZyB0aGVtIGluIGBleHByX2FycmF5YC4gU3BlY2lmaWNhbGx5LCBga3phbGxvY2AgaXMgYmVpbmcgdXNlZCB0byBhbGxvY2F0ZSBtZW1vcnkgYW5kIHRoZSBgbmZ0X2V4cHJfY2xvbmVgIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIHRoZSBjb3B5aW5nLgoKVGhlbiwgSSYjMzk7bSByZW1pbmRlZCBvZiBob3cgYG5mdF9zZXRfZWxlbV9leHByX3NldHVwYCB3YXMgdXRpbGl6aW5nIGBleHByX2FycmF5YC4gSXQgbG9va3MgbGlrZSBpdCB3YXMgY2xvbmluZyB0aGVzZSAqY2xvbmVzKiBhZ2FpbiBpbnRvIHRoZSBlbGVtZW50IGFuZCBkZXN0cm95aW5nIHRoZSBvcmlnaW5hbCBjbG9uZSBhZnRlcndhcmQuIFRoYXQmIzM5O3MgYSB0ZXh0Ym9vayBkb3VibGUtY2xvbmUgc2NlbmFyaW8hIFdlIGhhZCBhIHRlbXBvcmFyeSBjb3B5IHRoYXQgd2FzIHVsdGltYXRlbHkgZGlzY2FyZGVkLiBUaGUgcGF0Y2ggY2xlYW5zIHRoaXMgdXAgc2lnbmlmaWNhbnRseS4KClRoZSBwYXRjaCYjMzk7cyBvcHRpbWl6YXRpb24gc3RyYXRlZ3kgaXMgdG8gcGFzcyB0aGUgb3JpZ2luYWwgZXhwcmVzc2lvbnMgZGlyZWN0bHkgaW4gYGV4cHJfYXJyYXlgIHdoZW4gcG9zc2libGUuIElmIHRoZSBzZXQmIzM5O3MgZXhwcmVzc2lvbnMgYXJlICpub3QqIGJlaW5nIG92ZXJyaWRkZW4gYnkgYSB1c2VyLXByb3ZpZGVkIGV4cHJlc3Npb24sIGBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cGAgY2xvbmVzIHRoZXNlIGRpcmVjdGx5IGludG8gdGhlIGVsZW1lbnQuIElmIHRoZXJlJiMzOTtzIGFuIG92ZXJyaWRlLCB0aGF0IG5ldyBvYmplY3QgZnJvbSBwYXJzaW5nIGlzIGFscmVhZHkgdGhlcmUgYW5kIGNvcGllZCwgYW5kIHRoZSB0ZW1wIGFsbG9jYXRpb24gaXMgZGVzdHJveWVkLiBUaGlzIGRpcmVjdGx5IGFkZHJlc3NlcyB0aGUgZG91YmxlLWNsb25lIHByb2JsZW0sIHJlZHVjaW5nIHRoZSBtZW1vcnkgZm9vdHByaW50IGFuZCBpbXByb3ZpbmcgcGVyZm9ybWFuY2UuCgpJJiMzOTttIG1ha2luZyBzdXJlIHRvIGtlZXAgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHN0cmFpZ2h0IGhlcmUuIFRoZSBgb3ZlcnJpZGVfZXhwcnNgIGZsYWcgaXMga2V5LiBJZiB0cnVlLCB0aGUgYGV4cHJfYXJyYXlgIGNvbnRhaW5zIG5ld2x5IGFsbG9jYXRlZCBvYmplY3RzLCBmcmVzaGx5IHBhcnNlZC4gYG5mdF9zZXRfZWxlbV9leHByX3NldHVwYCBjbG9uZXMgdGhlbSBhbmQgdGhlbiBmcmVlcyB0aGUgbWVtb3J5LiBJZiBmYWxzZSwgaXQmIzM5O3MgcG9pbnRlcnMgdG8gdGhlICpzZXQmIzM5O3MqIGRlZmF1bHQgZXhwcmVzc2lvbnMuIFRoZXNlIGFyZSAqY2xvbmVkKiBpbnRvIHRoZSBlbGVtZW50IGJ1dCB0aGUgb3JpZ2luYWxzIGluIGBleHByX2FycmF5YCByZW1haW4sIGJlY2F1c2UgdGhvc2UgZXhwcmVzc2lvbnMgYXJlIHBhcnQgb2YgdGhlIHNldCwgYW5kIHNob3VsZG4mIzM5O3QgYmUgdG91Y2hlZCBieSBzZXR1cC4KClNvLCB0aGlzIGlzIGEgY2xlYW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG9iamVjdCBsaWZlY3ljbGUgb3B0aW1pemF0aW9uLiBDcml0aWNhbGx5LCBpdCAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gYG5mdF9leHByX2Nsb25lYCBpcyBzdGlsbCByZXNwb25zaWJsZSBmb3IgY29ycmVjdGx5IGluaXRpYWxpemluZyB0aGUgY29waWVkIGRhdGEgd2l0aGluIHRoZSBlbGVtZW50IGl0c2VsZi4KCk5vdywgbGV0IG1lIG1ha2Ugc3VyZS4uLiBgbmZ0X3NldGVsZW1fZXhwcl9hdGAgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGVsZW1lbnQmIzM5O3MgZXh0ZW5zaW9uIGFyZWEuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBhcmVhIGlzIGNvcnJlY3RseSB6ZXJvZWQgYmVmb3JlIHRoZSBjb3B5IHRha2VzIHBsYWNlLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBlbGVtX2V4cHJgIHRvIGBuZnRfc2V0X2V4dF9leHByKGV4dClgLiBgZXh0YCBpcyBmcm9tIGBuZnRfc2V0X2VsZW1faW5pdGAgb3Igc2ltaWxhci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBhcmVhIGlzIGluaXRpYWxpemVkIHByb3Blcmx5LiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBUaGF0JiMzOTtzIHRoZSBvbmUgdGhpbmcgdGhhdCB3aWxsIGNhdXNlIGEgcHJvYmxlbSBoZXJlISBJJiMzOTttIGdvaW5nIHRvIGZvbGxvdyB0aGlzIHVwIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyB2YWxpZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X3NldF9lbGVtX2luaXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oPTg2ND1zdHJ1Y3QgbmZ0X2V4cHIgKm5mdF9zZXRfZWxlbV9leHByX2FsbG9jKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTg2Ny1cbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaDo4Njg6c3RydWN0IG5mdF9lbGVtX3ByaXYgKm5mdF9zZXRfZWxlbV9pbml0KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgtODY5LVx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHRfdG1wbCAqdG1wbCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02Nzc0PXN0YXRpYyBpbnQgbmZ0X3NldF9leHRfbWVtY3B5KGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLCB1OCBpZCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02Nzg0LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njc4NTpzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqbmZ0X3NldF9lbGVtX2luaXQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY3ODYtXHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTcyNDU9c3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzUyMi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc1MjM6XHRlbGVtLnByaXYgPSBuZnRfc2V0X2VsZW1faW5pdChzZXQsIFx1MDAyNnRtcGwsIGVsZW0ua2V5LnZhbC5kYXRhLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzUyNC1cdFx0XHRcdCAgICAgIGVsZW0ua2V5X2VuZC52YWwuZGF0YSwgZWxlbS5kYXRhLnZhbC5kYXRhLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc4MjU9c3RhdGljIGludCBuZnRfZGVsX3NldGVsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03ODgxLVx0ZXJyID0gLUVOT01FTTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc4ODI6XHRlbGVtLnByaXYgPSBuZnRfc2V0X2VsZW1faW5pdChzZXQsIFx1MDAyNnRtcGwsIGVsZW0ua2V5LnZhbC5kYXRhLFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzg4My1cdFx0XHRcdCAgICAgIGVsZW0ua2V5X2VuZC52YWwuZGF0YSwgTlVMTCwgMCwgMCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYz01Nj1zdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqbmZ0X2R5bnNldF9uZXcoc3RydWN0IG5mdF9zZXQgKnNldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYy02OC1cdHRpbWVvdXQgPSBwcml2LVx1MDAzZXRpbWVvdXQgPyA6IFJFQURfT05DRShzZXQtXHUwMDNldGltZW91dCk7XG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYzo2OTpcdGVsZW1fcHJpdiA9IG5mdF9zZXRfZWxlbV9pbml0KHNldCwgXHUwMDI2cHJpdi1cdTAwM2V0bXBsLFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtNzAtXHRcdFx0XHQgICAgICBcdTAwMjZyZWdzLVx1MDAzZWRhdGFbcHJpdi1cdTAwM2VzcmVnX2tleV0sIE5VTEwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDk3CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgbmZ0X3NldF9lbGVtX2luaXRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gVGltZSB0byB0YWtlIGEgbG9vayBhdCBgbmZ0X3NldF9lbGVtX2luaXRgLiBHaXZlbiB0aGUgY29udGV4dCwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGluaXRpYWxpemF0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluIGFuIE5GVGFibGVzIHNldC4gSXQmIzM5O3MgdGhlIGJ1aWxkaW5nIGJsb2NrLCB0aGUgZ3JvdW5kIGZsb29yIGZvciBkZWZpbmluZyBob3cgZGF0YSBnZXRzIHN0b3JlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIHJ1bGUgc3RydWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGRlZmluZWQsIG1lbW9yeSBpcyBhbGxvY2F0ZWQgKG9yIHJlLXVzZWQgaWYgcG9zc2libGUpLCBhbmQgd2hhdCBjaGVja3MgYXJlIHBlcmZvcm1lZCB0byBlbnN1cmUgY29uc2lzdGVuY3kgYW5kIHByZXZlbnQgZXJyb3JzLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgZWxlbWVudCB0eXBlcyDigJMgd2hldGhlciBpdOKAmXMgaW50ZWdlciwgSVAgYWRkcmVzc2VzLCBzdHJpbmdzLCBvciBtb3JlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLiBXaGF0JiMzOTtzIHRoZSBzdHJhdGVneSBmb3IgZGVhbGluZyB3aXRoIHBvdGVudGlhbCBjb2xsaXNpb25zIG9yIG92ZXJsYXBzLCBpZiBhbnk/IEFuZCBvZiBjb3Vyc2UsIHBlcmZvcm1hbmNlIGlzIGtleSDigJMgaG93IGVmZmljaWVudCBpcyB0aGlzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2Ugc2V0cyBhbmQgZnJlcXVlbnQgYWRkaXRpb25zL2RlbGV0aW9ucz8gR290dGEga2VlcCBhbiBleWUgb24gdGhvc2Ugbml0dHktZ3JpdHR5IGRldGFpbHMgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdGlnaHQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDEyOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2Nzg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY3ODU6XHRzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqbmZ0X3NldF9lbGVtX2luaXQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcbjY3ODY6XHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0X3RtcGwgKnRtcGwsXG42Nzg3Olx0XHRcdFx0XHRcdGNvbnN0IHUzMiAqa2V5LCBjb25zdCB1MzIgKmtleV9lbmQsXG42Nzg4Olx0XHRcdFx0XHRcdGNvbnN0IHUzMiAqZGF0YSxcbjY3ODk6XHRcdFx0XHRcdFx0dTY0IHRpbWVvdXQsIHU2NCBleHBpcmF0aW9uLCBnZnBfdCBnZnApXG42NzkwOlx0e1xuNjc5MTpcdFx0c3RydWN0IG5mdF9zZXRfZXh0ICpleHQ7XG42NzkyOlx0XHR2b2lkICplbGVtO1xuNjc5MzpcdFxuNjc5NDpcdFx0ZWxlbSA9IGt6YWxsb2Moc2V0LVx1MDAzZW9wcy1cdTAwM2VlbGVtc2l6ZSAmIzQzOyB0bXBsLVx1MDAzZWxlbiwgZ2ZwKTtcbjY3OTU6XHRcdGlmIChlbGVtID09IE5VTEwpXG42Nzk2Olx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuNjc5NzpcdFxuNjc5ODpcdFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGVsZW0pO1xuNjc5OTpcdFx0bmZ0X3NldF9leHRfaW5pdChleHQsIHRtcGwpO1xuNjgwMDpcdFxuNjgwMTpcdFx0aWYgKG5mdF9zZXRfZXh0X2V4aXN0cyhleHQsIE5GVF9TRVRfRVhUX0tFWSkgXHUwMDI2XHUwMDI2XG42ODAyOlx0XHQgICAgbmZ0X3NldF9leHRfbWVtY3B5KHRtcGwsIE5GVF9TRVRfRVhUX0tFWSxcbjY4MDM6XHRcdFx0XHQgICAgICAgbmZ0X3NldF9leHRfa2V5KGV4dCksIGtleSwgc2V0LVx1MDAzZWtsZW4pIFx1MDAzYyAwKVxuNjgwNDpcdFx0XHRnb3RvIGVycl9leHRfY2hlY2s7XG42ODA1Olx0XG42ODA2Olx0XHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfS0VZX0VORCkgXHUwMDI2XHUwMDI2XG42ODA3Olx0XHQgICAgbmZ0X3NldF9leHRfbWVtY3B5KHRtcGwsIE5GVF9TRVRfRVhUX0tFWV9FTkQsXG42ODA4Olx0XHRcdFx0ICAgICAgIG5mdF9zZXRfZXh0X2tleV9lbmQoZXh0KSwga2V5X2VuZCwgc2V0LVx1MDAzZWtsZW4pIFx1MDAzYyAwKVxuNjgwOTpcdFx0XHRnb3RvIGVycl9leHRfY2hlY2s7XG42ODEwOlx0XG42ODExOlx0XHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfREFUQSkgXHUwMDI2XHUwMDI2XG42ODEyOlx0XHQgICAgbmZ0X3NldF9leHRfbWVtY3B5KHRtcGwsIE5GVF9TRVRfRVhUX0RBVEEsXG42ODEzOlx0XHRcdFx0ICAgICAgIG5mdF9zZXRfZXh0X2RhdGEoZXh0KSwgZGF0YSwgc2V0LVx1MDAzZWRsZW4pIFx1MDAzYyAwKVxuNjgxNDpcdFx0XHRnb3RvIGVycl9leHRfY2hlY2s7XG42ODE1Olx0XG42ODE2Olx0XHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfVElNRU9VVCkpIHtcbjY4MTc6XHRcdFx0bmZ0X3NldF9leHRfdGltZW91dChleHQpLVx1MDAzZXRpbWVvdXQgPSB0aW1lb3V0O1xuNjgxODpcdFxuNjgxOTpcdFx0XHRpZiAoZXhwaXJhdGlvbiA9PSAwKVxuNjgyMDpcdFx0XHRcdGV4cGlyYXRpb24gPSB0aW1lb3V0O1xuNjgyMTpcdFxuNjgyMjpcdFx0XHRuZnRfc2V0X2V4dF90aW1lb3V0KGV4dCktXHUwMDNlZXhwaXJhdGlvbiA9IGdldF9qaWZmaWVzXzY0KCkgJiM0MzsgZXhwaXJhdGlvbjtcbjY4MjM6XHRcdH1cbjY4MjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMTkKCQkJCQkJCW91dHB1dDogMjE5CgkJCQkJCQl0aG91Z2h0czogMTA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQYXRjaCBBbmFseXNpczogTWVtb3J5IE1hbmFnZW1lbnQgRml4ZXMgaW4gTmV0ZmlsdGVyIFNldHMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyBhYm91dCB0aGUgcmVtb3ZhbCBvZiB0aGF0IGBremFsbG9jYCBpbiBgbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmVgLiBCdXQgdGhhdCB3YXMganVzdCBmb3IgYSB0ZW1wb3JhcnkgY2xvbmUgdGhhdCYjMzk7cyBieXBhc3NlZCBub3cuIFRoZSBjcnVjaWFsIHBvaW50IGlzIHRoYXQgdGhlICphY3R1YWwqIGVsZW1lbnQgbWVtb3J5IGlzIHN0aWxsIHplcm9lZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gdmlhIGBremFsbG9jYC4gU28sIG5vIGltbWVkaWF0ZSByaXNrIHRoZXJlLiBJIGRpZCBhIHF1aWNrIGNoZWNrIG9uIGBuZnRfZXhwcl9jbG9uZWAganVzdCBpbiBjYXNlLCBidXQgdGhhdCBjb3BpZXMgZnJvbSBhbiAqaW5pdGlhbGl6ZWQqIG9yaWdpbmFsIGV4cHJlc3Npb24uCgpUaGVuIEkgbW92ZWQgb24gdG8gdGhlIGNoYW5nZXMgaW4gYG5mdF9zZXRfY29tbWl0X3VwZGF0ZWAuIFNldHRpbmcgYGRlYWQgPSAxYCBvbiBkZWxldGVkIHNldHMuLi4gc291bmRzIGxpa2UgYSB1c2UtYWZ0ZXItZnJlZSBwcm90ZWN0aW9uLiBNYWtlcyBzZW5zZS4KCkRpZ2dpbmcgZnVydGhlciwgSSBsb29rZWQgYXQgYG5mdF9keW5zZXRfaW5pdGAgYW5kIGBuZnRfZHluc2V0X2Rlc3Ryb3lgLiBJdCYjMzk7cyBub3cgc3RvcmluZyBkaXJlY3QgcG9pbnRlcnMgdG8gc2V0IGV4cHJlc3Npb25zLCBpbnN0ZWFkIG9mIGNsb25pbmcgdGhlbSwgd2l0aCB0aGlzIGBvdmVycmlkZV9leHByc2AgZmxhZyB0byBzaWduYWwgd2hldGhlciB0aGUgc2V0IGV4cHJlc3Npb24mIzM5O3MgZXhwcmVzc2lvbnMgc2hvdWxkIGJlIGRlc3Ryb3llZCBvciBub3QuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgYSBkb3VibGUtZnJlZSBvciBVQUYgYnVnIGZpeDogd2UmIzM5O3JlIHByZXZlbnRpbmcgdGhlIGR5bnNldCBleHByZXNzaW9uIGZyb20gZGVzdHJveWluZyB0aGUgc2V0IGV4cHJlc3Npb25zIHdoZW4gdGhleSYjMzk7cmUgbm90IG93bmVkIGJ5IHRoZSBkeW5zZXQgZXhwcmVzc2lvbi4KClNvLCBpbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIGlzIGZpeGluZzoKMS4gIEV4cHJlc3Npb24gY2xvbmluZyBpbiBgbmZ0X2FkZF9zZXRfZWxlbWAuCjIuICBEb3VibGUtZnJlZS9VQUYgaW4gYG5mdF9keW5zZXRfZGVzdHJveWAuCjMuICBTZXR0aW5nIHRoZSBgZGVhZGAgZmxhZyBvbiBkZWxldGVkIHNldHMuCgpJJiMzOTttIGNvbmZpZGVudCB0aGF0IG5vbmUgb2YgdGhlc2UgY2hhbmdlcyBpbnRyb2R1Y2UgKm9yKiBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaGVzZSBhcmUgbWVtb3J5IG1hbmFnZW1lbnQgZml4ZXMsIHB1cmUgYW5kIHNpbXBsZS4gS0FTQU4gaXMgdGhlIHRvb2wgZm9yIHRoZXNlIGtpbmRzIG9mIGJ1Z3MuIEtNU0FOIGlzbiYjMzk7dCBuZWVkZWQgaGVyZS4KCk5vdywgbGV0JiMzOTtzIGRvdWJsZS1jaGVjayBhbnkgcG9zc2libGUgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgdG8gdXNlcnNwYWNlLiBUaGUgZXhwcmVzc2lvbnMgdGhlbXNlbHZlcyBjYW4gZ2V0IGR1bXBlZCB0byB1c2Vyc3BhY2UgdmlhIG5ldGxpbmsuIFRoZSBlbGVtZW50IG1lbW9yeSBnZXRzIGBremFsbG9jYCYjMzk7ZWQgaW4gYG5mdF9zZXRfZWxlbV9pbml0YCwgbWVhbmluZyBpdCYjMzk7cyBhbGwgemVyb2VkLiBUaGUgZXhwcmVzc2lvbnMgYXJlIGNsb25lZCBpbnRvIHRoYXQgemVyb2VkIG1lbW9yeSB3aXRoIGBuZnRfZXhwcl9jbG9uZWAsIHdoaWNoIG1lYW5zLCBiZWNhdXNlIHRoZSBleHByZXNzaW9uIHdhcyBhbHJlYWR5IGluaXRpYWxpemVkIGFuZCBsaWtlbHkgemVyby1wYWRkZWQsIHdlJiMzOTtyZSBub3QgZGVhbGluZyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbHNvLCB0aGlzIHBhdGNoICpkb2VzbiYjMzk7dCogY2hhbmdlIHdoYXQgZ2V0cyBzdG9yZWQgaW4gdGhlIGVsZW1lbnQsIG9ubHkgKmhvdyogaXQgZ2V0cyB0aGVyZS4KClRoZXJlZm9yZSwgbm8sIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucyBoZXJlLgoKKipJJiMzOTttIHNldHRpbmcgTmVlZHNLTVNBTj1mYWxzZS4qKiBUaGlzIGlzIGFsbCBhYm91dCBmaXhpbmcgb2JqZWN0IGxpZmVjeWNsZSBwcm9ibGVtcyBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIHdlbGwgaGFuZGxlZCBieSBLQVNBTi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMTI6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgbGlmZWN5Y2xlIGFuZCBjbG9uaW5nIG9mIG5ldGZpbHRlciBzZXQgZXhwcmVzc2lvbnMgKGBuZnRfZXhwcmApIHRvIGZpeCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgKGxpa2VseSBkb3VibGUtZnJlZXMgb3IgdXNlLWFmdGVyLWZyZWVzKS4gSXQgYXZvaWRzIGNyZWF0aW5nIGludGVybWVkaWF0ZSBjbG9uZXMgb2YgZXhwcmVzc2lvbnMgd2hlbiBhZGRpbmcgZWxlbWVudHMgdG8gYSBzZXQgb3IgaW5pdGlhbGl6aW5nIGEgZHluc2V0LCBpbnN0ZWFkIGNvcHlpbmcgcG9pbnRlcnMgYW5kIHVzaW5nIGEgbmV3IGBvdmVycmlkZV9leHByc2AgZmxhZyB0byB0cmFjayBvd25lcnNoaXAgYW5kIGRldGVybWluZSBpZiB0aGUgZXhwcmVzc2lvbnMgc2hvdWxkIGJlIGRlc3Ryb3llZC4gSXQgYWxzbyBzZXRzIGEgYGRlYWRgIGZsYWcgb24gZGVsZXRlZCBzZXRzIGR1cmluZyBjb21taXQgdXBkYXRlcy4gXG5cblRoZXNlIGNoYW5nZXMgYWRkcmVzcyBvYmplY3QgbGlmZWN5Y2xlIGJ1Z3MgKFVBRiwgZG91YmxlLWZyZWUpIHdoaWNoIGFyZSByZWxpYWJseSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIG1lbW9yeSBmb3IgdGhlIHNldCBlbGVtZW50cyB0aGVtc2VsdmVzIGNvbnRpbnVlcyB0byBiZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgKGluIGBuZnRfc2V0X2VsZW1faW5pdGApLCBlbnN1cmluZyBhbGwgZmllbGRzIGFuZCBwYWRkaW5nIGFyZSBmdWxseSB6ZXJvZWQuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBpbnRyb2R1Y2VkLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2Ugb3IgdXNlZCBpbiBjb250cm9sIGZsb3cuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBsaWZlY3ljbGUgYW5kIGNsb25pbmcgb2YgbmV0ZmlsdGVyIHNldCBleHByZXNzaW9ucyAoYG5mdF9leHByYCkgdG8gZml4IG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyAobGlrZWx5IGRvdWJsZS1mcmVlcyBvciB1c2UtYWZ0ZXItZnJlZXMpLiBJdCBhdm9pZHMgY3JlYXRpbmcgaW50ZXJtZWRpYXRlIGNsb25lcyBvZiBleHByZXNzaW9ucyB3aGVuIGFkZGluZyBlbGVtZW50cyB0byBhIHNldCBvciBpbml0aWFsaXppbmcgYSBkeW5zZXQsIGluc3RlYWQgY29weWluZyBwb2ludGVycyBhbmQgdXNpbmcgYSBuZXcgYG92ZXJyaWRlX2V4cHJzYCBmbGFnIHRvIHRyYWNrIG93bmVyc2hpcCBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBleHByZXNzaW9ucyBzaG91bGQgYmUgZGVzdHJveWVkLiBJdCBhbHNvIHNldHMgYSBgZGVhZGAgZmxhZyBvbiBkZWxldGVkIHNldHMgZHVyaW5nIGNvbW1pdCB1cGRhdGVzLiBcblxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG9iamVjdCBsaWZlY3ljbGUgYnVncyAoVUFGLCBkb3VibGUtZnJlZSkgd2hpY2ggYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgbWVtb3J5IGZvciB0aGUgc2V0IGVsZW1lbnRzIHRoZW1zZWx2ZXMgY29udGludWVzIHRvIGJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCAoaW4gYG5mdF9zZXRfZWxlbV9pbml0YCksIGVuc3VyaW5nIGFsbCBmaWVsZHMgYW5kIHBhZGRpbmcgYXJlIGZ1bGx5IHplcm9lZC4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDA6NDUuNjIwNDU1OTI5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3OTk1NTg1NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mX3RhYmxlc19uZXdzZXRlbGVtXCIsXG4gICAgXCJuZl90YWJsZXNfbmV3c2V0XCIsXG4gICAgXCJuZl90YWJsZXNfZGVsc2V0XCIsXG4gICAgXCJuZl90YWJsZXNfY29tbWl0XCIsXG4gICAgXCJuZl90YWJsZXNfbmV3cnVsZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgbGlmZWN5Y2xlIGFuZCBjbG9uaW5nIG9mIG5ldGZpbHRlciBzZXQgZXhwcmVzc2lvbnMgKGBuZnRfZXhwcmApIHRvIGZpeCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgKGxpa2VseSBkb3VibGUtZnJlZXMgb3IgdXNlLWFmdGVyLWZyZWVzKS4gSXQgYXZvaWRzIGNyZWF0aW5nIGludGVybWVkaWF0ZSBjbG9uZXMgb2YgZXhwcmVzc2lvbnMgd2hlbiBhZGRpbmcgZWxlbWVudHMgdG8gYSBzZXQgb3IgaW5pdGlhbGl6aW5nIGEgZHluc2V0LCBpbnN0ZWFkIGNvcHlpbmcgcG9pbnRlcnMgYW5kIHVzaW5nIGEgbmV3IGBvdmVycmlkZV9leHByc2AgZmxhZyB0byB0cmFjayBvd25lcnNoaXAgYW5kIGRldGVybWluZSBpZiB0aGUgZXhwcmVzc2lvbnMgc2hvdWxkIGJlIGRlc3Ryb3llZC4gSXQgYWxzbyBzZXRzIGEgYGRlYWRgIGZsYWcgb24gZGVsZXRlZCBzZXRzIGR1cmluZyBjb21taXQgdXBkYXRlcy4gXFxuXFxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG9iamVjdCBsaWZlY3ljbGUgYnVncyAoVUFGLCBkb3VibGUtZnJlZSkgd2hpY2ggYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgbWVtb3J5IGZvciB0aGUgc2V0IGVsZW1lbnRzIHRoZW1zZWx2ZXMgY29udGludWVzIHRvIGJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCAoaW4gYG5mdF9zZXRfZWxlbV9pbml0YCksIGVuc3VyaW5nIGFsbCBmaWVsZHMgYW5kIHBhZGRpbmcgYXJlIGZ1bGx5IHplcm9lZC4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5mX3RhYmxlcyBsb2dpYyBmb3IgaGFuZGxpbmcgc2V0IGVsZW1lbnQgZXhwcmVzc2lvbnMgYW5kIGR5bmFtaWMgc2V0cywgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBleHByZXNzaW9ucyBhcmUgY2xvbmVkIGFuZCBkZXN0cm95ZWQuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvbW1pdCBwaGFzZSBmb3Igc2V0IGRlbGV0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmssIG1ha2luZyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQwOjQ1LjYyMDQ2MDMwOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MjExODI4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM4NzdhMjg4MDRiMzY2YzI1YjkyOWYzZGExNWNmN2VkZGEzNjMwY2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjEgMTI6NDA6NDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXFxuaW5kZXggMjM4ZjZlY2I5MGU5OS4uOWQ1OTc0ODIzNjNkOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcXG4rKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmhcXG5AQCAtODcwLDggKzg3MCw2IEBAIHN0cnVjdCBuZnRfZWxlbV9wcml2ICpuZnRfc2V0X2VsZW1faW5pdChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbiBcXHRcXHRcXHRcXHRcXHRjb25zdCB1MzIgKmtleSwgY29uc3QgdTMyICprZXlfZW5kLFxcbiBcXHRcXHRcXHRcXHRcXHRjb25zdCB1MzIgKmRhdGEsXFxuIFxcdFxcdFxcdFxcdFxcdHU2NCB0aW1lb3V0LCB1NjQgZXhwaXJhdGlvbiwgZ2ZwX3QgZ2ZwKTtcXG4taW50IG5mdF9zZXRfZWxlbV9leHByX2Nsb25lKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHJfYXJyYXlbXSk7XFxuIHZvaWQgbmZ0X3NldF9lbGVtX2V4cHJfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9zZXRfZWxlbV9leHByICplbGVtX2V4cHIpO1xcbiB2b2lkIG5mdF9zZXRfZWxlbV9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcXG5pbmRleCBjMTEyZWNjNGZjYTMyLi4zODQ1MDVmNjgwZGVmIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcXG5AQCAtNjkyMSwzOSArNjkyMSwxMSBAQCBzdGF0aWMgdm9pZCBuZnRfdHJhbnNfZWxlbXNfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXHRcXHRuZl90YWJsZXNfc2V0X2VsZW1fZGVzdHJveShjdHgsIHRlLVxcdTAwM2VzZXQsIHRlLVxcdTAwM2VlbGVtc1tpXS5wcml2KTtcXG4gfVxcbiBcXG4taW50IG5mdF9zZXRfZWxlbV9leHByX2Nsb25lKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuLVxcdFxcdFxcdCAgICBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHJfYXJyYXlbXSlcXG4te1xcbi1cXHRzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHI7XFxuLVxcdGludCBlcnIsIGksIGs7XFxuLVxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc2V0LVxcdTAwM2VudW1fZXhwcnM7IGkrKykge1xcbi1cXHRcXHRleHByID0ga3phbGxvYyhzZXQtXFx1MDAzZWV4cHJzW2ldLVxcdTAwM2VvcHMtXFx1MDAzZXNpemUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLVxcdFxcdGlmICghZXhwcilcXG4tXFx0XFx0XFx0Z290byBlcnJfZXhwcjtcXG4tXFxuLVxcdFxcdGVyciA9IG5mdF9leHByX2Nsb25lKGV4cHIsIHNldC1cXHUwMDNlZXhwcnNbaV0sIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuLVxcdFxcdFxcdGtmcmVlKGV4cHIpO1xcbi1cXHRcXHRcXHRnb3RvIGVycl9leHByO1xcbi1cXHRcXHR9XFxuLVxcdFxcdGV4cHJfYXJyYXlbaV0gPSBleHByO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4tXFxuLWVycl9leHByOlxcbi1cXHRmb3IgKGsgPSBpIC0gMTsgayBcXHUwMDNlPSAwOyBrLS0pXFxuLVxcdFxcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2tdKTtcXG4tXFxuLVxcdHJldHVybiAtRU5PTUVNO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuIFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLFxcbiBcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9leHByICpleHByX2FycmF5W10sXFxuLVxcdFxcdFxcdFxcdCAgIHUzMiBudW1fZXhwcnMpXFxuK1xcdFxcdFxcdFxcdCAgIHUzMiBudW1fZXhwcnMsIGJvb2wgb3ZlcnJpZGVfZXhwcnMpXFxuIHtcXG4gXFx0c3RydWN0IG5mdF9zZXRfZWxlbV9leHByICplbGVtX2V4cHIgPSBuZnRfc2V0X2V4dF9leHByKGV4dCk7XFxuIFxcdHUzMiBsZW4gPSBzaXplb2Yoc3RydWN0IG5mdF9zZXRfZWxlbV9leHByKTtcXG5AQCAtNjk3Niw3ICs2OTQ4LDggQEAgc3RhdGljIGludCBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXHRcXHRcXHRnb3RvIGVycl9lbGVtX2V4cHJfc2V0dXA7XFxuIFxcbiBcXHRcXHRlbGVtX2V4cHItXFx1MDAzZXNpemUgKz0gZXhwcl9hcnJheVtpXS1cXHUwMDNlb3BzLVxcdTAwM2VzaXplO1xcbi1cXHRcXHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XFxuK1xcdFxcdGlmIChvdmVycmlkZV9leHBycylcXG4rXFx0XFx0XFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pO1xcbiBcXHRcXHRleHByX2FycmF5W2ldID0gTlVMTDtcXG4gXFx0fVxcbiBcXG5AQCAtNjk4NCw3ICs2OTU3LDkgQEAgc3RhdGljIGludCBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXG4gZXJyX2VsZW1fZXhwcl9zZXR1cDpcXG4gXFx0Zm9yICg7IGkgXFx1MDAzYyBudW1fZXhwcnM7IGkrKykge1xcbi1cXHRcXHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XFxuK1xcdFxcdGlmIChvdmVycmlkZV9leHBycylcXG4rXFx0XFx0XFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pO1xcbitcXG4gXFx0XFx0ZXhwcl9hcnJheVtpXSA9IE5VTEw7XFxuIFxcdH1cXG4gXFxuQEAgLTcyODAsNiArNzI1NSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbiBcXHRzdHJ1Y3QgbmZ0X3NldF9iaW5kaW5nICpiaW5kaW5nO1xcbiBcXHRzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqZWxlbV9wcml2O1xcbiBcXHRzdHJ1Y3QgbmZ0X29iamVjdCAqb2JqID0gTlVMTDtcXG4rXFx0Ym9vbCBvdmVycmlkZV9leHBycyA9IGZhbHNlO1xcbiBcXHRzdHJ1Y3QgbmZ0X3VzZXJkYXRhICp1ZGF0YTtcXG4gXFx0c3RydWN0IG5mdF9kYXRhX2Rlc2MgZGVzYztcXG4gXFx0ZW51bSBuZnRfcmVnaXN0ZXJzIGRyZWc7XFxuQEAgLTczODUsNiArNzM2MSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbiBcXG4gXFx0XFx0ZXhwcl9hcnJheVswXSA9IGV4cHI7XFxuIFxcdFxcdG51bV9leHBycyA9IDE7XFxuK1xcdFxcdG92ZXJyaWRlX2V4cHJzID0gdHJ1ZTtcXG4gXFxuIFxcdFxcdGlmIChzZXQtXFx1MDAzZW51bV9leHBycyBcXHUwMDI2XFx1MDAyNiBzZXQtXFx1MDAzZWV4cHJzWzBdLVxcdTAwM2VvcHMgIT0gZXhwci1cXHUwMDNlb3BzKSB7XFxuIFxcdFxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbkBAIC03NDEzLDYgKzczOTAsNyBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRleHByX2FycmF5W2ldID0gZXhwcjtcXG4gXFx0XFx0XFx0bnVtX2V4cHJzKys7XFxuK1xcdFxcdFxcdG92ZXJyaWRlX2V4cHJzID0gdHJ1ZTtcXG4gXFxuIFxcdFxcdFxcdGlmIChzZXQtXFx1MDAzZW51bV9leHBycyBcXHUwMDI2XFx1MDAyNiBleHByLVxcdTAwM2VvcHMgIT0gc2V0LVxcdTAwM2VleHByc1tpXS1cXHUwMDNlb3BzKSB7XFxuIFxcdFxcdFxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbkBAIC03NDI2LDkgKzc0MDQsOCBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKHNldC1cXHUwMDNlbnVtX2V4cHJzIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAhKGZsYWdzIFxcdTAwMjYgTkZUX1NFVF9FTEVNX0lOVEVSVkFMX0VORCkpIHtcXG4tXFx0XFx0ZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY3R4LCBzZXQsIGV4cHJfYXJyYXkpO1xcbi1cXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4tXFx0XFx0XFx0Z290byBlcnJfc2V0X2VsZW1fZXhwcl9jbG9uZTtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHNldC1cXHUwMDNlbnVtX2V4cHJzOyBpKyspXFxuK1xcdFxcdFxcdGV4cHJfYXJyYXlbaV0gPSBzZXQtXFx1MDAzZWV4cHJzW2ldO1xcbiBcXG4gXFx0XFx0bnVtX2V4cHJzID0gc2V0LVxcdTAwM2VudW1fZXhwcnM7XFxuIFxcdH1cXG5AQCAtNzU2Nyw3ICs3NTQ0LDggQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxuIFxcdFxcdHVkYXRhLVxcdTAwM2VsZW4gPSB1bGVuIC0gMTtcXG4gXFx0XFx0bmxhX21lbWNweShcXHUwMDI2dWRhdGEtXFx1MDAzZWRhdGEsIG5sYVtORlRBX1NFVF9FTEVNX1VTRVJEQVRBXSwgdWxlbik7XFxuIFxcdH1cXG4tXFx0ZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoY3R4LCBcXHUwMDI2dG1wbCwgZXh0LCBleHByX2FycmF5LCBudW1fZXhwcnMpO1xcbitcXHRlcnIgPSBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChjdHgsIFxcdTAwMjZ0bXBsLCBleHQsIGV4cHJfYXJyYXksIG51bV9leHBycyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgb3ZlcnJpZGVfZXhwcnMpO1xcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byBlcnJfZWxlbV9mcmVlO1xcbiBcXG5AQCAtNzY3NSw5ICs3NjUzLDExIEBAIHN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbiBlcnJfcGFyc2Vfa2V5OlxcbiBcXHRuZnRfZGF0YV9yZWxlYXNlKFxcdTAwMjZlbGVtLmtleS52YWwsIE5GVF9EQVRBX1ZBTFVFKTtcXG4gZXJyX3NldF9lbGVtX2V4cHI6XFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fZXhwcnMgXFx1MDAyNlxcdTAwMjYgZXhwcl9hcnJheVtpXTsgaSsrKVxcbi1cXHRcXHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XFxuLWVycl9zZXRfZWxlbV9leHByX2Nsb25lOlxcbitcXHRpZiAob3ZlcnJpZGVfZXhwcnMpIHtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9leHBycyBcXHUwMDI2XFx1MDAyNiBleHByX2FycmF5W2ldOyBpKyspXFxuK1xcdFxcdFxcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTtcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG5AQCAtMTA4OTQsNiArMTA4NzQsMTAgQEAgc3RhdGljIHZvaWQgbmZ0X3NldF9jb21taXRfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuIFxcdFxcdG5mdF9jdHhfdXBkYXRlKGN0eCwgdHJhbnMpO1xcbiBcXG4gXFx0XFx0c3dpdGNoICh0cmFucy1cXHUwMDNlbXNnX3R5cGUpIHtcXG4rXFx0XFx0Y2FzZSBORlRfTVNHX0RFTFNFVDpcXG4rXFx0XFx0Y2FzZSBORlRfTVNHX0RFU1RST1lTRVQ6XFxuK1xcdFxcdFxcdG5mdF90cmFuc19zZXQodHJhbnMpLVxcdTAwM2VkZWFkID0gMTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGNhc2UgTkZUX01TR19ERUxTRVRFTEVNOlxcbiBcXHRcXHRcXHR0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7XFxuIFxcdFxcdFxcdGlmICghdGUtXFx1MDAzZXNldC1cXHUwMDNlb3BzLVxcdTAwM2Vjb21taXQpXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jIGIvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmNcXG5pbmRleCBlZTlkM2U3YjFlY2YxLi44M2U1NmIxYWE4NTg1IDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmNcXG5AQCAtMTksNyArMTksOCBAQCBzdHJ1Y3QgbmZ0X2R5bnNldCB7XFxuIFxcdHU4XFx0XFx0XFx0XFx0c3JlZ19rZXk7XFxuIFxcdHU4XFx0XFx0XFx0XFx0c3JlZ19kYXRhO1xcbiBcXHRib29sXFx0XFx0XFx0XFx0aW52ZXJ0O1xcbi1cXHRib29sXFx0XFx0XFx0XFx0ZXhwcjtcXG4rXFx0Ym9vbFxcdFxcdFxcdFxcdGV4cHI6MSxcXG4rXFx0XFx0XFx0XFx0XFx0b3ZlcnJpZGVfZXhwcnM6MTtcXG4gXFx0dThcXHRcXHRcXHRcXHRudW1fZXhwcnM7XFxuIFxcdHU2NFxcdFxcdFxcdFxcdHRpbWVvdXQ7XFxuIFxcdHN0cnVjdCBuZnRfZXhwclxcdFxcdFxcdCpleHByX2FycmF5W05GVF9TRVRfRVhQUl9NQVhdO1xcbkBAIC0yNTcsNiArMjU4LDcgQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gXFxuIFxcdFxcdHByaXYtXFx1MDAzZW51bV9leHBycysrO1xcbiBcXHRcXHRwcml2LVxcdTAwM2VleHByX2FycmF5WzBdID0gZHluc2V0X2V4cHI7XFxuK1xcdFxcdHByaXYtXFx1MDAzZW92ZXJyaWRlX2V4cHJzID0gdHJ1ZTtcXG4gXFxuIFxcdFxcdGlmIChzZXQtXFx1MDAzZW51bV9leHBycyBcXHUwMDNlIDEgfHxcXG4gXFx0XFx0ICAgIChzZXQtXFx1MDAzZW51bV9leHBycyA9PSAxIFxcdTAwMjZcXHUwMDI2XFxuQEAgLTI4OSw2ICsyOTEsNyBAQCBzdGF0aWMgaW50IG5mdF9keW5zZXRfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdHByaXYtXFx1MDAzZWV4cHJfYXJyYXlbaV0gPSBkeW5zZXRfZXhwcjtcXG4gXFx0XFx0XFx0cHJpdi1cXHUwMDNlbnVtX2V4cHJzKys7XFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZW92ZXJyaWRlX2V4cHJzID0gdHJ1ZTtcXG4gXFxuIFxcdFxcdFxcdGlmIChzZXQtXFx1MDAzZW51bV9leHBycykge1xcbiBcXHRcXHRcXHRcXHRpZiAoaSBcXHUwMDNlPSBzZXQtXFx1MDAzZW51bV9leHBycykge1xcbkBAIC0zMDcsOSArMzEwLDggQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gXFx0XFx0XFx0Z290byBlcnJfZXhwcl9mcmVlO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSBpZiAoc2V0LVxcdTAwM2VudW1fZXhwcnMgXFx1MDAzZSAwKSB7XFxuLVxcdFxcdGVyciA9IG5mdF9zZXRfZWxlbV9leHByX2Nsb25lKGN0eCwgc2V0LCBwcml2LVxcdTAwM2VleHByX2FycmF5KTtcXG4tXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzZXQtXFx1MDAzZW51bV9leHByczsgaSsrKVxcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VleHByX2FycmF5W2ldID0gc2V0LVxcdTAwM2VleHByc1tpXTtcXG4gXFxuIFxcdFxcdHByaXYtXFx1MDAzZW51bV9leHBycyA9IHNldC1cXHUwMDNlbnVtX2V4cHJzO1xcbiBcXHR9XFxuQEAgLTMzOSw4ICszNDEsMTAgQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbiBlcnJfZXhwcl9mcmVlOlxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJpdi1cXHUwMDNlbnVtX2V4cHJzOyBpKyspXFxuLVxcdFxcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBwcml2LVxcdTAwM2VleHByX2FycmF5W2ldKTtcXG4rXFx0aWYgKHByaXYtXFx1MDAzZW92ZXJyaWRlX2V4cHJzKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwcml2LVxcdTAwM2VudW1fZXhwcnM7IGkrKylcXG4rXFx0XFx0XFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIHByaXYtXFx1MDAzZWV4cHJfYXJyYXlbaV0pO1xcbitcXHR9XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTM2Nyw5ICszNzEsMTAgQEAgc3RhdGljIHZvaWQgbmZ0X2R5bnNldF9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuIFxcdHN0cnVjdCBuZnRfZHluc2V0ICpwcml2ID0gbmZ0X2V4cHJfcHJpdihleHByKTtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJpdi1cXHUwMDNlbnVtX2V4cHJzOyBpKyspXFxuLVxcdFxcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBwcml2LVxcdTAwM2VleHByX2FycmF5W2ldKTtcXG4tXFxuK1xcdGlmIChwcml2LVxcdTAwM2VvdmVycmlkZV9leHBycykge1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJpdi1cXHUwMDNlbnVtX2V4cHJzOyBpKyspXFxuK1xcdFxcdFxcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBwcml2LVxcdTAwM2VleHByX2FycmF5W2ldKTtcXG4rXFx0fVxcbiBcXHRuZl90YWJsZXNfZGVzdHJveV9zZXQoY3R4LCBwcml2LVxcdTAwM2VzZXQpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MDo0Ny4wNzMzMzI3NDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1MzUzMTMxNzg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl90YWJsZXNfbmV3c2V0ZWxlbVwiLFxuICAgIFwibmZfdGFibGVzX25ld3NldFwiLFxuICAgIFwibmZfdGFibGVzX2RlbHNldFwiLFxuICAgIFwibmZfdGFibGVzX2NvbW1pdFwiLFxuICAgIFwibmZfdGFibGVzX25ld3J1bGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5mX3RhYmxlcyBsb2dpYyBmb3IgaGFuZGxpbmcgc2V0IGVsZW1lbnQgZXhwcmVzc2lvbnMgYW5kIGR5bmFtaWMgc2V0cywgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBleHByZXNzaW9ucyBhcmUgY2xvbmVkIGFuZCBkZXN0cm95ZWQuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvbW1pdCBwaGFzZSBmb3Igc2V0IGRlbGV0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmssIG1ha2luZyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM4NzdhMjg4MDRiMzY2YzI1YjkyOWYzZGExNWNmN2VkZGEzNjMwY2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMjo0MDo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuaW5kZXggMjM4ZjZlY2I5MGU5OS4uOWQ1OTc0ODIzNjNkOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXG5AQCAtODcwLDggKzg3MCw2IEBAIHN0cnVjdCBuZnRfZWxlbV9wcml2ICpuZnRfc2V0X2VsZW1faW5pdChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFx0XHRcdFx0XHRjb25zdCB1MzIgKmtleSwgY29uc3QgdTMyICprZXlfZW5kLFxuIFx0XHRcdFx0XHRjb25zdCB1MzIgKmRhdGEsXG4gXHRcdFx0XHRcdHU2NCB0aW1lb3V0LCB1NjQgZXhwaXJhdGlvbiwgZ2ZwX3QgZ2ZwKTtcbi1pbnQgbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbi1cdFx0XHQgICAgc3RydWN0IG5mdF9leHByICpleHByX2FycmF5W10pO1xuIHZvaWQgbmZ0X3NldF9lbGVtX2V4cHJfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIgKmVsZW1fZXhwcik7XG4gdm9pZCBuZnRfc2V0X2VsZW1fZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbmluZGV4IGMxMTJlY2M0ZmNhMzIuLjM4NDUwNWY2ODBkZWYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbkBAIC02OTIxLDM5ICs2OTIxLDExIEBAIHN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdG5mX3RhYmxlc19zZXRfZWxlbV9kZXN0cm95KGN0eCwgdGUtXHUwMDNlc2V0LCB0ZS1cdTAwM2VlbGVtc1tpXS5wcml2KTtcbiB9XG4gXG4taW50IG5mdF9zZXRfZWxlbV9leHByX2Nsb25lKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tXHRcdFx0ICAgIHN0cnVjdCBuZnRfZXhwciAqZXhwcl9hcnJheVtdKVxuLXtcbi1cdHN0cnVjdCBuZnRfZXhwciAqZXhwcjtcbi1cdGludCBlcnIsIGksIGs7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzZXQtXHUwMDNlbnVtX2V4cHJzOyBpKyspIHtcbi1cdFx0ZXhwciA9IGt6YWxsb2Moc2V0LVx1MDAzZWV4cHJzW2ldLVx1MDAzZW9wcy1cdTAwM2VzaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0XHRpZiAoIWV4cHIpXG4tXHRcdFx0Z290byBlcnJfZXhwcjtcbi1cbi1cdFx0ZXJyID0gbmZ0X2V4cHJfY2xvbmUoZXhwciwgc2V0LVx1MDAzZWV4cHJzW2ldLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4tXHRcdFx0a2ZyZWUoZXhwcik7XG4tXHRcdFx0Z290byBlcnJfZXhwcjtcbi1cdFx0fVxuLVx0XHRleHByX2FycmF5W2ldID0gZXhwcjtcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLVxuLWVycl9leHByOlxuLVx0Zm9yIChrID0gaSAtIDE7IGsgXHUwMDNlPSAwOyBrLS0pXG4tXHRcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2tdKTtcbi1cbi1cdHJldHVybiAtRU5PTUVNO1xuLX1cbi1cbiBzdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHRfdG1wbCAqdG1wbCxcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0LFxuIFx0XHRcdFx0ICAgc3RydWN0IG5mdF9leHByICpleHByX2FycmF5W10sXG4tXHRcdFx0XHQgICB1MzIgbnVtX2V4cHJzKVxuK1x0XHRcdFx0ICAgdTMyIG51bV9leHBycywgYm9vbCBvdmVycmlkZV9leHBycylcbiB7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIgKmVsZW1fZXhwciA9IG5mdF9zZXRfZXh0X2V4cHIoZXh0KTtcbiBcdHUzMiBsZW4gPSBzaXplb2Yoc3RydWN0IG5mdF9zZXRfZWxlbV9leHByKTtcbkBAIC02OTc2LDcgKzY5NDgsOCBAQCBzdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0Z290byBlcnJfZWxlbV9leHByX3NldHVwO1xuIFxuIFx0XHRlbGVtX2V4cHItXHUwMDNlc2l6ZSArPSBleHByX2FycmF5W2ldLVx1MDAzZW9wcy1cdTAwM2VzaXplO1xuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XG4rXHRcdGlmIChvdmVycmlkZV9leHBycylcbitcdFx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XG4gXHRcdGV4cHJfYXJyYXlbaV0gPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTY5ODQsNyArNjk1Nyw5IEBAIHN0YXRpYyBpbnQgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcbiBlcnJfZWxlbV9leHByX3NldHVwOlxuIFx0Zm9yICg7IGkgXHUwMDNjIG51bV9leHByczsgaSsrKSB7XG4tXHRcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTtcbitcdFx0aWYgKG92ZXJyaWRlX2V4cHJzKVxuK1x0XHRcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTtcbitcbiBcdFx0ZXhwcl9hcnJheVtpXSA9IE5VTEw7XG4gXHR9XG4gXG5AQCAtNzI4MCw2ICs3MjU1LDcgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXHRzdHJ1Y3QgbmZ0X3NldF9iaW5kaW5nICpiaW5kaW5nO1xuIFx0c3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdjtcbiBcdHN0cnVjdCBuZnRfb2JqZWN0ICpvYmogPSBOVUxMO1xuK1x0Ym9vbCBvdmVycmlkZV9leHBycyA9IGZhbHNlO1xuIFx0c3RydWN0IG5mdF91c2VyZGF0YSAqdWRhdGE7XG4gXHRzdHJ1Y3QgbmZ0X2RhdGFfZGVzYyBkZXNjO1xuIFx0ZW51bSBuZnRfcmVnaXN0ZXJzIGRyZWc7XG5AQCAtNzM4NSw2ICs3MzYxLDcgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXG4gXHRcdGV4cHJfYXJyYXlbMF0gPSBleHByO1xuIFx0XHRudW1fZXhwcnMgPSAxO1xuK1x0XHRvdmVycmlkZV9leHBycyA9IHRydWU7XG4gXG4gXHRcdGlmIChzZXQtXHUwMDNlbnVtX2V4cHJzIFx1MDAyNlx1MDAyNiBzZXQtXHUwMDNlZXhwcnNbMF0tXHUwMDNlb3BzICE9IGV4cHItXHUwMDNlb3BzKSB7XG4gXHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG5AQCAtNzQxMyw2ICs3MzkwLDcgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXHRcdFx0fVxuIFx0XHRcdGV4cHJfYXJyYXlbaV0gPSBleHByO1xuIFx0XHRcdG51bV9leHBycysrO1xuK1x0XHRcdG92ZXJyaWRlX2V4cHJzID0gdHJ1ZTtcbiBcbiBcdFx0XHRpZiAoc2V0LVx1MDAzZW51bV9leHBycyBcdTAwMjZcdTAwMjYgZXhwci1cdTAwM2VvcHMgIT0gc2V0LVx1MDAzZWV4cHJzW2ldLVx1MDAzZW9wcykge1xuIFx0XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG5AQCAtNzQyNiw5ICs3NDA0LDggQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoc2V0LVx1MDAzZW51bV9leHBycyBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIShmbGFncyBcdTAwMjYgTkZUX1NFVF9FTEVNX0lOVEVSVkFMX0VORCkpIHtcbi1cdFx0ZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY3R4LCBzZXQsIGV4cHJfYXJyYXkpO1xuLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRcdGdvdG8gZXJyX3NldF9lbGVtX2V4cHJfY2xvbmU7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNldC1cdTAwM2VudW1fZXhwcnM7IGkrKylcbitcdFx0XHRleHByX2FycmF5W2ldID0gc2V0LVx1MDAzZWV4cHJzW2ldO1xuIFxuIFx0XHRudW1fZXhwcnMgPSBzZXQtXHUwMDNlbnVtX2V4cHJzO1xuIFx0fVxuQEAgLTc1NjcsNyArNzU0NCw4IEBAIHN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFx0XHR1ZGF0YS1cdTAwM2VsZW4gPSB1bGVuIC0gMTtcbiBcdFx0bmxhX21lbWNweShcdTAwMjZ1ZGF0YS1cdTAwM2VkYXRhLCBubGFbTkZUQV9TRVRfRUxFTV9VU0VSREFUQV0sIHVsZW4pO1xuIFx0fVxuLVx0ZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoY3R4LCBcdTAwMjZ0bXBsLCBleHQsIGV4cHJfYXJyYXksIG51bV9leHBycyk7XG4rXHRlcnIgPSBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChjdHgsIFx1MDAyNnRtcGwsIGV4dCwgZXhwcl9hcnJheSwgbnVtX2V4cHJzLFxuK1x0XHRcdFx0ICAgICAgb3ZlcnJpZGVfZXhwcnMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfZWxlbV9mcmVlO1xuIFxuQEAgLTc2NzUsOSArNzY1MywxMSBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbiBlcnJfcGFyc2Vfa2V5OlxuIFx0bmZ0X2RhdGFfcmVsZWFzZShcdTAwMjZlbGVtLmtleS52YWwsIE5GVF9EQVRBX1ZBTFVFKTtcbiBlcnJfc2V0X2VsZW1fZXhwcjpcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9leHBycyBcdTAwMjZcdTAwMjYgZXhwcl9hcnJheVtpXTsgaSsrKVxuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XG4tZXJyX3NldF9lbGVtX2V4cHJfY2xvbmU6XG4rXHRpZiAob3ZlcnJpZGVfZXhwcnMpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2V4cHJzIFx1MDAyNlx1MDAyNiBleHByX2FycmF5W2ldOyBpKyspXG4rXHRcdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pO1xuK1x0fVxuK1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTA4OTQsNiArMTA4NzQsMTAgQEAgc3RhdGljIHZvaWQgbmZ0X3NldF9jb21taXRfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdG5mdF9jdHhfdXBkYXRlKGN0eCwgdHJhbnMpO1xuIFxuIFx0XHRzd2l0Y2ggKHRyYW5zLVx1MDAzZW1zZ190eXBlKSB7XG4rXHRcdGNhc2UgTkZUX01TR19ERUxTRVQ6XG4rXHRcdGNhc2UgTkZUX01TR19ERVNUUk9ZU0VUOlxuK1x0XHRcdG5mdF90cmFuc19zZXQodHJhbnMpLVx1MDAzZWRlYWQgPSAxO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIE5GVF9NU0dfREVMU0VURUxFTTpcbiBcdFx0XHR0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7XG4gXHRcdFx0aWYgKCF0ZS1cdTAwM2VzZXQtXHUwMDNlb3BzLVx1MDAzZWNvbW1pdClcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jXG5pbmRleCBlZTlkM2U3YjFlY2YxLi44M2U1NmIxYWE4NTg1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jXG5AQCAtMTksNyArMTksOCBAQCBzdHJ1Y3QgbmZ0X2R5bnNldCB7XG4gXHR1OFx0XHRcdFx0c3JlZ19rZXk7XG4gXHR1OFx0XHRcdFx0c3JlZ19kYXRhO1xuIFx0Ym9vbFx0XHRcdFx0aW52ZXJ0O1xuLVx0Ym9vbFx0XHRcdFx0ZXhwcjtcbitcdGJvb2xcdFx0XHRcdGV4cHI6MSxcbitcdFx0XHRcdFx0b3ZlcnJpZGVfZXhwcnM6MTtcbiBcdHU4XHRcdFx0XHRudW1fZXhwcnM7XG4gXHR1NjRcdFx0XHRcdHRpbWVvdXQ7XG4gXHRzdHJ1Y3QgbmZ0X2V4cHJcdFx0XHQqZXhwcl9hcnJheVtORlRfU0VUX0VYUFJfTUFYXTtcbkBAIC0yNTcsNiArMjU4LDcgQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcbiBcdFx0cHJpdi1cdTAwM2VudW1fZXhwcnMrKztcbiBcdFx0cHJpdi1cdTAwM2VleHByX2FycmF5WzBdID0gZHluc2V0X2V4cHI7XG4rXHRcdHByaXYtXHUwMDNlb3ZlcnJpZGVfZXhwcnMgPSB0cnVlO1xuIFxuIFx0XHRpZiAoc2V0LVx1MDAzZW51bV9leHBycyBcdTAwM2UgMSB8fFxuIFx0XHQgICAgKHNldC1cdTAwM2VudW1fZXhwcnMgPT0gMSBcdTAwMjZcdTAwMjZcbkBAIC0yODksNiArMjkxLDcgQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0XHR9XG4gXHRcdFx0cHJpdi1cdTAwM2VleHByX2FycmF5W2ldID0gZHluc2V0X2V4cHI7XG4gXHRcdFx0cHJpdi1cdTAwM2VudW1fZXhwcnMrKztcbitcdFx0XHRwcml2LVx1MDAzZW92ZXJyaWRlX2V4cHJzID0gdHJ1ZTtcbiBcbiBcdFx0XHRpZiAoc2V0LVx1MDAzZW51bV9leHBycykge1xuIFx0XHRcdFx0aWYgKGkgXHUwMDNlPSBzZXQtXHUwMDNlbnVtX2V4cHJzKSB7XG5AQCAtMzA3LDkgKzMxMCw4IEBAIHN0YXRpYyBpbnQgbmZ0X2R5bnNldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0Z290byBlcnJfZXhwcl9mcmVlO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKHNldC1cdTAwM2VudW1fZXhwcnMgXHUwMDNlIDApIHtcbi1cdFx0ZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY3R4LCBzZXQsIHByaXYtXHUwMDNlZXhwcl9hcnJheSk7XG4tXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2V0LVx1MDAzZW51bV9leHByczsgaSsrKVxuK1x0XHRcdHByaXYtXHUwMDNlZXhwcl9hcnJheVtpXSA9IHNldC1cdTAwM2VleHByc1tpXTtcbiBcbiBcdFx0cHJpdi1cdTAwM2VudW1fZXhwcnMgPSBzZXQtXHUwMDNlbnVtX2V4cHJzO1xuIFx0fVxuQEAgLTMzOSw4ICszNDEsMTAgQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdHJldHVybiAwO1xuIFxuIGVycl9leHByX2ZyZWU6XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcml2LVx1MDAzZW51bV9leHByczsgaSsrKVxuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgcHJpdi1cdTAwM2VleHByX2FycmF5W2ldKTtcbitcdGlmIChwcml2LVx1MDAzZW92ZXJyaWRlX2V4cHJzKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByaXYtXHUwMDNlbnVtX2V4cHJzOyBpKyspXG4rXHRcdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIHByaXYtXHUwMDNlZXhwcl9hcnJheVtpXSk7XG4rXHR9XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0zNjcsOSArMzcxLDEwIEBAIHN0YXRpYyB2b2lkIG5mdF9keW5zZXRfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0c3RydWN0IG5mdF9keW5zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xuIFx0aW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcml2LVx1MDAzZW51bV9leHByczsgaSsrKVxuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgcHJpdi1cdTAwM2VleHByX2FycmF5W2ldKTtcbi1cbitcdGlmIChwcml2LVx1MDAzZW92ZXJyaWRlX2V4cHJzKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByaXYtXHUwMDNlbnVtX2V4cHJzOyBpKyspXG4rXHRcdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIHByaXYtXHUwMDNlZXhwcl9hcnJheVtpXSk7XG4rXHR9XG4gXHRuZl90YWJsZXNfZGVzdHJveV9zZXQoY3R4LCBwcml2LVx1MDAzZXNldCk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDA6NDcuMDczMzM0MDIzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM3NjY1MDYzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIE5ldGZpbHRlciBuZl90YWJsZXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdG91Y2hpbmcgY29yZSBuZl90YWJsZXMgY29kZTogYG5mX3RhYmxlc19hcGkuY2AsIGBuZl90YWJsZXMuaGAsIGFuZCBgbmZ0X2R5bnNldC5jYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgZXhwcmVzc2lvbiBjbG9uaW5nIGFuZCBzZXR1cCBpbiBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgIGFuZCBgbmZ0X2R5bnNldF9pbml0YC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIGRpdGNoaW5nIGBuZnRfc2V0X2VsZW1fZXhwcl9jbG9uZWAgYW5kIGFyZSBub3cgcmVseWluZyBvbiB0aGlzIGBvdmVycmlkZV9leHByc2AgYm9vbGVhbiBmb3IgZXhwcmVzc2lvbiBkZXN0cnVjdGlvbiwgd2hpY2ggaXMgYW4gaW50ZXJlc3Rpbmcgc2hpZnQgaW4gc3RyYXRlZ3kuIEkgc2VlIHRoZXkgYWxzbyBhZGRlZCBhIGBkZWFkYCBmbGFnIGNoZWNrIGluIGBuZnRfc2V0X2NvbW1pdF91cGRhdGVgLCBzcGVjaWZpY2FsbHkgZm9yIGBORlRfTVNHX0RFTFNFVGAgYW5kIGBORlRfTVNHX0RFU1RST1lTRVRgLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSDigJMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgb25lIGF0IHRoYXQg4oCTIGltcGFjdGluZyBob3cgc2V0cyBhbmQsIGVzcGVjaWFsbHksIGR5bmFtaWMgc2V0cyBtYW5hZ2UgZXhwcmVzc2lvbnMuIFRoaXMgaXMgZ29vZCB0byBrbm93IGZyb20gYSBzZWN1cml0eSBzdGFuZHBvaW50LiBJcyBpdCByZWFjaGFibGU/IEFic29sdXRlbHksIG5mX3RhYmxlcyBpcyBleHBvc2VkIHRocm91Z2ggbmV0bGluaywgc28gaXQncyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlciBzcGFjZSwgYW5kIHRodXMgb2YgaW50ZXJlc3QuIElzIGl0IHdvcnRoIGZ1enppbmc/IFdpdGhvdXQgYSBkb3VidC4gTmZfdGFibGVzIGlzIGEga25vd24gYXR0YWNrIHN1cmZhY2UsIGFuZCB0aGlzIGNoYW5nZSBjb3VsZCBpbnRyb2R1Y2UgbmV3IHZ1bG5lcmFiaWxpdGllcyBvciBleHBvc2UgZXhpc3Rpbmcgb25lcy5cblxuU28sIHdoZXJlIGRvIEkgZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzPyBUaGUga2V5IGZ1bmN0aW9ucyBoZXJlIGFyZSBwcmV0dHkgY2xlYXI6IGBuZnRfYWRkX3NldF9lbGVtYCwgYG5mdF9keW5zZXRfaW5pdGAsIGFuZCBgbmZ0X3NldF9jb21taXRfdXBkYXRlYC4gTGV0IG1lIGNoZWNrIGlmIGBuZnRfYWRkX3NldF9lbGVtYCBpcyBzdGF0aWM7IG9rYXksIHllcywgaXQgaXMuIFNpbmNlIGl0J3Mgc3RhdGljLCBJIHNob3VsZCBjaGVjayB3aG8gY2FsbHMgaXQgLSBgbmZfdGFibGVzX25ld3NldGVsZW1gIGRvZXMuIEkgc2hvdWxkIHByb2JhYmx5IGRpZyBpbnRvIGBuZl90YWJsZXNfYXBpLmNgIGFuZCBmaWd1cmUgb3V0IHdobyBlbHNlIGlzIGNhbGxpbmcgYG5mdF9hZGRfc2V0X2VsZW1gLCBqdXN0IHRvIGdldCBhIGJyb2FkZXIgdmlldyBvZiB0aGUgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4ODcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTksIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MDo1NC40NDk5ODYzODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwMTIzNTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2FkZF9zZXRfZWxlbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MjI0PXN0YXRpYyB1MzIgbmZ0X3NldF9tYXhzaXplKGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03MjQ0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjcyNDU6c3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzI0Ni1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgdTMyIG5sbXNnX2ZsYWdzKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzY2ND1zdGF0aWMgaW50IG5mX3RhYmxlc19uZXdzZXRlbGVtKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NzAxLVxcdG5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgbmxhW05GVEFfU0VUX0VMRU1fTElTVF9FTEVNRU5UU10sIHJlbSkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc3MDI6XFx0XFx0ZXJyID0gbmZ0X2FkZF9zZXRfZWxlbShcXHUwMDI2Y3R4LCBzZXQsIGF0dHIsIGluZm8tXFx1MDAzZW5saC1cXHUwMDNlbmxtc2dfZmxhZ3MpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc3MDMtXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDA6NTQuNDk0MDAxNDU3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0NTA3ODgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlciBEeW5hbWljcyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgYG5mX3RhYmxlc2Agc2lkZSBvZiB0aGluZ3MsIHNwZWNpZmljYWxseSB0aGUgZHluYW1pYyBzZXQgZnVuY3Rpb25hbGl0eS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYG5mX3RhYmxlc19uZXdzZXRlbGVtYCBhcyB0aGUgbGlrZWx5IGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyBuZXcgc2V0IGVsZW1lbnRzLiBUaGF0IGZlZWxzIHJpZ2h0LCBidXQuLi53YWl0IGEgbWludXRlLCB3aGF0IGFib3V0IGBuZnRfZHluc2V0X2luaXRgPyBJIHNlZW0gdG8gcmVjYWxsIHRoYXQgYmVpbmcgcHJldHR5IGNyaXRpY2FsLCBidXQgaXQncyBkZWZpbmVkIGFzIGBzdGF0aWNgLCBzbyBob3cgaXMgaXQgZXZlbiBnZXR0aW5nIGNhbGxlZD9cblxuQWxyaWdodCwgdGltZSB0byBzaGlmdCBnZWFycyBhbmQgZHJpbGwgZG93biBvbiBgbmZ0X2R5bnNldC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBuZnRfZHluc2V0X2luaXRgIGlzIGludm9rZWQsIG9yIGhvdyB0aGUgZHluYW1pYyBzZXQgZnVuY3Rpb25hbGl0eSBpcyByZWdpc3RlcmVkIHdpdGhpbiB0aGUgbGFyZ2VyIG5ldGZpbHRlciBmcmFtZXdvcmsuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbGVycyBvZiB0aGF0IGZ1bmN0aW9uLCBvciBsb29rIGZvciBjbHVlcyBhYm91dCBob3cgaXTigJlzIGJlaW5nIGxpbmtlZCB0byB0aGUgcmVzdCBvZiB0aGUgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLiBJJ20gdGhpbmtpbmcgYSB0aG9yb3VnaCBleGFtaW5hdGlvbiBvZiBgbmZ0X2R5bnNldC5jYCBpcyB0aGUga2V5IG5leHQgc3RlcCB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIGR5bmFtaWMgc2V0IGluaXRpYWxpemF0aW9uIGFuZCBtYW5hZ2VtZW50IGlzIG9yZ2FuaXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA0NiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQwOjU4LjkzOTA4MzAxN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjM4MTA5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfZHluc2V0X2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmM9MTU4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBuZnRfZHluc2V0X3BvbGljeVtORlRBX0RZTlNFVF9NQVggKyAxXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jLTE3MS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYzoxNzI6c3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYy0xNzMtXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmM9NDI5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9keW5zZXRfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtNDMyLVxcdC5ldmFsXFx0XFx0PSBuZnRfZHluc2V0X2V2YWwsXFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmM6NDMzOlxcdC5pbml0XFx0XFx0PSBuZnRfZHluc2V0X2luaXQsXFxubmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmMtNDM0LVxcdC5kZXN0cm95XFx0PSBuZnRfZHluc2V0X2Rlc3Ryb3ksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQwOjU4Ljk4NTQ2OTkzMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTU0Mzc2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzcywgd2l0aCB0aGUgYm9sZGVkIGhlYWRlciBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIER5bmFtaWNzKipcblxuQWxyaWdodCwgc28gdGhlIGNsdWUgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHkgSSdtIGludGVyZXN0ZWQgaW4gaXMgaW5pdGlhbGl6ZWQgaW4gYG5mdF9keW5zZXRfb3BzLmluaXRgLiBUaGF0J3MgYSBrZXkgc3RhcnRpbmcgcG9pbnQuIEZyb20gdGhlcmUsIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgZXhwcmVzc2lvbiBpdHNlbGYsIGxpa2VseSByZWxhdGVkIHRvIHRoZSBkeW5hbWljIHNldCBvcGVyYXRpb25zLCBoYXBwZW5zIHRocm91Z2ggYG5mdF9leHByX2luaXRgLiBHb3QgaXQuIE5vdywgZ2l2ZW4gdGhhdCBjb250ZXh0LCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gdG8gZXhhbWluZSBuZXh0LCB3aGljaCB3aWxsIGV4cG9zZSBob3cgdGhlIGR5bmFtaWMgc2V0IHVwZGF0ZXMgaGFwcGVuIGlzIGBuZnRfc2V0X2NvbW1pdF91cGRhdGVgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKnRob3NlKiBnZXQgY29tbWl0dGVkLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgYWN0aW9uIGlzLCBJIHN1c3BlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NDEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MTowMi42NDA5MTAxNDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0MTM4ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3NldF9jb21taXRfdXBkYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTEwODQ4PXN0YXRpYyB2b2lkIG5mX3RhYmxlc19jb21taXRfYXVkaXRfbG9nKHN0cnVjdCBsaXN0X2hlYWQgKmFkbCwgdTMyIGdlbmVyYXRpb24pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDg2Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDg2MzpzdGF0aWMgdm9pZCBuZnRfc2V0X2NvbW1pdF91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDg2NC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRhYmxlc19wZXJuZXQgKm5mdF9uZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDkxNz1zdGF0aWMgaW50IG5mX3RhYmxlc19jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTA5OTctXFx0Lyogc3RlcCAyLiAgTWFrZSBydWxlc19nZW5fWCB2aXNpYmxlIHRvIHBhY2tldCBwYXRoICovXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTA5OTg6XFx0bmZ0X3NldF9jb21taXRfdXBkYXRlKFxcdTAwMjZjdHgsIG5mdF9uZXQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwOTk5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MTowMi42OTAzMjgxMDNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzI1OTQ1MTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBOZXRmaWx0ZXIgVGFibGVzIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gc3RhcnRpbmcgd2l0aCBgbmZfdGFibGVzX2NvbW1pdGAg4oCTIHRoYXQncyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIHdoZXJlIGNoYW5nZXMgYXJlIGZpbmFsaXplZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBoYXBwZW5zIGFyb3VuZCB0aGF0IHBvaW50LiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2xsb3cgdGhlIGNvZGUgcGF0aHMgdGhhdCBsZWFkIHVwIHRvIGl0LlxuXG5JJ3ZlIGlkZW50aWZpZWQgc29tZSBrZXkgc3ltYm9scyB0byB6ZXJvIGluIG9uOiBgbmZfdGFibGVzX25ld3NldGVsZW1gLCB3aGljaCBwcm9iYWJseSBkZWFscyB3aXRoIGFkZGluZyBlbGVtZW50cyB0byBzZXRzIChhIGNvcmUgbmV0ZmlsdGVyIGNvbmNlcHQpLCBgbmZfdGFibGVzX2NvbW1pdGAgaXRzZWxmICh0byB1bmRlcnN0YW5kIGl0cyBleGFjdCByb2xlIGluIHRoZSBwcm9jZXNzKSwgYW5kIGBuZnRfZXhwcl9pbml0YC4gT3IsIG1vcmUgZGlyZWN0bHksIEkgY291bGQgbG9vayBhdCBgbmZfdGFibGVzX25ld3J1bGVgIHNpbmNlIHRoYXQgY2FsbHMgaXQsIGluZGljYXRpbmcgcnVsZSBjcmVhdGlvbiB3aWxsIGludm9sdmUgc29tZSBleHByZXNzaW9uIGluaXRpYWxpemF0aW9uLiBVbmRlcnN0YW5kaW5nIGhvdyBleHByZXNzaW9ucyB3b3JrIGlzIGNydWNpYWwuXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byB2ZXJpZnkgdGhlIG9wdGlvbnMgZm9yIGBuZl90YWJsZXNgIGFuZCBgbmZ0X2R5bnNldGAgaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgd2lsbCB0ZWxsIG1lIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0LCB3aGljaCBpbXBhY3RzIHRoZSBwb3RlbnRpYWwgY29kZSBwYXRocyBJJ2xsIGJlIGxvb2tpbmcgYXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBzdHVkeWluZyB0aGUgY29ycmVjdCBjb2RlLCBhZnRlciBhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNjYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MTowNy40MTYyNzUzMjlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MzgwNTA1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX0RZTlNFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQxOjA3LjQ3NTY2OTY3NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTE2Nzk4MTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS2NvbmZpZyBTZWFyY2ggZm9yIGBuZnRfZHluc2V0YCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHNvbWV0aGluZywgYW5kIHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IGlzIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgdGVybSBgbmZ0X2R5bnNldGAuIEknbGwgaW5pdGlhdGUgYSBzZWFyY2ggZm9yIHRoYXQgc3RyaW5nIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcywgc2luY2UgdGhhdCdzIHdoZXJlIG1vZHVsZSBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBUaGlzIGlzIG15IGdvLXRvIGFwcHJvYWNoIHdoZW4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIGZlYXR1cmUgaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIEknbSBleHBlY3RpbmcgdGhpcyBzaG91bGQgcXVpY2tseSBsZWFkIG1lIHRvIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHN5bWJvbCBhbmQgaG9wZWZ1bGx5IHByb3ZpZGUgc29tZSBjbHVlcyBhYm91dCBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBvcHRpb25zLiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NTYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MToxMC45OTI0NzAyMzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTI2Njg0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfZHluc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDE6MTEuMDM4MDA0NDEyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTQ2MDA2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkh1bnRpbmcgRG93biBUaGF0IE9iamVjdCBGaWxlKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gd29yay4gTXkgZ29hbCBoZXJlIGlzIGNsZWFybHkgdG8gdHJhY2sgZG93biB3aGVyZSBgbmZ0X2R5bnNldC5vYCBpcyBiZWluZyBidWlsdCB3aXRoaW4gdGhpcyBwcm9qZWN0LiBLbm93aW5nIHRoYXQgb2JqZWN0IGZpbGUgbmFtZXMgYXJlIHR5cGljYWxseSBkZWZpbmVkIGluIGEgTWFrZWZpbGUsIHRoYXQncyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4gTGV0J3MgZ2V0IGNyYWNraW5nIGFuZCBnbyBkaXJlY3RseSB0byB0aGUgTWFrZWZpbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MToxNC4yOTI2MDcyOTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTA2MDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9keW5zZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg3PW5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxcXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg5LVxcdFxcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6OTA6XFx0XFx0ICBuZnRfZHluc2V0Lm8gbmZ0X21ldGEubyBuZnRfcnQubyBuZnRfZXh0aGRyLm8gbmZ0X2xhc3QubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05MS1cXHRcXHQgIG5mdF9jb3VudGVyLm8gbmZ0X29ianJlZi5vIG5mdF9pbm5lci5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDE6MTQuMzM4NzE3MDM3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjEyNzczMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gVGhvdWdodHMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGFuZCBpdCdzIGRlZmluaXRlbHkgcmVsYXRlZCB0byBgbmZfdGFibGVzLW9ianNgLiBUaGF0IHRlbGxzIG1lIHRoZSBjb3JlIGRlcGVuZGVuY3kgaGVyZSBpcyBvbiBgTkZfVEFCTEVTYC4gTm93LCBJIGp1c3QgbmVlZCB0byB2ZXJpZnkgdGhhdCBgTkZfVEFCTEVTYCBpcyBjb3JyZWN0bHkgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgZG91YmxlIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgZm9yIHRoYXQgc3BlY2lmaWMgb3B0aW9uLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBiYXNlIHJlcXVpcmVtZW50IGlzIHRoZXJlIGJlZm9yZSBJIGRpZyBhbnkgZGVlcGVyLiBObyBwb2ludCBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUgaWYgdGhlIGZvdW5kYXRpb24gaXNuJ3Qgc2V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDU2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDE6MTcuNjk5OTk2NDU3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQ1MjI1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXFx0ZGVwZW5kcyBvbiBJUFY2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MToxNy43NDU0NTQ4MjFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwNzE2OTgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQ2hlY2tpbmcgdGhlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgZm9jdXMgaXMgYE5GX1RBQkxFU2AuIFRoYXQncyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbi4gQWx3YXlzIGdvb2QgdG8gc3RhcnQgdGhlcmUuIExldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0J3MgdGhlICpvbmx5KiByZWxldmFudCBvbmUsIGp1c3QgdG8gYmUgdGhvcm91Z2guIFl1cCwgaXQgbG9va3MgbGlrZSBgTkZfVEFCTEVTYCBjb3ZlcnMgaXQuIE5vIG5lZWQgdG8gY2hhc2UgYW55IG90aGVyIHJhYmJpdCBob2xlcyBvbiB0aGF0IGZyb250LlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHN5bWJvbHMuIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAuLi4gcmlnaHQsIHRoYXQgaGFuZGxlcyBhZGRpbmcgbmV3IGVsZW1lbnRzIHRvIHRoZSBzZXQuIEFuZCBgbmZfdGFibGVzX2NvbW1pdGAsIHRoYXQncyB0aGUgY29tbWl0IG9wZXJhdGlvbi4uLiBzdGFuZGFyZCBzdHVmZi4gQnV0IGhvbGQgb24gYSBzZWNvbmQuLi4gYG5mdF9leHByX2luaXRgPyBJJ20ganVzdCBxdWlja2x5IGNoZWNraW5nIG15IG1lbW9yeS4uLiBJc24ndCB0aGF0IGEgZnVuY3Rpb24/IFllcywgaXQgaXMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NDQsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MToyMi4wNTI2Mjc5NDhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1ODc1MDM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9leHByX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzY1ND1zdGF0aWMgdm9pZCBuZl90YWJsZXNfZXhwcl9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNjYzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjM2NjQ6c3RhdGljIHN0cnVjdCBuZnRfZXhwciAqbmZ0X2V4cHJfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTM2NjUtXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqbmxhKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NjczNz1zdHJ1Y3QgbmZ0X2V4cHIgKm5mdF9zZXRfZWxlbV9leHByX2FsbG9jKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NzQzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY3NDQ6XFx0ZXhwciA9IG5mdF9leHByX2luaXQoY3R4LCBhdHRyKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02NzQ1LVxcdGlmIChJU19FUlIoZXhwcikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQxOjIyLjA5ODUwOTQ0MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzQzODc5NjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYG5mdF9leHByX2luaXRgIGFuZCBpdHMgQ2FsbGVycyoqXG5cbk9rYXksIHNvIGBuZnRfZXhwcl9pbml0YCBpcyBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBtZWFucyBpdCdzIGxpa2VseSBpbnRlcm5hbCB0byBhIHNwZWNpZmljIGNvbXBpbGF0aW9uIHVuaXQsIGFuZCBpdHMgc2NvcGUgaXMgbGltaXRlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGl0J3MgYmVpbmcgdXNlZC4gUmlnaHQsIHRoZSBjb2RlIHN1Z2dlc3RzIGl0J3MgY2FsbGVkIGJ5IGBuZnRfc2V0X2VsZW1fZXhwcl9hbGxvY2AsIGBuZl90YWJsZXNfbmV3cnVsZWAsIGFuZCBwcm9iYWJseSBvdGhlcnMuIE15IGltbWVkaWF0ZSBmb2N1cywgZ2l2ZW4gdGhlIGNvbnRleHQgSSdtIHdvcmtpbmcgaW4sIGlzIG9uIHRoZSBydWxlIGFuZCBzZXQgZWxlbWVudCBjcmVhdGlvbiBwYXRocy4gSSdsbCBkcmlsbCBkb3duIHNwZWNpZmljYWxseSBpbnRvIGhvdyBgbmZfdGFibGVzX25ld3J1bGVgLCBgbmZfdGFibGVzX25ld3NldGVsZW1gLCBhbmQgdGhlIGNvbW1pdCBmdW5jdGlvbiAoYG5mX3RhYmxlc19jb21taXRgKSBpbnRlcmFjdCB3aXRoIGBuZnRfZXhwcl9pbml0YC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiBuZXcgcnVsZSBhbmQgc2V0IGVsZW1lbnQgaW5zdGFudGlhdGlvbiBsaXZlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAwNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQxOjI1Ljg0MjM5MjcwN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ5NTMyODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfdGFibGVzX25ld3J1bGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NDEyMj12b2lkIG5mX3RhYmxlc19ydWxlX2Rlc3Ryb3koY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9ydWxlICpydWxlKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDEyNy1cXHQgKiBDYXJlZnVsOiBzb21lIGV4cHJlc3Npb25zIG1pZ2h0IG5vdCBiZSBpbml0aWFsaXplZCBpbiBjYXNlIHRoaXNcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0MTI4OlxcdCAqIGlzIGNhbGxlZCBvbiBlcnJvciBmcm9tIG5mX3RhYmxlc19uZXdydWxlKCkuXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDEyOS1cXHQgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTQzMDk9c3RhdGljIHN0cnVjdCBuZnRfcnVsZSAqbmZ0X3J1bGVfbG9va3VwX2J5aWQoY29uc3Qgc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDMxNC1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0MzE1OnN0YXRpYyBpbnQgbmZfdGFibGVzX25ld3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00MzE2LVxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5sYVtdKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTkzNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZfdGFibGVzX2NiW05GVF9NU0dfTUFYXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk5ODQtXFx0W05GVF9NU0dfTkVXUlVMRV0gPSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTk4NTpcXHRcXHQuY2FsbFxcdFxcdD0gbmZfdGFibGVzX25ld3J1bGUsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTk4Ni1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9CQVRDSCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDE6MjUuODg3MzUwNjMxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MTUxMDY2MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gTmV0ZmlsdGVyIFRhYmxlIENyZWF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBOZXRmaWx0ZXIgY29kZSwgYW5kIHllYWgsIGBuZl90YWJsZXNfbmV3cnVsZWAgZGVmaW5pdGVseSBzdGFuZHMgb3V0IGFzIHRoZSBuZXRsaW5rIGNhbGxiYWNrIGZvciBjcmVhdGluZyBuZXcgcnVsZXMuIE1ha2VzIHNlbnNlLiBOb3csIGxldCdzIGJyb2FkZW4gdGhlIHNjb3BlIGEgYml0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHRhYmxlcyB0aGVtc2VsdmVzIGFyZSBidWlsdCBhbmQgcG9wdWxhdGVkLiBNeSBuZXh0IGZvY3VzIHNob3VsZCBiZSBvbiBgbmZfdGFibGVzX25ld3NldGAgYW5kIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWAuIFVuZGVyc3RhbmRpbmcgdGhvc2UgZnVuY3Rpb25zIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBncmFzcCBvZiBob3cgc2V0cyBhbmQgdGhlaXIgZWxlbWVudHMgYXJlIGRlZmluZWQsIHdoaWNoIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHRhYmxlIHN0cnVjdHVyZSBhbmQgcnVsZSBhcHBsaWNhdGlvbiBwcm9jZXNzLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcyMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQxOjI5LjMwMjQ1OTc4NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyODY3OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfdGFibGVzX25ld3NldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz01NDI3PXN0YXRpYyB1MzIgbmZ0X3NldF9rZXJuZWxfc2l6ZShjb25zdCBzdHJ1Y3QgbmZ0X3NldF9vcHMgKm9wcyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTU0MzUtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NTQzNjpzdGF0aWMgaW50IG5mX3RhYmxlc19uZXdzZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01NDM3LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmxhW10pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MjQ1PXN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzY2My1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3NjY0OnN0YXRpYyBpbnQgbmZfdGFibGVzX25ld3NldGVsZW0oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NjY1LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05OTM1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayBuZl90YWJsZXNfY2JbTkZUX01TR19NQVhdID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwMTQtXFx0W05GVF9NU0dfTkVXU0VUXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDAxNTpcXHRcXHQuY2FsbFxcdFxcdD0gbmZfdGFibGVzX25ld3NldCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDAxNi1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9CQVRDSCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDM4LVxcdFtORlRfTVNHX05FV1NFVEVMRU1dID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMDM5OlxcdFxcdC5jYWxsXFx0XFx0PSBuZl90YWJsZXNfbmV3c2V0ZWxlbSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA0MC1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9CQVRDSCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDE6MjkuMzQ3NzQ5NDJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYxNzk5OTczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBOZXRmaWx0ZXIgVGFibGUgVXBkYXRlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgcmV2b2x2ZXMgYXJvdW5kIHVuZGVyc3RhbmRpbmcgaG93IGR5bmFtaWMgc2V0cyBhcmUgaGFuZGxlZCB3aXRoaW4gbmV0ZmlsdGVyIHRhYmxlcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gc2V0IG1hbmlwdWxhdGlvbiBhbmQgcnVsZSBjcmVhdGlvbi4gQmFzZWQgb24gdGhlIHN5bWJvbHMgaWRlbnRpZmllZCwgbXkgYXR0ZW50aW9uIGdyYXZpdGF0ZXMgdG93YXJkczogYG5mX3RhYmxlc19uZXdzZXRlbGVtYCwgYG5mX3RhYmxlc19uZXdzZXRgLCBgbmZfdGFibGVzX2NvbW1pdGAsIGFuZCBgbmZfdGFibGVzX25ld3J1bGVgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGZvciBzZXQtcmVsYXRlZCBvcGVyYXRpb25zLlxuXG5Ob3csIGEga2V5IHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlcmUncyBhIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIG9yIGhhbmRsaW5nIGZ1bmN0aW9uIGRlZGljYXRlZCB0byBkeW5hbWljIHNldHMuIFVwb24gZnVydGhlciBpbnNwZWN0aW9uLCBJIHNlZSB0aGF0IGBuZnRfZHluc2V0X2luaXRgIGlzIGludm9rZWQgZnJvbSBgbmZ0X2V4cHJfaW5pdGAsIHdoaWNoIGluIHR1cm4gaXMgY2FsbGVkIGJ5IGBuZl90YWJsZXNfbmV3cnVsZWAuIFRoaXMgY29uZmlybXMgbXkgaW5pdGlhbCBpbnR1aXRpb24gdGhhdCBgbmZfdGFibGVzX25ld3J1bGVgIGlzIGEgY3J1Y2lhbCBmdW5jdGlvbiBmb3IgZHluYW1pYyBzZXQgb3BlcmF0aW9uczsgaXQncyB0aGUgZW50cnkgcG9pbnQgdG8gaW5pdGlhbGl6ZSB0aGUgZHluYW1pYyBzZXQuXG5cbk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBzZXRzIGFyZSBkZWxldGVkIG9yIGRlc3Ryb3llZC4gTG9va2luZyBhdCB0aGUgbWVzc2FnZSB0eXBlcywgSSBzZWUgYE5GVF9NU0dfREVMU0VUYCBhbmQgYE5GVF9NU0dfREVTVFJPWVNFVGAuIEV4YW1pbmluZyB0aGVpciBtb2RpZmljYXRpb24gcG9pbnRzLCBJJ3ZlIG9ic2VydmVkIHRoYXQgdGhlc2UgYXJlIGhhbmRsZWQgd2l0aGluIGBuZnRfc2V0X2NvbW1pdF91cGRhdGVgLCB3aGljaCBzdWdnZXN0cyB0aGF0IHRoZXkgYXJlIGhhbmRsZWQgYnkgYG5mX3RhYmxlc19kZWxzZXRgLiBUaGlzIGNvbmZpcm1zIHRoYXQgaXQncyB0aGUgY29ycmVjdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0NzYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDE6MzMuOTY1NzUxMTk2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDI4MTM4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl90YWJsZXNfZGVsc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTU3NjE9c3RhdGljIHZvaWQgbmZ0X3NldF9kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy01Nzc1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjU3NzY6c3RhdGljIGludCBuZl90YWJsZXNfZGVsc2V0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNTc3Ny1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IG5sYVtdKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Nzk4Nz1zdGF0aWMgaW50IG5mdF9zZXRfZmx1c2goc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCwgdTggZ2VubWFzaylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTgwMDQtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6ODAwNTpzdGF0aWMgaW50IG5mX3RhYmxlc19kZWxzZXRlbGVtKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODAwNi1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTkzNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mbmxfY2FsbGJhY2sgbmZfdGFibGVzX2NiW05GVF9NU0dfTUFYXSA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDI2LVxcdFtORlRfTVNHX0RFTFNFVF0gPSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTAwMjc6XFx0XFx0LmNhbGxcXHRcXHQ9IG5mX3RhYmxlc19kZWxzZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwMjgtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfQkFUQ0gsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDAzMi1cXHRbTkZUX01TR19ERVNUUk9ZU0VUXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDAzMzpcXHRcXHQuY2FsbFxcdFxcdD0gbmZfdGFibGVzX2RlbHNldCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDAzNC1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9CQVRDSCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDU2LVxcdFtORlRfTVNHX0RFTFNFVEVMRU1dID0ge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjEwMDU3OlxcdFxcdC5jYWxsXFx0XFx0PSBuZl90YWJsZXNfZGVsc2V0ZWxlbSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMDA1OC1cXHRcXHQudHlwZVxcdFxcdD0gTkZOTF9DQl9CQVRDSCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTEwMDYyLVxcdFtORlRfTVNHX0RFU1RST1lTRVRFTEVNXSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMDA2MzpcXHRcXHQuY2FsbFxcdFxcdD0gbmZfdGFibGVzX2RlbHNldGVsZW0sXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTAwNjQtXFx0XFx0LnR5cGVcXHRcXHQ9IE5GTkxfQ0JfQkFUQ0gsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQxOjM0LjAxMDAzNzcyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1MTY0MzQ4ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgUmVmaW5lbWVudDogRm9jdXNpbmcgb24gU2V0IERlbGV0aW9uKipcblxuT2theSwgc28gYG5mX3RhYmxlc19kZWxzZXRgIGxvb2tzIGxpa2UgYW5vdGhlciBzb2xpZCBmb2N1cyBzeW1ib2wgZm9yIGZ1enppbmcuIFRpbWUgdG8gcmV2aWV3IHRoZSBtb2RpZmljYXRpb25zLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlLCBpdCdzIHNldHRpbmcgYGRlYWQgPSAxYCBvbiB0aGUgc2V0IGR1cmluZyB0aGUgY29tbWl0IHN0YWdlIHdoZW4gZGVhbGluZyB3aXRoIGVpdGhlciBgTkZUX01TR19ERUxTRVRgIG9yIGBORlRfTVNHX0RFU1RST1lTRVRgIG1lc3NhZ2VzLiBUaGF0J3MgYSBjcnVjaWFsIHBvaW50LCBhbmQgSSBjYW4gc2VlIGhvdyBwb3RlbnRpYWwgaXNzdWVzIGFyb3VuZCB0aGUgaGFuZGxpbmcgb2YgYSBcImRlYWRcIiBzZXQgY291bGQgYmUgYSBwcmltZSB0YXJnZXQgZm9yIHZ1bG5lcmFiaWxpdHkgZGlzY292ZXJ5LlxuXG5UaGUgY2hhbmdlcyBpbiBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgIGFuZCBgbmZ0X2R5bnNldF9pbml0YCByZWxhdGUgdG8gZXhwcmVzc2lvbiBjbG9uaW5nIGFuZCBkZXN0cnVjdGlvbiwgd2hpY2ggYXJlIGFyZWFzIG9mdGVuIHByb25lIHRvIHN1YnRsZSBtZW1vcnkgbWFuYWdlbWVudCBwcm9ibGVtcy4gVGhlc2UgdXBkYXRlcyB3YXJyYW50IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGggZnV6emluZy5cblxuTXkgcHJpbWFyeSBjb25maWcgaXMgYE5GX1RBQkxFU2AsIHdoaWNoIHNlZW1zIHN1ZmZpY2llbnQuIEknbGwgc3RpY2sgd2l0aCB0aGVzZSBmb3Igbm93LCBhbmQgdGhlc2UgZm9jdXMgc3ltYm9sczpcblxuKiAgIGBuZl90YWJsZXNfbmV3c2V0ZWxlbWBcbiogICBgbmZfdGFibGVzX25ld3NldGBcbiogICBgbmZfdGFibGVzX2RlbHNldGAgKHRoaXMgaXMgdGhlIG5ldyBvbmUpXG4qICAgYG5mX3RhYmxlc19jb21taXRgXG4qICAgYG5mX3RhYmxlc19uZXdydWxlYFxuXG5JJ2xsIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucywgYnV0IGBORl9UQUJMRVNgIGlzIHRoZSBrZXkuIFRoZW4gSSdsbCBzdGFydCBydW5uaW5nIHNvbWUgdGVzdHMgcmVsYXRlZCB0byBzZXQtcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2ODgsIk91dHB1dFRva2VucyI6MTQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQxOjQwLjUyNjQ3NTAzMVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MTcyNzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9UQUJMRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZl90YWJsZXNfbmV3c2V0ZWxlbVwiLFxuICAgIFwibmZfdGFibGVzX25ld3NldFwiLFxuICAgIFwibmZfdGFibGVzX2RlbHNldFwiLFxuICAgIFwibmZfdGFibGVzX2NvbW1pdFwiLFxuICAgIFwibmZfdGFibGVzX25ld3J1bGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIG5mX3RhYmxlcyBsb2dpYyBmb3IgaGFuZGxpbmcgc2V0IGVsZW1lbnQgZXhwcmVzc2lvbnMgYW5kIGR5bmFtaWMgc2V0cywgc3BlY2lmaWNhbGx5IGNoYW5naW5nIGhvdyBleHByZXNzaW9ucyBhcmUgY2xvbmVkIGFuZCBkZXN0cm95ZWQuIEl0IGFsc28gbW9kaWZpZXMgdGhlIGNvbW1pdCBwaGFzZSBmb3Igc2V0IGRlbGV0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBuZXRmaWx0ZXIgc3Vic3lzdGVtIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmssIG1ha2luZyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmZfdGFibGVzX25ld3NldGVsZW1cIixcbiAgICBcIm5mX3RhYmxlc19uZXdzZXRcIixcbiAgICBcIm5mX3RhYmxlc19kZWxzZXRcIixcbiAgICBcIm5mX3RhYmxlc19jb21taXRcIixcbiAgICBcIm5mX3RhYmxlc19uZXdydWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBuZl90YWJsZXMgbG9naWMgZm9yIGhhbmRsaW5nIHNldCBlbGVtZW50IGV4cHJlc3Npb25zIGFuZCBkeW5hbWljIHNldHMsIHNwZWNpZmljYWxseSBjaGFuZ2luZyBob3cgZXhwcmVzc2lvbnMgYXJlIGNsb25lZCBhbmQgZGVzdHJveWVkLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBjb21taXQgcGhhc2UgZm9yIHNldCBkZWxldGlvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rLCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MTo0MC42MDQ2NTQxOThaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMDExMzc3MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDE6NDAuNjA1MTA2OTY4WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUzMDEwOTIxMjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBsaWZlY3ljbGUgYW5kIGNsb25pbmcgb2YgbmV0ZmlsdGVyIHNldCBleHByZXNzaW9ucyAoYG5mdF9leHByYCkgdG8gZml4IG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyAobGlrZWx5IGRvdWJsZS1mcmVlcyBvciB1c2UtYWZ0ZXItZnJlZXMpLiBJdCBhdm9pZHMgY3JlYXRpbmcgaW50ZXJtZWRpYXRlIGNsb25lcyBvZiBleHByZXNzaW9ucyB3aGVuIGFkZGluZyBlbGVtZW50cyB0byBhIHNldCBvciBpbml0aWFsaXppbmcgYSBkeW5zZXQsIGluc3RlYWQgY29weWluZyBwb2ludGVycyBhbmQgdXNpbmcgYSBuZXcgYG92ZXJyaWRlX2V4cHJzYCBmbGFnIHRvIHRyYWNrIG93bmVyc2hpcCBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBleHByZXNzaW9ucyBzaG91bGQgYmUgZGVzdHJveWVkLiBJdCBhbHNvIHNldHMgYSBgZGVhZGAgZmxhZyBvbiBkZWxldGVkIHNldHMgZHVyaW5nIGNvbW1pdCB1cGRhdGVzLiBcXG5cXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3Mgb2JqZWN0IGxpZmVjeWNsZSBidWdzIChVQUYsIGRvdWJsZS1mcmVlKSB3aGljaCBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBtZW1vcnkgZm9yIHRoZSBzZXQgZWxlbWVudHMgdGhlbXNlbHZlcyBjb250aW51ZXMgdG8gYmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgIChpbiBgbmZ0X3NldF9lbGVtX2luaXRgKSwgZW5zdXJpbmcgYWxsIGZpZWxkcyBhbmQgcGFkZGluZyBhcmUgZnVsbHkgemVyb2VkLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM4NzdhMjg4MDRiMzY2YzI1YjkyOWYzZGExNWNmN2VkZGEzNjMwY2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAxMjo0MDo0MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuaW5kZXggMjM4ZjZlY2I5MGU5OS4uOWQ1OTc0ODIzNjNkOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaFxuKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oXG5AQCAtODcwLDggKzg3MCw2IEBAIHN0cnVjdCBuZnRfZWxlbV9wcml2ICpuZnRfc2V0X2VsZW1faW5pdChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFx0XHRcdFx0XHRjb25zdCB1MzIgKmtleSwgY29uc3QgdTMyICprZXlfZW5kLFxuIFx0XHRcdFx0XHRjb25zdCB1MzIgKmRhdGEsXG4gXHRcdFx0XHRcdHU2NCB0aW1lb3V0LCB1NjQgZXhwaXJhdGlvbiwgZ2ZwX3QgZ2ZwKTtcbi1pbnQgbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbi1cdFx0XHQgICAgc3RydWN0IG5mdF9leHByICpleHByX2FycmF5W10pO1xuIHZvaWQgbmZ0X3NldF9lbGVtX2V4cHJfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIgKmVsZW1fZXhwcik7XG4gdm9pZCBuZnRfc2V0X2VsZW1fZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbmluZGV4IGMxMTJlY2M0ZmNhMzIuLjM4NDUwNWY2ODBkZWYgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1xuKysrIGIvbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcbkBAIC02OTIxLDM5ICs2OTIxLDExIEBAIHN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdG5mX3RhYmxlc19zZXRfZWxlbV9kZXN0cm95KGN0eCwgdGUtXHUwMDNlc2V0LCB0ZS1cdTAwM2VlbGVtc1tpXS5wcml2KTtcbiB9XG4gXG4taW50IG5mdF9zZXRfZWxlbV9leHByX2Nsb25lKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4tXHRcdFx0ICAgIHN0cnVjdCBuZnRfZXhwciAqZXhwcl9hcnJheVtdKVxuLXtcbi1cdHN0cnVjdCBuZnRfZXhwciAqZXhwcjtcbi1cdGludCBlcnIsIGksIGs7XG4tXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzZXQtXHUwMDNlbnVtX2V4cHJzOyBpKyspIHtcbi1cdFx0ZXhwciA9IGt6YWxsb2Moc2V0LVx1MDAzZWV4cHJzW2ldLVx1MDAzZW9wcy1cdTAwM2VzaXplLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0XHRpZiAoIWV4cHIpXG4tXHRcdFx0Z290byBlcnJfZXhwcjtcbi1cbi1cdFx0ZXJyID0gbmZ0X2V4cHJfY2xvbmUoZXhwciwgc2V0LVx1MDAzZWV4cHJzW2ldLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLVx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4tXHRcdFx0a2ZyZWUoZXhwcik7XG4tXHRcdFx0Z290byBlcnJfZXhwcjtcbi1cdFx0fVxuLVx0XHRleHByX2FycmF5W2ldID0gZXhwcjtcbi1cdH1cbi1cbi1cdHJldHVybiAwO1xuLVxuLWVycl9leHByOlxuLVx0Zm9yIChrID0gaSAtIDE7IGsgXHUwMDNlPSAwOyBrLS0pXG4tXHRcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2tdKTtcbi1cbi1cdHJldHVybiAtRU5PTUVNO1xuLX1cbi1cbiBzdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHRfdG1wbCAqdG1wbCxcbiBcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0LFxuIFx0XHRcdFx0ICAgc3RydWN0IG5mdF9leHByICpleHByX2FycmF5W10sXG4tXHRcdFx0XHQgICB1MzIgbnVtX2V4cHJzKVxuK1x0XHRcdFx0ICAgdTMyIG51bV9leHBycywgYm9vbCBvdmVycmlkZV9leHBycylcbiB7XG4gXHRzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIgKmVsZW1fZXhwciA9IG5mdF9zZXRfZXh0X2V4cHIoZXh0KTtcbiBcdHUzMiBsZW4gPSBzaXplb2Yoc3RydWN0IG5mdF9zZXRfZWxlbV9leHByKTtcbkBAIC02OTc2LDcgKzY5NDgsOCBAQCBzdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0Z290byBlcnJfZWxlbV9leHByX3NldHVwO1xuIFxuIFx0XHRlbGVtX2V4cHItXHUwMDNlc2l6ZSArPSBleHByX2FycmF5W2ldLVx1MDAzZW9wcy1cdTAwM2VzaXplO1xuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XG4rXHRcdGlmIChvdmVycmlkZV9leHBycylcbitcdFx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XG4gXHRcdGV4cHJfYXJyYXlbaV0gPSBOVUxMO1xuIFx0fVxuIFxuQEAgLTY5ODQsNyArNjk1Nyw5IEBAIHN0YXRpYyBpbnQgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcbiBlcnJfZWxlbV9leHByX3NldHVwOlxuIFx0Zm9yICg7IGkgXHUwMDNjIG51bV9leHByczsgaSsrKSB7XG4tXHRcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTtcbitcdFx0aWYgKG92ZXJyaWRlX2V4cHJzKVxuK1x0XHRcdG5mdF9leHByX2Rlc3Ryb3koY3R4LCBleHByX2FycmF5W2ldKTtcbitcbiBcdFx0ZXhwcl9hcnJheVtpXSA9IE5VTEw7XG4gXHR9XG4gXG5AQCAtNzI4MCw2ICs3MjU1LDcgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXHRzdHJ1Y3QgbmZ0X3NldF9iaW5kaW5nICpiaW5kaW5nO1xuIFx0c3RydWN0IG5mdF9lbGVtX3ByaXYgKmVsZW1fcHJpdjtcbiBcdHN0cnVjdCBuZnRfb2JqZWN0ICpvYmogPSBOVUxMO1xuK1x0Ym9vbCBvdmVycmlkZV9leHBycyA9IGZhbHNlO1xuIFx0c3RydWN0IG5mdF91c2VyZGF0YSAqdWRhdGE7XG4gXHRzdHJ1Y3QgbmZ0X2RhdGFfZGVzYyBkZXNjO1xuIFx0ZW51bSBuZnRfcmVnaXN0ZXJzIGRyZWc7XG5AQCAtNzM4NSw2ICs3MzYxLDcgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXG4gXHRcdGV4cHJfYXJyYXlbMF0gPSBleHByO1xuIFx0XHRudW1fZXhwcnMgPSAxO1xuK1x0XHRvdmVycmlkZV9leHBycyA9IHRydWU7XG4gXG4gXHRcdGlmIChzZXQtXHUwMDNlbnVtX2V4cHJzIFx1MDAyNlx1MDAyNiBzZXQtXHUwMDNlZXhwcnNbMF0tXHUwMDNlb3BzICE9IGV4cHItXHUwMDNlb3BzKSB7XG4gXHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG5AQCAtNzQxMyw2ICs3MzkwLDcgQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXHRcdFx0fVxuIFx0XHRcdGV4cHJfYXJyYXlbaV0gPSBleHByO1xuIFx0XHRcdG51bV9leHBycysrO1xuK1x0XHRcdG92ZXJyaWRlX2V4cHJzID0gdHJ1ZTtcbiBcbiBcdFx0XHRpZiAoc2V0LVx1MDAzZW51bV9leHBycyBcdTAwMjZcdTAwMjYgZXhwci1cdTAwM2VvcHMgIT0gc2V0LVx1MDAzZWV4cHJzW2ldLVx1MDAzZW9wcykge1xuIFx0XHRcdFx0ZXJyID0gLUVPUE5PVFNVUFA7XG5AQCAtNzQyNiw5ICs3NDA0LDggQEAgc3RhdGljIGludCBuZnRfYWRkX3NldF9lbGVtKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfc2V0ICpzZXQsXG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAoc2V0LVx1MDAzZW51bV9leHBycyBcdTAwM2UgMCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIShmbGFncyBcdTAwMjYgTkZUX1NFVF9FTEVNX0lOVEVSVkFMX0VORCkpIHtcbi1cdFx0ZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY3R4LCBzZXQsIGV4cHJfYXJyYXkpO1xuLVx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRcdGdvdG8gZXJyX3NldF9lbGVtX2V4cHJfY2xvbmU7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNldC1cdTAwM2VudW1fZXhwcnM7IGkrKylcbitcdFx0XHRleHByX2FycmF5W2ldID0gc2V0LVx1MDAzZWV4cHJzW2ldO1xuIFxuIFx0XHRudW1fZXhwcnMgPSBzZXQtXHUwMDNlbnVtX2V4cHJzO1xuIFx0fVxuQEAgLTc1NjcsNyArNzU0NCw4IEBAIHN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxuIFx0XHR1ZGF0YS1cdTAwM2VsZW4gPSB1bGVuIC0gMTtcbiBcdFx0bmxhX21lbWNweShcdTAwMjZ1ZGF0YS1cdTAwM2VkYXRhLCBubGFbTkZUQV9TRVRfRUxFTV9VU0VSREFUQV0sIHVsZW4pO1xuIFx0fVxuLVx0ZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXAoY3R4LCBcdTAwMjZ0bXBsLCBleHQsIGV4cHJfYXJyYXksIG51bV9leHBycyk7XG4rXHRlcnIgPSBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChjdHgsIFx1MDAyNnRtcGwsIGV4dCwgZXhwcl9hcnJheSwgbnVtX2V4cHJzLFxuK1x0XHRcdFx0ICAgICAgb3ZlcnJpZGVfZXhwcnMpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfZWxlbV9mcmVlO1xuIFxuQEAgLTc2NzUsOSArNzY1MywxMSBAQCBzdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcbiBlcnJfcGFyc2Vfa2V5OlxuIFx0bmZ0X2RhdGFfcmVsZWFzZShcdTAwMjZlbGVtLmtleS52YWwsIE5GVF9EQVRBX1ZBTFVFKTtcbiBlcnJfc2V0X2VsZW1fZXhwcjpcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG51bV9leHBycyBcdTAwMjZcdTAwMjYgZXhwcl9hcnJheVtpXTsgaSsrKVxuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XG4tZXJyX3NldF9lbGVtX2V4cHJfY2xvbmU6XG4rXHRpZiAob3ZlcnJpZGVfZXhwcnMpIHtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnVtX2V4cHJzIFx1MDAyNlx1MDAyNiBleHByX2FycmF5W2ldOyBpKyspXG4rXHRcdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIGV4cHJfYXJyYXlbaV0pO1xuK1x0fVxuK1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTA4OTQsNiArMTA4NzQsMTAgQEAgc3RhdGljIHZvaWQgbmZ0X3NldF9jb21taXRfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdG5mdF9jdHhfdXBkYXRlKGN0eCwgdHJhbnMpO1xuIFxuIFx0XHRzd2l0Y2ggKHRyYW5zLVx1MDAzZW1zZ190eXBlKSB7XG4rXHRcdGNhc2UgTkZUX01TR19ERUxTRVQ6XG4rXHRcdGNhc2UgTkZUX01TR19ERVNUUk9ZU0VUOlxuK1x0XHRcdG5mdF90cmFuc19zZXQodHJhbnMpLVx1MDAzZWRlYWQgPSAxO1xuK1x0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIE5GVF9NU0dfREVMU0VURUxFTTpcbiBcdFx0XHR0ZSA9IG5mdF90cmFuc19jb250YWluZXJfZWxlbSh0cmFucyk7XG4gXHRcdFx0aWYgKCF0ZS1cdTAwM2VzZXQtXHUwMDNlb3BzLVx1MDAzZWNvbW1pdClcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jXG5pbmRleCBlZTlkM2U3YjFlY2YxLi44M2U1NmIxYWE4NTg1IDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfZHluc2V0LmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jXG5AQCAtMTksNyArMTksOCBAQCBzdHJ1Y3QgbmZ0X2R5bnNldCB7XG4gXHR1OFx0XHRcdFx0c3JlZ19rZXk7XG4gXHR1OFx0XHRcdFx0c3JlZ19kYXRhO1xuIFx0Ym9vbFx0XHRcdFx0aW52ZXJ0O1xuLVx0Ym9vbFx0XHRcdFx0ZXhwcjtcbitcdGJvb2xcdFx0XHRcdGV4cHI6MSxcbitcdFx0XHRcdFx0b3ZlcnJpZGVfZXhwcnM6MTtcbiBcdHU4XHRcdFx0XHRudW1fZXhwcnM7XG4gXHR1NjRcdFx0XHRcdHRpbWVvdXQ7XG4gXHRzdHJ1Y3QgbmZ0X2V4cHJcdFx0XHQqZXhwcl9hcnJheVtORlRfU0VUX0VYUFJfTUFYXTtcbkBAIC0yNTcsNiArMjU4LDcgQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcbiBcdFx0cHJpdi1cdTAwM2VudW1fZXhwcnMrKztcbiBcdFx0cHJpdi1cdTAwM2VleHByX2FycmF5WzBdID0gZHluc2V0X2V4cHI7XG4rXHRcdHByaXYtXHUwMDNlb3ZlcnJpZGVfZXhwcnMgPSB0cnVlO1xuIFxuIFx0XHRpZiAoc2V0LVx1MDAzZW51bV9leHBycyBcdTAwM2UgMSB8fFxuIFx0XHQgICAgKHNldC1cdTAwM2VudW1fZXhwcnMgPT0gMSBcdTAwMjZcdTAwMjZcbkBAIC0yODksNiArMjkxLDcgQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdFx0XHR9XG4gXHRcdFx0cHJpdi1cdTAwM2VleHByX2FycmF5W2ldID0gZHluc2V0X2V4cHI7XG4gXHRcdFx0cHJpdi1cdTAwM2VudW1fZXhwcnMrKztcbitcdFx0XHRwcml2LVx1MDAzZW92ZXJyaWRlX2V4cHJzID0gdHJ1ZTtcbiBcbiBcdFx0XHRpZiAoc2V0LVx1MDAzZW51bV9leHBycykge1xuIFx0XHRcdFx0aWYgKGkgXHUwMDNlPSBzZXQtXHUwMDNlbnVtX2V4cHJzKSB7XG5AQCAtMzA3LDkgKzMxMCw4IEBAIHN0YXRpYyBpbnQgbmZ0X2R5bnNldF9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXG4gXHRcdFx0Z290byBlcnJfZXhwcl9mcmVlO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKHNldC1cdTAwM2VudW1fZXhwcnMgXHUwMDNlIDApIHtcbi1cdFx0ZXJyID0gbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmUoY3R4LCBzZXQsIHByaXYtXHUwMDNlZXhwcl9hcnJheSk7XG4tXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIGVycjtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc2V0LVx1MDAzZW51bV9leHByczsgaSsrKVxuK1x0XHRcdHByaXYtXHUwMDNlZXhwcl9hcnJheVtpXSA9IHNldC1cdTAwM2VleHByc1tpXTtcbiBcbiBcdFx0cHJpdi1cdTAwM2VudW1fZXhwcnMgPSBzZXQtXHUwMDNlbnVtX2V4cHJzO1xuIFx0fVxuQEAgLTMzOSw4ICszNDEsMTAgQEAgc3RhdGljIGludCBuZnRfZHluc2V0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcbiBcdHJldHVybiAwO1xuIFxuIGVycl9leHByX2ZyZWU6XG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcml2LVx1MDAzZW51bV9leHByczsgaSsrKVxuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgcHJpdi1cdTAwM2VleHByX2FycmF5W2ldKTtcbitcdGlmIChwcml2LVx1MDAzZW92ZXJyaWRlX2V4cHJzKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByaXYtXHUwMDNlbnVtX2V4cHJzOyBpKyspXG4rXHRcdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIHByaXYtXHUwMDNlZXhwcl9hcnJheVtpXSk7XG4rXHR9XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0zNjcsOSArMzcxLDEwIEBAIHN0YXRpYyB2b2lkIG5mdF9keW5zZXRfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuIFx0c3RydWN0IG5mdF9keW5zZXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpO1xuIFx0aW50IGk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwcml2LVx1MDAzZW51bV9leHByczsgaSsrKVxuLVx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgcHJpdi1cdTAwM2VleHByX2FycmF5W2ldKTtcbi1cbitcdGlmIChwcml2LVx1MDAzZW92ZXJyaWRlX2V4cHJzKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHByaXYtXHUwMDNlbnVtX2V4cHJzOyBpKyspXG4rXHRcdFx0bmZ0X2V4cHJfZGVzdHJveShjdHgsIHByaXYtXHUwMDNlZXhwcl9hcnJheVtpXSk7XG4rXHR9XG4gXHRuZl90YWJsZXNfZGVzdHJveV9zZXQoY3R4LCBwcml2LVx1MDAzZXNldCk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDE6NDAuNjA1MTA5NzE4WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2OTk0NjQ1MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldGZpbHRlcidzIEV4cHJlc3Npb24gSGFuZGxpbmcgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5mX3RhYmxlc19hcGkuY2AgYW5kIGBuZnRfZHluc2V0LmNgLiBJdCdzIGFsbCBhYm91dCBzdHJlYW1saW5pbmcgbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoIGhvdyBuZXRmaWx0ZXIgZGVhbHMgd2l0aCBleHByZXNzaW9ucyB3aXRoaW4gc2V0cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCB0aGV5J3JlIHRyeWluZyB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjbG9uaW5nLCB3aGljaCB1c3VhbGx5IHRyYW5zbGF0ZXMgdG8gYSBwZXJmb3JtYW5jZSBib29zdC5cIiBTbWFydC5cblxuVGhlIGNvcmUgaWRlYSBzZWVtcyB0byBiZSB0aGlzIGBvdmVycmlkZV9leHByc2AgYm9vbGVhbiBmbGFnLiBJZiBzZXQsIGl0IG1lYW5zIHRoZSBleHByZXNzaW9ucyB3ZXJlLCBlc3NlbnRpYWxseSwgXCJ0YWtlbiBvdmVyXCIgb3Igb3ZlcnJpZGRlbi4gSWYgYG92ZXJyaWRlX2V4cHJzYCBpcyBgdHJ1ZWAsIHRoZSBvbGQgZXhwcmVzc2lvbiBpcyBkZXN0cm95ZWQuIElmIG5vdCwgaXQganVzdCBjb3BpZXMgdGhlIHBvaW50ZXJzIHRvIHRoZSBleHByZXNzaW9ucy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgY2hhbmdlIGluIG9iamVjdCBsaWZlY3ljbGUgYW5kIHJlZmVyZW5jZSBtYW5hZ2VtZW50LiBXZSBhcmUgbW92aW5nIGF3YXkgZnJvbSBgbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmVgIGluIGZhdm9yIG9mIGRpcmVjdCBwb2ludGVyIG1hbmlwdWxhdGlvbi4gVGhhdCdzIGdvb2QsIGxlc3Mgb3ZlcmhlYWQgaWYgd2UgY2FuIGF2b2lkIHRoYXQgY2xvbmUuIEl0IHNlZW1zIHRvIHBhc3MgdGhhdCBgb3ZlcnJpZGVfZXhwcnNgIGZsYWcgdG8gYG5mdF9zZXRfZWxlbV9leHByX3NldHVwYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGNyZWF0aW5nIGV4cHJlc3Npb25zLCBidXQgbGV0IG1lIHRoaW5rLi4uXG5cbk9rYXksIHNvIGBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cGAgaXMgd2hlcmUgdGhpbmdzIGFyZSBnZXR0aW5nIGEgbGl0dGxlIGNvbmZ1c2luZy4gSXQncyBkb2luZyBzb21ldGhpbmcgbGlrZSB0aGlzOlxuXG5gYGBjXG5cdFx0ZWxlbV9leHByLVx1MDAzZXNpemUgKz0gZXhwcl9hcnJheVtpXS1cdTAwM2VvcHMtXHUwMDNlc2l6ZTtcblx0XHRpZiAob3ZlcnJpZGVfZXhwcnMpXG5cdFx0XHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XG5cdFx0ZXhwcl9hcnJheVtpXSA9IE5VTEw7XG5gYGBcblxuSG1tLi4uIGlmIGBvdmVycmlkZV9leHByc2AgaXMgYGZhbHNlYCwgaXQgKmRvZXNuJ3QqIGRlc3Ryb3kgdGhlIGV4cHJlc3Npb24uIFRoaXMgc2VlbXMgb2ZmLiBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgIGlzIHN1cHBvc2VkIHRvICpzZXR1cCogdGhlIGV4cHJlc3Npb25zIGluIHRoZSBlbGVtZW50LCByaWdodD8gU28gaWYgaXQncyBzZXR0aW5nIHRoZW0gdXAsIGl0ICptdXN0KiBiZSBjbG9uaW5nIHRoZW0gb3IgY3JlYXRpbmcgdGhlbSBmcm9tIHNjcmF0Y2guIEkgZ3Vlc3MgdGhleSBhcmUgdXNpbmcgYSBoeWJyaWQgYXBwcm9hY2gsIGNsb25pbmcgb25seSB3aGVuIG5lY2Vzc2FyeS4gQnV0IGl0IHNob3VsZCB0aGVuIGJlICpkZXN0cm95aW5nKiB0aGVtIHdoZW4gaXQncyBkb25lLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBpdCBjbG9uZXMgdGhlIGV4cHJlc3Npb25zLiBMZXQgbWUgZ28gY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGZvciBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgIGFuZCBzZWUgd2hhdCBpdCdzIHJlYWxseSBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg4NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQxOjQ4LjMwNDU3NjQ2OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAyNzg3Mjg1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02OTE1PXN0YXRpYyB2b2lkIG5mdF90cmFuc19lbGVtc19kZXN0cm95KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02OTIzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjY5MjQ6c3RhdGljIGludCBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY5MjUtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0X3RtcGwgKnRtcGwsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03MjQ1PXN0YXRpYyBpbnQgbmZ0X2FkZF9zZXRfZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzU0Ni1cXHR9XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzU0NzpcXHRlcnIgPSBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChjdHgsIFxcdTAwMjZ0bXBsLCBleHQsIGV4cHJfYXJyYXksIG51bV9leHBycyxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NTQ4LVxcdFxcdFxcdFxcdCAgICAgIG92ZXJyaWRlX2V4cHJzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDE6NTAuMzMyNDU1NzM1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjYxNzAyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYG5mdF9zZXRfZWxlbV9leHByX3NldHVwYC4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGlzIGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgZXhwcmVzc2lvbiBhc3NvY2lhdGVkIHdpdGggYW4gZWxlbWVudCB3aXRoaW4gYW4gTkZUYWJsZXMgc2V0LiBJdCdzIGxpa2VseSBhIGNydWNpYWwgcGFydCBvZiB0aGUgc2V0IG1hbmFnZW1lbnQgaW5mcmFzdHJ1Y3R1cmUuIEknbSBleHBlY3RpbmcgdG8gc2VlIGhhbmRsaW5nIG9mIGRhdGEgdHlwZXMsIHBvdGVudGlhbCBrZXkvcGF5bG9hZCBwYXJzaW5nLCBhbmQgcGVyaGFwcyBzb21lIG9wdGltaXphdGlvbiBjb25zaWRlcmF0aW9ucyBmb3IgZGlmZmVyZW50IGVsZW1lbnQgZm9ybWF0cy5cblxuSSdtIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGRlYWxzIHdpdGggdGhlIHZhcmlvdXMgZGF0YSB0eXBlcyB0aGF0IE5GVGFibGVzIHN1cHBvcnRzIGZvciBzZXQgZWxlbWVudHMg4oCTIElQdjQgYWRkcmVzc2VzLCBJUHY2IGFkZHJlc3NlcywgcG9ydHMsIGludGVnZXJzLCBzdHJpbmdzLCBldGMuIEhvdyBkb2VzIGl0IHZhbGlkYXRlIHRoZSBpbnB1dCBhbmQgZW5zdXJlIHR5cGUgY29tcGF0aWJpbGl0eT8gRG9lcyBpdCBoYXZlIGEgc3dpdGNoIHN0YXRlbWVudCBvciBhIG1vcmUgc29waGlzdGljYXRlZCBkaXNwYXRjaCBtZWNoYW5pc20/IEknbSBiZXR0aW5nIG9uIGEgd2VsbC1kZXNpZ25lZCBzdHJ1Y3R1cmUgdG8gaGFuZGxlIHRoZSB0eXBlLXNwZWNpZmljIGxvZ2ljIGNsZWFubHkuXG5cbkZ1cnRoZXJtb3JlLCBJJ20gY3VyaW91cyBhYm91dCB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgd2l0aGluIHRoZSBrZXJuZWwgZm9yIHRoZSBzZXQgaXRzZWxmLiBJcyBpdCBhbGxvY2F0aW5nIG1lbW9yeSBmb3IgdGhlIGVsZW1lbnQgZXhwcmVzc2lvbj8gSG93IGRvZXMgaXQgaW50ZWdyYXRlIHdpdGggdGhlIGhhc2ggdGFibGUgb3IgcmFkaXggdHJlZSB1c2VkIHRvIHN0b3JlIHRoZSBzZXQgZWxlbWVudHM/IElzIHRoZXJlIGFueSBjYWNoaW5nIG9yIHByZS1jYWxjdWxhdGlvbiBiZWluZyBkb25lIHRvIGltcHJvdmUgcGVyZm9ybWFuY2U/IEknbGwgYmUga2VlcGluZyBhbiBleWUgb3V0IGZvciBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgZGV0YWlscyBhbmQgcG90ZW50aWFsIGxvY2tpbmcgY29uc2lkZXJhdGlvbnMsIGFzIHNldCBvcGVyYXRpb25zIG5lZWQgdG8gYmUgdGhyZWFkLXNhZmUuXG5cbkknbSBhbHNvIGFudGljaXBhdGluZyBzb21lIGZvcm0gb2YgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGUgZWxlbWVudCBleHByZXNzaW9uIGlzIGludmFsaWQsIG9yIGlmIHRoZXJlJ3MgYSBwcm9ibGVtIGFsbG9jYXRpbmcgbWVtb3J5PyBBcmUgc3BlY2lmaWMgZXJyb3IgY29kZXMgYmVpbmcgcmV0dXJuZWQ/IEhvdyBncmFudWxhciBpcyB0aGUgZXJyb3IgcmVwb3J0aW5nPyBUaGUgcXVhbGl0eSBvZiB0aGUgZXJyb3IgaGFuZGxpbmcgd2lsbCBnaXZlIG1lIGEgZ29vZCBpbmRpY2F0aW9uIG9mIHRoZSBvdmVyYWxsIHJvYnVzdG5lc3Mgb2YgdGhpcyBjb21wb25lbnQuXG5cbkZpbmFsbHksIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGhpbnRzIG9mIG9wdGltaXphdGlvbiB0ZWNobmlxdWVzLiBEb2VzIGl0IGF0dGVtcHQgdG8gY29tcGFjdCBkYXRhLCBvciB1c2Ugc3BlY2lhbGl6ZWQgaW5zdHJ1Y3Rpb25zIHdoZXJlIHBvc3NpYmxlPyBIb3cgZG9lcyBpdCBoYW5kbGUgbGFyZ2Ugc2V0cywgYW5kIGFyZSB0aGVyZSBhbnkgc2NhbGFiaWxpdHkgY29uc2lkZXJhdGlvbnM/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NzksIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MTo1NC43NTg2Mjk2NTNaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg5MDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5MjQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY5MjQ6XFx0c3RhdGljIGludCBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cChzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbjY5MjU6XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0X3RtcGwgKnRtcGwsXFxuNjkyNjpcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dCxcXG42OTI3OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfZXhwciAqZXhwcl9hcnJheVtdLFxcbjY5Mjg6XFx0XFx0XFx0XFx0XFx0ICAgdTMyIG51bV9leHBycywgYm9vbCBvdmVycmlkZV9leHBycylcXG42OTI5OlxcdHtcXG42OTMwOlxcdFxcdHN0cnVjdCBuZnRfc2V0X2VsZW1fZXhwciAqZWxlbV9leHByID0gbmZ0X3NldF9leHRfZXhwcihleHQpO1xcbjY5MzE6XFx0XFx0dTMyIGxlbiA9IHNpemVvZihzdHJ1Y3QgbmZ0X3NldF9lbGVtX2V4cHIpO1xcbjY5MzI6XFx0XFx0c3RydWN0IG5mdF9leHByICpleHByO1xcbjY5MzM6XFx0XFx0aW50IGksIGVycjtcXG42OTM0OlxcdFxcbjY5MzU6XFx0XFx0aWYgKG51bV9leHBycyA9PSAwKVxcbjY5MzY6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNjkzNzpcXHRcXG42OTM4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBudW1fZXhwcnM7IGkrKylcXG42OTM5OlxcdFxcdFxcdGxlbiArPSBleHByX2FycmF5W2ldLVxcdTAwM2VvcHMtXFx1MDAzZXNpemU7XFxuNjk0MDpcXHRcXG42OTQxOlxcdFxcdGlmIChuZnRfc2V0X2V4dF9jaGVjayh0bXBsLCBORlRfU0VUX0VYVF9FWFBSRVNTSU9OUywgbGVuKSBcXHUwMDNjIDApXFxuNjk0MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG42OTQzOlxcdFxcbjY5NDQ6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG51bV9leHByczsgaSsrKSB7XFxuNjk0NTpcXHRcXHRcXHRleHByID0gbmZ0X3NldGVsZW1fZXhwcl9hdChlbGVtX2V4cHIsIGVsZW1fZXhwci1cXHUwMDNlc2l6ZSk7XFxuNjk0NjpcXHRcXHRcXHRlcnIgPSBuZnRfZXhwcl9jbG9uZShleHByLCBleHByX2FycmF5W2ldLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbjY5NDc6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuNjk0ODpcXHRcXHRcXHRcXHRnb3RvIGVycl9lbGVtX2V4cHJfc2V0dXA7XFxuNjk0OTpcXHRcXG42OTUwOlxcdFxcdFxcdGVsZW1fZXhwci1cXHUwMDNlc2l6ZSArPSBleHByX2FycmF5W2ldLVxcdTAwM2VvcHMtXFx1MDAzZXNpemU7XFxuNjk1MTpcXHRcXHRcXHRpZiAob3ZlcnJpZGVfZXhwcnMpXFxuNjk1MjpcXHRcXHRcXHRcXHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XFxuNjk1MzpcXHRcXHRcXHRleHByX2FycmF5W2ldID0gTlVMTDtcXG42OTU0OlxcdFxcdH1cXG42OTU1OlxcdFxcbjY5NTY6XFx0XFx0cmV0dXJuIDA7XFxuNjk1NzpcXHRcXG42OTU4OlxcdGVycl9lbGVtX2V4cHJfc2V0dXA6XFxuNjk1OTpcXHRcXHRmb3IgKDsgaSBcXHUwMDNjIG51bV9leHByczsgaSsrKSB7XFxuNjk2MDpcXHRcXHRcXHRpZiAob3ZlcnJpZGVfZXhwcnMpXFxuNjk2MTpcXHRcXHRcXHRcXHRuZnRfZXhwcl9kZXN0cm95KGN0eCwgZXhwcl9hcnJheVtpXSk7XFxuNjk2MjpcXHRcXG42OTYzOlxcdFxcdFxcdGV4cHJfYXJyYXlbaV0gPSBOVUxMO1xcbjY5NjQ6XFx0XFx0fVxcbjY5NjU6XFx0XFxuNjk2NjpcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG42OTY3OlxcdH1cXG42OTY4OlxcdFxcbjY5Njk6XFx0c3RydWN0IG5mdF9zZXRfZXh0ICpuZnRfc2V0X2NhdGNoYWxsX2xvb2t1cChjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsXFxuNjk3MDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldClcXG42OTcxOlxcdHtcXG42OTcyOlxcdFxcdHN0cnVjdCBuZnRfc2V0X2VsZW1fY2F0Y2hhbGwgKmNhdGNoYWxsO1xcbjY5NzM6XFx0XFx0dTggZ2VubWFzayA9IG5mdF9nZW5tYXNrX2N1cihuZXQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MTo1NC43NTkxMjEzMjNaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2MDQxMTExMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBPYnNlcnZhdGlvbnMgb24gRXhwcmVzc2lvbiBDbG9uaW5nIGluIE5ldGZpbHRlciBTZXRzKipcblxuUmlnaHQsIHNvIGBuZnRfc2V0X2VsZW1fZXhwcl9zZXR1cGAgaXMgbm93IGhhbmRsaW5nIHRoZSBjbG9uaW5nIG9mIGV4cHJlc3Npb25zIGRpcmVjdGx5IGludG8gdGhlIHNldCBlbGVtZW50LiBUaGlzIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLiBQcmV2aW91c2x5LCBJIHJlY2FsbCBgbmZ0X2FkZF9zZXRfZWxlbWAgd291bGQgY2xvbmUgdGhvc2UgZXhwcmVzc2lvbnMgaW50byBhbiBgZXhwcl9hcnJheWAgZmlyc3QsIHVzaW5nIGBuZnRfc2V0X2VsZW1fZXhwcl9jbG9uZWAuIFRoZW4sIGl0IHNlZW1zLCBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgIHdvdWxkICp0aGVuKiBjbG9uZSB0aGVtIGFnYWluPyBUaGF0IHNvdW5kcyBpbmVmZmljaWVudCwgYW5kIGZyYW5rbHksIGEgYml0IHJlZHVuZGFudC4gXG5cbkkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgbWVudGFsIG1vZGVsIGhlcmUuIFRoZSBvbGQgY29kZSBmb3IgYG5mdF9zZXRfZWxlbV9leHByX2Nsb25lYCBzaG91bGQgcHJvdmlkZSBzb21lIGNsYXJpdHkgb24gd2h5IHdlIGhhZCB0aGlzIGV4dHJhLCBwb3RlbnRpYWxseSB1bm5lY2Vzc2FyeSwgbGF5ZXIgb2YgY2xvbmluZy4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBsb29rcyBsaWtlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjQ1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDE6NTkuMDE5NTM0NDU2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MjYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2OTEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2OTEwOlxcdFxcdFxcdG5mdF9zZXRfZWxlbV9leHByX2Rlc3Ryb3koY3R4LCBuZnRfc2V0X2V4dF9leHByKGV4dCkpO1xcbjY5MTE6XFx0XFxuNjkxMjpcXHRcXHRrZnJlZShlbGVtX3ByaXYpO1xcbjY5MTM6XFx0fVxcbjY5MTQ6XFx0XFxuNjkxNTpcXHRzdGF0aWMgdm9pZCBuZnRfdHJhbnNfZWxlbXNfZGVzdHJveShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbjY5MTY6XFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBuZnRfdHJhbnNfZWxlbSAqdGUpXFxuNjkxNzpcXHR7XFxuNjkxODpcXHRcXHRpbnQgaTtcXG42OTE5OlxcdFxcbjY5MjA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHRlLVxcdTAwM2VuZWxlbXM7IGkrKylcXG42OTIxOlxcdFxcdFxcdG5mX3RhYmxlc19zZXRfZWxlbV9kZXN0cm95KGN0eCwgdGUtXFx1MDAzZXNldCwgdGUtXFx1MDAzZWVsZW1zW2ldLnByaXYpO1xcbjY5MjI6XFx0fVxcbjY5MjM6XFx0XFxuNjkyNDpcXHRzdGF0aWMgaW50IG5mdF9zZXRfZWxlbV9leHByX3NldHVwKHN0cnVjdCBuZnRfY3R4ICpjdHgsXFxuNjkyNTpcXHRcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgbmZ0X3NldF9leHRfdG1wbCAqdG1wbCxcXG42OTI2OlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dCAqZXh0LFxcbjY5Mjc6XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9leHByICpleHByX2FycmF5W10sXFxuNjkyODpcXHRcXHRcXHRcXHRcXHQgICB1MzIgbnVtX2V4cHJzLCBib29sIG92ZXJyaWRlX2V4cHJzKVxcbjY5Mjk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MTo1OS4wMjAxMDgzNTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIzMDY3MDAyMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHByZXNzaW9uIENsb25pbmcgT3B0aW1pemF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdvIG92ZXIgdGhpcyBgbmZ0X3NldF9lbGVtX2V4cHJfY2xvbmVgIGZ1bmN0aW9uIGZyb20gdGhlIGRpZmYuIEluaXRpYWxseSwgaXQgc2VlbXMgdGhleSBhcmUgY2xvbmluZyB0aGUgZXhwcmVzc2lvbnMgZnJvbSB0aGUgc2V0IGFuZCBzdG9yaW5nIHRoZW0gaW4gYGV4cHJfYXJyYXlgLiBTcGVjaWZpY2FsbHksIGBremFsbG9jYCBpcyBiZWluZyB1c2VkIHRvIGFsbG9jYXRlIG1lbW9yeSBhbmQgdGhlIGBuZnRfZXhwcl9jbG9uZWAgZnVuY3Rpb24gaXMgdXNlZCBmb3IgdGhlIGNvcHlpbmcuXG5cblRoZW4sIEknbSByZW1pbmRlZCBvZiBob3cgYG5mdF9zZXRfZWxlbV9leHByX3NldHVwYCB3YXMgdXRpbGl6aW5nIGBleHByX2FycmF5YC4gSXQgbG9va3MgbGlrZSBpdCB3YXMgY2xvbmluZyB0aGVzZSAqY2xvbmVzKiBhZ2FpbiBpbnRvIHRoZSBlbGVtZW50IGFuZCBkZXN0cm95aW5nIHRoZSBvcmlnaW5hbCBjbG9uZSBhZnRlcndhcmQuIFRoYXQncyBhIHRleHRib29rIGRvdWJsZS1jbG9uZSBzY2VuYXJpbyEgV2UgaGFkIGEgdGVtcG9yYXJ5IGNvcHkgdGhhdCB3YXMgdWx0aW1hdGVseSBkaXNjYXJkZWQuIFRoZSBwYXRjaCBjbGVhbnMgdGhpcyB1cCBzaWduaWZpY2FudGx5LlxuXG5UaGUgcGF0Y2gncyBvcHRpbWl6YXRpb24gc3RyYXRlZ3kgaXMgdG8gcGFzcyB0aGUgb3JpZ2luYWwgZXhwcmVzc2lvbnMgZGlyZWN0bHkgaW4gYGV4cHJfYXJyYXlgIHdoZW4gcG9zc2libGUuIElmIHRoZSBzZXQncyBleHByZXNzaW9ucyBhcmUgKm5vdCogYmVpbmcgb3ZlcnJpZGRlbiBieSBhIHVzZXItcHJvdmlkZWQgZXhwcmVzc2lvbiwgYG5mdF9zZXRfZWxlbV9leHByX3NldHVwYCBjbG9uZXMgdGhlc2UgZGlyZWN0bHkgaW50byB0aGUgZWxlbWVudC4gSWYgdGhlcmUncyBhbiBvdmVycmlkZSwgdGhhdCBuZXcgb2JqZWN0IGZyb20gcGFyc2luZyBpcyBhbHJlYWR5IHRoZXJlIGFuZCBjb3BpZWQsIGFuZCB0aGUgdGVtcCBhbGxvY2F0aW9uIGlzIGRlc3Ryb3llZC4gVGhpcyBkaXJlY3RseSBhZGRyZXNzZXMgdGhlIGRvdWJsZS1jbG9uZSBwcm9ibGVtLCByZWR1Y2luZyB0aGUgbWVtb3J5IGZvb3RwcmludCBhbmQgaW1wcm92aW5nIHBlcmZvcm1hbmNlLlxuXG5JJ20gbWFraW5nIHN1cmUgdG8ga2VlcCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgc3RyYWlnaHQgaGVyZS4gVGhlIGBvdmVycmlkZV9leHByc2AgZmxhZyBpcyBrZXkuIElmIHRydWUsIHRoZSBgZXhwcl9hcnJheWAgY29udGFpbnMgbmV3bHkgYWxsb2NhdGVkIG9iamVjdHMsIGZyZXNobHkgcGFyc2VkLiBgbmZ0X3NldF9lbGVtX2V4cHJfc2V0dXBgIGNsb25lcyB0aGVtIGFuZCB0aGVuIGZyZWVzIHRoZSBtZW1vcnkuIElmIGZhbHNlLCBpdCdzIHBvaW50ZXJzIHRvIHRoZSAqc2V0J3MqIGRlZmF1bHQgZXhwcmVzc2lvbnMuIFRoZXNlIGFyZSAqY2xvbmVkKiBpbnRvIHRoZSBlbGVtZW50IGJ1dCB0aGUgb3JpZ2luYWxzIGluIGBleHByX2FycmF5YCByZW1haW4sIGJlY2F1c2UgdGhvc2UgZXhwcmVzc2lvbnMgYXJlIHBhcnQgb2YgdGhlIHNldCwgYW5kIHNob3VsZG4ndCBiZSB0b3VjaGVkIGJ5IHNldHVwLlxuXG5TbywgdGhpcyBpcyBhIGNsZWFuIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBvYmplY3QgbGlmZWN5Y2xlIG9wdGltaXphdGlvbi4gQ3JpdGljYWxseSwgaXQgKmRvZXNuJ3QqIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gYG5mdF9leHByX2Nsb25lYCBpcyBzdGlsbCByZXNwb25zaWJsZSBmb3IgY29ycmVjdGx5IGluaXRpYWxpemluZyB0aGUgY29waWVkIGRhdGEgd2l0aGluIHRoZSBlbGVtZW50IGl0c2VsZi5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlLi4uIGBuZnRfc2V0ZWxlbV9leHByX2F0YCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZWxlbWVudCdzIGV4dGVuc2lvbiBhcmVhLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgYXJlYSBpcyBjb3JyZWN0bHkgemVyb2VkIGJlZm9yZSB0aGUgY29weSB0YWtlcyBwbGFjZS4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgZWxlbV9leHByYCB0byBgbmZ0X3NldF9leHRfZXhwcihleHQpYC4gYGV4dGAgaXMgZnJvbSBgbmZ0X3NldF9lbGVtX2luaXRgIG9yIHNpbWlsYXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYXJlYSBpcyBpbml0aWFsaXplZCBwcm9wZXJseS4gSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LiBUaGF0J3MgdGhlIG9uZSB0aGluZyB0aGF0IHdpbGwgY2F1c2UgYSBwcm9ibGVtIGhlcmUhIEknbSBnb2luZyB0byBmb2xsb3cgdGhpcyB1cCB0byBtYWtlIHN1cmUgaXQncyB2YWxpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzg4NiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQyOjExLjMyNjgxMTE1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA1MTEyNDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9zZXRfZWxlbV9pbml0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaD04NjQ9c3RydWN0IG5mdF9leHByICpuZnRfc2V0X2VsZW1fZXhwcl9hbGxvYyhjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oLTg2Ny1cXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmg6ODY4OnN0cnVjdCBuZnRfZWxlbV9wcml2ICpuZnRfc2V0X2VsZW1faW5pdChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaC04NjktXFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0X3RtcGwgKnRtcGwsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz02Nzc0PXN0YXRpYyBpbnQgbmZ0X3NldF9leHRfbWVtY3B5KGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLCB1OCBpZCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTY3ODQtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Njc4NTpzdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqbmZ0X3NldF9lbGVtX2luaXQoY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy02Nzg2LVxcdFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZnRfc2V0X2V4dF90bXBsICp0bXBsLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzI0NT1zdGF0aWMgaW50IG5mdF9hZGRfc2V0X2VsZW0oc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc1MjItXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzUyMzpcXHRlbGVtLnByaXYgPSBuZnRfc2V0X2VsZW1faW5pdChzZXQsIFxcdTAwMjZ0bXBsLCBlbGVtLmtleS52YWwuZGF0YSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NTI0LVxcdFxcdFxcdFxcdCAgICAgIGVsZW0ua2V5X2VuZC52YWwuZGF0YSwgZWxlbS5kYXRhLnZhbC5kYXRhLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzgyNT1zdGF0aWMgaW50IG5mdF9kZWxfc2V0ZWxlbShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzg4MS1cXHRlcnIgPSAtRU5PTUVNO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc4ODI6XFx0ZWxlbS5wcml2ID0gbmZ0X3NldF9lbGVtX2luaXQoc2V0LCBcXHUwMDI2dG1wbCwgZWxlbS5rZXkudmFsLmRhdGEsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzg4My1cXHRcXHRcXHRcXHQgICAgICBlbGVtLmtleV9lbmQudmFsLmRhdGEsIE5VTEwsIDAsIDAsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYz01Nj1zdHJ1Y3QgbmZ0X2VsZW1fcHJpdiAqbmZ0X2R5bnNldF9uZXcoc3RydWN0IG5mdF9zZXQgKnNldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jLTY4LVxcdHRpbWVvdXQgPSBwcml2LVxcdTAwM2V0aW1lb3V0ID8gOiBSRUFEX09OQ0Uoc2V0LVxcdTAwM2V0aW1lb3V0KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9keW5zZXQuYzo2OTpcXHRlbGVtX3ByaXYgPSBuZnRfc2V0X2VsZW1faW5pdChzZXQsIFxcdTAwMjZwcml2LVxcdTAwM2V0bXBsLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R5bnNldC5jLTcwLVxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZyZWdzLVxcdTAwM2VkYXRhW3ByaXYtXFx1MDAzZXNyZWdfa2V5XSwgTlVMTCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDI6MTMuMDMxOTI4OTc4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODMxOTk5OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYG5mdF9zZXRfZWxlbV9pbml0YCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaW1lIHRvIHRha2UgYSBsb29rIGF0IGBuZnRfc2V0X2VsZW1faW5pdGAuIEdpdmVuIHRoZSBjb250ZXh0LCBJJ20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbiBhbiBORlRhYmxlcyBzZXQuIEl0J3MgdGhlIGJ1aWxkaW5nIGJsb2NrLCB0aGUgZ3JvdW5kIGZsb29yIGZvciBkZWZpbmluZyBob3cgZGF0YSBnZXRzIHN0b3JlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIHJ1bGUgc3RydWN0dXJlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRhdGEgc3RydWN0dXJlcyBhcmUgZGVmaW5lZCwgbWVtb3J5IGlzIGFsbG9jYXRlZCAob3IgcmUtdXNlZCBpZiBwb3NzaWJsZSksIGFuZCB3aGF0IGNoZWNrcyBhcmUgcGVyZm9ybWVkIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhbmQgcHJldmVudCBlcnJvcnMuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGVsZW1lbnQgdHlwZXMg4oCTIHdoZXRoZXIgaXTigJlzIGludGVnZXIsIElQIGFkZHJlc3Nlcywgc3RyaW5ncywgb3IgbW9yZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcy4gV2hhdCdzIHRoZSBzdHJhdGVneSBmb3IgZGVhbGluZyB3aXRoIHBvdGVudGlhbCBjb2xsaXNpb25zIG9yIG92ZXJsYXBzLCBpZiBhbnk/IEFuZCBvZiBjb3Vyc2UsIHBlcmZvcm1hbmNlIGlzIGtleSDigJMgaG93IGVmZmljaWVudCBpcyB0aGlzIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2Ugc2V0cyBhbmQgZnJlcXVlbnQgYWRkaXRpb25zL2RlbGV0aW9ucz8gR290dGEga2VlcCBhbiBleWUgb24gdGhvc2Ugbml0dHktZ3JpdHR5IGRldGFpbHMgdG8gbWFrZSBzdXJlIHRoaXMgaXMgdGlnaHQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk3LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMTI6NDI6MTYuOTE1MTMxODI1WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MjY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2Nzg1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2Nzg1OlxcdHN0cnVjdCBuZnRfZWxlbV9wcml2ICpuZnRfc2V0X2VsZW1faW5pdChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LFxcbjY3ODY6XFx0XFx0XFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IG5mdF9zZXRfZXh0X3RtcGwgKnRtcGwsXFxuNjc4NzpcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCB1MzIgKmtleSwgY29uc3QgdTMyICprZXlfZW5kLFxcbjY3ODg6XFx0XFx0XFx0XFx0XFx0XFx0Y29uc3QgdTMyICpkYXRhLFxcbjY3ODk6XFx0XFx0XFx0XFx0XFx0XFx0dTY0IHRpbWVvdXQsIHU2NCBleHBpcmF0aW9uLCBnZnBfdCBnZnApXFxuNjc5MDpcXHR7XFxuNjc5MTpcXHRcXHRzdHJ1Y3QgbmZ0X3NldF9leHQgKmV4dDtcXG42NzkyOlxcdFxcdHZvaWQgKmVsZW07XFxuNjc5MzpcXHRcXG42Nzk0OlxcdFxcdGVsZW0gPSBremFsbG9jKHNldC1cXHUwMDNlb3BzLVxcdTAwM2VlbGVtc2l6ZSArIHRtcGwtXFx1MDAzZWxlbiwgZ2ZwKTtcXG42Nzk1OlxcdFxcdGlmIChlbGVtID09IE5VTEwpXFxuNjc5NjpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG42Nzk3OlxcdFxcbjY3OTg6XFx0XFx0ZXh0ID0gbmZ0X3NldF9lbGVtX2V4dChzZXQsIGVsZW0pO1xcbjY3OTk6XFx0XFx0bmZ0X3NldF9leHRfaW5pdChleHQsIHRtcGwpO1xcbjY4MDA6XFx0XFxuNjgwMTpcXHRcXHRpZiAobmZ0X3NldF9leHRfZXhpc3RzKGV4dCwgTkZUX1NFVF9FWFRfS0VZKSBcXHUwMDI2XFx1MDAyNlxcbjY4MDI6XFx0XFx0ICAgIG5mdF9zZXRfZXh0X21lbWNweSh0bXBsLCBORlRfU0VUX0VYVF9LRVksXFxuNjgwMzpcXHRcXHRcXHRcXHQgICAgICAgbmZ0X3NldF9leHRfa2V5KGV4dCksIGtleSwgc2V0LVxcdTAwM2VrbGVuKSBcXHUwMDNjIDApXFxuNjgwNDpcXHRcXHRcXHRnb3RvIGVycl9leHRfY2hlY2s7XFxuNjgwNTpcXHRcXG42ODA2OlxcdFxcdGlmIChuZnRfc2V0X2V4dF9leGlzdHMoZXh0LCBORlRfU0VUX0VYVF9LRVlfRU5EKSBcXHUwMDI2XFx1MDAyNlxcbjY4MDc6XFx0XFx0ICAgIG5mdF9zZXRfZXh0X21lbWNweSh0bXBsLCBORlRfU0VUX0VYVF9LRVlfRU5ELFxcbjY4MDg6XFx0XFx0XFx0XFx0ICAgICAgIG5mdF9zZXRfZXh0X2tleV9lbmQoZXh0KSwga2V5X2VuZCwgc2V0LVxcdTAwM2VrbGVuKSBcXHUwMDNjIDApXFxuNjgwOTpcXHRcXHRcXHRnb3RvIGVycl9leHRfY2hlY2s7XFxuNjgxMDpcXHRcXG42ODExOlxcdFxcdGlmIChuZnRfc2V0X2V4dF9leGlzdHMoZXh0LCBORlRfU0VUX0VYVF9EQVRBKSBcXHUwMDI2XFx1MDAyNlxcbjY4MTI6XFx0XFx0ICAgIG5mdF9zZXRfZXh0X21lbWNweSh0bXBsLCBORlRfU0VUX0VYVF9EQVRBLFxcbjY4MTM6XFx0XFx0XFx0XFx0ICAgICAgIG5mdF9zZXRfZXh0X2RhdGEoZXh0KSwgZGF0YSwgc2V0LVxcdTAwM2VkbGVuKSBcXHUwMDNjIDApXFxuNjgxNDpcXHRcXHRcXHRnb3RvIGVycl9leHRfY2hlY2s7XFxuNjgxNTpcXHRcXG42ODE2OlxcdFxcdGlmIChuZnRfc2V0X2V4dF9leGlzdHMoZXh0LCBORlRfU0VUX0VYVF9USU1FT1VUKSkge1xcbjY4MTc6XFx0XFx0XFx0bmZ0X3NldF9leHRfdGltZW91dChleHQpLVxcdTAwM2V0aW1lb3V0ID0gdGltZW91dDtcXG42ODE4OlxcdFxcbjY4MTk6XFx0XFx0XFx0aWYgKGV4cGlyYXRpb24gPT0gMClcXG42ODIwOlxcdFxcdFxcdFxcdGV4cGlyYXRpb24gPSB0aW1lb3V0O1xcbjY4MjE6XFx0XFxuNjgyMjpcXHRcXHRcXHRuZnRfc2V0X2V4dF90aW1lb3V0KGV4dCktXFx1MDAzZWV4cGlyYXRpb24gPSBnZXRfamlmZmllc182NCgpICsgZXhwaXJhdGlvbjtcXG42ODIzOlxcdFxcdH1cXG42ODI0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQxMjo0MjoxNi45MTU3MjYzMjZaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTY3MDAyNzc1NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IE1lbW9yeSBNYW5hZ2VtZW50IEZpeGVzIGluIE5ldGZpbHRlciBTZXRzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIGFib3V0IHRoZSByZW1vdmFsIG9mIHRoYXQgYGt6YWxsb2NgIGluIGBuZnRfc2V0X2VsZW1fZXhwcl9jbG9uZWAuIEJ1dCB0aGF0IHdhcyBqdXN0IGZvciBhIHRlbXBvcmFyeSBjbG9uZSB0aGF0J3MgYnlwYXNzZWQgbm93LiBUaGUgY3J1Y2lhbCBwb2ludCBpcyB0aGF0IHRoZSAqYWN0dWFsKiBlbGVtZW50IG1lbW9yeSBpcyBzdGlsbCB6ZXJvZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIHZpYSBga3phbGxvY2AuIFNvLCBubyBpbW1lZGlhdGUgcmlzayB0aGVyZS4gSSBkaWQgYSBxdWljayBjaGVjayBvbiBgbmZ0X2V4cHJfY2xvbmVgIGp1c3QgaW4gY2FzZSwgYnV0IHRoYXQgY29waWVzIGZyb20gYW4gKmluaXRpYWxpemVkKiBvcmlnaW5hbCBleHByZXNzaW9uLlxuXG5UaGVuIEkgbW92ZWQgb24gdG8gdGhlIGNoYW5nZXMgaW4gYG5mdF9zZXRfY29tbWl0X3VwZGF0ZWAuIFNldHRpbmcgYGRlYWQgPSAxYCBvbiBkZWxldGVkIHNldHMuLi4gc291bmRzIGxpa2UgYSB1c2UtYWZ0ZXItZnJlZSBwcm90ZWN0aW9uLiBNYWtlcyBzZW5zZS5cblxuRGlnZ2luZyBmdXJ0aGVyLCBJIGxvb2tlZCBhdCBgbmZ0X2R5bnNldF9pbml0YCBhbmQgYG5mdF9keW5zZXRfZGVzdHJveWAuIEl0J3Mgbm93IHN0b3JpbmcgZGlyZWN0IHBvaW50ZXJzIHRvIHNldCBleHByZXNzaW9ucywgaW5zdGVhZCBvZiBjbG9uaW5nIHRoZW0sIHdpdGggdGhpcyBgb3ZlcnJpZGVfZXhwcnNgIGZsYWcgdG8gc2lnbmFsIHdoZXRoZXIgdGhlIHNldCBleHByZXNzaW9uJ3MgZXhwcmVzc2lvbnMgc2hvdWxkIGJlIGRlc3Ryb3llZCBvciBub3QuIFRoYXQgc3Ryb25nbHkgc3VnZ2VzdHMgYSBkb3VibGUtZnJlZSBvciBVQUYgYnVnIGZpeDogd2UncmUgcHJldmVudGluZyB0aGUgZHluc2V0IGV4cHJlc3Npb24gZnJvbSBkZXN0cm95aW5nIHRoZSBzZXQgZXhwcmVzc2lvbnMgd2hlbiB0aGV5J3JlIG5vdCBvd25lZCBieSB0aGUgZHluc2V0IGV4cHJlc3Npb24uXG5cblNvLCBpbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIGlzIGZpeGluZzpcbjEuICBFeHByZXNzaW9uIGNsb25pbmcgaW4gYG5mdF9hZGRfc2V0X2VsZW1gLlxuMi4gIERvdWJsZS1mcmVlL1VBRiBpbiBgbmZ0X2R5bnNldF9kZXN0cm95YC5cbjMuICBTZXR0aW5nIHRoZSBgZGVhZGAgZmxhZyBvbiBkZWxldGVkIHNldHMuXG5cbkknbSBjb25maWRlbnQgdGhhdCBub25lIG9mIHRoZXNlIGNoYW5nZXMgaW50cm9kdWNlICpvciogZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGhlc2UgYXJlIG1lbW9yeSBtYW5hZ2VtZW50IGZpeGVzLCBwdXJlIGFuZCBzaW1wbGUuIEtBU0FOIGlzIHRoZSB0b29sIGZvciB0aGVzZSBraW5kcyBvZiBidWdzLiBLTVNBTiBpc24ndCBuZWVkZWQgaGVyZS5cblxuTm93LCBsZXQncyBkb3VibGUtY2hlY2sgYW55IHBvc3NpYmxlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIHRvIHVzZXJzcGFjZS4gVGhlIGV4cHJlc3Npb25zIHRoZW1zZWx2ZXMgY2FuIGdldCBkdW1wZWQgdG8gdXNlcnNwYWNlIHZpYSBuZXRsaW5rLiBUaGUgZWxlbWVudCBtZW1vcnkgZ2V0cyBga3phbGxvY2AnZWQgaW4gYG5mdF9zZXRfZWxlbV9pbml0YCwgbWVhbmluZyBpdCdzIGFsbCB6ZXJvZWQuIFRoZSBleHByZXNzaW9ucyBhcmUgY2xvbmVkIGludG8gdGhhdCB6ZXJvZWQgbWVtb3J5IHdpdGggYG5mdF9leHByX2Nsb25lYCwgd2hpY2ggbWVhbnMsIGJlY2F1c2UgdGhlIGV4cHJlc3Npb24gd2FzIGFscmVhZHkgaW5pdGlhbGl6ZWQgYW5kIGxpa2VseSB6ZXJvLXBhZGRlZCwgd2UncmUgbm90IGRlYWxpbmcgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeS4gQWxzbywgdGhpcyBwYXRjaCAqZG9lc24ndCogY2hhbmdlIHdoYXQgZ2V0cyBzdG9yZWQgaW4gdGhlIGVsZW1lbnQsIG9ubHkgKmhvdyogaXQgZ2V0cyB0aGVyZS5cblxuVGhlcmVmb3JlLCBubywgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zIGhlcmUuXG5cbioqSSdtIHNldHRpbmcgTmVlZHNLTVNBTj1mYWxzZS4qKiBUaGlzIGlzIGFsbCBhYm91dCBmaXhpbmcgb2JqZWN0IGxpZmVjeWNsZSBwcm9ibGVtcyBhbmQgcG90ZW50aWFsIG1lbW9yeSBsZWFrcywgd2hpY2ggYXJlIHdlbGwgaGFuZGxlZCBieSBLQVNBTi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMTksIk91dHB1dFRva2VucyI6MjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDEyOjQyOjMzLjYxNjAwNjE4NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIHJlZmFjdG9ycyB0aGUgbGlmZWN5Y2xlIGFuZCBjbG9uaW5nIG9mIG5ldGZpbHRlciBzZXQgZXhwcmVzc2lvbnMgKGBuZnRfZXhwcmApIHRvIGZpeCBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgKGxpa2VseSBkb3VibGUtZnJlZXMgb3IgdXNlLWFmdGVyLWZyZWVzKS4gSXQgYXZvaWRzIGNyZWF0aW5nIGludGVybWVkaWF0ZSBjbG9uZXMgb2YgZXhwcmVzc2lvbnMgd2hlbiBhZGRpbmcgZWxlbWVudHMgdG8gYSBzZXQgb3IgaW5pdGlhbGl6aW5nIGEgZHluc2V0LCBpbnN0ZWFkIGNvcHlpbmcgcG9pbnRlcnMgYW5kIHVzaW5nIGEgbmV3IGBvdmVycmlkZV9leHByc2AgZmxhZyB0byB0cmFjayBvd25lcnNoaXAgYW5kIGRldGVybWluZSBpZiB0aGUgZXhwcmVzc2lvbnMgc2hvdWxkIGJlIGRlc3Ryb3llZC4gSXQgYWxzbyBzZXRzIGEgYGRlYWRgIGZsYWcgb24gZGVsZXRlZCBzZXRzIGR1cmluZyBjb21taXQgdXBkYXRlcy4gXFxuXFxuVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG9iamVjdCBsaWZlY3ljbGUgYnVncyAoVUFGLCBkb3VibGUtZnJlZSkgd2hpY2ggYXJlIHJlbGlhYmx5IGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgbWVtb3J5IGZvciB0aGUgc2V0IGVsZW1lbnRzIHRoZW1zZWx2ZXMgY29udGludWVzIHRvIGJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCAoaW4gYG5mdF9zZXRfZWxlbV9pbml0YCksIGVuc3VyaW5nIGFsbCBmaWVsZHMgYW5kIHBhZGRpbmcgYXJlIGZ1bGx5IHplcm9lZC4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGludHJvZHVjZWQsIGFuZCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSBvciB1c2VkIGluIGNvbnRyb2wgZmxvdy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgcmVmYWN0b3JzIHRoZSBsaWZlY3ljbGUgYW5kIGNsb25pbmcgb2YgbmV0ZmlsdGVyIHNldCBleHByZXNzaW9ucyAoYG5mdF9leHByYCkgdG8gZml4IG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyAobGlrZWx5IGRvdWJsZS1mcmVlcyBvciB1c2UtYWZ0ZXItZnJlZXMpLiBJdCBhdm9pZHMgY3JlYXRpbmcgaW50ZXJtZWRpYXRlIGNsb25lcyBvZiBleHByZXNzaW9ucyB3aGVuIGFkZGluZyBlbGVtZW50cyB0byBhIHNldCBvciBpbml0aWFsaXppbmcgYSBkeW5zZXQsIGluc3RlYWQgY29weWluZyBwb2ludGVycyBhbmQgdXNpbmcgYSBuZXcgYG92ZXJyaWRlX2V4cHJzYCBmbGFnIHRvIHRyYWNrIG93bmVyc2hpcCBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBleHByZXNzaW9ucyBzaG91bGQgYmUgZGVzdHJveWVkLiBJdCBhbHNvIHNldHMgYSBgZGVhZGAgZmxhZyBvbiBkZWxldGVkIHNldHMgZHVyaW5nIGNvbW1pdCB1cGRhdGVzLiBcXG5cXG5UaGVzZSBjaGFuZ2VzIGFkZHJlc3Mgb2JqZWN0IGxpZmVjeWNsZSBidWdzIChVQUYsIGRvdWJsZS1mcmVlKSB3aGljaCBhcmUgcmVsaWFibHkgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBtZW1vcnkgZm9yIHRoZSBzZXQgZWxlbWVudHMgdGhlbXNlbHZlcyBjb250aW51ZXMgdG8gYmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgIChpbiBgbmZ0X3NldF9lbGVtX2luaXRgKSwgZW5zdXJpbmcgYWxsIGZpZWxkcyBhbmQgcGFkZGluZyBhcmUgZnVsbHkgemVyb2VkLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgaW50cm9kdWNlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGV4cG9zZWQgdG8gdXNlcnNwYWNlIG9yIHVzZWQgaW4gY29udHJvbCBmbG93LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvprxf[1] Phase: Succeeded StartedAt: 2026-08-21 12:42:44 +0000 UTC FinishedAt: 2026-08-21 12:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 12:42:44 +0000 UTC FinishedAt: 2026-08-21 12:42:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[2] Phase: Succeeded StartedAt: 2026-08-21 12:42:44 +0000 UTC FinishedAt: 2026-08-21 16:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-21 12:42:44 +0000 UTC FinishedAt: 2026-08-21 16:26:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-21 12:42:44 +0000 UTC FinishedAt: 2026-08-21 12:42:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-21 12:42:44 +0000 UTC FinishedAt: 2026-08-21 12:42:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.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-workflowvprxf/series-workflowvprxf-convert-artifact-3381016517/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-21 12:42:55 +0000 UTC FinishedAt: 2026-08-21 12:59:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-21 12:42:55 +0000 UTC FinishedAt: 2026-08-21 12:59:05 +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:*f9a39067-b657-4bba-bf83-ee65ac86c081,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-workflowvprxf/series-workflowvprxf-convert-artifact-3381016517/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": "2e285742-30f1-4984-bf3d-40243b0ee0ac", "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-workflowvprxf/series-workflowvprxf-build-action-1887886955/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-21 12:42:55 +0000 UTC FinishedAt: 2026-08-21 12:58:55 +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:*f9a39067-b657-4bba-bf83-ee65ac86c081,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-workflowvprxf/series-workflowvprxf-convert-artifact-3381016517/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": "2e285742-30f1-4984-bf3d-40243b0ee0ac", "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-workflowvprxf/series-workflowvprxf-build-action-1887886955/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-21 12:59:05 +0000 UTC FinishedAt: 2026-08-21 12:59:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-21 12:59:05 +0000 UTC FinishedAt: 2026-08-21 12:59:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-21 12:59:05 +0000 UTC FinishedAt: 2026-08-21 12:59:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-21 12:59:05 +0000 UTC FinishedAt: 2026-08-21 12:59:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.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-workflowvprxf/series-workflowvprxf-convert-artifact-4132706976/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-21 12:59:15 +0000 UTC FinishedAt: 2026-08-21 13:01:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-21 12:59:15 +0000 UTC FinishedAt: 2026-08-21 13:01:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2e285742-30f1-4984-bf3d-40243b0ee0ac,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-workflowvprxf/series-workflowvprxf-build-action-1887886955/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-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-21 13:01:17 +0000 UTC FinishedAt: 2026-08-21 13:01:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-21 13:01:17 +0000 UTC FinishedAt: 2026-08-21 13:01:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-21 13:01:17 +0000 UTC FinishedAt: 2026-08-21 13:22:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-21 13:01:17 +0000 UTC FinishedAt: 2026-08-21 13:22:04 +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:*f9a39067-b657-4bba-bf83-ee65ac86c081,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-workflowvprxf/series-workflowvprxf-convert-artifact-4132706976/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": "c69a288e-c914-4d9d-947a-42b198cac649", "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-workflowvprxf/series-workflowvprxf-build-action-510988380/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-21 13:01:17 +0000 UTC FinishedAt: 2026-08-21 13:21:54 +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:*f9a39067-b657-4bba-bf83-ee65ac86c081,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-workflowvprxf/series-workflowvprxf-convert-artifact-4132706976/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": "c69a288e-c914-4d9d-947a-42b198cac649", "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-workflowvprxf/series-workflowvprxf-build-action-510988380/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-21 13:22:04 +0000 UTC FinishedAt: 2026-08-21 13:22:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-21 13:22:04 +0000 UTC FinishedAt: 2026-08-21 13:22:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-21 13:22:04 +0000 UTC FinishedAt: 2026-08-21 13:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-21 13:22:04 +0000 UTC FinishedAt: 2026-08-21 13:23:55 +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:*c69a288e-c914-4d9d-947a-42b198cac649,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-workflowvprxf/series-workflowvprxf-build-action-510988380/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-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-21 13:24:06 +0000 UTC FinishedAt: 2026-08-21 16:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-21 13:24:06 +0000 UTC FinishedAt: 2026-08-21 16:26:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"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:*2e285742-30f1-4984-bf3d-40243b0ee0ac,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c69a288e-c914-4d9d-947a-42b198cac649,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-workflowvprxf/series-workflowvprxf-build-action-1887886955/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-workflowvprxf/series-workflowvprxf-build-action-510988380/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-21 13:24:06 +0000 UTC FinishedAt: 2026-08-21 13:24:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-21 13:24:06 +0000 UTC FinishedAt: 2026-08-21 13:24:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"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-workflowvprxf/series-workflowvprxf-convert-artifact-1197895161/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-21 13:24:06 +0000 UTC FinishedAt: 2026-08-21 13:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-21 13:24:06 +0000 UTC FinishedAt: 2026-08-21 13:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-21 13:24:06 +0000 UTC FinishedAt: 2026-08-21 13:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-21 13:24:18 +0000 UTC FinishedAt: 2026-08-21 16:26:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvprxf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nf_tables_newsetelem","nf_tables_newset","nf_tables_delset","nf_tables_commit","nf_tables_newrule"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e625a9477d12baaff4025c5f9989184a907ea8fc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES"],"series_id":"be5d2ec5-b30c-4c64-a7e1-8c26b9c506aa","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-21 13:24:18 +0000 UTC FinishedAt: 2026-08-21 16:26:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2e285742-30f1-4984-bf3d-40243b0ee0ac,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c69a288e-c914-4d9d-947a-42b198cac649,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-workflowvprxf/series-workflowvprxf-build-action-1887886955/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-workflowvprxf/series-workflowvprxf-build-action-510988380/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-workflowvprxf/series-workflowvprxf-convert-artifact-1197895161/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,}