Name: series-workflow8s8sx Phase: Succeeded StartedAt: 2026-08-20 14:42:57 +0000 UTC FinishedAt: 2026-08-20 19:10:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[0] Phase: Succeeded StartedAt: 2026-08-20 14:42:57 +0000 UTC FinishedAt: 2026-08-20 15:27:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 14:42:57 +0000 UTC FinishedAt: 2026-08-20 15:27:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "5425e1a8f93c809cf379b0621c499d12701adfce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PREEMPTION", "PREEMPT_COUNT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "5425e1a8f93c809cf379b0621c499d12701adfce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PREEMPTION", "PREEMPT_COUNT" ], "series_id": "29222950-31cc-4e5d-883d-39e98fdb07b9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BSRUVNUFRJT04mIzM0OywKICAgICYjMzQ7UFJFRU1QVF9DT1VOVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGRyb3BwaW5nIGZvbGlvcyBiZWhpbmQgZHVyaW5nIHdyaXRlYmFjayB0byBjb3JyZWN0bHkgZGV0ZWN0IGF0b21pYyBjb250ZXh0cyAoc3VjaCBhcyBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIG9yIGRpc2FibGVkIHByZWVtcHRpb24pIGluc3RlYWQgb2YganVzdCBjaGVja2luZyBgaW5fdGFzaygpYC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgc2xlZXBpbmctaW4tYXRvbWljIGJ1Z3Mgb3IgZGVhZGxvY2tzLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93LCBsb2NraW5nLCBhbmQgY29udGV4dCBjaGVja3MuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3Npbmcgb3Igb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIChlLmcuLCBzY2hlZHVsaW5nIHdoaWxlIGF0b21pYykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgb3IgTE9DS0RFUCwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gYG1tL2ZpbGVtYXAuY2AgdG8gY29ycmVjdGx5IGRldGVjdCBhdG9taWMgY29udGV4dHMgZHVyaW5nIHdyaXRlYmFjayBjb21wbGV0aW9uIGZvciBmb2xpb3MgbWFya2VkIGFzIGRyb3BiZWhpbmQgKGUuZy4sIFJXRl9ET05UQ0FDSEUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBhZmZlY3RzIHBhZ2UgaW52YWxpZGF0aW9uIGFuZCBsb2NraW5nLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3Mgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyYWQ3YmVhYTFhMjI1N2FmMTBlNmYzZjdiOWEwMWU2NWFkMmQzNDgyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMTU6MjY6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCA2YWZlYzYzNjg4MWZiLi4wNjE2MDU3ZTZmOTkxIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmNcbkBAIC00NSw2ICYjNDM7NDUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21pZ3JhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BpcGVfZnNfaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BsaWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxuQEAgLTE2MjAsNiAmIzQzOzE2MjEsMTUgQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGZvbGlvX2Ryb3BiZWhpbmRfaW5fYXRvbWljKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVElPTikgXHUwMDI2XHUwMDI2IHJjdV9wcmVlbXB0X2RlcHRoKCkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfQ09VTlQpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0cmV0dXJuICFwcmVlbXB0aWJsZSgpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogSWYgZm9saW8gd2FzIG1hcmtlZCBhcyBkcm9wYmVoaW5kLCB0aGVuIHBhZ2VzIHNob3VsZCBiZSBkcm9wcGVkIHdoZW4gd3JpdGViYWNrXG4gICogY29tcGxldGVzLiBEbyB0aGF0IG5vdy4gSWYgd2UgZmFpbCwgaXQmIzM5O3MgbGlrZWx5IGJlY2F1c2Ugb2YgYSBiaWcgZm9saW8gLVxuQEAgLTE2MzEsMTMgJiM0MzsxNjQxLDEyIEBAIHZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lypcbi1cdCAqIEhpdHRpbmcgIWluX3Rhc2soKSBzaG91bGQgbm90IGhhcHBlbiBvZmYgUldGX0RPTlRDQUNIRSB3cml0ZWJhY2ssXG4tXHQgKiBidXQgY2FuIGhhcHBlbiBpZiBub3JtYWwgd3JpdGViYWNrIGp1c3QgaGFwcGVucyB0byBmaW5kIGRpcnR5IGZvbGlvc1xuLVx0ICogdGhhdCB3ZXJlIGNyZWF0ZWQgYXMgcGFydCBvZiB1bmNhY2hlZCB3cml0ZWJhY2ssIGFuZCB0aGF0IHdyaXRlYmFja1xuLVx0ICogd291bGQgb3RoZXJ3aXNlIG5vdCBuZWVkIG5vbi1JUlEgaGFuZGxpbmcuIEp1c3Qgc2tpcCB0aGVcbiYjNDM7XHQgKiBIaXR0aW5nIGFuIGF0b21pYyBjb250ZXh0IHNob3VsZCBub3QgaGFwcGVuIGZyb20gUldGX0RPTlRDQUNIRVxuJiM0MztcdCAqIHdyaXRlYmFjaywgYnV0IGNhbiBoYXBwZW4gaWYgbm9ybWFsIHdyaXRlYmFjayBqdXN0IGhhcHBlbnMgdG8gZmluZFxuJiM0MztcdCAqIGRpcnR5IGZvbGlvcyBjcmVhdGVkIGFzIHBhcnQgb2YgdW5jYWNoZWQgd3JpdGViYWNrLiBKdXN0IHNraXAgdGhlXG4gXHQgKiBpbnZhbGlkYXRpb24gaW4gdGhhdCBjYXNlLlxuIFx0ICovXG4tXHRpZiAoaW5fdGFzaygpIFx1MDAyNlx1MDAyNiBmb2xpb190cnlsb2NrKGZvbGlvKSkge1xuJiM0MztcdGlmICghZm9saW9fZHJvcGJlaGluZF9pbl9hdG9taWMoKSBcdTAwMjZcdTAwMjYgZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbiBcdFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZChmb2xpbyk7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BSRUVNUFRJT04mIzM0OywKICAgICYjMzQ7UFJFRU1QVF9DT1VOVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBgbW0vZmlsZW1hcC5jYCB0byBjb3JyZWN0bHkgZGV0ZWN0IGF0b21pYyBjb250ZXh0cyBkdXJpbmcgd3JpdGViYWNrIGNvbXBsZXRpb24gZm9yIGZvbGlvcyBtYXJrZWQgYXMgZHJvcGJlaGluZCAoZS5nLiwgUldGX0RPTlRDQUNIRSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSB0aGF0IGFmZmVjdHMgcGFnZSBpbnZhbGlkYXRpb24gYW5kIGxvY2tpbmcsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGRlYWRsb2NrcyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJhZDdiZWFhMWEyMjU3YWYxMGU2ZjNmN2I5YTAxZTY1YWQyZDM0ODIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAxNToyNjoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA2YWZlYzYzNjg4MWZiLi4wNjE2MDU3ZTZmOTkxIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZmlsZW1hcC5jCkBAIC00NSw2ICYjNDM7NDUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21pZ3JhdGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waXBlX2ZzX2kuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zcGxpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZV93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zeXNjdGwuaCZndDsKQEAgLTE2MjAsNiAmIzQzOzE2MjEsMTUgQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQlmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIGZvbGlvX2Ryb3BiZWhpbmRfaW5fYXRvbWljKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVElPTikgJmFtcDsmYW1wOyByY3VfcHJlZW1wdF9kZXB0aCgpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9DT1VOVCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmV0dXJuICFwcmVlbXB0aWJsZSgpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBJZiBmb2xpbyB3YXMgbWFya2VkIGFzIGRyb3BiZWhpbmQsIHRoZW4gcGFnZXMgc2hvdWxkIGJlIGRyb3BwZWQgd2hlbiB3cml0ZWJhY2sKICAqIGNvbXBsZXRlcy4gRG8gdGhhdCBub3cuIElmIHdlIGZhaWwsIGl0JiMzOTtzIGxpa2VseSBiZWNhdXNlIG9mIGEgYmlnIGZvbGlvIC0KQEAgLTE2MzEsMTMgJiM0MzsxNjQxLDEyIEBAIHZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbykKIAkJcmV0dXJuOwogCiAJLyoKLQkgKiBIaXR0aW5nICFpbl90YXNrKCkgc2hvdWxkIG5vdCBoYXBwZW4gb2ZmIFJXRl9ET05UQ0FDSEUgd3JpdGViYWNrLAotCSAqIGJ1dCBjYW4gaGFwcGVuIGlmIG5vcm1hbCB3cml0ZWJhY2sganVzdCBoYXBwZW5zIHRvIGZpbmQgZGlydHkgZm9saW9zCi0JICogdGhhdCB3ZXJlIGNyZWF0ZWQgYXMgcGFydCBvZiB1bmNhY2hlZCB3cml0ZWJhY2ssIGFuZCB0aGF0IHdyaXRlYmFjawotCSAqIHdvdWxkIG90aGVyd2lzZSBub3QgbmVlZCBub24tSVJRIGhhbmRsaW5nLiBKdXN0IHNraXAgdGhlCiYjNDM7CSAqIEhpdHRpbmcgYW4gYXRvbWljIGNvbnRleHQgc2hvdWxkIG5vdCBoYXBwZW4gZnJvbSBSV0ZfRE9OVENBQ0hFCiYjNDM7CSAqIHdyaXRlYmFjaywgYnV0IGNhbiBoYXBwZW4gaWYgbm9ybWFsIHdyaXRlYmFjayBqdXN0IGhhcHBlbnMgdG8gZmluZAomIzQzOwkgKiBkaXJ0eSBmb2xpb3MgY3JlYXRlZCBhcyBwYXJ0IG9mIHVuY2FjaGVkIHdyaXRlYmFjay4gSnVzdCBza2lwIHRoZQogCSAqIGludmFsaWRhdGlvbiBpbiB0aGF0IGNhc2UuCiAJICovCi0JaWYgKGluX3Rhc2soKSAmYW1wOyZhbXA7IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7CiYjNDM7CWlmICghZm9saW9fZHJvcGJlaGluZF9pbl9hdG9taWMoKSAmYW1wOyZhbXA7IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7CiAJCWZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoZm9saW8pOwogCQlmb2xpb191bmxvY2soZm9saW8pOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZvbGlvIERyb3BiZWhpbmQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9maWxlbWFwLmNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgd2UgYWxsIGtub3cgd2hlcmUgZXZlbiBtaW5vciBtb2RpZmljYXRpb25zIGluIHRoZSBmaWxlbWFwIGNvZGUgY2FuIGxlYWQhIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIGFwcGVhcnMgdG8gcmV2b2x2ZSBhcm91bmQgdGhpcyBuZXcgYGZvbGlvX2Ryb3BiZWhpbmRfaW5fYXRvbWljKClgIGZ1bmN0aW9uLiBUaGUgaW50ZW50IGlzIGNsZWFyOiBpdOKAmXMgYmVpbmcgdXNlZCB0byByZWZpbmUgdGhlIGNvbmRpdGlvbnMgZm9yIHNvbWV0aGluZyBoYXBwZW5pbmcgd2l0aGluIGBmb2xpb19lbmRfZHJvcGJlaGluZCgpYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBub3cgc3Vic3RpdHV0ZXMgYCFmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYygpYCBmb3IgYGluX3Rhc2soKWAuCgpSaWdodCwgbGV0JiMzOTtzIHVucGFjayBgZm9saW9fZHJvcGJlaGluZF9pbl9hdG9taWMoKWAuIEl0JiMzOTtzIGNoZWNraW5nIGZvciBzZXZlcmFsIGNvbmRpdGlvbnM6IGBJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUSU9OKSAmYW1wOyZhbXA7IHJjdV9wcmVlbXB0X2RlcHRoKClgLCBgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfQ09VTlQpYCwgYW5kIGAhcHJlZW1wdGlibGUoKWAuIEVzc2VudGlhbGx5LCB0aGUgZnVuY3Rpb24gdHJpZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgYXRvbWljLCBtZWFuaW5nIGl0IGNhbm5vdCBiZSBwcmVlbXB0ZWQgb3IgaW50ZXJydXB0ZWQuIFRoYXTigJlzIHRoZSBrZXkuIFRoaXMgaXMgYSBjcnVjaWFsIGRpc3RpbmN0aW9uIGJlY2F1c2UgYXRvbWljaXR5IGltcGxpZXMgYSBkaWZmZXJlbnQgbGV2ZWwgb2YgbG9ja2luZyBhbmQgcmVzb3VyY2UgYWNjZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgYXRvbWljIGNoZWNrPyYjMzQ7CgpUaGUgaW1wbGljYXRpb25zIGFyZSB3b3J0aCBjb25zaWRlcmluZy4gVGhpcyBjaGFuZ2UgKmRpcmVjdGx5KiBhZmZlY3RzIGBmb2xpb19lbmRfZHJvcGJlaGluZCgpYCwgd2hpY2ggaGFuZGxlcyB3cml0ZWJhY2sgY29tcGxldGlvbiBmb3IgZm9saW9zIGZsYWdnZWQgYXMgZHJvcGJlaGluZC4gVGhpcyB0eXBpY2FsbHkgbWVhbnMgd2hlbiB3cml0ZXMgdGhhdCBhcmUgZmxhZ2dlZCB3aXRoIFJXRl9ET05UQ0FDSEUgZmluaXNoLiBUaGUgcXVlc3Rpb24gYmVjb21lcywgd2h5IHRoaXMgc3BlY2lmaWMgY2hhbmdlIGZvciBkcm9wYmVoaW5kIHNjZW5hcmlvcz8gSXQgd2lsbCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgaXMgYSBnZW5lcmFsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYSBidWcgZml4LCBvciBhIGNoYW5nZSB0byB0aGUgZnVuZGFtZW50YWwgc2VtYW50aWNzIG9mIGhvdyB3ZSB0cmVhdCBjYWNoZWQgZGF0YSBpbiB0aGlzIHNwZWNpZmljIHNjZW5hcmlvLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1tL2ZpbGVtYXAuY2AgYW5kIHRyeSB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBkZXRlcm1pbmUgd2hhdCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGVzZSBhZGRlZCBjaGVja3MgbWlnaHQgYmUuIFRoaXMgY291bGQgYmUgYSBnb29kIGltcHJvdmVtZW50LCBvciBpdCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIHJhY2UgY29uZGl0aW9ucywgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fZW5kX2Ryb3BiZWhpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9maWxlbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZmlsZW1hcC5jPTE2MjQ9c3RhdGljIGJvb2wgZm9saW9fZHJvcGJlaGluZF9pbl9hdG9taWModm9pZClcbi0tXG5tbS9maWxlbWFwLmMtMTYzNy0gKi9cbm1tL2ZpbGVtYXAuYzoxNjM4OnZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2ZpbGVtYXAuYy0xNjM5LXtcbi0tXG5tbS9maWxlbWFwLmMtMTY1My19XG5tbS9maWxlbWFwLmM6MTY1NDpFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfZHJvcGJlaGluZCk7XG5tbS9maWxlbWFwLmMtMTY1NS1cbi0tXG5tbS9maWxlbWFwLmM9MTY5Nj12b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMTcwNy1cdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XG5tbS9maWxlbWFwLmM6MTcwODpcdGZvbGlvX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0xNzA5LVx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSG90IFBhdGggYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgY2hhbmdlIGFuZCB0cnlpbmcgdG8gZGVjaWRlIGhvdyBiZXN0IHRvIGFwcHJvYWNoIGl0IGZvciB0ZXN0aW5nLiBJdCBsb29rcyBsaWtlIGBmb2xpb19lbmRfZHJvcGJlaGluZGAgaXMgYmVpbmcgbW9kaWZpZWQsIGFuZCB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGBmb2xpb19lbmRfd3JpdGViYWNrYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmbGFnIOKAkyBgZm9saW9fZW5kX3dyaXRlYmFja2AgaXMgYSBrbm93biBob3QgcGF0aCwgc28gYW55IGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGl0IGlzIGxpa2VseSB0byBiZSBmcmVxdWVudGx5IGV4ZWN1dGVkLiBUaGUgcXVlc3Rpb24gaXMsIGlzIGBmb2xpb19lbmRfZHJvcGJlaGluZGAgKml0c2VsZiogYSBob3QgcGF0aD8gVGhlIGFuc3dlciBhcHBlYXJzIHRvIGJlIHllcywgYmVjYXVzZSBpdCYjMzk7cyBpbnZva2VkIHdpdGggZXZlcnkgY29tcGxldGlvbiBvZiBhIHdyaXRlYmFjay4KClRoZSBwcm9tcHQsIGhvd2V2ZXIsIGFkdmlzZXMgYWdhaW5zdCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIGFzIGZvY3VzIHN5bWJvbHMuIFRoaXMgaXMgdG8gYXZvaWQgc2tld2luZyB0ZXN0IGRpc3RyaWJ1dGlvbnMuIEJ1dCwgZ2l2ZW4gdGhhdCBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgICppcyogY2FsbGVkIG9uIGV2ZXJ5IGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYW5kIGBmb2xpb19lbmRfd3JpdGViYWNrYCBpcyBkZWZpbml0ZWx5IGEgaG90IHBhdGguLi5pdCYjMzk7cyB0cmlja3kuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgIGlzIGV4cG9ydGVkLiBPa2F5LCBpdCYjMzk7cyBgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX2Ryb3BiZWhpbmQpYC4gSG1tLCBsb29raW5nIGF0IHRoZSBwYXRjaCwgSSBhbHNvIHNlZSBgQ09ORklHX1BSRUVNUFRJT05gIGFuZCBgQ09ORklHX1BSRUVNUFRfQ09VTlRgIG1lbnRpb25lZCwgbWF5YmUgSSBzaG91bGQgY29uc2lkZXIgdGhlc2UgaW4gYEVuYWJsZUNvbmZpZ3NgPyBCdXQgYFBSRUVNUFRJT05gIGlzIHByZXR0eSBnZW5lcmljLCBtYXliZSBJIHNob3VsZCByZWNvbnNpZGVyIHRoYXQsIGdpdmVuIHRoZSBwcm9tcHQuCgpVbHRpbWF0ZWx5LCBnaXZlbiB0aGF0IGBmb2xpb19lbmRfZHJvcGJlaGluZGAgaXMgYSBob3QgcGF0aCBiZWNhdXNlIGl0IGlzIGludm9rZWQgaW4gdGhlIGhvdCBwYXRoIG9mIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgaXQgd2FycmFudHMgZnV6emluZy4gU2luY2UgaXQmIzM5O3MgYSBob3QgcGF0aCwgbWF5YmUgSSBzaG91bGRuJiMzOTt0IHNwZWNpZnkgYSBmb2N1cyBzeW1ib2wuIEJ1dCB3YWl0LCBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgIG9ubHkgZG9lcyBzb21ldGhpbmcgaWYgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbylgIGlzIHRydWUuIFRoYXQgZnVuY3Rpb24sIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmRgLCBpcyBzZXQgZm9yIGBSV0ZfRE9OVENBQ0hFYCB3cml0ZXMuCgpPa2F5LCBzbyBpdCYjMzk7cyAqbm90KiBhbHdheXMgZG9pbmcgd29yaywgYnV0IGl0ICppcyogY2FsbGVkIG9uIGV2ZXJ5IHdyaXRlYmFjayBjb21wbGV0aW9uLiBTbywgZXZlbiB0aG91Z2ggbm90IGV2ZXJ5IGNhbGwgKmRvZXMqIHdvcmssIHRoZSBmdW5jdGlvbiAqaXMqIGNhbGxlZC4gVGhpcyBjaGFuZ2Ugc3RpbGwgZmVlbHMgbGlrZSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBhbmQgZ2l2ZW4gaXRzIGZyZXF1ZW5jeSBvZiBpbnZvY2F0aW9uLCBpdCYjMzk7cyBwcm9iYWJseSB3b3J0aCBpdC4gTm93LCBsZXQmIzM5O3MgY2hlY2sgd2hlcmUgYGZvbGlvX3NldF9kcm9wYmVoaW5kYCBpcyBjYWxsZWQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19zZXRfZHJvcGJlaGluZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9maWxlbWFwLmM9MTk1Nj1zdHJ1Y3QgZm9saW8gKl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9maWxlbWFwLmMtMjAzNC1cdFx0XHRpZiAoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfRE9OVENBQ0hFKVxubW0vZmlsZW1hcC5jOjIwMzU6XHRcdFx0XHRfX2ZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0yMDM2LVxuLS1cbm1tL2ZpbGVtYXAuYz0yNjI4PXN0YXRpYyBpbnQgZmlsZW1hcF9jcmVhdGVfZm9saW8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaClcbi0tXG5tbS9maWxlbWFwLmMtMjY0Mi1cdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RPTlRDQUNIRSlcbm1tL2ZpbGVtYXAuYzoyNjQzOlx0XHRfX2ZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0yNjQ0LVxuLS1cbm1tL3JlYWRhaGVhZC5jPTE5NT1zdGF0aWMgc3RydWN0IGZvbGlvICpyYWN0bF9hbGxvY19mb2xpbyhzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxuLS1cbm1tL3JlYWRhaGVhZC5jLTIwMS1cdGlmIChmb2xpbyBcdTAwMjZcdTAwMjYgcmFjdGwtXHUwMDNlZHJvcGJlaGluZClcbm1tL3JlYWRhaGVhZC5jOjIwMjpcdFx0X19mb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XG5tbS9yZWFkYWhlYWQuYy0yMDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYyMAoJCQkJCQkJb3V0cHV0OiAxMTkKCQkJCQkJCXRob3VnaHRzOiA1NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIHJlcHJlc2VudCB0aGlzIHBhdGNoIGZvciBmdXp6aW5nLiBUaGUga2V5IGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkIGhlcmUgaXMgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBsaXN0IGBmb2xpb19lbmRfZHJvcGJlaGluZGAgYXMgYSBgRm9jdXNTeW1ib2xgIGJlY2F1c2UgaXQmIzM5O3MgdGhlIGV4YWN0IGZ1bmN0aW9uIGJlaW5nIGZpeGVkLCBhbmQgaXQmIzM5O3MgYW4gZXhwb3J0ZWQgQVBJLiBIb3dldmVyLCB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBldmVyeSB3cml0ZWJhY2sgY29tcGxldGlvbiwgbWFraW5nIGl0IGEgZGVmaW5pdGUgaG90IHBhdGgsIHdoaWNoLCBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucywgSSBzaG91bGQgYXZvaWQuCgpJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IGxlYXZpbmcgYEZvY3VzU3ltYm9sc2AgZW1wdHksIGp1c3QgdG8gYmUgb24gdGhlIHNhZmUgc2lkZSwgYXZvaWRpbmcgYW55IHBvdGVudGlhbCBza2V3IGluIHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbnMuIEJ1dCwgaXQgaXMgdmVyeSBzcGVjaWZpYyB0byB0aGUgZHJvcGJlaGluZCBmZWF0dXJlLi4uIEhtbS4gVWx0aW1hdGVseSwgZ2l2ZW4gaXQmIzM5O3Mgb24gYSBob3QgcGF0aCwgYW5kIGZvbGxvd2luZyB0aGUgZ3VpZGFuY2UsIEkmIzM5O2xsIGdvIHdpdGggYW4gZW1wdHkgYEZvY3VzU3ltYm9sc2AgbGlzdCB0byBhdm9pZCBza2V3LgoKTmV4dCwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoZSBwYXRjaCB1c2VzIGBDT05GSUdfUFJFRU1QVElPTmAgYW5kIGBDT05GSUdfUFJFRU1QVF9DT1VOVGAuIEEgcXVpY2sgcmV2aWV3IGNvbmZpcm1zIHRoZXkmIzM5O3JlIHZhbGlkIGFuZCByZWxldmFudCBjb25maWdzLiBJJiMzOTtsbCBkZWZpbml0ZWx5IGxpc3QgdGhvc2UuCgpGaW5hbGx5LCBqdXN0IGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBwYXRjaCYjMzk7cyBsb2dpYzogSXQgYXBwZWFycyB0byBiZSBhIGZpeCB0byBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgLCB3aGljaCBvcmlnaW5hbGx5IHVzZWQgYGluX3Rhc2soKWAgYnV0IGNvdWxkIGJlIGNhbGxlZCBmcm9tIGF0b21pYyBjb250ZXh0IGR1cmluZyB3cml0ZWJhY2suIFRoZSBmaXggcmVwbGFjZXMgYGluX3Rhc2soKWAgd2l0aCBgIWZvbGlvX2Ryb3BiZWhpbmRfaW5fYXRvbWljKClgLiBUaGF0IGhlbHBzIGNvbmZpcm0gdGhlIGZvY3VzIGlzIGNsZWFybHkgb24gcHJldmVudGluZyB0aGUgYGRyb3BiZWhpbmRgIGZ1bmN0aW9uYWxpdHkgZmFpbGluZyBpbiBhbiBhdG9taWMgY29udGV4dC4KClNvLCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bGwgcmV0dXJuOgoKKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgCiogICBgRm9jdXNTeW1ib2xzOiBbXWAKKiAgIGBFbmFibGVDb25maWdzOiBbJiMzNDtDT05GSUdfUFJFRU1QVElPTiYjMzQ7LCAmIzM0O0NPTkZJR19QUkVFTVBUX0NPVU5UJiMzNDtdYAoqICAgSSB3aWxsIHVzZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUkVFTVBUSU9OJiMzNDssCiAgICAmIzM0O1BSRUVNUFRfQ09VTlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gYG1tL2ZpbGVtYXAuY2AgdG8gY29ycmVjdGx5IGRldGVjdCBhdG9taWMgY29udGV4dHMgZHVyaW5nIHdyaXRlYmFjayBjb21wbGV0aW9uIGZvciBmb2xpb3MgbWFya2VkIGFzIGRyb3BiZWhpbmQgKGUuZy4sIFJXRl9ET05UQ0FDSEUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBhZmZlY3RzIHBhZ2UgaW52YWxpZGF0aW9uIGFuZCBsb2NraW5nLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3Mgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BSRUVNUFRJT04mIzM0OywKICAgICYjMzQ7UFJFRU1QVF9DT1VOVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBgbW0vZmlsZW1hcC5jYCB0byBjb3JyZWN0bHkgZGV0ZWN0IGF0b21pYyBjb250ZXh0cyBkdXJpbmcgd3JpdGViYWNrIGNvbXBsZXRpb24gZm9yIGZvbGlvcyBtYXJrZWQgYXMgZHJvcGJlaGluZCAoZS5nLiwgUldGX0RPTlRDQUNIRSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSB0aGF0IGFmZmVjdHMgcGFnZSBpbnZhbGlkYXRpb24gYW5kIGxvY2tpbmcsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGRlYWRsb2NrcyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNToyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGRyb3BwaW5nIGZvbGlvcyBiZWhpbmQgZHVyaW5nIHdyaXRlYmFjayB0byBjb3JyZWN0bHkgZGV0ZWN0IGF0b21pYyBjb250ZXh0cyAoc3VjaCBhcyBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIG9yIGRpc2FibGVkIHByZWVtcHRpb24pIGluc3RlYWQgb2YganVzdCBjaGVja2luZyBgaW5fdGFzaygpYC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgc2xlZXBpbmctaW4tYXRvbWljIGJ1Z3Mgb3IgZGVhZGxvY2tzLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93LCBsb2NraW5nLCBhbmQgY29udGV4dCBjaGVja3MuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3Npbmcgb3Igb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIChlLmcuLCBzY2hlZHVsaW5nIHdoaWxlIGF0b21pYykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgb3IgTE9DS0RFUCwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmFkN2JlYWExYTIyNTdhZjEwZTZmM2Y3YjlhMDFlNjVhZDJkMzQ4MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDIwIDE1OjI2OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IDZhZmVjNjM2ODgxZmIuLjA2MTYwNTdlNmY5OTEgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmMKQEAgLTQ1LDYgJiM0Mzs0NSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbWlncmF0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BpcGVfZnNfaS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwbGljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlX3dhaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9tbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N5c2N0bC5oJmd0OwpAQCAtMTYyMCw2ICYjNDM7MTYyMSwxNSBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCWZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApOwogfQogCiYjNDM7c3RhdGljIGJvb2wgZm9saW9fZHJvcGJlaGluZF9pbl9hdG9taWModm9pZCkKJiM0Mzt7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUSU9OKSAmYW1wOyZhbXA7IHJjdV9wcmVlbXB0X2RlcHRoKCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX0NPVU5UKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlyZXR1cm4gIXByZWVtcHRpYmxlKCk7CiYjNDM7fQomIzQzOwogLyoKICAqIElmIGZvbGlvIHdhcyBtYXJrZWQgYXMgZHJvcGJlaGluZCwgdGhlbiBwYWdlcyBzaG91bGQgYmUgZHJvcHBlZCB3aGVuIHdyaXRlYmFjawogICogY29tcGxldGVzLiBEbyB0aGF0IG5vdy4gSWYgd2UgZmFpbCwgaXQmIzM5O3MgbGlrZWx5IGJlY2F1c2Ugb2YgYSBiaWcgZm9saW8gLQpAQCAtMTYzMSwxMyAmIzQzOzE2NDEsMTIgQEAgdm9pZCBmb2xpb19lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQlyZXR1cm47CiAKIAkvKgotCSAqIEhpdHRpbmcgIWluX3Rhc2soKSBzaG91bGQgbm90IGhhcHBlbiBvZmYgUldGX0RPTlRDQUNIRSB3cml0ZWJhY2ssCi0JICogYnV0IGNhbiBoYXBwZW4gaWYgbm9ybWFsIHdyaXRlYmFjayBqdXN0IGhhcHBlbnMgdG8gZmluZCBkaXJ0eSBmb2xpb3MKLQkgKiB0aGF0IHdlcmUgY3JlYXRlZCBhcyBwYXJ0IG9mIHVuY2FjaGVkIHdyaXRlYmFjaywgYW5kIHRoYXQgd3JpdGViYWNrCi0JICogd291bGQgb3RoZXJ3aXNlIG5vdCBuZWVkIG5vbi1JUlEgaGFuZGxpbmcuIEp1c3Qgc2tpcCB0aGUKJiM0MzsJICogSGl0dGluZyBhbiBhdG9taWMgY29udGV4dCBzaG91bGQgbm90IGhhcHBlbiBmcm9tIFJXRl9ET05UQ0FDSEUKJiM0MzsJICogd3JpdGViYWNrLCBidXQgY2FuIGhhcHBlbiBpZiBub3JtYWwgd3JpdGViYWNrIGp1c3QgaGFwcGVucyB0byBmaW5kCiYjNDM7CSAqIGRpcnR5IGZvbGlvcyBjcmVhdGVkIGFzIHBhcnQgb2YgdW5jYWNoZWQgd3JpdGViYWNrLiBKdXN0IHNraXAgdGhlCiAJICogaW52YWxpZGF0aW9uIGluIHRoYXQgY2FzZS4KIAkgKi8KLQlpZiAoaW5fdGFzaygpICZhbXA7JmFtcDsgZm9saW9fdHJ5bG9jayhmb2xpbykpIHsKJiM0MzsJaWYgKCFmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYygpICZhbXA7JmFtcDsgZm9saW9fdHJ5bG9jayhmb2xpbykpIHsKIAkJZmlsZW1hcF9lbmRfZHJvcGJlaGluZChmb2xpbyk7CiAJCWZvbGlvX3VubG9jayhmb2xpbyk7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3OQoJCQkJCQkJb3V0cHV0OiAxNzUKCQkJCQkJCXRob3VnaHRzOiA1OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IEF0b21pYyBDb250ZXh0IEZpeCBpbiBgbW0vZmlsZW1hcC5jYCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCByZWxhdGVkIHRvIGF0b21pYyBjb250ZXh0IGlzc3VlcyB3aXRoaW4gYG1tL2ZpbGVtYXAuY2AuIEl0JiMzOTtzIHByZXR0eSBjbGVhcjogdGhlIGNvcmUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBhIHN1YnRsZSBidXQgY3JpdGljYWwgY29ycmVjdGlvbiBpbiBob3cgYGZvbGlvX2VuZF9kcm9wYmVoaW5kKClgIGhhbmRsZXMgZm9saW8gbG9ja2luZy4gUHJldmlvdXNseSwgaXQgdXNlZCBgaW5fdGFzaygpYCB0byBkZXRlcm1pbmUgY29udGV4dCwgYnV0IHRoYXQmIzM5O3Mgbm90IHJvYnVzdCBlbm91Z2guIEEgdGFzayBjb3VsZCBzdGlsbCBiZSBpbiBhbiBhdG9taWMgY29udGV4dCAocHJlZW1wdGlvbiBkaXNhYmxlZCwgUkNVIHJlYWQgbG9jayBoZWxkLCBldGMuKSBhbmQgY2FsbCBmb2xpbyBmdW5jdGlvbnMuCgpUaGUga2V5IGhlcmUgaXMgdGhlIGFkZGl0aW9uIG9mIGBmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYygpYC4gVGhpcyBmdW5jdGlvbiBhY2N1cmF0ZWx5IGRldGVjdHMgaWYgd2UmIzM5O3JlIGluIGFuIGF0b21pYyBjb250ZXh0IGJ5IGNoZWNraW5nIGZvciBwcmVlbXB0aW9uIGRpc2FibGVtZW50LCBSQ1UgcmVhZCBkZXB0aCwgYW5kIHdoZXRoZXIgd2UmIzM5O3JlIHByZWVtcHRpYmxlLiBUaGlzIGlzIGltcG9ydGFudCB0byBkZXRlcm1pbmUgd2hldGhlciBgZm9saW9fdHJ5bG9ja2AgbWlnaHQgc2xlZXAuIFdoaWxlIGBmb2xpb190cnlsb2NrYCBpdHNlbGYgZG9lc24mIzM5O3Qgc2xlZXAsIGZ1bmN0aW9ucyBmdXJ0aGVyIGRvd24gdGhlIGNhbGwgc3RhY2ssIHN1Y2ggYXMgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRgLCAqY291bGQqIHNsZWVwLCB3aGljaCBpcyB3aGF0IHdlIHdhbnQgdG8gYXZvaWQuIFRoaXMgaXMgYSBjbGFzc2ljIHNjaGVkdWxpbmctd2hpbGUtYXRvbWljIGtpbmQgb2YgaXNzdWUuIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYCBjYWxscyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7YCB3aGljaCBjb3VsZCBjYXVzZSBhIHNsZWVwLgoKVGhlIHBhdGNoJiMzOTtzIGxvZ2ljIGlzIGFsbCBhYm91dCBjb250cm9sIGZsb3cg4oCTIGVuc3VyaW5nIHRoYXQgdGhlIGNvZGUgZG9lc24mIzM5O3QgYXR0ZW1wdCB0byBhY3F1aXJlIGEgbG9jayBvciBwZXJmb3JtIG9wZXJhdGlvbnMgdGhhdCBtaWdodCBzbGVlcCB3aGVuIGl0JiMzOTtzIG5vdCBzYWZlIHRvIGRvIHNvLiBDcml0aWNhbGx5LCB0aGVyZSYjMzk7cyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IGRhdGEgc3RydWN0dXJlcywgbm8gZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgb25seSBjaGFuZ2UgaXMgaW4gdGhlIGNvbmRpdGlvbnMgdGhhdCBhcmUgY2hlY2tlZC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGNvZGUgc25pcHBldDoKYGBgYwomIzQzO3N0YXRpYyBib29sIGZvbGlvX2Ryb3BiZWhpbmRfaW5fYXRvbWljKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVElPTikgJmFtcDsmYW1wOyByY3VfcHJlZW1wdF9kZXB0aCgpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9DT1VOVCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmV0dXJuICFwcmVlbXB0aWJsZSgpOwomIzQzO30KYGBgCmFuZApgYGBjCi0JaWYgKGluX3Rhc2soKSAmYW1wOyZhbXA7IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7CiYjNDM7CWlmICghZm9saW9fZHJvcGJlaGluZF9pbl9hdG9taWMoKSAmYW1wOyZhbXA7IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7CmBgYAoKSXQmIzM5O3MgcHVyZWx5IGFib3V0IHByb3RlY3RpbmcgdGhlIGNvZGUgZnJvbSBzbGVlcGluZyBpbiBhdG9taWMgY29udGV4dC4KCktBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd2lsbCBiZSBvdXIgZnJpZW5kIGhlcmUuIFRoZXkmIzM5O2xsIGNhdGNoIGFueSBzY2hlZHVsaW5nLXdoaWxlLWF0b21pYyBvciBsb2NrLXJlbGF0ZWQgaXNzdWVzLiBLTVNBTiBkb2VzbiYjMzk7dCBhcHBseSBoZXJlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggaXMgcHVyZWx5IGNvbnRyb2wtZmxvdyByZWxhdGVkOyB0aGVyZSYjMzk7cyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKU28sIEkmIzM5O20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMuIFRoaXMgaXMgYSBjbGVhbiwgdGFyZ2V0ZWQgZml4IHRoYXQgYWRkcmVzc2VzIGEga25vd24gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHJlbGF0ZWQgdG8gYXRvbWljaXR5IGFuZCBzbGVlcGluZyBpbiB0aGUgZmlsZW1hcCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciBkcm9wcGluZyBmb2xpb3MgYmVoaW5kIGR1cmluZyB3cml0ZWJhY2sgdG8gY29ycmVjdGx5IGRldGVjdCBhdG9taWMgY29udGV4dHMgKHN1Y2ggYXMgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBvciBkaXNhYmxlZCBwcmVlbXB0aW9uKSBpbnN0ZWFkIG9mIGp1c3QgY2hlY2tpbmcgYGluX3Rhc2soKWAuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIHNsZWVwaW5nLWluLWF0b21pYyBidWdzIG9yIGRlYWRsb2Nrcy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdywgbG9ja2luZywgYW5kIGNvbnRleHQgY2hlY2tzLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIG9yIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSAoZS5nLiwgc2NoZWR1bGluZyB3aGlsZSBhdG9taWMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgIG9yIExPQ0tERVAsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciBkcm9wcGluZyBmb2xpb3MgYmVoaW5kIGR1cmluZyB3cml0ZWJhY2sgdG8gY29ycmVjdGx5IGRldGVjdCBhdG9taWMgY29udGV4dHMgKHN1Y2ggYXMgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBvciBkaXNhYmxlZCBwcmVlbXB0aW9uKSBpbnN0ZWFkIG9mIGp1c3QgY2hlY2tpbmcgYGluX3Rhc2soKWAuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIHNsZWVwaW5nLWluLWF0b21pYyBidWdzIG9yIGRlYWRsb2Nrcy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdywgbG9ja2luZywgYW5kIGNvbnRleHQgY2hlY2tzLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIG9yIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSAoZS5nLiwgc2NoZWR1bGluZyB3aGlsZSBhdG9taWMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgIG9yIExPQ0tERVAsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjI2OjMxLjE3NTYwMTE4N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NjA0NTIzMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBSRUVNUFRJT05cIixcbiAgICBcIlBSRUVNUFRfQ09VTlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciBkcm9wcGluZyBmb2xpb3MgYmVoaW5kIGR1cmluZyB3cml0ZWJhY2sgdG8gY29ycmVjdGx5IGRldGVjdCBhdG9taWMgY29udGV4dHMgKHN1Y2ggYXMgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBvciBkaXNhYmxlZCBwcmVlbXB0aW9uKSBpbnN0ZWFkIG9mIGp1c3QgY2hlY2tpbmcgYGluX3Rhc2soKWAuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIHNsZWVwaW5nLWluLWF0b21pYyBidWdzIG9yIGRlYWRsb2Nrcy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdywgbG9ja2luZywgYW5kIGNvbnRleHQgY2hlY2tzLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIG9yIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSAoZS5nLiwgc2NoZWR1bGluZyB3aGlsZSBhdG9taWMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgIG9yIExPQ0tERVAsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gYG1tL2ZpbGVtYXAuY2AgdG8gY29ycmVjdGx5IGRldGVjdCBhdG9taWMgY29udGV4dHMgZHVyaW5nIHdyaXRlYmFjayBjb21wbGV0aW9uIGZvciBmb2xpb3MgbWFya2VkIGFzIGRyb3BiZWhpbmQgKGUuZy4sIFJXRl9ET05UQ0FDSEUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBhZmZlY3RzIHBhZ2UgaW52YWxpZGF0aW9uIGFuZCBsb2NraW5nLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3Mgb2NjdXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjI2OjMxLjE3NTYxNTU4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MzA5MzgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJhZDdiZWFhMWEyMjU3YWYxMGU2ZjNmN2I5YTAxZTY1YWQyZDM0ODJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjAgMTU6MjY6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXFxuaW5kZXggNmFmZWM2MzY4ODFmYi4uMDYxNjA1N2U2Zjk5MSAxMDA2NDRcXG4tLS0gYS9tbS9maWxlbWFwLmNcXG4rKysgYi9tbS9maWxlbWFwLmNcXG5AQCAtNDUsNiArNDUsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlncmF0ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGlwZV9mc19pLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcGxpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9tbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY3RsLmhcXHUwMDNlXFxuQEAgLTE2MjAsNiArMTYyMSwxNSBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdFxcdGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYyh2b2lkKVxcbit7XFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUSU9OKSBcXHUwMDI2XFx1MDAyNiByY3VfcHJlZW1wdF9kZXB0aCgpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX0NPVU5UKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdHJldHVybiAhcHJlZW1wdGlibGUoKTtcXG4rfVxcbitcXG4gLypcXG4gICogSWYgZm9saW8gd2FzIG1hcmtlZCBhcyBkcm9wYmVoaW5kLCB0aGVuIHBhZ2VzIHNob3VsZCBiZSBkcm9wcGVkIHdoZW4gd3JpdGViYWNrXFxuICAqIGNvbXBsZXRlcy4gRG8gdGhhdCBub3cuIElmIHdlIGZhaWwsIGl0J3MgbGlrZWx5IGJlY2F1c2Ugb2YgYSBiaWcgZm9saW8gLVxcbkBAIC0xNjMxLDEzICsxNjQxLDEyIEBAIHZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogSGl0dGluZyAhaW5fdGFzaygpIHNob3VsZCBub3QgaGFwcGVuIG9mZiBSV0ZfRE9OVENBQ0hFIHdyaXRlYmFjayxcXG4tXFx0ICogYnV0IGNhbiBoYXBwZW4gaWYgbm9ybWFsIHdyaXRlYmFjayBqdXN0IGhhcHBlbnMgdG8gZmluZCBkaXJ0eSBmb2xpb3NcXG4tXFx0ICogdGhhdCB3ZXJlIGNyZWF0ZWQgYXMgcGFydCBvZiB1bmNhY2hlZCB3cml0ZWJhY2ssIGFuZCB0aGF0IHdyaXRlYmFja1xcbi1cXHQgKiB3b3VsZCBvdGhlcndpc2Ugbm90IG5lZWQgbm9uLUlSUSBoYW5kbGluZy4gSnVzdCBza2lwIHRoZVxcbitcXHQgKiBIaXR0aW5nIGFuIGF0b21pYyBjb250ZXh0IHNob3VsZCBub3QgaGFwcGVuIGZyb20gUldGX0RPTlRDQUNIRVxcbitcXHQgKiB3cml0ZWJhY2ssIGJ1dCBjYW4gaGFwcGVuIGlmIG5vcm1hbCB3cml0ZWJhY2sganVzdCBoYXBwZW5zIHRvIGZpbmRcXG4rXFx0ICogZGlydHkgZm9saW9zIGNyZWF0ZWQgYXMgcGFydCBvZiB1bmNhY2hlZCB3cml0ZWJhY2suIEp1c3Qgc2tpcCB0aGVcXG4gXFx0ICogaW52YWxpZGF0aW9uIGluIHRoYXQgY2FzZS5cXG4gXFx0ICovXFxuLVxcdGlmIChpbl90YXNrKCkgXFx1MDAyNlxcdTAwMjYgZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcXG4rXFx0aWYgKCFmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYygpIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XFxuIFxcdFxcdGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xcbiBcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjI2OjMyLjY0OTk1MDg1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUyMTc2MjEyMDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBSRUVNUFRJT05cIixcbiAgICBcIlBSRUVNUFRfQ09VTlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gYG1tL2ZpbGVtYXAuY2AgdG8gY29ycmVjdGx5IGRldGVjdCBhdG9taWMgY29udGV4dHMgZHVyaW5nIHdyaXRlYmFjayBjb21wbGV0aW9uIGZvciBmb2xpb3MgbWFya2VkIGFzIGRyb3BiZWhpbmQgKGUuZy4sIFJXRl9ET05UQ0FDSEUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBhZmZlY3RzIHBhZ2UgaW52YWxpZGF0aW9uIGFuZCBsb2NraW5nLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3Mgb2NjdXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJhZDdiZWFhMWEyMjU3YWYxMGU2ZjNmN2I5YTAxZTY1YWQyZDM0ODJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxNToyNjoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggNmFmZWM2MzY4ODFmYi4uMDYxNjA1N2U2Zjk5MSAxMDA2NDRcbi0tLSBhL21tL2ZpbGVtYXAuY1xuKysrIGIvbW0vZmlsZW1hcC5jXG5AQCAtNDUsNiArNDUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21pZ3JhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BpcGVfZnNfaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BsaWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2N0bC5oXHUwMDNlXG5AQCAtMTYyMCw2ICsxNjIxLDE1IEBAIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0Zm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7XG4gfVxuIFxuK3N0YXRpYyBib29sIGZvbGlvX2Ryb3BiZWhpbmRfaW5fYXRvbWljKHZvaWQpXG4re1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRJT04pIFx1MDAyNlx1MDAyNiByY3VfcHJlZW1wdF9kZXB0aCgpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9DT1VOVCkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1x0cmV0dXJuICFwcmVlbXB0aWJsZSgpO1xuK31cbitcbiAvKlxuICAqIElmIGZvbGlvIHdhcyBtYXJrZWQgYXMgZHJvcGJlaGluZCwgdGhlbiBwYWdlcyBzaG91bGQgYmUgZHJvcHBlZCB3aGVuIHdyaXRlYmFja1xuICAqIGNvbXBsZXRlcy4gRG8gdGhhdCBub3cuIElmIHdlIGZhaWwsIGl0J3MgbGlrZWx5IGJlY2F1c2Ugb2YgYSBiaWcgZm9saW8gLVxuQEAgLTE2MzEsMTMgKzE2NDEsMTIgQEAgdm9pZCBmb2xpb19lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKlxuLVx0ICogSGl0dGluZyAhaW5fdGFzaygpIHNob3VsZCBub3QgaGFwcGVuIG9mZiBSV0ZfRE9OVENBQ0hFIHdyaXRlYmFjayxcbi1cdCAqIGJ1dCBjYW4gaGFwcGVuIGlmIG5vcm1hbCB3cml0ZWJhY2sganVzdCBoYXBwZW5zIHRvIGZpbmQgZGlydHkgZm9saW9zXG4tXHQgKiB0aGF0IHdlcmUgY3JlYXRlZCBhcyBwYXJ0IG9mIHVuY2FjaGVkIHdyaXRlYmFjaywgYW5kIHRoYXQgd3JpdGViYWNrXG4tXHQgKiB3b3VsZCBvdGhlcndpc2Ugbm90IG5lZWQgbm9uLUlSUSBoYW5kbGluZy4gSnVzdCBza2lwIHRoZVxuK1x0ICogSGl0dGluZyBhbiBhdG9taWMgY29udGV4dCBzaG91bGQgbm90IGhhcHBlbiBmcm9tIFJXRl9ET05UQ0FDSEVcbitcdCAqIHdyaXRlYmFjaywgYnV0IGNhbiBoYXBwZW4gaWYgbm9ybWFsIHdyaXRlYmFjayBqdXN0IGhhcHBlbnMgdG8gZmluZFxuK1x0ICogZGlydHkgZm9saW9zIGNyZWF0ZWQgYXMgcGFydCBvZiB1bmNhY2hlZCB3cml0ZWJhY2suIEp1c3Qgc2tpcCB0aGVcbiBcdCAqIGludmFsaWRhdGlvbiBpbiB0aGF0IGNhc2UuXG4gXHQgKi9cbi1cdGlmIChpbl90YXNrKCkgXHUwMDI2XHUwMDI2IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG4rXHRpZiAoIWZvbGlvX2Ryb3BiZWhpbmRfaW5fYXRvbWljKCkgXHUwMDI2XHUwMDI2IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG4gXHRcdGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6MjY6MzIuNjQ5OTUzMTQxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU1ODcwMzMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZvbGlvIERyb3BiZWhpbmQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vZmlsZW1hcC5jYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgYnV0IHdlIGFsbCBrbm93IHdoZXJlIGV2ZW4gbWlub3IgbW9kaWZpY2F0aW9ucyBpbiB0aGUgZmlsZW1hcCBjb2RlIGNhbiBsZWFkISBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBhcHBlYXJzIHRvIHJldm9sdmUgYXJvdW5kIHRoaXMgbmV3IGBmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYygpYCBmdW5jdGlvbi4gVGhlIGludGVudCBpcyBjbGVhcjogaXTigJlzIGJlaW5nIHVzZWQgdG8gcmVmaW5lIHRoZSBjb25kaXRpb25zIGZvciBzb21ldGhpbmcgaGFwcGVuaW5nIHdpdGhpbiBgZm9saW9fZW5kX2Ryb3BiZWhpbmQoKWAuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IHN1YnN0aXR1dGVzIGAhZm9saW9fZHJvcGJlaGluZF9pbl9hdG9taWMoKWAgZm9yIGBpbl90YXNrKClgLlxuXG5SaWdodCwgbGV0J3MgdW5wYWNrIGBmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYygpYC4gSXQncyBjaGVja2luZyBmb3Igc2V2ZXJhbCBjb25kaXRpb25zOiBgSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVElPTikgXHUwMDI2XHUwMDI2IHJjdV9wcmVlbXB0X2RlcHRoKClgLCBgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfQ09VTlQpYCwgYW5kIGAhcHJlZW1wdGlibGUoKWAuIEVzc2VudGlhbGx5LCB0aGUgZnVuY3Rpb24gdHJpZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgYXRvbWljLCBtZWFuaW5nIGl0IGNhbm5vdCBiZSBwcmVlbXB0ZWQgb3IgaW50ZXJydXB0ZWQuIFRoYXTigJlzIHRoZSBrZXkuIFRoaXMgaXMgYSBjcnVjaWFsIGRpc3RpbmN0aW9uIGJlY2F1c2UgYXRvbWljaXR5IGltcGxpZXMgYSBkaWZmZXJlbnQgbGV2ZWwgb2YgbG9ja2luZyBhbmQgcmVzb3VyY2UgYWNjZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBhdG9taWMgY2hlY2s/XCJcblxuVGhlIGltcGxpY2F0aW9ucyBhcmUgd29ydGggY29uc2lkZXJpbmcuIFRoaXMgY2hhbmdlICpkaXJlY3RseSogYWZmZWN0cyBgZm9saW9fZW5kX2Ryb3BiZWhpbmQoKWAsIHdoaWNoIGhhbmRsZXMgd3JpdGViYWNrIGNvbXBsZXRpb24gZm9yIGZvbGlvcyBmbGFnZ2VkIGFzIGRyb3BiZWhpbmQuIFRoaXMgdHlwaWNhbGx5IG1lYW5zIHdoZW4gd3JpdGVzIHRoYXQgYXJlIGZsYWdnZWQgd2l0aCBSV0ZfRE9OVENBQ0hFIGZpbmlzaC4gVGhlIHF1ZXN0aW9uIGJlY29tZXMsIHdoeSB0aGlzIHNwZWNpZmljIGNoYW5nZSBmb3IgZHJvcGJlaGluZCBzY2VuYXJpb3M/IEl0IHdpbGwgYmUgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgZ2VuZXJhbCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGEgYnVnIGZpeCwgb3IgYSBjaGFuZ2UgdG8gdGhlIGZ1bmRhbWVudGFsIHNlbWFudGljcyBvZiBob3cgd2UgdHJlYXQgY2FjaGVkIGRhdGEgaW4gdGhpcyBzcGVjaWZpYyBzY2VuYXJpby4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS9maWxlbWFwLmNgIGFuZCB0cnkgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlc2UgYWRkZWQgY2hlY2tzIG1pZ2h0IGJlLiBUaGlzIGNvdWxkIGJlIGEgZ29vZCBpbXByb3ZlbWVudCwgb3IgaXQgY291bGQgaW50cm9kdWNlIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNToyNjozOC4yMDg2NTkyOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU3NzAzODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fZW5kX2Ryb3BiZWhpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZmlsZW1hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZpbGVtYXAuYz0xNjI0PXN0YXRpYyBib29sIGZvbGlvX2Ryb3BiZWhpbmRfaW5fYXRvbWljKHZvaWQpXFxuLS1cXG5tbS9maWxlbWFwLmMtMTYzNy0gKi9cXG5tbS9maWxlbWFwLmM6MTYzODp2b2lkIGZvbGlvX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZmlsZW1hcC5jLTE2Mzkte1xcbi0tXFxubW0vZmlsZW1hcC5jLTE2NTMtfVxcbm1tL2ZpbGVtYXAuYzoxNjU0OkVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF9kcm9wYmVoaW5kKTtcXG5tbS9maWxlbWFwLmMtMTY1NS1cXG4tLVxcbm1tL2ZpbGVtYXAuYz0xNjk2PXZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZmlsZW1hcC5jLTE3MDctXFx0Zm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKGZvbGlvKTtcXG5tbS9maWxlbWFwLmM6MTcwODpcXHRmb2xpb19lbmRfZHJvcGJlaGluZChmb2xpbyk7XFxubW0vZmlsZW1hcC5jLTE3MDktXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6MjY6MzguMzI0NDM2MDM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NzkyNjc3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIb3QgUGF0aCBhbmQgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgY2hhbmdlIGFuZCB0cnlpbmcgdG8gZGVjaWRlIGhvdyBiZXN0IHRvIGFwcHJvYWNoIGl0IGZvciB0ZXN0aW5nLiBJdCBsb29rcyBsaWtlIGBmb2xpb19lbmRfZHJvcGJlaGluZGAgaXMgYmVpbmcgbW9kaWZpZWQsIGFuZCB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGBmb2xpb19lbmRfd3JpdGViYWNrYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmbGFnIOKAkyBgZm9saW9fZW5kX3dyaXRlYmFja2AgaXMgYSBrbm93biBob3QgcGF0aCwgc28gYW55IGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGl0IGlzIGxpa2VseSB0byBiZSBmcmVxdWVudGx5IGV4ZWN1dGVkLiBUaGUgcXVlc3Rpb24gaXMsIGlzIGBmb2xpb19lbmRfZHJvcGJlaGluZGAgKml0c2VsZiogYSBob3QgcGF0aD8gVGhlIGFuc3dlciBhcHBlYXJzIHRvIGJlIHllcywgYmVjYXVzZSBpdCdzIGludm9rZWQgd2l0aCBldmVyeSBjb21wbGV0aW9uIG9mIGEgd3JpdGViYWNrLlxuXG5UaGUgcHJvbXB0LCBob3dldmVyLCBhZHZpc2VzIGFnYWluc3QgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyBhcyBmb2N1cyBzeW1ib2xzLiBUaGlzIGlzIHRvIGF2b2lkIHNrZXdpbmcgdGVzdCBkaXN0cmlidXRpb25zLiBCdXQsIGdpdmVuIHRoYXQgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCAqaXMqIGNhbGxlZCBvbiBldmVyeSBgZm9saW9fZW5kX3dyaXRlYmFja2AsIGFuZCBgZm9saW9fZW5kX3dyaXRlYmFja2AgaXMgZGVmaW5pdGVseSBhIGhvdCBwYXRoLi4uaXQncyB0cmlja3kuXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCBpcyBleHBvcnRlZC4gT2theSwgaXQncyBgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX2Ryb3BiZWhpbmQpYC4gSG1tLCBsb29raW5nIGF0IHRoZSBwYXRjaCwgSSBhbHNvIHNlZSBgQ09ORklHX1BSRUVNUFRJT05gIGFuZCBgQ09ORklHX1BSRUVNUFRfQ09VTlRgIG1lbnRpb25lZCwgbWF5YmUgSSBzaG91bGQgY29uc2lkZXIgdGhlc2UgaW4gYEVuYWJsZUNvbmZpZ3NgPyBCdXQgYFBSRUVNUFRJT05gIGlzIHByZXR0eSBnZW5lcmljLCBtYXliZSBJIHNob3VsZCByZWNvbnNpZGVyIHRoYXQsIGdpdmVuIHRoZSBwcm9tcHQuXG5cblVsdGltYXRlbHksIGdpdmVuIHRoYXQgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCBpcyBhIGhvdCBwYXRoIGJlY2F1c2UgaXQgaXMgaW52b2tlZCBpbiB0aGUgaG90IHBhdGggb2YgYGZvbGlvX2VuZF93cml0ZWJhY2tgLCBpdCB3YXJyYW50cyBmdXp6aW5nLiBTaW5jZSBpdCdzIGEgaG90IHBhdGgsIG1heWJlIEkgc2hvdWxkbid0IHNwZWNpZnkgYSBmb2N1cyBzeW1ib2wuIEJ1dCB3YWl0LCBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgIG9ubHkgZG9lcyBzb21ldGhpbmcgaWYgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbylgIGlzIHRydWUuIFRoYXQgZnVuY3Rpb24sIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmRgLCBpcyBzZXQgZm9yIGBSV0ZfRE9OVENBQ0hFYCB3cml0ZXMuXG5cbk9rYXksIHNvIGl0J3MgKm5vdCogYWx3YXlzIGRvaW5nIHdvcmssIGJ1dCBpdCAqaXMqIGNhbGxlZCBvbiBldmVyeSB3cml0ZWJhY2sgY29tcGxldGlvbi4gU28sIGV2ZW4gdGhvdWdoIG5vdCBldmVyeSBjYWxsICpkb2VzKiB3b3JrLCB0aGUgZnVuY3Rpb24gKmlzKiBjYWxsZWQuIFRoaXMgY2hhbmdlIHN0aWxsIGZlZWxzIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgYW5kIGdpdmVuIGl0cyBmcmVxdWVuY3kgb2YgaW52b2NhdGlvbiwgaXQncyBwcm9iYWJseSB3b3J0aCBpdC4gTm93LCBsZXQncyBjaGVjayB3aGVyZSBgZm9saW9fc2V0X2Ryb3BiZWhpbmRgIGlzIGNhbGxlZC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjc2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjI3OjEwLjEwMzcwNzYwM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzUyMjUxNDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3NldF9kcm9wYmVoaW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZpbGVtYXAuYz0xOTU2PXN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vZmlsZW1hcC5jLTIwMzQtXFx0XFx0XFx0aWYgKGZncF9mbGFncyBcXHUwMDI2IEZHUF9ET05UQ0FDSEUpXFxubW0vZmlsZW1hcC5jOjIwMzU6XFx0XFx0XFx0XFx0X19mb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XFxubW0vZmlsZW1hcC5jLTIwMzYtXFxuLS1cXG5tbS9maWxlbWFwLmM9MjYyOD1zdGF0aWMgaW50IGZpbGVtYXBfY3JlYXRlX2ZvbGlvKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXFxuLS1cXG5tbS9maWxlbWFwLmMtMjY0Mi1cXHRpZiAoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0RPTlRDQUNIRSlcXG5tbS9maWxlbWFwLmM6MjY0MzpcXHRcXHRfX2ZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTtcXG5tbS9maWxlbWFwLmMtMjY0NC1cXG4tLVxcbm1tL3JlYWRhaGVhZC5jPTE5NT1zdGF0aWMgc3RydWN0IGZvbGlvICpyYWN0bF9hbGxvY19mb2xpbyhzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbi0tXFxubW0vcmVhZGFoZWFkLmMtMjAxLVxcdGlmIChmb2xpbyBcXHUwMDI2XFx1MDAyNiByYWN0bC1cXHUwMDNlZHJvcGJlaGluZClcXG5tbS9yZWFkYWhlYWQuYzoyMDI6XFx0XFx0X19mb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XFxubW0vcmVhZGFoZWFkLmMtMjAzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNToyNzoxMi40NTU5NjQ4OTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjIzMzg5NDQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIHJlcHJlc2VudCB0aGlzIHBhdGNoIGZvciBmdXp6aW5nLiBUaGUga2V5IGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkIGhlcmUgaXMgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBsaXN0IGBmb2xpb19lbmRfZHJvcGJlaGluZGAgYXMgYSBgRm9jdXNTeW1ib2xgIGJlY2F1c2UgaXQncyB0aGUgZXhhY3QgZnVuY3Rpb24gYmVpbmcgZml4ZWQsIGFuZCBpdCdzIGFuIGV4cG9ydGVkIEFQSS4gSG93ZXZlciwgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgb24gZXZlcnkgd3JpdGViYWNrIGNvbXBsZXRpb24sIG1ha2luZyBpdCBhIGRlZmluaXRlIGhvdCBwYXRoLCB3aGljaCwgYWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMsIEkgc2hvdWxkIGF2b2lkLlxuXG5JJ20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgbGVhdmluZyBgRm9jdXNTeW1ib2xzYCBlbXB0eSwganVzdCB0byBiZSBvbiB0aGUgc2FmZSBzaWRlLCBhdm9pZGluZyBhbnkgcG90ZW50aWFsIHNrZXcgaW4gdGhlIHRlc3QgZGlzdHJpYnV0aW9ucy4gQnV0LCBpdCBpcyB2ZXJ5IHNwZWNpZmljIHRvIHRoZSBkcm9wYmVoaW5kIGZlYXR1cmUuLi4gSG1tLiBVbHRpbWF0ZWx5LCBnaXZlbiBpdCdzIG9uIGEgaG90IHBhdGgsIGFuZCBmb2xsb3dpbmcgdGhlIGd1aWRhbmNlLCBJJ2xsIGdvIHdpdGggYW4gZW1wdHkgYEZvY3VzU3ltYm9sc2AgbGlzdCB0byBhdm9pZCBza2V3LlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGBFbmFibGVDb25maWdzYC4gVGhlIHBhdGNoIHVzZXMgYENPTkZJR19QUkVFTVBUSU9OYCBhbmQgYENPTkZJR19QUkVFTVBUX0NPVU5UYC4gQSBxdWljayByZXZpZXcgY29uZmlybXMgdGhleSdyZSB2YWxpZCBhbmQgcmVsZXZhbnQgY29uZmlncy4gSSdsbCBkZWZpbml0ZWx5IGxpc3QgdGhvc2UuXG5cbkZpbmFsbHksIGp1c3QgYSBxdWljayByZXZpZXcgb2YgdGhlIHBhdGNoJ3MgbG9naWM6IEl0IGFwcGVhcnMgdG8gYmUgYSBmaXggdG8gYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCwgd2hpY2ggb3JpZ2luYWxseSB1c2VkIGBpbl90YXNrKClgIGJ1dCBjb3VsZCBiZSBjYWxsZWQgZnJvbSBhdG9taWMgY29udGV4dCBkdXJpbmcgd3JpdGViYWNrLiBUaGUgZml4IHJlcGxhY2VzIGBpbl90YXNrKClgIHdpdGggYCFmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYygpYC4gVGhhdCBoZWxwcyBjb25maXJtIHRoZSBmb2N1cyBpcyBjbGVhcmx5IG9uIHByZXZlbnRpbmcgdGhlIGBkcm9wYmVoaW5kYCBmdW5jdGlvbmFsaXR5IGZhaWxpbmcgaW4gYW4gYXRvbWljIGNvbnRleHQuXG5cblNvLCBoZXJlJ3Mgd2hhdCBJJ2xsIHJldHVybjpcblxuKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgXG4qICAgYEZvY3VzU3ltYm9sczogW11gXG4qICAgYEVuYWJsZUNvbmZpZ3M6IFtcIkNPTkZJR19QUkVFTVBUSU9OXCIsIFwiQ09ORklHX1BSRUVNUFRfQ09VTlRcIl1gXG4qICAgSSB3aWxsIHVzZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjIwLCJPdXRwdXRUb2tlbnMiOjExOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNToyNzoyNC42ODk4NjI2MzdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjI5NzE5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJFRU1QVElPTlwiLFxuICAgIFwiUFJFRU1QVF9DT1VOVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBgbW0vZmlsZW1hcC5jYCB0byBjb3JyZWN0bHkgZGV0ZWN0IGF0b21pYyBjb250ZXh0cyBkdXJpbmcgd3JpdGViYWNrIGNvbXBsZXRpb24gZm9yIGZvbGlvcyBtYXJrZWQgYXMgZHJvcGJlaGluZCAoZS5nLiwgUldGX0RPTlRDQUNIRSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSB0aGF0IGFmZmVjdHMgcGFnZSBpbnZhbGlkYXRpb24gYW5kIGxvY2tpbmcsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGRlYWRsb2NrcyBvY2N1ci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUkVFTVBUSU9OXCIsXG4gICAgXCJQUkVFTVBUX0NPVU5UXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIGBtbS9maWxlbWFwLmNgIHRvIGNvcnJlY3RseSBkZXRlY3QgYXRvbWljIGNvbnRleHRzIGR1cmluZyB3cml0ZWJhY2sgY29tcGxldGlvbiBmb3IgZm9saW9zIG1hcmtlZCBhcyBkcm9wYmVoaW5kIChlLmcuLCBSV0ZfRE9OVENBQ0hFKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlIHRoYXQgYWZmZWN0cyBwYWdlIGludmFsaWRhdGlvbiBhbmQgbG9ja2luZywgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgZGVhZGxvY2tzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNToyNzoyNC44MjYxNjY5MjJaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NTM5NDc5NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNToyNzoyNC44MjY2NDczMTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTE5NTM0NjI0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGRyb3BwaW5nIGZvbGlvcyBiZWhpbmQgZHVyaW5nIHdyaXRlYmFjayB0byBjb3JyZWN0bHkgZGV0ZWN0IGF0b21pYyBjb250ZXh0cyAoc3VjaCBhcyBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIG9yIGRpc2FibGVkIHByZWVtcHRpb24pIGluc3RlYWQgb2YganVzdCBjaGVja2luZyBgaW5fdGFzaygpYC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgc2xlZXBpbmctaW4tYXRvbWljIGJ1Z3Mgb3IgZGVhZGxvY2tzLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93LCBsb2NraW5nLCBhbmQgY29udGV4dCBjaGVja3MuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3Npbmcgb3Igb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIChlLmcuLCBzY2hlZHVsaW5nIHdoaWxlIGF0b21pYykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgb3IgTE9DS0RFUCwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyYWQ3YmVhYTFhMjI1N2FmMTBlNmYzZjdiOWEwMWU2NWFkMmQzNDgyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMTU6MjY6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcbmluZGV4IDZhZmVjNjM2ODgxZmIuLjA2MTYwNTdlNmY5OTEgMTAwNjQ0XG4tLS0gYS9tbS9maWxlbWFwLmNcbisrKyBiL21tL2ZpbGVtYXAuY1xuQEAgLTQ1LDYgKzQ1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9taWdyYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waXBlX2ZzX2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwbGljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxuQEAgLTE2MjAsNiArMTYyMSwxNSBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYyh2b2lkKVxuK3tcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUSU9OKSBcdTAwMjZcdTAwMjYgcmN1X3ByZWVtcHRfZGVwdGgoKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfQ09VTlQpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdHJldHVybiAhcHJlZW1wdGlibGUoKTtcbit9XG4rXG4gLypcbiAgKiBJZiBmb2xpbyB3YXMgbWFya2VkIGFzIGRyb3BiZWhpbmQsIHRoZW4gcGFnZXMgc2hvdWxkIGJlIGRyb3BwZWQgd2hlbiB3cml0ZWJhY2tcbiAgKiBjb21wbGV0ZXMuIERvIHRoYXQgbm93LiBJZiB3ZSBmYWlsLCBpdCdzIGxpa2VseSBiZWNhdXNlIG9mIGEgYmlnIGZvbGlvIC1cbkBAIC0xNjMxLDEzICsxNjQxLDEyIEBAIHZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lypcbi1cdCAqIEhpdHRpbmcgIWluX3Rhc2soKSBzaG91bGQgbm90IGhhcHBlbiBvZmYgUldGX0RPTlRDQUNIRSB3cml0ZWJhY2ssXG4tXHQgKiBidXQgY2FuIGhhcHBlbiBpZiBub3JtYWwgd3JpdGViYWNrIGp1c3QgaGFwcGVucyB0byBmaW5kIGRpcnR5IGZvbGlvc1xuLVx0ICogdGhhdCB3ZXJlIGNyZWF0ZWQgYXMgcGFydCBvZiB1bmNhY2hlZCB3cml0ZWJhY2ssIGFuZCB0aGF0IHdyaXRlYmFja1xuLVx0ICogd291bGQgb3RoZXJ3aXNlIG5vdCBuZWVkIG5vbi1JUlEgaGFuZGxpbmcuIEp1c3Qgc2tpcCB0aGVcbitcdCAqIEhpdHRpbmcgYW4gYXRvbWljIGNvbnRleHQgc2hvdWxkIG5vdCBoYXBwZW4gZnJvbSBSV0ZfRE9OVENBQ0hFXG4rXHQgKiB3cml0ZWJhY2ssIGJ1dCBjYW4gaGFwcGVuIGlmIG5vcm1hbCB3cml0ZWJhY2sganVzdCBoYXBwZW5zIHRvIGZpbmRcbitcdCAqIGRpcnR5IGZvbGlvcyBjcmVhdGVkIGFzIHBhcnQgb2YgdW5jYWNoZWQgd3JpdGViYWNrLiBKdXN0IHNraXAgdGhlXG4gXHQgKiBpbnZhbGlkYXRpb24gaW4gdGhhdCBjYXNlLlxuIFx0ICovXG4tXHRpZiAoaW5fdGFzaygpIFx1MDAyNlx1MDAyNiBmb2xpb190cnlsb2NrKGZvbGlvKSkge1xuK1x0aWYgKCFmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYygpIFx1MDAyNlx1MDAyNiBmb2xpb190cnlsb2NrKGZvbGlvKSkge1xuIFx0XHRmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjI3OjI0LjgyNjY0ODA1MloiLCJTZXEiOjExLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTk1MzQzODM0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogQXRvbWljIENvbnRleHQgRml4IGluIGBtbS9maWxlbWFwLmNgKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggcmVsYXRlZCB0byBhdG9taWMgY29udGV4dCBpc3N1ZXMgd2l0aGluIGBtbS9maWxlbWFwLmNgLiBJdCdzIHByZXR0eSBjbGVhcjogdGhlIGNvcmUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBhIHN1YnRsZSBidXQgY3JpdGljYWwgY29ycmVjdGlvbiBpbiBob3cgYGZvbGlvX2VuZF9kcm9wYmVoaW5kKClgIGhhbmRsZXMgZm9saW8gbG9ja2luZy4gUHJldmlvdXNseSwgaXQgdXNlZCBgaW5fdGFzaygpYCB0byBkZXRlcm1pbmUgY29udGV4dCwgYnV0IHRoYXQncyBub3Qgcm9idXN0IGVub3VnaC4gQSB0YXNrIGNvdWxkIHN0aWxsIGJlIGluIGFuIGF0b21pYyBjb250ZXh0IChwcmVlbXB0aW9uIGRpc2FibGVkLCBSQ1UgcmVhZCBsb2NrIGhlbGQsIGV0Yy4pIGFuZCBjYWxsIGZvbGlvIGZ1bmN0aW9ucy5cblxuVGhlIGtleSBoZXJlIGlzIHRoZSBhZGRpdGlvbiBvZiBgZm9saW9fZHJvcGJlaGluZF9pbl9hdG9taWMoKWAuIFRoaXMgZnVuY3Rpb24gYWNjdXJhdGVseSBkZXRlY3RzIGlmIHdlJ3JlIGluIGFuIGF0b21pYyBjb250ZXh0IGJ5IGNoZWNraW5nIGZvciBwcmVlbXB0aW9uIGRpc2FibGVtZW50LCBSQ1UgcmVhZCBkZXB0aCwgYW5kIHdoZXRoZXIgd2UncmUgcHJlZW1wdGlibGUuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGRldGVybWluZSB3aGV0aGVyIGBmb2xpb190cnlsb2NrYCBtaWdodCBzbGVlcC4gV2hpbGUgYGZvbGlvX3RyeWxvY2tgIGl0c2VsZiBkb2Vzbid0IHNsZWVwLCBmdW5jdGlvbnMgZnVydGhlciBkb3duIHRoZSBjYWxsIHN0YWNrLCBzdWNoIGFzIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYCwgKmNvdWxkKiBzbGVlcCwgd2hpY2ggaXMgd2hhdCB3ZSB3YW50IHRvIGF2b2lkLiBUaGlzIGlzIGEgY2xhc3NpYyBzY2hlZHVsaW5nLXdoaWxlLWF0b21pYyBraW5kIG9mIGlzc3VlLiBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAgY2FsbHMgYGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO2Agd2hpY2ggY291bGQgY2F1c2UgYSBzbGVlcC5cblxuVGhlIHBhdGNoJ3MgbG9naWMgaXMgYWxsIGFib3V0IGNvbnRyb2wgZmxvdyDigJMgZW5zdXJpbmcgdGhhdCB0aGUgY29kZSBkb2Vzbid0IGF0dGVtcHQgdG8gYWNxdWlyZSBhIGxvY2sgb3IgcGVyZm9ybSBvcGVyYXRpb25zIHRoYXQgbWlnaHQgc2xlZXAgd2hlbiBpdCdzIG5vdCBzYWZlIHRvIGRvIHNvLiBDcml0aWNhbGx5LCB0aGVyZSdzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBubyBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBvbmx5IGNoYW5nZSBpcyBpbiB0aGUgY29uZGl0aW9ucyB0aGF0IGFyZSBjaGVja2VkLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGNvZGUgc25pcHBldDpcbmBgYGNcbitzdGF0aWMgYm9vbCBmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYyh2b2lkKVxuK3tcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUSU9OKSBcdTAwMjZcdTAwMjYgcmN1X3ByZWVtcHRfZGVwdGgoKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfQ09VTlQpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdHJldHVybiAhcHJlZW1wdGlibGUoKTtcbit9XG5gYGBcbmFuZFxuYGBgY1xuLVx0aWYgKGluX3Rhc2soKSBcdTAwMjZcdTAwMjYgZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbitcdGlmICghZm9saW9fZHJvcGJlaGluZF9pbl9hdG9taWMoKSBcdTAwMjZcdTAwMjYgZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbmBgYFxuXG5JdCdzIHB1cmVseSBhYm91dCBwcm90ZWN0aW5nIHRoZSBjb2RlIGZyb20gc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQuXG5cbktBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd2lsbCBiZSBvdXIgZnJpZW5kIGhlcmUuIFRoZXknbGwgY2F0Y2ggYW55IHNjaGVkdWxpbmctd2hpbGUtYXRvbWljIG9yIGxvY2stcmVsYXRlZCBpc3N1ZXMuIEtNU0FOIGRvZXNuJ3QgYXBwbHkgaGVyZSwgYmVjYXVzZSB0aGlzIHBhdGNoIGlzIHB1cmVseSBjb250cm9sLWZsb3cgcmVsYXRlZDsgdGhlcmUncyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5TbywgSSdtIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLiBUaGlzIGlzIGEgY2xlYW4sIHRhcmdldGVkIGZpeCB0aGF0IGFkZHJlc3NlcyBhIGtub3duIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiByZWxhdGVkIHRvIGF0b21pY2l0eSBhbmQgc2xlZXBpbmcgaW4gdGhlIGZpbGVtYXAgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3OSwiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNToyNzozNi43ODAwOTA1NzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGRyb3BwaW5nIGZvbGlvcyBiZWhpbmQgZHVyaW5nIHdyaXRlYmFjayB0byBjb3JyZWN0bHkgZGV0ZWN0IGF0b21pYyBjb250ZXh0cyAoc3VjaCBhcyBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIG9yIGRpc2FibGVkIHByZWVtcHRpb24pIGluc3RlYWQgb2YganVzdCBjaGVja2luZyBgaW5fdGFzaygpYC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgc2xlZXBpbmctaW4tYXRvbWljIGJ1Z3Mgb3IgZGVhZGxvY2tzLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93LCBsb2NraW5nLCBhbmQgY29udGV4dCBjaGVja3MuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3Npbmcgb3Igb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIChlLmcuLCBzY2hlZHVsaW5nIHdoaWxlIGF0b21pYykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgb3IgTE9DS0RFUCwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciBkcm9wcGluZyBmb2xpb3MgYmVoaW5kIGR1cmluZyB3cml0ZWJhY2sgdG8gY29ycmVjdGx5IGRldGVjdCBhdG9taWMgY29udGV4dHMgKHN1Y2ggYXMgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBvciBkaXNhYmxlZCBwcmVlbXB0aW9uKSBpbnN0ZWFkIG9mIGp1c3QgY2hlY2tpbmcgYGluX3Rhc2soKWAuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIHNsZWVwaW5nLWluLWF0b21pYyBidWdzIG9yIGRlYWRsb2Nrcy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdywgbG9ja2luZywgYW5kIGNvbnRleHQgY2hlY2tzLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIG9yIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSAoZS5nLiwgc2NoZWR1bGluZyB3aGlsZSBhdG9taWMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgIG9yIExPQ0tERVAsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8s8sx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 14:42:57 +0000 UTC FinishedAt: 2026-08-20 15:27:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "5425e1a8f93c809cf379b0621c499d12701adfce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PREEMPTION", "PREEMPT_COUNT" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "5425e1a8f93c809cf379b0621c499d12701adfce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PREEMPTION", "PREEMPT_COUNT" ], "series_id": "29222950-31cc-4e5d-883d-39e98fdb07b9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BSRUVNUFRJT04mIzM0OywKICAgICYjMzQ7UFJFRU1QVF9DT1VOVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGRyb3BwaW5nIGZvbGlvcyBiZWhpbmQgZHVyaW5nIHdyaXRlYmFjayB0byBjb3JyZWN0bHkgZGV0ZWN0IGF0b21pYyBjb250ZXh0cyAoc3VjaCBhcyBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIG9yIGRpc2FibGVkIHByZWVtcHRpb24pIGluc3RlYWQgb2YganVzdCBjaGVja2luZyBgaW5fdGFzaygpYC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgc2xlZXBpbmctaW4tYXRvbWljIGJ1Z3Mgb3IgZGVhZGxvY2tzLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93LCBsb2NraW5nLCBhbmQgY29udGV4dCBjaGVja3MuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3Npbmcgb3Igb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIChlLmcuLCBzY2hlZHVsaW5nIHdoaWxlIGF0b21pYykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgb3IgTE9DS0RFUCwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gYG1tL2ZpbGVtYXAuY2AgdG8gY29ycmVjdGx5IGRldGVjdCBhdG9taWMgY29udGV4dHMgZHVyaW5nIHdyaXRlYmFjayBjb21wbGV0aW9uIGZvciBmb2xpb3MgbWFya2VkIGFzIGRyb3BiZWhpbmQgKGUuZy4sIFJXRl9ET05UQ0FDSEUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBhZmZlY3RzIHBhZ2UgaW52YWxpZGF0aW9uIGFuZCBsb2NraW5nLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3Mgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6MjY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyYWQ3YmVhYTFhMjI1N2FmMTBlNmYzZjdiOWEwMWU2NWFkMmQzNDgyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMTU6MjY6MjkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXG5pbmRleCA2YWZlYzYzNjg4MWZiLi4wNjE2MDU3ZTZmOTkxIDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmNcbkBAIC00NSw2ICYjNDM7NDUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21pZ3JhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BpcGVfZnNfaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BsaWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxuQEAgLTE2MjAsNiAmIzQzOzE2MjEsMTUgQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIGZvbGlvX2Ryb3BiZWhpbmRfaW5fYXRvbWljKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVElPTikgXHUwMDI2XHUwMDI2IHJjdV9wcmVlbXB0X2RlcHRoKCkpXG4mIzQzO1x0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfQ09VTlQpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0cmV0dXJuICFwcmVlbXB0aWJsZSgpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogSWYgZm9saW8gd2FzIG1hcmtlZCBhcyBkcm9wYmVoaW5kLCB0aGVuIHBhZ2VzIHNob3VsZCBiZSBkcm9wcGVkIHdoZW4gd3JpdGViYWNrXG4gICogY29tcGxldGVzLiBEbyB0aGF0IG5vdy4gSWYgd2UgZmFpbCwgaXQmIzM5O3MgbGlrZWx5IGJlY2F1c2Ugb2YgYSBiaWcgZm9saW8gLVxuQEAgLTE2MzEsMTMgJiM0MzsxNjQxLDEyIEBAIHZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lypcbi1cdCAqIEhpdHRpbmcgIWluX3Rhc2soKSBzaG91bGQgbm90IGhhcHBlbiBvZmYgUldGX0RPTlRDQUNIRSB3cml0ZWJhY2ssXG4tXHQgKiBidXQgY2FuIGhhcHBlbiBpZiBub3JtYWwgd3JpdGViYWNrIGp1c3QgaGFwcGVucyB0byBmaW5kIGRpcnR5IGZvbGlvc1xuLVx0ICogdGhhdCB3ZXJlIGNyZWF0ZWQgYXMgcGFydCBvZiB1bmNhY2hlZCB3cml0ZWJhY2ssIGFuZCB0aGF0IHdyaXRlYmFja1xuLVx0ICogd291bGQgb3RoZXJ3aXNlIG5vdCBuZWVkIG5vbi1JUlEgaGFuZGxpbmcuIEp1c3Qgc2tpcCB0aGVcbiYjNDM7XHQgKiBIaXR0aW5nIGFuIGF0b21pYyBjb250ZXh0IHNob3VsZCBub3QgaGFwcGVuIGZyb20gUldGX0RPTlRDQUNIRVxuJiM0MztcdCAqIHdyaXRlYmFjaywgYnV0IGNhbiBoYXBwZW4gaWYgbm9ybWFsIHdyaXRlYmFjayBqdXN0IGhhcHBlbnMgdG8gZmluZFxuJiM0MztcdCAqIGRpcnR5IGZvbGlvcyBjcmVhdGVkIGFzIHBhcnQgb2YgdW5jYWNoZWQgd3JpdGViYWNrLiBKdXN0IHNraXAgdGhlXG4gXHQgKiBpbnZhbGlkYXRpb24gaW4gdGhhdCBjYXNlLlxuIFx0ICovXG4tXHRpZiAoaW5fdGFzaygpIFx1MDAyNlx1MDAyNiBmb2xpb190cnlsb2NrKGZvbGlvKSkge1xuJiM0MztcdGlmICghZm9saW9fZHJvcGJlaGluZF9pbl9hdG9taWMoKSBcdTAwMjZcdTAwMjYgZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbiBcdFx0ZmlsZW1hcF9lbmRfZHJvcGJlaGluZChmb2xpbyk7XG4gXHRcdGZvbGlvX3VubG9jayhmb2xpbyk7XG4gXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BSRUVNUFRJT04mIzM0OywKICAgICYjMzQ7UFJFRU1QVF9DT1VOVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBgbW0vZmlsZW1hcC5jYCB0byBjb3JyZWN0bHkgZGV0ZWN0IGF0b21pYyBjb250ZXh0cyBkdXJpbmcgd3JpdGViYWNrIGNvbXBsZXRpb24gZm9yIGZvbGlvcyBtYXJrZWQgYXMgZHJvcGJlaGluZCAoZS5nLiwgUldGX0RPTlRDQUNIRSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSB0aGF0IGFmZmVjdHMgcGFnZSBpbnZhbGlkYXRpb24gYW5kIGxvY2tpbmcsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGRlYWRsb2NrcyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJhZDdiZWFhMWEyMjU3YWYxMGU2ZjNmN2I5YTAxZTY1YWQyZDM0ODIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAxNToyNjoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA2YWZlYzYzNjg4MWZiLi4wNjE2MDU3ZTZmOTkxIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZmlsZW1hcC5jCkBAIC00NSw2ICYjNDM7NDUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L21pZ3JhdGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9waXBlX2ZzX2kuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zcGxpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmN1cGRhdGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZV93YWl0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbW0uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zeXNjdGwuaCZndDsKQEAgLTE2MjAsNiAmIzQzOzE2MjEsMTUgQEAgc3RhdGljIHZvaWQgZmlsZW1hcF9lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQlmb2xpb191bm1hcF9pbnZhbGlkYXRlKG1hcHBpbmcsIGZvbGlvLCAwKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIGZvbGlvX2Ryb3BiZWhpbmRfaW5fYXRvbWljKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVElPTikgJmFtcDsmYW1wOyByY3VfcHJlZW1wdF9kZXB0aCgpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9DT1VOVCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmV0dXJuICFwcmVlbXB0aWJsZSgpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBJZiBmb2xpbyB3YXMgbWFya2VkIGFzIGRyb3BiZWhpbmQsIHRoZW4gcGFnZXMgc2hvdWxkIGJlIGRyb3BwZWQgd2hlbiB3cml0ZWJhY2sKICAqIGNvbXBsZXRlcy4gRG8gdGhhdCBub3cuIElmIHdlIGZhaWwsIGl0JiMzOTtzIGxpa2VseSBiZWNhdXNlIG9mIGEgYmlnIGZvbGlvIC0KQEAgLTE2MzEsMTMgJiM0MzsxNjQxLDEyIEBAIHZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbykKIAkJcmV0dXJuOwogCiAJLyoKLQkgKiBIaXR0aW5nICFpbl90YXNrKCkgc2hvdWxkIG5vdCBoYXBwZW4gb2ZmIFJXRl9ET05UQ0FDSEUgd3JpdGViYWNrLAotCSAqIGJ1dCBjYW4gaGFwcGVuIGlmIG5vcm1hbCB3cml0ZWJhY2sganVzdCBoYXBwZW5zIHRvIGZpbmQgZGlydHkgZm9saW9zCi0JICogdGhhdCB3ZXJlIGNyZWF0ZWQgYXMgcGFydCBvZiB1bmNhY2hlZCB3cml0ZWJhY2ssIGFuZCB0aGF0IHdyaXRlYmFjawotCSAqIHdvdWxkIG90aGVyd2lzZSBub3QgbmVlZCBub24tSVJRIGhhbmRsaW5nLiBKdXN0IHNraXAgdGhlCiYjNDM7CSAqIEhpdHRpbmcgYW4gYXRvbWljIGNvbnRleHQgc2hvdWxkIG5vdCBoYXBwZW4gZnJvbSBSV0ZfRE9OVENBQ0hFCiYjNDM7CSAqIHdyaXRlYmFjaywgYnV0IGNhbiBoYXBwZW4gaWYgbm9ybWFsIHdyaXRlYmFjayBqdXN0IGhhcHBlbnMgdG8gZmluZAomIzQzOwkgKiBkaXJ0eSBmb2xpb3MgY3JlYXRlZCBhcyBwYXJ0IG9mIHVuY2FjaGVkIHdyaXRlYmFjay4gSnVzdCBza2lwIHRoZQogCSAqIGludmFsaWRhdGlvbiBpbiB0aGF0IGNhc2UuCiAJICovCi0JaWYgKGluX3Rhc2soKSAmYW1wOyZhbXA7IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7CiYjNDM7CWlmICghZm9saW9fZHJvcGJlaGluZF9pbl9hdG9taWMoKSAmYW1wOyZhbXA7IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7CiAJCWZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoZm9saW8pOwogCQlmb2xpb191bmxvY2soZm9saW8pOwogCX0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZvbGlvIERyb3BiZWhpbmQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9maWxlbWFwLmNgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLCBidXQgd2UgYWxsIGtub3cgd2hlcmUgZXZlbiBtaW5vciBtb2RpZmljYXRpb25zIGluIHRoZSBmaWxlbWFwIGNvZGUgY2FuIGxlYWQhIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIGFwcGVhcnMgdG8gcmV2b2x2ZSBhcm91bmQgdGhpcyBuZXcgYGZvbGlvX2Ryb3BiZWhpbmRfaW5fYXRvbWljKClgIGZ1bmN0aW9uLiBUaGUgaW50ZW50IGlzIGNsZWFyOiBpdOKAmXMgYmVpbmcgdXNlZCB0byByZWZpbmUgdGhlIGNvbmRpdGlvbnMgZm9yIHNvbWV0aGluZyBoYXBwZW5pbmcgd2l0aGluIGBmb2xpb19lbmRfZHJvcGJlaGluZCgpYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBub3cgc3Vic3RpdHV0ZXMgYCFmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYygpYCBmb3IgYGluX3Rhc2soKWAuCgpSaWdodCwgbGV0JiMzOTtzIHVucGFjayBgZm9saW9fZHJvcGJlaGluZF9pbl9hdG9taWMoKWAuIEl0JiMzOTtzIGNoZWNraW5nIGZvciBzZXZlcmFsIGNvbmRpdGlvbnM6IGBJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUSU9OKSAmYW1wOyZhbXA7IHJjdV9wcmVlbXB0X2RlcHRoKClgLCBgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfQ09VTlQpYCwgYW5kIGAhcHJlZW1wdGlibGUoKWAuIEVzc2VudGlhbGx5LCB0aGUgZnVuY3Rpb24gdHJpZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgYXRvbWljLCBtZWFuaW5nIGl0IGNhbm5vdCBiZSBwcmVlbXB0ZWQgb3IgaW50ZXJydXB0ZWQuIFRoYXTigJlzIHRoZSBrZXkuIFRoaXMgaXMgYSBjcnVjaWFsIGRpc3RpbmN0aW9uIGJlY2F1c2UgYXRvbWljaXR5IGltcGxpZXMgYSBkaWZmZXJlbnQgbGV2ZWwgb2YgbG9ja2luZyBhbmQgcmVzb3VyY2UgYWNjZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgYXRvbWljIGNoZWNrPyYjMzQ7CgpUaGUgaW1wbGljYXRpb25zIGFyZSB3b3J0aCBjb25zaWRlcmluZy4gVGhpcyBjaGFuZ2UgKmRpcmVjdGx5KiBhZmZlY3RzIGBmb2xpb19lbmRfZHJvcGJlaGluZCgpYCwgd2hpY2ggaGFuZGxlcyB3cml0ZWJhY2sgY29tcGxldGlvbiBmb3IgZm9saW9zIGZsYWdnZWQgYXMgZHJvcGJlaGluZC4gVGhpcyB0eXBpY2FsbHkgbWVhbnMgd2hlbiB3cml0ZXMgdGhhdCBhcmUgZmxhZ2dlZCB3aXRoIFJXRl9ET05UQ0FDSEUgZmluaXNoLiBUaGUgcXVlc3Rpb24gYmVjb21lcywgd2h5IHRoaXMgc3BlY2lmaWMgY2hhbmdlIGZvciBkcm9wYmVoaW5kIHNjZW5hcmlvcz8gSXQgd2lsbCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgaXMgYSBnZW5lcmFsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYSBidWcgZml4LCBvciBhIGNoYW5nZSB0byB0aGUgZnVuZGFtZW50YWwgc2VtYW50aWNzIG9mIGhvdyB3ZSB0cmVhdCBjYWNoZWQgZGF0YSBpbiB0aGlzIHNwZWNpZmljIHNjZW5hcmlvLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYG1tL2ZpbGVtYXAuY2AgYW5kIHRyeSB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBkZXRlcm1pbmUgd2hhdCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aGVzZSBhZGRlZCBjaGVja3MgbWlnaHQgYmUuIFRoaXMgY291bGQgYmUgYSBnb29kIGltcHJvdmVtZW50LCBvciBpdCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIHJhY2UgY29uZGl0aW9ucywgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fZW5kX2Ryb3BiZWhpbmQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9maWxlbWFwLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZmlsZW1hcC5jPTE2MjQ9c3RhdGljIGJvb2wgZm9saW9fZHJvcGJlaGluZF9pbl9hdG9taWModm9pZClcbi0tXG5tbS9maWxlbWFwLmMtMTYzNy0gKi9cbm1tL2ZpbGVtYXAuYzoxNjM4OnZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL2ZpbGVtYXAuYy0xNjM5LXtcbi0tXG5tbS9maWxlbWFwLmMtMTY1My19XG5tbS9maWxlbWFwLmM6MTY1NDpFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfZHJvcGJlaGluZCk7XG5tbS9maWxlbWFwLmMtMTY1NS1cbi0tXG5tbS9maWxlbWFwLmM9MTY5Nj12b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9maWxlbWFwLmMtMTcwNy1cdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XG5tbS9maWxlbWFwLmM6MTcwODpcdGZvbGlvX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0xNzA5LVx0Zm9saW9fcHV0KGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNToyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjc2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSG90IFBhdGggYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgY2hhbmdlIGFuZCB0cnlpbmcgdG8gZGVjaWRlIGhvdyBiZXN0IHRvIGFwcHJvYWNoIGl0IGZvciB0ZXN0aW5nLiBJdCBsb29rcyBsaWtlIGBmb2xpb19lbmRfZHJvcGJlaGluZGAgaXMgYmVpbmcgbW9kaWZpZWQsIGFuZCB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGBmb2xpb19lbmRfd3JpdGViYWNrYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmbGFnIOKAkyBgZm9saW9fZW5kX3dyaXRlYmFja2AgaXMgYSBrbm93biBob3QgcGF0aCwgc28gYW55IGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGl0IGlzIGxpa2VseSB0byBiZSBmcmVxdWVudGx5IGV4ZWN1dGVkLiBUaGUgcXVlc3Rpb24gaXMsIGlzIGBmb2xpb19lbmRfZHJvcGJlaGluZGAgKml0c2VsZiogYSBob3QgcGF0aD8gVGhlIGFuc3dlciBhcHBlYXJzIHRvIGJlIHllcywgYmVjYXVzZSBpdCYjMzk7cyBpbnZva2VkIHdpdGggZXZlcnkgY29tcGxldGlvbiBvZiBhIHdyaXRlYmFjay4KClRoZSBwcm9tcHQsIGhvd2V2ZXIsIGFkdmlzZXMgYWdhaW5zdCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIGFzIGZvY3VzIHN5bWJvbHMuIFRoaXMgaXMgdG8gYXZvaWQgc2tld2luZyB0ZXN0IGRpc3RyaWJ1dGlvbnMuIEJ1dCwgZ2l2ZW4gdGhhdCBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgICppcyogY2FsbGVkIG9uIGV2ZXJ5IGBmb2xpb19lbmRfd3JpdGViYWNrYCwgYW5kIGBmb2xpb19lbmRfd3JpdGViYWNrYCBpcyBkZWZpbml0ZWx5IGEgaG90IHBhdGguLi5pdCYjMzk7cyB0cmlja3kuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgIGlzIGV4cG9ydGVkLiBPa2F5LCBpdCYjMzk7cyBgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX2Ryb3BiZWhpbmQpYC4gSG1tLCBsb29raW5nIGF0IHRoZSBwYXRjaCwgSSBhbHNvIHNlZSBgQ09ORklHX1BSRUVNUFRJT05gIGFuZCBgQ09ORklHX1BSRUVNUFRfQ09VTlRgIG1lbnRpb25lZCwgbWF5YmUgSSBzaG91bGQgY29uc2lkZXIgdGhlc2UgaW4gYEVuYWJsZUNvbmZpZ3NgPyBCdXQgYFBSRUVNUFRJT05gIGlzIHByZXR0eSBnZW5lcmljLCBtYXliZSBJIHNob3VsZCByZWNvbnNpZGVyIHRoYXQsIGdpdmVuIHRoZSBwcm9tcHQuCgpVbHRpbWF0ZWx5LCBnaXZlbiB0aGF0IGBmb2xpb19lbmRfZHJvcGJlaGluZGAgaXMgYSBob3QgcGF0aCBiZWNhdXNlIGl0IGlzIGludm9rZWQgaW4gdGhlIGhvdCBwYXRoIG9mIGBmb2xpb19lbmRfd3JpdGViYWNrYCwgaXQgd2FycmFudHMgZnV6emluZy4gU2luY2UgaXQmIzM5O3MgYSBob3QgcGF0aCwgbWF5YmUgSSBzaG91bGRuJiMzOTt0IHNwZWNpZnkgYSBmb2N1cyBzeW1ib2wuIEJ1dCB3YWl0LCBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgIG9ubHkgZG9lcyBzb21ldGhpbmcgaWYgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbylgIGlzIHRydWUuIFRoYXQgZnVuY3Rpb24sIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmRgLCBpcyBzZXQgZm9yIGBSV0ZfRE9OVENBQ0hFYCB3cml0ZXMuCgpPa2F5LCBzbyBpdCYjMzk7cyAqbm90KiBhbHdheXMgZG9pbmcgd29yaywgYnV0IGl0ICppcyogY2FsbGVkIG9uIGV2ZXJ5IHdyaXRlYmFjayBjb21wbGV0aW9uLiBTbywgZXZlbiB0aG91Z2ggbm90IGV2ZXJ5IGNhbGwgKmRvZXMqIHdvcmssIHRoZSBmdW5jdGlvbiAqaXMqIGNhbGxlZC4gVGhpcyBjaGFuZ2Ugc3RpbGwgZmVlbHMgbGlrZSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBhbmQgZ2l2ZW4gaXRzIGZyZXF1ZW5jeSBvZiBpbnZvY2F0aW9uLCBpdCYjMzk7cyBwcm9iYWJseSB3b3J0aCBpdC4gTm93LCBsZXQmIzM5O3MgY2hlY2sgd2hlcmUgYGZvbGlvX3NldF9kcm9wYmVoaW5kYCBpcyBjYWxsZWQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb19zZXRfZHJvcGJlaGluZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9maWxlbWFwLmM9MTk1Nj1zdHJ1Y3QgZm9saW8gKl9fZmlsZW1hcF9nZXRfZm9saW9fbXBvbChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9maWxlbWFwLmMtMjAzNC1cdFx0XHRpZiAoZmdwX2ZsYWdzIFx1MDAyNiBGR1BfRE9OVENBQ0hFKVxubW0vZmlsZW1hcC5jOjIwMzU6XHRcdFx0XHRfX2ZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0yMDM2LVxuLS1cbm1tL2ZpbGVtYXAuYz0yNjI4PXN0YXRpYyBpbnQgZmlsZW1hcF9jcmVhdGVfZm9saW8oc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZiYXRjaClcbi0tXG5tbS9maWxlbWFwLmMtMjY0Mi1cdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0RPTlRDQUNIRSlcbm1tL2ZpbGVtYXAuYzoyNjQzOlx0XHRfX2ZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTtcbm1tL2ZpbGVtYXAuYy0yNjQ0LVxuLS1cbm1tL3JlYWRhaGVhZC5jPTE5NT1zdGF0aWMgc3RydWN0IGZvbGlvICpyYWN0bF9hbGxvY19mb2xpbyhzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxuLS1cbm1tL3JlYWRhaGVhZC5jLTIwMS1cdGlmIChmb2xpbyBcdTAwMjZcdTAwMjYgcmFjdGwtXHUwMDNlZHJvcGJlaGluZClcbm1tL3JlYWRhaGVhZC5jOjIwMjpcdFx0X19mb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XG5tbS9yZWFkYWhlYWQuYy0yMDMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYyMAoJCQkJCQkJb3V0cHV0OiAxMTkKCQkJCQkJCXRob3VnaHRzOiA1NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIHJlcHJlc2VudCB0aGlzIHBhdGNoIGZvciBmdXp6aW5nLiBUaGUga2V5IGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkIGhlcmUgaXMgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBsaXN0IGBmb2xpb19lbmRfZHJvcGJlaGluZGAgYXMgYSBgRm9jdXNTeW1ib2xgIGJlY2F1c2UgaXQmIzM5O3MgdGhlIGV4YWN0IGZ1bmN0aW9uIGJlaW5nIGZpeGVkLCBhbmQgaXQmIzM5O3MgYW4gZXhwb3J0ZWQgQVBJLiBIb3dldmVyLCB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBldmVyeSB3cml0ZWJhY2sgY29tcGxldGlvbiwgbWFraW5nIGl0IGEgZGVmaW5pdGUgaG90IHBhdGgsIHdoaWNoLCBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucywgSSBzaG91bGQgYXZvaWQuCgpJJiMzOTttIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IGxlYXZpbmcgYEZvY3VzU3ltYm9sc2AgZW1wdHksIGp1c3QgdG8gYmUgb24gdGhlIHNhZmUgc2lkZSwgYXZvaWRpbmcgYW55IHBvdGVudGlhbCBza2V3IGluIHRoZSB0ZXN0IGRpc3RyaWJ1dGlvbnMuIEJ1dCwgaXQgaXMgdmVyeSBzcGVjaWZpYyB0byB0aGUgZHJvcGJlaGluZCBmZWF0dXJlLi4uIEhtbS4gVWx0aW1hdGVseSwgZ2l2ZW4gaXQmIzM5O3Mgb24gYSBob3QgcGF0aCwgYW5kIGZvbGxvd2luZyB0aGUgZ3VpZGFuY2UsIEkmIzM5O2xsIGdvIHdpdGggYW4gZW1wdHkgYEZvY3VzU3ltYm9sc2AgbGlzdCB0byBhdm9pZCBza2V3LgoKTmV4dCwgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBgRW5hYmxlQ29uZmlnc2AuIFRoZSBwYXRjaCB1c2VzIGBDT05GSUdfUFJFRU1QVElPTmAgYW5kIGBDT05GSUdfUFJFRU1QVF9DT1VOVGAuIEEgcXVpY2sgcmV2aWV3IGNvbmZpcm1zIHRoZXkmIzM5O3JlIHZhbGlkIGFuZCByZWxldmFudCBjb25maWdzLiBJJiMzOTtsbCBkZWZpbml0ZWx5IGxpc3QgdGhvc2UuCgpGaW5hbGx5LCBqdXN0IGEgcXVpY2sgcmV2aWV3IG9mIHRoZSBwYXRjaCYjMzk7cyBsb2dpYzogSXQgYXBwZWFycyB0byBiZSBhIGZpeCB0byBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgLCB3aGljaCBvcmlnaW5hbGx5IHVzZWQgYGluX3Rhc2soKWAgYnV0IGNvdWxkIGJlIGNhbGxlZCBmcm9tIGF0b21pYyBjb250ZXh0IGR1cmluZyB3cml0ZWJhY2suIFRoZSBmaXggcmVwbGFjZXMgYGluX3Rhc2soKWAgd2l0aCBgIWZvbGlvX2Ryb3BiZWhpbmRfaW5fYXRvbWljKClgLiBUaGF0IGhlbHBzIGNvbmZpcm0gdGhlIGZvY3VzIGlzIGNsZWFybHkgb24gcHJldmVudGluZyB0aGUgYGRyb3BiZWhpbmRgIGZ1bmN0aW9uYWxpdHkgZmFpbGluZyBpbiBhbiBhdG9taWMgY29udGV4dC4KClNvLCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bGwgcmV0dXJuOgoKKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgCiogICBgRm9jdXNTeW1ib2xzOiBbXWAKKiAgIGBFbmFibGVDb25maWdzOiBbJiMzNDtDT05GSUdfUFJFRU1QVElPTiYjMzQ7LCAmIzM0O0NPTkZJR19QUkVFTVBUX0NPVU5UJiMzNDtdYAoqICAgSSB3aWxsIHVzZSBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUkVFTVBUSU9OJiMzNDssCiAgICAmIzM0O1BSRUVNUFRfQ09VTlQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gYG1tL2ZpbGVtYXAuY2AgdG8gY29ycmVjdGx5IGRldGVjdCBhdG9taWMgY29udGV4dHMgZHVyaW5nIHdyaXRlYmFjayBjb21wbGV0aW9uIGZvciBmb2xpb3MgbWFya2VkIGFzIGRyb3BiZWhpbmQgKGUuZy4sIFJXRl9ET05UQ0FDSEUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBhZmZlY3RzIHBhZ2UgaW52YWxpZGF0aW9uIGFuZCBsb2NraW5nLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3Mgb2NjdXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BSRUVNUFRJT04mIzM0OywKICAgICYjMzQ7UFJFRU1QVF9DT1VOVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBgbW0vZmlsZW1hcC5jYCB0byBjb3JyZWN0bHkgZGV0ZWN0IGF0b21pYyBjb250ZXh0cyBkdXJpbmcgd3JpdGViYWNrIGNvbXBsZXRpb24gZm9yIGZvbGlvcyBtYXJrZWQgYXMgZHJvcGJlaGluZCAoZS5nLiwgUldGX0RPTlRDQUNIRSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSB0aGF0IGFmZmVjdHMgcGFnZSBpbnZhbGlkYXRpb24gYW5kIGxvY2tpbmcsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGRlYWRsb2NrcyBvY2N1ci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNToyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDE1OjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGRyb3BwaW5nIGZvbGlvcyBiZWhpbmQgZHVyaW5nIHdyaXRlYmFjayB0byBjb3JyZWN0bHkgZGV0ZWN0IGF0b21pYyBjb250ZXh0cyAoc3VjaCBhcyBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIG9yIGRpc2FibGVkIHByZWVtcHRpb24pIGluc3RlYWQgb2YganVzdCBjaGVja2luZyBgaW5fdGFzaygpYC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgc2xlZXBpbmctaW4tYXRvbWljIGJ1Z3Mgb3IgZGVhZGxvY2tzLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93LCBsb2NraW5nLCBhbmQgY29udGV4dCBjaGVja3MuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3Npbmcgb3Igb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIChlLmcuLCBzY2hlZHVsaW5nIHdoaWxlIGF0b21pYykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgb3IgTE9DS0RFUCwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMmFkN2JlYWExYTIyNTdhZjEwZTZmM2Y3YjlhMDFlNjVhZDJkMzQ4MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDIwIDE1OjI2OjI5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IDZhZmVjNjM2ODgxZmIuLjA2MTYwNTdlNmY5OTEgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmMKQEAgLTQ1LDYgJiM0Mzs0NSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbWlncmF0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BpcGVfZnNfaS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NwbGljZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9yY3VwZGF0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlX3dhaXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9tbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N5c2N0bC5oJmd0OwpAQCAtMTYyMCw2ICYjNDM7MTYyMSwxNSBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJCWZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApOwogfQogCiYjNDM7c3RhdGljIGJvb2wgZm9saW9fZHJvcGJlaGluZF9pbl9hdG9taWModm9pZCkKJiM0Mzt7CiYjNDM7CWlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUSU9OKSAmYW1wOyZhbXA7IHJjdV9wcmVlbXB0X2RlcHRoKCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJaWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX0NPVU5UKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlyZXR1cm4gIXByZWVtcHRpYmxlKCk7CiYjNDM7fQomIzQzOwogLyoKICAqIElmIGZvbGlvIHdhcyBtYXJrZWQgYXMgZHJvcGJlaGluZCwgdGhlbiBwYWdlcyBzaG91bGQgYmUgZHJvcHBlZCB3aGVuIHdyaXRlYmFjawogICogY29tcGxldGVzLiBEbyB0aGF0IG5vdy4gSWYgd2UgZmFpbCwgaXQmIzM5O3MgbGlrZWx5IGJlY2F1c2Ugb2YgYSBiaWcgZm9saW8gLQpAQCAtMTYzMSwxMyAmIzQzOzE2NDEsMTIgQEAgdm9pZCBmb2xpb19lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQlyZXR1cm47CiAKIAkvKgotCSAqIEhpdHRpbmcgIWluX3Rhc2soKSBzaG91bGQgbm90IGhhcHBlbiBvZmYgUldGX0RPTlRDQUNIRSB3cml0ZWJhY2ssCi0JICogYnV0IGNhbiBoYXBwZW4gaWYgbm9ybWFsIHdyaXRlYmFjayBqdXN0IGhhcHBlbnMgdG8gZmluZCBkaXJ0eSBmb2xpb3MKLQkgKiB0aGF0IHdlcmUgY3JlYXRlZCBhcyBwYXJ0IG9mIHVuY2FjaGVkIHdyaXRlYmFjaywgYW5kIHRoYXQgd3JpdGViYWNrCi0JICogd291bGQgb3RoZXJ3aXNlIG5vdCBuZWVkIG5vbi1JUlEgaGFuZGxpbmcuIEp1c3Qgc2tpcCB0aGUKJiM0MzsJICogSGl0dGluZyBhbiBhdG9taWMgY29udGV4dCBzaG91bGQgbm90IGhhcHBlbiBmcm9tIFJXRl9ET05UQ0FDSEUKJiM0MzsJICogd3JpdGViYWNrLCBidXQgY2FuIGhhcHBlbiBpZiBub3JtYWwgd3JpdGViYWNrIGp1c3QgaGFwcGVucyB0byBmaW5kCiYjNDM7CSAqIGRpcnR5IGZvbGlvcyBjcmVhdGVkIGFzIHBhcnQgb2YgdW5jYWNoZWQgd3JpdGViYWNrLiBKdXN0IHNraXAgdGhlCiAJICogaW52YWxpZGF0aW9uIGluIHRoYXQgY2FzZS4KIAkgKi8KLQlpZiAoaW5fdGFzaygpICZhbXA7JmFtcDsgZm9saW9fdHJ5bG9jayhmb2xpbykpIHsKJiM0MzsJaWYgKCFmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYygpICZhbXA7JmFtcDsgZm9saW9fdHJ5bG9jayhmb2xpbykpIHsKIAkJZmlsZW1hcF9lbmRfZHJvcGJlaGluZChmb2xpbyk7CiAJCWZvbGlvX3VubG9jayhmb2xpbyk7CiAJfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMTU6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM3OQoJCQkJCQkJb3V0cHV0OiAxNzUKCQkJCQkJCXRob3VnaHRzOiA1OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggQW5hbHlzaXM6IEF0b21pYyBDb250ZXh0IEZpeCBpbiBgbW0vZmlsZW1hcC5jYCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGZpeCByZWxhdGVkIHRvIGF0b21pYyBjb250ZXh0IGlzc3VlcyB3aXRoaW4gYG1tL2ZpbGVtYXAuY2AuIEl0JiMzOTtzIHByZXR0eSBjbGVhcjogdGhlIGNvcmUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBhIHN1YnRsZSBidXQgY3JpdGljYWwgY29ycmVjdGlvbiBpbiBob3cgYGZvbGlvX2VuZF9kcm9wYmVoaW5kKClgIGhhbmRsZXMgZm9saW8gbG9ja2luZy4gUHJldmlvdXNseSwgaXQgdXNlZCBgaW5fdGFzaygpYCB0byBkZXRlcm1pbmUgY29udGV4dCwgYnV0IHRoYXQmIzM5O3Mgbm90IHJvYnVzdCBlbm91Z2guIEEgdGFzayBjb3VsZCBzdGlsbCBiZSBpbiBhbiBhdG9taWMgY29udGV4dCAocHJlZW1wdGlvbiBkaXNhYmxlZCwgUkNVIHJlYWQgbG9jayBoZWxkLCBldGMuKSBhbmQgY2FsbCBmb2xpbyBmdW5jdGlvbnMuCgpUaGUga2V5IGhlcmUgaXMgdGhlIGFkZGl0aW9uIG9mIGBmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYygpYC4gVGhpcyBmdW5jdGlvbiBhY2N1cmF0ZWx5IGRldGVjdHMgaWYgd2UmIzM5O3JlIGluIGFuIGF0b21pYyBjb250ZXh0IGJ5IGNoZWNraW5nIGZvciBwcmVlbXB0aW9uIGRpc2FibGVtZW50LCBSQ1UgcmVhZCBkZXB0aCwgYW5kIHdoZXRoZXIgd2UmIzM5O3JlIHByZWVtcHRpYmxlLiBUaGlzIGlzIGltcG9ydGFudCB0byBkZXRlcm1pbmUgd2hldGhlciBgZm9saW9fdHJ5bG9ja2AgbWlnaHQgc2xlZXAuIFdoaWxlIGBmb2xpb190cnlsb2NrYCBpdHNlbGYgZG9lc24mIzM5O3Qgc2xlZXAsIGZ1bmN0aW9ucyBmdXJ0aGVyIGRvd24gdGhlIGNhbGwgc3RhY2ssIHN1Y2ggYXMgYGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmRgLCAqY291bGQqIHNsZWVwLCB3aGljaCBpcyB3aGF0IHdlIHdhbnQgdG8gYXZvaWQuIFRoaXMgaXMgYSBjbGFzc2ljIHNjaGVkdWxpbmctd2hpbGUtYXRvbWljIGtpbmQgb2YgaXNzdWUuIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYCBjYWxscyBgZm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7YCB3aGljaCBjb3VsZCBjYXVzZSBhIHNsZWVwLgoKVGhlIHBhdGNoJiMzOTtzIGxvZ2ljIGlzIGFsbCBhYm91dCBjb250cm9sIGZsb3cg4oCTIGVuc3VyaW5nIHRoYXQgdGhlIGNvZGUgZG9lc24mIzM5O3QgYXR0ZW1wdCB0byBhY3F1aXJlIGEgbG9jayBvciBwZXJmb3JtIG9wZXJhdGlvbnMgdGhhdCBtaWdodCBzbGVlcCB3aGVuIGl0JiMzOTtzIG5vdCBzYWZlIHRvIGRvIHNvLiBDcml0aWNhbGx5LCB0aGVyZSYjMzk7cyBubyBpbnRyb2R1Y3Rpb24gb2YgbmV3IGRhdGEgc3RydWN0dXJlcywgbm8gZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBhbmQgbm8gcmlzayBvZiByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgb25seSBjaGFuZ2UgaXMgaW4gdGhlIGNvbmRpdGlvbnMgdGhhdCBhcmUgY2hlY2tlZC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGNvZGUgc25pcHBldDoKYGBgYwomIzQzO3N0YXRpYyBib29sIGZvbGlvX2Ryb3BiZWhpbmRfaW5fYXRvbWljKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVElPTikgJmFtcDsmYW1wOyByY3VfcHJlZW1wdF9kZXB0aCgpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CWlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9DT1VOVCkpCiYjNDM7CQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmV0dXJuICFwcmVlbXB0aWJsZSgpOwomIzQzO30KYGBgCmFuZApgYGBjCi0JaWYgKGluX3Rhc2soKSAmYW1wOyZhbXA7IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7CiYjNDM7CWlmICghZm9saW9fZHJvcGJlaGluZF9pbl9hdG9taWMoKSAmYW1wOyZhbXA7IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7CmBgYAoKSXQmIzM5O3MgcHVyZWx5IGFib3V0IHByb3RlY3RpbmcgdGhlIGNvZGUgZnJvbSBzbGVlcGluZyBpbiBhdG9taWMgY29udGV4dC4KCktBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd2lsbCBiZSBvdXIgZnJpZW5kIGhlcmUuIFRoZXkmIzM5O2xsIGNhdGNoIGFueSBzY2hlZHVsaW5nLXdoaWxlLWF0b21pYyBvciBsb2NrLXJlbGF0ZWQgaXNzdWVzLiBLTVNBTiBkb2VzbiYjMzk7dCBhcHBseSBoZXJlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggaXMgcHVyZWx5IGNvbnRyb2wtZmxvdyByZWxhdGVkOyB0aGVyZSYjMzk7cyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKU28sIEkmIzM5O20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMuIFRoaXMgaXMgYSBjbGVhbiwgdGFyZ2V0ZWQgZml4IHRoYXQgYWRkcmVzc2VzIGEga25vd24gcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIHJlbGF0ZWQgdG8gYXRvbWljaXR5IGFuZCBzbGVlcGluZyBpbiB0aGUgZmlsZW1hcCBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAxNToyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciBkcm9wcGluZyBmb2xpb3MgYmVoaW5kIGR1cmluZyB3cml0ZWJhY2sgdG8gY29ycmVjdGx5IGRldGVjdCBhdG9taWMgY29udGV4dHMgKHN1Y2ggYXMgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBvciBkaXNhYmxlZCBwcmVlbXB0aW9uKSBpbnN0ZWFkIG9mIGp1c3QgY2hlY2tpbmcgYGluX3Rhc2soKWAuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIHNsZWVwaW5nLWluLWF0b21pYyBidWdzIG9yIGRlYWRsb2Nrcy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdywgbG9ja2luZywgYW5kIGNvbnRleHQgY2hlY2tzLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIG9yIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSAoZS5nLiwgc2NoZWR1bGluZyB3aGlsZSBhdG9taWMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgIG9yIExPQ0tERVAsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciBkcm9wcGluZyBmb2xpb3MgYmVoaW5kIGR1cmluZyB3cml0ZWJhY2sgdG8gY29ycmVjdGx5IGRldGVjdCBhdG9taWMgY29udGV4dHMgKHN1Y2ggYXMgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBvciBkaXNhYmxlZCBwcmVlbXB0aW9uKSBpbnN0ZWFkIG9mIGp1c3QgY2hlY2tpbmcgYGluX3Rhc2soKWAuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIHNsZWVwaW5nLWluLWF0b21pYyBidWdzIG9yIGRlYWRsb2Nrcy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdywgbG9ja2luZywgYW5kIGNvbnRleHQgY2hlY2tzLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIG9yIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSAoZS5nLiwgc2NoZWR1bGluZyB3aGlsZSBhdG9taWMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgIG9yIExPQ0tERVAsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjI2OjMxLjE3NTYwMTE4N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY1NjA0NTIzMjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBSRUVNUFRJT05cIixcbiAgICBcIlBSRUVNUFRfQ09VTlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciBkcm9wcGluZyBmb2xpb3MgYmVoaW5kIGR1cmluZyB3cml0ZWJhY2sgdG8gY29ycmVjdGx5IGRldGVjdCBhdG9taWMgY29udGV4dHMgKHN1Y2ggYXMgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBvciBkaXNhYmxlZCBwcmVlbXB0aW9uKSBpbnN0ZWFkIG9mIGp1c3QgY2hlY2tpbmcgYGluX3Rhc2soKWAuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIHNsZWVwaW5nLWluLWF0b21pYyBidWdzIG9yIGRlYWRsb2Nrcy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdywgbG9ja2luZywgYW5kIGNvbnRleHQgY2hlY2tzLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIG9yIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSAoZS5nLiwgc2NoZWR1bGluZyB3aGlsZSBhdG9taWMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgIG9yIExPQ0tERVAsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gYG1tL2ZpbGVtYXAuY2AgdG8gY29ycmVjdGx5IGRldGVjdCBhdG9taWMgY29udGV4dHMgZHVyaW5nIHdyaXRlYmFjayBjb21wbGV0aW9uIGZvciBmb2xpb3MgbWFya2VkIGFzIGRyb3BiZWhpbmQgKGUuZy4sIFJXRl9ET05UQ0FDSEUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBhZmZlY3RzIHBhZ2UgaW52YWxpZGF0aW9uIGFuZCBsb2NraW5nLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3Mgb2NjdXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjI2OjMxLjE3NTYxNTU4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ3MzA5MzgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJhZDdiZWFhMWEyMjU3YWYxMGU2ZjNmN2I5YTAxZTY1YWQyZDM0ODJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjAgMTU6MjY6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXFxuaW5kZXggNmFmZWM2MzY4ODFmYi4uMDYxNjA1N2U2Zjk5MSAxMDA2NDRcXG4tLS0gYS9tbS9maWxlbWFwLmNcXG4rKysgYi9tbS9maWxlbWFwLmNcXG5AQCAtNDUsNiArNDUsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlncmF0ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGlwZV9mc19pLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zcGxpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9yY3VwZGF0ZV93YWl0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9tbS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY3RsLmhcXHUwMDNlXFxuQEAgLTE2MjAsNiArMTYyMSwxNSBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdFxcdGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYyh2b2lkKVxcbit7XFxuK1xcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUSU9OKSBcXHUwMDI2XFx1MDAyNiByY3VfcHJlZW1wdF9kZXB0aCgpKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX0NPVU5UKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdHJldHVybiAhcHJlZW1wdGlibGUoKTtcXG4rfVxcbitcXG4gLypcXG4gICogSWYgZm9saW8gd2FzIG1hcmtlZCBhcyBkcm9wYmVoaW5kLCB0aGVuIHBhZ2VzIHNob3VsZCBiZSBkcm9wcGVkIHdoZW4gd3JpdGViYWNrXFxuICAqIGNvbXBsZXRlcy4gRG8gdGhhdCBub3cuIElmIHdlIGZhaWwsIGl0J3MgbGlrZWx5IGJlY2F1c2Ugb2YgYSBiaWcgZm9saW8gLVxcbkBAIC0xNjMxLDEzICsxNjQxLDEyIEBAIHZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogSGl0dGluZyAhaW5fdGFzaygpIHNob3VsZCBub3QgaGFwcGVuIG9mZiBSV0ZfRE9OVENBQ0hFIHdyaXRlYmFjayxcXG4tXFx0ICogYnV0IGNhbiBoYXBwZW4gaWYgbm9ybWFsIHdyaXRlYmFjayBqdXN0IGhhcHBlbnMgdG8gZmluZCBkaXJ0eSBmb2xpb3NcXG4tXFx0ICogdGhhdCB3ZXJlIGNyZWF0ZWQgYXMgcGFydCBvZiB1bmNhY2hlZCB3cml0ZWJhY2ssIGFuZCB0aGF0IHdyaXRlYmFja1xcbi1cXHQgKiB3b3VsZCBvdGhlcndpc2Ugbm90IG5lZWQgbm9uLUlSUSBoYW5kbGluZy4gSnVzdCBza2lwIHRoZVxcbitcXHQgKiBIaXR0aW5nIGFuIGF0b21pYyBjb250ZXh0IHNob3VsZCBub3QgaGFwcGVuIGZyb20gUldGX0RPTlRDQUNIRVxcbitcXHQgKiB3cml0ZWJhY2ssIGJ1dCBjYW4gaGFwcGVuIGlmIG5vcm1hbCB3cml0ZWJhY2sganVzdCBoYXBwZW5zIHRvIGZpbmRcXG4rXFx0ICogZGlydHkgZm9saW9zIGNyZWF0ZWQgYXMgcGFydCBvZiB1bmNhY2hlZCB3cml0ZWJhY2suIEp1c3Qgc2tpcCB0aGVcXG4gXFx0ICogaW52YWxpZGF0aW9uIGluIHRoYXQgY2FzZS5cXG4gXFx0ICovXFxuLVxcdGlmIChpbl90YXNrKCkgXFx1MDAyNlxcdTAwMjYgZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcXG4rXFx0aWYgKCFmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYygpIFxcdTAwMjZcXHUwMDI2IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XFxuIFxcdFxcdGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xcbiBcXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbiBcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjI2OjMyLjY0OTk1MDg1MVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjUyMTc2MjEyMDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBSRUVNUFRJT05cIixcbiAgICBcIlBSRUVNUFRfQ09VTlRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgaW4gYG1tL2ZpbGVtYXAuY2AgdG8gY29ycmVjdGx5IGRldGVjdCBhdG9taWMgY29udGV4dHMgZHVyaW5nIHdyaXRlYmFjayBjb21wbGV0aW9uIGZvciBmb2xpb3MgbWFya2VkIGFzIGRyb3BiZWhpbmQgKGUuZy4sIFJXRl9ET05UQ0FDSEUpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUgdGhhdCBhZmZlY3RzIHBhZ2UgaW52YWxpZGF0aW9uIGFuZCBsb2NraW5nLCB3aGljaCBpcyB3b3J0aCBmdXp6aW5nIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBvciBkZWFkbG9ja3Mgb2NjdXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJhZDdiZWFhMWEyMjU3YWYxMGU2ZjNmN2I5YTAxZTY1YWQyZDM0ODJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAxNToyNjoyOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggNmFmZWM2MzY4ODFmYi4uMDYxNjA1N2U2Zjk5MSAxMDA2NDRcbi0tLSBhL21tL2ZpbGVtYXAuY1xuKysrIGIvbW0vZmlsZW1hcC5jXG5AQCAtNDUsNiArNDUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21pZ3JhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BpcGVfZnNfaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BsaWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGVfd2FpdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2N0bC5oXHUwMDNlXG5AQCAtMTYyMCw2ICsxNjIxLDE1IEBAIHN0YXRpYyB2b2lkIGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0Zm9saW9fdW5tYXBfaW52YWxpZGF0ZShtYXBwaW5nLCBmb2xpbywgMCk7XG4gfVxuIFxuK3N0YXRpYyBib29sIGZvbGlvX2Ryb3BiZWhpbmRfaW5fYXRvbWljKHZvaWQpXG4re1xuK1x0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRJT04pIFx1MDAyNlx1MDAyNiByY3VfcHJlZW1wdF9kZXB0aCgpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdGlmICghSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVF9DT1VOVCkpXG4rXHRcdHJldHVybiB0cnVlO1xuK1x0cmV0dXJuICFwcmVlbXB0aWJsZSgpO1xuK31cbitcbiAvKlxuICAqIElmIGZvbGlvIHdhcyBtYXJrZWQgYXMgZHJvcGJlaGluZCwgdGhlbiBwYWdlcyBzaG91bGQgYmUgZHJvcHBlZCB3aGVuIHdyaXRlYmFja1xuICAqIGNvbXBsZXRlcy4gRG8gdGhhdCBub3cuIElmIHdlIGZhaWwsIGl0J3MgbGlrZWx5IGJlY2F1c2Ugb2YgYSBiaWcgZm9saW8gLVxuQEAgLTE2MzEsMTMgKzE2NDEsMTIgQEAgdm9pZCBmb2xpb19lbmRfZHJvcGJlaGluZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRyZXR1cm47XG4gXG4gXHQvKlxuLVx0ICogSGl0dGluZyAhaW5fdGFzaygpIHNob3VsZCBub3QgaGFwcGVuIG9mZiBSV0ZfRE9OVENBQ0hFIHdyaXRlYmFjayxcbi1cdCAqIGJ1dCBjYW4gaGFwcGVuIGlmIG5vcm1hbCB3cml0ZWJhY2sganVzdCBoYXBwZW5zIHRvIGZpbmQgZGlydHkgZm9saW9zXG4tXHQgKiB0aGF0IHdlcmUgY3JlYXRlZCBhcyBwYXJ0IG9mIHVuY2FjaGVkIHdyaXRlYmFjaywgYW5kIHRoYXQgd3JpdGViYWNrXG4tXHQgKiB3b3VsZCBvdGhlcndpc2Ugbm90IG5lZWQgbm9uLUlSUSBoYW5kbGluZy4gSnVzdCBza2lwIHRoZVxuK1x0ICogSGl0dGluZyBhbiBhdG9taWMgY29udGV4dCBzaG91bGQgbm90IGhhcHBlbiBmcm9tIFJXRl9ET05UQ0FDSEVcbitcdCAqIHdyaXRlYmFjaywgYnV0IGNhbiBoYXBwZW4gaWYgbm9ybWFsIHdyaXRlYmFjayBqdXN0IGhhcHBlbnMgdG8gZmluZFxuK1x0ICogZGlydHkgZm9saW9zIGNyZWF0ZWQgYXMgcGFydCBvZiB1bmNhY2hlZCB3cml0ZWJhY2suIEp1c3Qgc2tpcCB0aGVcbiBcdCAqIGludmFsaWRhdGlvbiBpbiB0aGF0IGNhc2UuXG4gXHQgKi9cbi1cdGlmIChpbl90YXNrKCkgXHUwMDI2XHUwMDI2IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG4rXHRpZiAoIWZvbGlvX2Ryb3BiZWhpbmRfaW5fYXRvbWljKCkgXHUwMDI2XHUwMDI2IGZvbGlvX3RyeWxvY2soZm9saW8pKSB7XG4gXHRcdGZpbGVtYXBfZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0fVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6MjY6MzIuNjQ5OTUzMTQxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTU1ODcwMzMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZvbGlvIERyb3BiZWhpbmQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgbW0vZmlsZW1hcC5jYC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkIGVub3VnaCwgYnV0IHdlIGFsbCBrbm93IHdoZXJlIGV2ZW4gbWlub3IgbW9kaWZpY2F0aW9ucyBpbiB0aGUgZmlsZW1hcCBjb2RlIGNhbiBsZWFkISBUaGUgY29yZSBvZiB0aGlzIGNoYW5nZSBhcHBlYXJzIHRvIHJldm9sdmUgYXJvdW5kIHRoaXMgbmV3IGBmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYygpYCBmdW5jdGlvbi4gVGhlIGludGVudCBpcyBjbGVhcjogaXTigJlzIGJlaW5nIHVzZWQgdG8gcmVmaW5lIHRoZSBjb25kaXRpb25zIGZvciBzb21ldGhpbmcgaGFwcGVuaW5nIHdpdGhpbiBgZm9saW9fZW5kX2Ryb3BiZWhpbmQoKWAuIFNwZWNpZmljYWxseSwgdGhlIGNvZGUgbm93IHN1YnN0aXR1dGVzIGAhZm9saW9fZHJvcGJlaGluZF9pbl9hdG9taWMoKWAgZm9yIGBpbl90YXNrKClgLlxuXG5SaWdodCwgbGV0J3MgdW5wYWNrIGBmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYygpYC4gSXQncyBjaGVja2luZyBmb3Igc2V2ZXJhbCBjb25kaXRpb25zOiBgSVNfRU5BQkxFRChDT05GSUdfUFJFRU1QVElPTikgXHUwMDI2XHUwMDI2IHJjdV9wcmVlbXB0X2RlcHRoKClgLCBgIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfQ09VTlQpYCwgYW5kIGAhcHJlZW1wdGlibGUoKWAuIEVzc2VudGlhbGx5LCB0aGUgZnVuY3Rpb24gdHJpZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjYWxsaW5nIGNvbnRleHQgaXMgYXRvbWljLCBtZWFuaW5nIGl0IGNhbm5vdCBiZSBwcmVlbXB0ZWQgb3IgaW50ZXJydXB0ZWQuIFRoYXTigJlzIHRoZSBrZXkuIFRoaXMgaXMgYSBjcnVjaWFsIGRpc3RpbmN0aW9uIGJlY2F1c2UgYXRvbWljaXR5IGltcGxpZXMgYSBkaWZmZXJlbnQgbGV2ZWwgb2YgbG9ja2luZyBhbmQgcmVzb3VyY2UgYWNjZXNzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBhdG9taWMgY2hlY2s/XCJcblxuVGhlIGltcGxpY2F0aW9ucyBhcmUgd29ydGggY29uc2lkZXJpbmcuIFRoaXMgY2hhbmdlICpkaXJlY3RseSogYWZmZWN0cyBgZm9saW9fZW5kX2Ryb3BiZWhpbmQoKWAsIHdoaWNoIGhhbmRsZXMgd3JpdGViYWNrIGNvbXBsZXRpb24gZm9yIGZvbGlvcyBmbGFnZ2VkIGFzIGRyb3BiZWhpbmQuIFRoaXMgdHlwaWNhbGx5IG1lYW5zIHdoZW4gd3JpdGVzIHRoYXQgYXJlIGZsYWdnZWQgd2l0aCBSV0ZfRE9OVENBQ0hFIGZpbmlzaC4gVGhlIHF1ZXN0aW9uIGJlY29tZXMsIHdoeSB0aGlzIHNwZWNpZmljIGNoYW5nZSBmb3IgZHJvcGJlaGluZCBzY2VuYXJpb3M/IEl0IHdpbGwgYmUgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgZ2VuZXJhbCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIGEgYnVnIGZpeCwgb3IgYSBjaGFuZ2UgdG8gdGhlIGZ1bmRhbWVudGFsIHNlbWFudGljcyBvZiBob3cgd2UgdHJlYXQgY2FjaGVkIGRhdGEgaW4gdGhpcyBzcGVjaWZpYyBzY2VuYXJpby4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS9maWxlbWFwLmNgIGFuZCB0cnkgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgdGhlc2UgYWRkZWQgY2hlY2tzIG1pZ2h0IGJlLiBUaGlzIGNvdWxkIGJlIGEgZ29vZCBpbXByb3ZlbWVudCwgb3IgaXQgY291bGQgaW50cm9kdWNlIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dC4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNToyNjozOC4yMDg2NTkyOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU3NzAzODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZm9saW9fZW5kX2Ryb3BiZWhpbmRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZmlsZW1hcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZpbGVtYXAuYz0xNjI0PXN0YXRpYyBib29sIGZvbGlvX2Ryb3BiZWhpbmRfaW5fYXRvbWljKHZvaWQpXFxuLS1cXG5tbS9maWxlbWFwLmMtMTYzNy0gKi9cXG5tbS9maWxlbWFwLmM6MTYzODp2b2lkIGZvbGlvX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vZmlsZW1hcC5jLTE2Mzkte1xcbi0tXFxubW0vZmlsZW1hcC5jLTE2NTMtfVxcbm1tL2ZpbGVtYXAuYzoxNjU0OkVYUE9SVF9TWU1CT0xfR1BMKGZvbGlvX2VuZF9kcm9wYmVoaW5kKTtcXG5tbS9maWxlbWFwLmMtMTY1NS1cXG4tLVxcbm1tL2ZpbGVtYXAuYz0xNjk2PXZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZmlsZW1hcC5jLTE3MDctXFx0Zm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKGZvbGlvKTtcXG5tbS9maWxlbWFwLmM6MTcwODpcXHRmb2xpb19lbmRfZHJvcGJlaGluZChmb2xpbyk7XFxubW0vZmlsZW1hcC5jLTE3MDktXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMTU6MjY6MzguMzI0NDM2MDM0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3NzkyNjc3ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIb3QgUGF0aCBhbmQgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgY2hhbmdlIGFuZCB0cnlpbmcgdG8gZGVjaWRlIGhvdyBiZXN0IHRvIGFwcHJvYWNoIGl0IGZvciB0ZXN0aW5nLiBJdCBsb29rcyBsaWtlIGBmb2xpb19lbmRfZHJvcGJlaGluZGAgaXMgYmVpbmcgbW9kaWZpZWQsIGFuZCB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGBmb2xpb19lbmRfd3JpdGViYWNrYC4gUmlnaHQgYXdheSwgdGhhdCByYWlzZXMgYSBmbGFnIOKAkyBgZm9saW9fZW5kX3dyaXRlYmFja2AgaXMgYSBrbm93biBob3QgcGF0aCwgc28gYW55IGZ1bmN0aW9uIGNhbGxlZCBmcm9tIGl0IGlzIGxpa2VseSB0byBiZSBmcmVxdWVudGx5IGV4ZWN1dGVkLiBUaGUgcXVlc3Rpb24gaXMsIGlzIGBmb2xpb19lbmRfZHJvcGJlaGluZGAgKml0c2VsZiogYSBob3QgcGF0aD8gVGhlIGFuc3dlciBhcHBlYXJzIHRvIGJlIHllcywgYmVjYXVzZSBpdCdzIGludm9rZWQgd2l0aCBldmVyeSBjb21wbGV0aW9uIG9mIGEgd3JpdGViYWNrLlxuXG5UaGUgcHJvbXB0LCBob3dldmVyLCBhZHZpc2VzIGFnYWluc3QgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyBhcyBmb2N1cyBzeW1ib2xzLiBUaGlzIGlzIHRvIGF2b2lkIHNrZXdpbmcgdGVzdCBkaXN0cmlidXRpb25zLiBCdXQsIGdpdmVuIHRoYXQgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCAqaXMqIGNhbGxlZCBvbiBldmVyeSBgZm9saW9fZW5kX3dyaXRlYmFja2AsIGFuZCBgZm9saW9fZW5kX3dyaXRlYmFja2AgaXMgZGVmaW5pdGVseSBhIGhvdCBwYXRoLi4uaXQncyB0cmlja3kuXG5cbkFscmlnaHQsIGxldCdzIHNlZSwgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCBpcyBleHBvcnRlZC4gT2theSwgaXQncyBgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX2Ryb3BiZWhpbmQpYC4gSG1tLCBsb29raW5nIGF0IHRoZSBwYXRjaCwgSSBhbHNvIHNlZSBgQ09ORklHX1BSRUVNUFRJT05gIGFuZCBgQ09ORklHX1BSRUVNUFRfQ09VTlRgIG1lbnRpb25lZCwgbWF5YmUgSSBzaG91bGQgY29uc2lkZXIgdGhlc2UgaW4gYEVuYWJsZUNvbmZpZ3NgPyBCdXQgYFBSRUVNUFRJT05gIGlzIHByZXR0eSBnZW5lcmljLCBtYXliZSBJIHNob3VsZCByZWNvbnNpZGVyIHRoYXQsIGdpdmVuIHRoZSBwcm9tcHQuXG5cblVsdGltYXRlbHksIGdpdmVuIHRoYXQgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCBpcyBhIGhvdCBwYXRoIGJlY2F1c2UgaXQgaXMgaW52b2tlZCBpbiB0aGUgaG90IHBhdGggb2YgYGZvbGlvX2VuZF93cml0ZWJhY2tgLCBpdCB3YXJyYW50cyBmdXp6aW5nLiBTaW5jZSBpdCdzIGEgaG90IHBhdGgsIG1heWJlIEkgc2hvdWxkbid0IHNwZWNpZnkgYSBmb2N1cyBzeW1ib2wuIEJ1dCB3YWl0LCBgZm9saW9fZW5kX2Ryb3BiZWhpbmRgIG9ubHkgZG9lcyBzb21ldGhpbmcgaWYgYGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbylgIGlzIHRydWUuIFRoYXQgZnVuY3Rpb24sIGBmb2xpb190ZXN0X2Ryb3BiZWhpbmRgLCBpcyBzZXQgZm9yIGBSV0ZfRE9OVENBQ0hFYCB3cml0ZXMuXG5cbk9rYXksIHNvIGl0J3MgKm5vdCogYWx3YXlzIGRvaW5nIHdvcmssIGJ1dCBpdCAqaXMqIGNhbGxlZCBvbiBldmVyeSB3cml0ZWJhY2sgY29tcGxldGlvbi4gU28sIGV2ZW4gdGhvdWdoIG5vdCBldmVyeSBjYWxsICpkb2VzKiB3b3JrLCB0aGUgZnVuY3Rpb24gKmlzKiBjYWxsZWQuIFRoaXMgY2hhbmdlIHN0aWxsIGZlZWxzIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgYW5kIGdpdmVuIGl0cyBmcmVxdWVuY3kgb2YgaW52b2NhdGlvbiwgaXQncyBwcm9iYWJseSB3b3J0aCBpdC4gTm93LCBsZXQncyBjaGVjayB3aGVyZSBgZm9saW9fc2V0X2Ryb3BiZWhpbmRgIGlzIGNhbGxlZC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjc2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjI3OjEwLjEwMzcwNzYwM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzUyMjUxNDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3NldF9kcm9wYmVoaW5kXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZpbGVtYXAuYz0xOTU2PXN0cnVjdCBmb2xpbyAqX19maWxlbWFwX2dldF9mb2xpb19tcG9sKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vZmlsZW1hcC5jLTIwMzQtXFx0XFx0XFx0aWYgKGZncF9mbGFncyBcXHUwMDI2IEZHUF9ET05UQ0FDSEUpXFxubW0vZmlsZW1hcC5jOjIwMzU6XFx0XFx0XFx0XFx0X19mb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XFxubW0vZmlsZW1hcC5jLTIwMzYtXFxuLS1cXG5tbS9maWxlbWFwLmM9MjYyOD1zdGF0aWMgaW50IGZpbGVtYXBfY3JlYXRlX2ZvbGlvKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGZvbGlvX2JhdGNoICpmYmF0Y2gpXFxuLS1cXG5tbS9maWxlbWFwLmMtMjY0Mi1cXHRpZiAoaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0RPTlRDQUNIRSlcXG5tbS9maWxlbWFwLmM6MjY0MzpcXHRcXHRfX2ZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTtcXG5tbS9maWxlbWFwLmMtMjY0NC1cXG4tLVxcbm1tL3JlYWRhaGVhZC5jPTE5NT1zdGF0aWMgc3RydWN0IGZvbGlvICpyYWN0bF9hbGxvY19mb2xpbyhzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLFxcbi0tXFxubW0vcmVhZGFoZWFkLmMtMjAxLVxcdGlmIChmb2xpbyBcXHUwMDI2XFx1MDAyNiByYWN0bC1cXHUwMDNlZHJvcGJlaGluZClcXG5tbS9yZWFkYWhlYWQuYzoyMDI6XFx0XFx0X19mb2xpb19zZXRfZHJvcGJlaGluZChmb2xpbyk7XFxubW0vcmVhZGFoZWFkLmMtMjAzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNToyNzoxMi40NTU5NjQ4OTVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjIzMzg5NDQ2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIHJlcHJlc2VudCB0aGlzIHBhdGNoIGZvciBmdXp6aW5nLiBUaGUga2V5IGZ1bmN0aW9uIGJlaW5nIG1vZGlmaWVkIGhlcmUgaXMgYGZvbGlvX2VuZF9kcm9wYmVoaW5kYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBsaXN0IGBmb2xpb19lbmRfZHJvcGJlaGluZGAgYXMgYSBgRm9jdXNTeW1ib2xgIGJlY2F1c2UgaXQncyB0aGUgZXhhY3QgZnVuY3Rpb24gYmVpbmcgZml4ZWQsIGFuZCBpdCdzIGFuIGV4cG9ydGVkIEFQSS4gSG93ZXZlciwgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgb24gZXZlcnkgd3JpdGViYWNrIGNvbXBsZXRpb24sIG1ha2luZyBpdCBhIGRlZmluaXRlIGhvdCBwYXRoLCB3aGljaCwgYWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMsIEkgc2hvdWxkIGF2b2lkLlxuXG5JJ20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgbGVhdmluZyBgRm9jdXNTeW1ib2xzYCBlbXB0eSwganVzdCB0byBiZSBvbiB0aGUgc2FmZSBzaWRlLCBhdm9pZGluZyBhbnkgcG90ZW50aWFsIHNrZXcgaW4gdGhlIHRlc3QgZGlzdHJpYnV0aW9ucy4gQnV0LCBpdCBpcyB2ZXJ5IHNwZWNpZmljIHRvIHRoZSBkcm9wYmVoaW5kIGZlYXR1cmUuLi4gSG1tLiBVbHRpbWF0ZWx5LCBnaXZlbiBpdCdzIG9uIGEgaG90IHBhdGgsIGFuZCBmb2xsb3dpbmcgdGhlIGd1aWRhbmNlLCBJJ2xsIGdvIHdpdGggYW4gZW1wdHkgYEZvY3VzU3ltYm9sc2AgbGlzdCB0byBhdm9pZCBza2V3LlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGBFbmFibGVDb25maWdzYC4gVGhlIHBhdGNoIHVzZXMgYENPTkZJR19QUkVFTVBUSU9OYCBhbmQgYENPTkZJR19QUkVFTVBUX0NPVU5UYC4gQSBxdWljayByZXZpZXcgY29uZmlybXMgdGhleSdyZSB2YWxpZCBhbmQgcmVsZXZhbnQgY29uZmlncy4gSSdsbCBkZWZpbml0ZWx5IGxpc3QgdGhvc2UuXG5cbkZpbmFsbHksIGp1c3QgYSBxdWljayByZXZpZXcgb2YgdGhlIHBhdGNoJ3MgbG9naWM6IEl0IGFwcGVhcnMgdG8gYmUgYSBmaXggdG8gYGZvbGlvX2VuZF9kcm9wYmVoaW5kYCwgd2hpY2ggb3JpZ2luYWxseSB1c2VkIGBpbl90YXNrKClgIGJ1dCBjb3VsZCBiZSBjYWxsZWQgZnJvbSBhdG9taWMgY29udGV4dCBkdXJpbmcgd3JpdGViYWNrLiBUaGUgZml4IHJlcGxhY2VzIGBpbl90YXNrKClgIHdpdGggYCFmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYygpYC4gVGhhdCBoZWxwcyBjb25maXJtIHRoZSBmb2N1cyBpcyBjbGVhcmx5IG9uIHByZXZlbnRpbmcgdGhlIGBkcm9wYmVoaW5kYCBmdW5jdGlvbmFsaXR5IGZhaWxpbmcgaW4gYW4gYXRvbWljIGNvbnRleHQuXG5cblNvLCBoZXJlJ3Mgd2hhdCBJJ2xsIHJldHVybjpcblxuKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgXG4qICAgYEZvY3VzU3ltYm9sczogW11gXG4qICAgYEVuYWJsZUNvbmZpZ3M6IFtcIkNPTkZJR19QUkVFTVBUSU9OXCIsIFwiQ09ORklHX1BSRUVNUFRfQ09VTlRcIl1gXG4qICAgSSB3aWxsIHVzZSBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjIwLCJPdXRwdXRUb2tlbnMiOjExOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNToyNzoyNC42ODk4NjI2MzdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjI5NzE5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJFRU1QVElPTlwiLFxuICAgIFwiUFJFRU1QVF9DT1VOVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyBpbiBgbW0vZmlsZW1hcC5jYCB0byBjb3JyZWN0bHkgZGV0ZWN0IGF0b21pYyBjb250ZXh0cyBkdXJpbmcgd3JpdGViYWNrIGNvbXBsZXRpb24gZm9yIGZvbGlvcyBtYXJrZWQgYXMgZHJvcGJlaGluZCAoZS5nLiwgUldGX0RPTlRDQUNIRSkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZSB0aGF0IGFmZmVjdHMgcGFnZSBpbnZhbGlkYXRpb24gYW5kIGxvY2tpbmcsIHdoaWNoIGlzIHdvcnRoIGZ1enppbmcgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIG9yIGRlYWRsb2NrcyBvY2N1ci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUkVFTVBUSU9OXCIsXG4gICAgXCJQUkVFTVBUX0NPVU5UXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIGluIGBtbS9maWxlbWFwLmNgIHRvIGNvcnJlY3RseSBkZXRlY3QgYXRvbWljIGNvbnRleHRzIGR1cmluZyB3cml0ZWJhY2sgY29tcGxldGlvbiBmb3IgZm9saW9zIG1hcmtlZCBhcyBkcm9wYmVoaW5kIChlLmcuLCBSV0ZfRE9OVENBQ0hFKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlIHRoYXQgYWZmZWN0cyBwYWdlIGludmFsaWRhdGlvbiBhbmQgbG9ja2luZywgd2hpY2ggaXMgd29ydGggZnV6emluZyB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgb3IgZGVhZGxvY2tzIG9jY3VyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNToyNzoyNC44MjYxNjY5MjJaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NTM5NDc5NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNToyNzoyNC44MjY2NDczMTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTE5NTM0NjI0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGRyb3BwaW5nIGZvbGlvcyBiZWhpbmQgZHVyaW5nIHdyaXRlYmFjayB0byBjb3JyZWN0bHkgZGV0ZWN0IGF0b21pYyBjb250ZXh0cyAoc3VjaCBhcyBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIG9yIGRpc2FibGVkIHByZWVtcHRpb24pIGluc3RlYWQgb2YganVzdCBjaGVja2luZyBgaW5fdGFzaygpYC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgc2xlZXBpbmctaW4tYXRvbWljIGJ1Z3Mgb3IgZGVhZGxvY2tzLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93LCBsb2NraW5nLCBhbmQgY29udGV4dCBjaGVja3MuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3Npbmcgb3Igb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIChlLmcuLCBzY2hlZHVsaW5nIHdoaWxlIGF0b21pYykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgb3IgTE9DS0RFUCwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyYWQ3YmVhYTFhMjI1N2FmMTBlNmYzZjdiOWEwMWU2NWFkMmQzNDgyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjAgMTU6MjY6MjkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmNcbmluZGV4IDZhZmVjNjM2ODgxZmIuLjA2MTYwNTdlNmY5OTEgMTAwNjQ0XG4tLS0gYS9tbS9maWxlbWFwLmNcbisrKyBiL21tL2ZpbGVtYXAuY1xuQEAgLTQ1LDYgKzQ1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9taWdyYXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9waXBlX2ZzX2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwbGljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcmN1cGRhdGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlX3dhaXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxuQEAgLTE2MjAsNiArMTYyMSwxNSBAQCBzdGF0aWMgdm9pZCBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRcdGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYyh2b2lkKVxuK3tcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUSU9OKSBcdTAwMjZcdTAwMjYgcmN1X3ByZWVtcHRfZGVwdGgoKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfQ09VTlQpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdHJldHVybiAhcHJlZW1wdGlibGUoKTtcbit9XG4rXG4gLypcbiAgKiBJZiBmb2xpbyB3YXMgbWFya2VkIGFzIGRyb3BiZWhpbmQsIHRoZW4gcGFnZXMgc2hvdWxkIGJlIGRyb3BwZWQgd2hlbiB3cml0ZWJhY2tcbiAgKiBjb21wbGV0ZXMuIERvIHRoYXQgbm93LiBJZiB3ZSBmYWlsLCBpdCdzIGxpa2VseSBiZWNhdXNlIG9mIGEgYmlnIGZvbGlvIC1cbkBAIC0xNjMxLDEzICsxNjQxLDEyIEBAIHZvaWQgZm9saW9fZW5kX2Ryb3BiZWhpbmQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0cmV0dXJuO1xuIFxuIFx0Lypcbi1cdCAqIEhpdHRpbmcgIWluX3Rhc2soKSBzaG91bGQgbm90IGhhcHBlbiBvZmYgUldGX0RPTlRDQUNIRSB3cml0ZWJhY2ssXG4tXHQgKiBidXQgY2FuIGhhcHBlbiBpZiBub3JtYWwgd3JpdGViYWNrIGp1c3QgaGFwcGVucyB0byBmaW5kIGRpcnR5IGZvbGlvc1xuLVx0ICogdGhhdCB3ZXJlIGNyZWF0ZWQgYXMgcGFydCBvZiB1bmNhY2hlZCB3cml0ZWJhY2ssIGFuZCB0aGF0IHdyaXRlYmFja1xuLVx0ICogd291bGQgb3RoZXJ3aXNlIG5vdCBuZWVkIG5vbi1JUlEgaGFuZGxpbmcuIEp1c3Qgc2tpcCB0aGVcbitcdCAqIEhpdHRpbmcgYW4gYXRvbWljIGNvbnRleHQgc2hvdWxkIG5vdCBoYXBwZW4gZnJvbSBSV0ZfRE9OVENBQ0hFXG4rXHQgKiB3cml0ZWJhY2ssIGJ1dCBjYW4gaGFwcGVuIGlmIG5vcm1hbCB3cml0ZWJhY2sganVzdCBoYXBwZW5zIHRvIGZpbmRcbitcdCAqIGRpcnR5IGZvbGlvcyBjcmVhdGVkIGFzIHBhcnQgb2YgdW5jYWNoZWQgd3JpdGViYWNrLiBKdXN0IHNraXAgdGhlXG4gXHQgKiBpbnZhbGlkYXRpb24gaW4gdGhhdCBjYXNlLlxuIFx0ICovXG4tXHRpZiAoaW5fdGFzaygpIFx1MDAyNlx1MDAyNiBmb2xpb190cnlsb2NrKGZvbGlvKSkge1xuK1x0aWYgKCFmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYygpIFx1MDAyNlx1MDAyNiBmb2xpb190cnlsb2NrKGZvbGlvKSkge1xuIFx0XHRmaWxlbWFwX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTtcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDE1OjI3OjI0LjgyNjY0ODA1MloiLCJTZXEiOjExLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTk1MzQzODM0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogQXRvbWljIENvbnRleHQgRml4IGluIGBtbS9maWxlbWFwLmNgKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBmaXggcmVsYXRlZCB0byBhdG9taWMgY29udGV4dCBpc3N1ZXMgd2l0aGluIGBtbS9maWxlbWFwLmNgLiBJdCdzIHByZXR0eSBjbGVhcjogdGhlIGNvcmUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBhIHN1YnRsZSBidXQgY3JpdGljYWwgY29ycmVjdGlvbiBpbiBob3cgYGZvbGlvX2VuZF9kcm9wYmVoaW5kKClgIGhhbmRsZXMgZm9saW8gbG9ja2luZy4gUHJldmlvdXNseSwgaXQgdXNlZCBgaW5fdGFzaygpYCB0byBkZXRlcm1pbmUgY29udGV4dCwgYnV0IHRoYXQncyBub3Qgcm9idXN0IGVub3VnaC4gQSB0YXNrIGNvdWxkIHN0aWxsIGJlIGluIGFuIGF0b21pYyBjb250ZXh0IChwcmVlbXB0aW9uIGRpc2FibGVkLCBSQ1UgcmVhZCBsb2NrIGhlbGQsIGV0Yy4pIGFuZCBjYWxsIGZvbGlvIGZ1bmN0aW9ucy5cblxuVGhlIGtleSBoZXJlIGlzIHRoZSBhZGRpdGlvbiBvZiBgZm9saW9fZHJvcGJlaGluZF9pbl9hdG9taWMoKWAuIFRoaXMgZnVuY3Rpb24gYWNjdXJhdGVseSBkZXRlY3RzIGlmIHdlJ3JlIGluIGFuIGF0b21pYyBjb250ZXh0IGJ5IGNoZWNraW5nIGZvciBwcmVlbXB0aW9uIGRpc2FibGVtZW50LCBSQ1UgcmVhZCBkZXB0aCwgYW5kIHdoZXRoZXIgd2UncmUgcHJlZW1wdGlibGUuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGRldGVybWluZSB3aGV0aGVyIGBmb2xpb190cnlsb2NrYCBtaWdodCBzbGVlcC4gV2hpbGUgYGZvbGlvX3RyeWxvY2tgIGl0c2VsZiBkb2Vzbid0IHNsZWVwLCBmdW5jdGlvbnMgZnVydGhlciBkb3duIHRoZSBjYWxsIHN0YWNrLCBzdWNoIGFzIGBmaWxlbWFwX2VuZF9kcm9wYmVoaW5kYCwgKmNvdWxkKiBzbGVlcCwgd2hpY2ggaXMgd2hhdCB3ZSB3YW50IHRvIGF2b2lkLiBUaGlzIGlzIGEgY2xhc3NpYyBzY2hlZHVsaW5nLXdoaWxlLWF0b21pYyBraW5kIG9mIGlzc3VlLiBgZmlsZW1hcF9lbmRfZHJvcGJlaGluZGAgY2FsbHMgYGZvbGlvX3VubWFwX2ludmFsaWRhdGUobWFwcGluZywgZm9saW8sIDApO2Agd2hpY2ggY291bGQgY2F1c2UgYSBzbGVlcC5cblxuVGhlIHBhdGNoJ3MgbG9naWMgaXMgYWxsIGFib3V0IGNvbnRyb2wgZmxvdyDigJMgZW5zdXJpbmcgdGhhdCB0aGUgY29kZSBkb2Vzbid0IGF0dGVtcHQgdG8gYWNxdWlyZSBhIGxvY2sgb3IgcGVyZm9ybSBvcGVyYXRpb25zIHRoYXQgbWlnaHQgc2xlZXAgd2hlbiBpdCdzIG5vdCBzYWZlIHRvIGRvIHNvLiBDcml0aWNhbGx5LCB0aGVyZSdzIG5vIGludHJvZHVjdGlvbiBvZiBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBubyBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCBubyByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBvbmx5IGNoYW5nZSBpcyBpbiB0aGUgY29uZGl0aW9ucyB0aGF0IGFyZSBjaGVja2VkLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIGNvZGUgc25pcHBldDpcbmBgYGNcbitzdGF0aWMgYm9vbCBmb2xpb19kcm9wYmVoaW5kX2luX2F0b21pYyh2b2lkKVxuK3tcbitcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUSU9OKSBcdTAwMjZcdTAwMjYgcmN1X3ByZWVtcHRfZGVwdGgoKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfQ09VTlQpKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcdHJldHVybiAhcHJlZW1wdGlibGUoKTtcbit9XG5gYGBcbmFuZFxuYGBgY1xuLVx0aWYgKGluX3Rhc2soKSBcdTAwMjZcdTAwMjYgZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbitcdGlmICghZm9saW9fZHJvcGJlaGluZF9pbl9hdG9taWMoKSBcdTAwMjZcdTAwMjYgZm9saW9fdHJ5bG9jayhmb2xpbykpIHtcbmBgYFxuXG5JdCdzIHB1cmVseSBhYm91dCBwcm90ZWN0aW5nIHRoZSBjb2RlIGZyb20gc2xlZXBpbmcgaW4gYXRvbWljIGNvbnRleHQuXG5cbktBU0FOLCBMT0NLREVQLCBhbmQgdGhlIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgd2lsbCBiZSBvdXIgZnJpZW5kIGhlcmUuIFRoZXknbGwgY2F0Y2ggYW55IHNjaGVkdWxpbmctd2hpbGUtYXRvbWljIG9yIGxvY2stcmVsYXRlZCBpc3N1ZXMuIEtNU0FOIGRvZXNuJ3QgYXBwbHkgaGVyZSwgYmVjYXVzZSB0aGlzIHBhdGNoIGlzIHB1cmVseSBjb250cm9sLWZsb3cgcmVsYXRlZDsgdGhlcmUncyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5TbywgSSdtIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLiBUaGlzIGlzIGEgY2xlYW4sIHRhcmdldGVkIGZpeCB0aGF0IGFkZHJlc3NlcyBhIGtub3duIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiByZWxhdGVkIHRvIGF0b21pY2l0eSBhbmQgc2xlZXBpbmcgaW4gdGhlIGZpbGVtYXAgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3OSwiT3V0cHV0VG9rZW5zIjoxNzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OTUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQxNToyNzozNi43ODAwOTA1NzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzU1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gZm9yIGRyb3BwaW5nIGZvbGlvcyBiZWhpbmQgZHVyaW5nIHdyaXRlYmFjayB0byBjb3JyZWN0bHkgZGV0ZWN0IGF0b21pYyBjb250ZXh0cyAoc3VjaCBhcyBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIG9yIGRpc2FibGVkIHByZWVtcHRpb24pIGluc3RlYWQgb2YganVzdCBjaGVja2luZyBgaW5fdGFzaygpYC4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgc2xlZXBpbmctaW4tYXRvbWljIGJ1Z3Mgb3IgZGVhZGxvY2tzLiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gY29udHJvbCBmbG93LCBsb2NraW5nLCBhbmQgY29udGV4dCBjaGVja3MuIE5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCwgbm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZXJlIGlzIG5vIHJpc2sgb2YgZXhwb3Npbmcgb3Igb3BlcmF0aW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgYnVncyByZWxhdGVkIHRvIHRoaXMgY2hhbmdlIChlLmcuLCBzY2hlZHVsaW5nIHdoaWxlIGF0b21pYykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgbGlrZSBgQ09ORklHX0RFQlVHX0FUT01JQ19TTEVFUGAgb3IgTE9DS0RFUCwgbWFraW5nIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiB1bm5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGZvciBkcm9wcGluZyBmb2xpb3MgYmVoaW5kIGR1cmluZyB3cml0ZWJhY2sgdG8gY29ycmVjdGx5IGRldGVjdCBhdG9taWMgY29udGV4dHMgKHN1Y2ggYXMgUkNVIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9ucyBvciBkaXNhYmxlZCBwcmVlbXB0aW9uKSBpbnN0ZWFkIG9mIGp1c3QgY2hlY2tpbmcgYGluX3Rhc2soKWAuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIHNsZWVwaW5nLWluLWF0b21pYyBidWdzIG9yIGRlYWRsb2Nrcy4gVGhlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGNvbnRyb2wgZmxvdywgbG9ja2luZywgYW5kIGNvbnRleHQgY2hlY2tzLiBObyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQsIG5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIGV4cG9zaW5nIG9yIG9wZXJhdGluZyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGJ1Z3MgcmVsYXRlZCB0byB0aGlzIGNoYW5nZSAoZS5nLiwgc2NoZWR1bGluZyB3aGlsZSBhdG9taWMpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzIGxpa2UgYENPTkZJR19ERUJVR19BVE9NSUNfU0xFRVBgIG9yIExPQ0tERVAsIG1ha2luZyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gdW5uZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8s8sx[1] Phase: Succeeded StartedAt: 2026-08-20 15:27:47 +0000 UTC FinishedAt: 2026-08-20 15:27:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-20 15:27:47 +0000 UTC FinishedAt: 2026-08-20 15:27:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[2] Phase: Succeeded StartedAt: 2026-08-20 15:27:47 +0000 UTC FinishedAt: 2026-08-20 19:10:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-20 15:27:47 +0000 UTC FinishedAt: 2026-08-20 19:10:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-20 15:27:47 +0000 UTC FinishedAt: 2026-08-20 15:27:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-20 15:27:47 +0000 UTC FinishedAt: 2026-08-20 15:27:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow8s8sx/series-workflow8s8sx-convert-artifact-2095329597/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-20 15:27:58 +0000 UTC FinishedAt: 2026-08-20 15:44:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-20 15:27:58 +0000 UTC FinishedAt: 2026-08-20 15:44:45 +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:*1bc4de40-b5fc-4cc9-938e-28a9d7e81dd5,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-workflow8s8sx/series-workflow8s8sx-convert-artifact-2095329597/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": "7800117c-79e3-47b7-be32-3f9aa993a344", "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-workflow8s8sx/series-workflow8s8sx-build-action-2671598195/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-20 15:27:58 +0000 UTC FinishedAt: 2026-08-20 15:44:35 +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:*1bc4de40-b5fc-4cc9-938e-28a9d7e81dd5,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-workflow8s8sx/series-workflow8s8sx-convert-artifact-2095329597/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": "7800117c-79e3-47b7-be32-3f9aa993a344", "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-workflow8s8sx/series-workflow8s8sx-build-action-2671598195/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-20 15:44:45 +0000 UTC FinishedAt: 2026-08-20 15:44:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-20 15:44:45 +0000 UTC FinishedAt: 2026-08-20 15:44:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-20 15:44:45 +0000 UTC FinishedAt: 2026-08-20 15:44:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-20 15:44:45 +0000 UTC FinishedAt: 2026-08-20 15:44:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow8s8sx/series-workflow8s8sx-convert-artifact-644613784/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-20 15:44:56 +0000 UTC FinishedAt: 2026-08-20 15:46:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-20 15:44:56 +0000 UTC FinishedAt: 2026-08-20 15:46:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7800117c-79e3-47b7-be32-3f9aa993a344,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-workflow8s8sx/series-workflow8s8sx-build-action-2671598195/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-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-20 15:46:52 +0000 UTC FinishedAt: 2026-08-20 15:46:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-20 15:46:52 +0000 UTC FinishedAt: 2026-08-20 15:46:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-20 15:46:52 +0000 UTC FinishedAt: 2026-08-20 16:03:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-20 15:46:52 +0000 UTC FinishedAt: 2026-08-20 16:03:43 +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:*1bc4de40-b5fc-4cc9-938e-28a9d7e81dd5,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-workflow8s8sx/series-workflow8s8sx-convert-artifact-644613784/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": "bb3f7df0-b79f-431d-8759-5e2cf6bfeb18", "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-workflow8s8sx/series-workflow8s8sx-build-action-3202309892/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-20 15:46:52 +0000 UTC FinishedAt: 2026-08-20 16:03:33 +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:*1bc4de40-b5fc-4cc9-938e-28a9d7e81dd5,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-workflow8s8sx/series-workflow8s8sx-convert-artifact-644613784/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": "bb3f7df0-b79f-431d-8759-5e2cf6bfeb18", "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-workflow8s8sx/series-workflow8s8sx-build-action-3202309892/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-20 16:03:43 +0000 UTC FinishedAt: 2026-08-20 16:03:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-20 16:03:43 +0000 UTC FinishedAt: 2026-08-20 16:03:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-20 16:03:43 +0000 UTC FinishedAt: 2026-08-20 16:05:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-20 16:03:43 +0000 UTC FinishedAt: 2026-08-20 16:05:35 +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:*bb3f7df0-b79f-431d-8759-5e2cf6bfeb18,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-workflow8s8sx/series-workflow8s8sx-build-action-3202309892/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-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-20 16:05:45 +0000 UTC FinishedAt: 2026-08-20 19:10:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-20 16:05:45 +0000 UTC FinishedAt: 2026-08-20 19:10:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},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:*7800117c-79e3-47b7-be32-3f9aa993a344,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bb3f7df0-b79f-431d-8759-5e2cf6bfeb18,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-workflow8s8sx/series-workflow8s8sx-build-action-2671598195/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-workflow8s8sx/series-workflow8s8sx-build-action-3202309892/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-20 16:05:45 +0000 UTC FinishedAt: 2026-08-20 16:05:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-20 16:05:45 +0000 UTC FinishedAt: 2026-08-20 16:05:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},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-workflow8s8sx/series-workflow8s8sx-convert-artifact-483277681/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-20 16:05:45 +0000 UTC FinishedAt: 2026-08-20 16:05:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-20 16:05:45 +0000 UTC FinishedAt: 2026-08-20 16:05:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-20 16:05:45 +0000 UTC FinishedAt: 2026-08-20 16:05:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-20 16:05:55 +0000 UTC FinishedAt: 2026-08-20 19:10:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8s8sx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["PREEMPTION","PREEMPT_COUNT"],"series_id":"29222950-31cc-4e5d-883d-39e98fdb07b9","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-20 16:05:55 +0000 UTC FinishedAt: 2026-08-20 19:09:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7800117c-79e3-47b7-be32-3f9aa993a344,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bb3f7df0-b79f-431d-8759-5e2cf6bfeb18,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-workflow8s8sx/series-workflow8s8sx-build-action-2671598195/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-workflow8s8sx/series-workflow8s8sx-build-action-3202309892/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-workflow8s8sx/series-workflow8s8sx-convert-artifact-483277681/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,}